UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

49 lines (48 loc) 2.95 kB
import type { MergeableRecord } from '../../util/objects'; import { SourceLocation } from '../../util/range'; import { type LintingResult, LintingResultCertainty, LintingRuleCertainty } from '../linter-format'; import { LintingRuleTag } from '../linter-tags'; import type { BuiltInProcName } from '../../dataflow/environments/built-in-proc-name'; export interface UselessLoopResult extends LintingResult { name: string; loc: SourceLocation; } export interface UselessLoopConfig extends MergeableRecord { /** Function origins that are considered loops */ loopyFunctions: Set<BuiltInProcName>; } 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, Promise<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>[]>, useLessLoopConfig: UselessLoopConfig, { analyzer, dataflow, normalize, cfg }: { normalize: import("../../r-bridge/lang-4.x/ast/model/processing/decorate").NormalizedAst; dataflow: import("../../dataflow/info").DataflowInformation; cfg: import("../../control-flow/control-flow-graph").ControlFlowInformation; analyzer: import("../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider; }) => { results: { certainty: LintingResultCertainty.Certain; name: string; loc: [startLine: number, startColumn: number, endLine: number, endColumn: number, f?: string | undefined]; involvedId: import("../../r-bridge/lang-4.x/ast/model/processing/node-id").NodeId; }[]; '.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<BuiltInProcName>; }; }; };