@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
93 lines (92 loc) • 4.97 kB
TypeScript
import type { BaseQueryFormat, BaseQueryResult, BasicQueryData } from '../../base-query-format';
import type { NodeId } from '../../../r-bridge/lang-4.x/ast/model/processing/node-id';
import Joi from 'joi';
import { executeDependenciesQuery } from './dependencies-query-executor';
import type { FunctionInfo } from './function-info/function-info';
import type { CallContextQueryResult } from '../call-context-query/call-context-query-format';
import type { Range } from 'semver';
import type { AsyncOrSync, MarkOptional } from 'ts-essentials';
import type { NamespaceInfo } from '../../../project/plugins/file-plugins/files/flowr-namespace-file';
export declare const Unknown = "unknown";
export interface DependencyCategorySettings {
queryDisplayName?: string;
functions: FunctionInfo[];
/** this describes the global default value for this category, e.g., 'stdout' for write operations, please be aware, that this can be overwritten by a by-function default value */
defaultValue?: string;
/**
* An optional additional analysis step that is executed after the main function-based analysis has been performed.
* To add or modify dependency info entries, simply modify the `result` array.
* @param data - The basic query data.
* @param ignoreDefault - Whether the default functions were ignored.
* @param functions - The functions used for this category.
* @param queryResults - The results of the call context query.
* @param result - The current result array to which additional dependency info can be added.
*/
additionalAnalysis?: (data: BasicQueryData, ignoreDefault: boolean, functions: FunctionInfo[], queryResults: CallContextQueryResult, result: DependencyInfo[]) => AsyncOrSync<void>;
}
export declare const DefaultDependencyCategories: {
readonly library: {
readonly queryDisplayName: "Libraries";
readonly functions: FunctionInfo[];
readonly defaultValue: "unknown";
readonly additionalAnalysis: (data: BasicQueryData, ignoreDefault: boolean, _functions: FunctionInfo[], _queryResults: CallContextQueryResult, result: DependencyInfo[]) => Promise<void>;
};
readonly source: {
readonly queryDisplayName: "Sourced Files";
readonly functions: FunctionInfo[];
readonly defaultValue: "unknown";
};
readonly read: {
readonly queryDisplayName: "Read Data";
readonly functions: FunctionInfo[];
readonly defaultValue: "unknown";
};
readonly write: {
readonly queryDisplayName: "Written Data";
readonly functions: FunctionInfo[];
readonly defaultValue: "stdout";
};
readonly visualize: {
readonly queryDisplayName: "Visualizations";
readonly functions: FunctionInfo[];
};
readonly test: {
readonly queryDisplayName: "Tests";
readonly functions: FunctionInfo[];
};
};
export type DefaultDependencyCategoryName = keyof typeof DefaultDependencyCategories;
export type DependencyCategoryName = DefaultDependencyCategoryName | string;
export interface DependenciesQuery extends BaseQueryFormat, Partial<Record<`${DefaultDependencyCategoryName}Functions`, FunctionInfo[]>> {
readonly type: 'dependencies';
readonly enabledCategories?: DependencyCategoryName[];
readonly ignoreDefaultFunctions?: boolean;
readonly additionalCategories?: Record<string, MarkOptional<DependencyCategorySettings, 'additionalAnalysis'>>;
}
export type DependenciesQueryResult = BaseQueryResult & {
[C in DefaultDependencyCategoryName]: DependencyInfo[];
} & {
[S in string]?: DependencyInfo[];
};
export interface DependencyInfo extends Record<string, unknown> {
nodeId: NodeId;
functionName: string;
linkedIds?: readonly NodeId[];
/** the lexeme is presented whenever the specific info is of {@link Unknown} */
lexemeOfArgument?: string;
/** The library name, file, source, destination etc. being sourced, read from, or written to. */
value?: string;
versionConstraints?: Range[];
derivedVersion?: Range;
namespaceInfo?: NamespaceInfo;
}
/**
* Gets all dependency categories, including user-defined additional categories.
*/
export declare function getAllCategories(queries: readonly DependenciesQuery[]): Record<DependencyCategoryName, DependencyCategorySettings>;
export declare const DependenciesQueryDefinition: {
readonly executor: typeof executeDependenciesQuery;
readonly asciiSummarizer: (formatter: import("../../../util/text/ansi").OutputFormatter, _analyzer: import("../../../project/flowr-analyzer").ReadonlyFlowrAnalysisProvider<import("../../../r-bridge/parser").KnownParser>, queryResults: BaseQueryResult, result: string[], queries: readonly import("../../query").Query[]) => true;
readonly schema: Joi.ObjectSchema<any>;
readonly flattenInvolvedNodes: (queryResults: BaseQueryResult, query: readonly import("../../query").Query[]) => NodeId[];
};