@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
48 lines (47 loc) • 3.05 kB
TypeScript
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">;
};
};
};