UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

48 lines (47 loc) 3.05 kB
import type { BuiltInMappingName } from '../../dataflow/environments/built-in'; import type { MergeableRecord } from '../../util/objects'; import type { SourceRange } from '../../util/range'; import type { LintingResult } from '../linter-format'; import { LintingResultCertainty, LintingRuleCertainty } from '../linter-format'; import { LintingRuleTag } from '../linter-tags'; export interface UselessLoopResult extends LintingResult { name: string; range: SourceRange; } export interface UselessLoopConfig extends MergeableRecord { /** Function origins that are considered loops */ loopyFunctions: Set<BuiltInMappingName>; } export interface UselessLoopMetadata extends MergeableRecord { numOfUselessLoops: number; } export declare const USELESS_LOOP: { readonly createSearch: () => import("../../search/flowr-search-builder").FlowrSearchBuilder<"all", ["filter"], import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, [] | import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>>; readonly processSearchResult: (elements: import("../../search/flowr-search").FlowrSearchElements<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation, import("../../search/flowr-search").FlowrSearchElement<import("../../r-bridge/lang-4.x/ast/model/processing/decorate").ParentInformation>[]>, config: UselessLoopConfig, data: { normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst; dataflow: import("../../dataflow/info").DataflowInformation; config: import("../../config").FlowrConfigOptions; }) => { results: { certainty: LintingResultCertainty.Certain; name: string; range: SourceRange; }[]; '.meta': { numOfUselessLoops: number; }; }; readonly prettyPrint: { readonly query: (result: UselessLoopResult) => string; readonly full: (result: UselessLoopResult) => string; }; readonly info: { readonly name: "Useless Loops"; readonly description: "Detect loops which only iterate once"; readonly certainty: LintingRuleCertainty.BestEffort; readonly tags: readonly [LintingRuleTag.Smell, LintingRuleTag.Readability]; readonly defaultConfig: { readonly loopyFunctions: Set<"builtin:default" | "builtin:eval" | "builtin:apply" | "builtin:expression-list" | "builtin:source" | "builtin:access" | "builtin:if-then-else" | "builtin:get" | "builtin:rm" | "builtin:library" | "builtin:assignment" | "builtin:special-bin-op" | "builtin:pipe" | "builtin:function-definition" | "builtin:quote" | "builtin:for-loop" | "builtin:repeat-loop" | "builtin:while-loop" | "builtin:replacement" | "builtin:list" | "builtin:vector">; }; }; };