Skip to content

Commit 23aac74

Browse files
authored
Support setwd and other path functions in absolute path linting rule (#2612)
* feat: support setwd and other path functions in absolute path rule * feat-fix: path construction with file.path
1 parent 7890731 commit 23aac74

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

src/linter/rules/absolute-path.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import type { RNode } from '../../r-bridge/lang-4.x/ast/model/model';
2828
import type { ReadOnlyFlowrAnalyzerContext } from '../../project/context/flowr-analyzer-context';
2929
import type { Identifier } from '../../dataflow/environments/identifier';
3030
import { RString } from '../../r-bridge/lang-4.x/ast/model/nodes/r-string';
31+
import { OtherPathFunctions } from '../../queries/catalog/dependencies-query/function-info/other-path-functions';
3132

3233
export interface AbsoluteFilePathResult extends LintingResult {
3334
filePath: string,
@@ -142,7 +143,7 @@ export const ABSOLUTE_PATH = {
142143
type: 'dependencies',
143144
// we use the dependencies query to give us all functions that take a file path as input
144145
ignoreDefaultFunctions: true,
145-
readFunctions: ReadFunctions.concat(WriteFunctions, SourceFunctions, config.additionalPathFunctions),
146+
readFunctions: ReadFunctions.concat(WriteFunctions, SourceFunctions, OtherPathFunctions, config.additionalPathFunctions),
146147
});
147148
}
148149
if(config.include.constructed) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type { FunctionInfo } from './function-info';
2+
3+
export const OtherPathFunctions: FunctionInfo[] = [
4+
{ package: 'base', name: 'setwd', argIdx: 0, argName: 'dir', resolveValue: true },
5+
{ package: 'base', name: 'basename', argIdx: 0, argName: 'path', resolveValue: true },
6+
{ package: 'base', name: 'dirname', argIdx: 0, argName: 'path', resolveValue: true },
7+
{ package: 'base', name: 'normalizePath', argIdx: 0, argName: 'path', resolveValue: true },
8+
{ package: 'base', name: 'file.info', argIdx: 'unnamed', resolveValue: true },
9+
{ package: 'base', name: 'file.mode', argIdx: 'unnamed', resolveValue: true },
10+
{ package: 'base', name: 'file.mtime', argIdx: 'unnamed', resolveValue: true },
11+
{ package: 'base', name: 'file.size', argIdx: 'unnamed', resolveValue: true },
12+
{ package: 'base', name: 'file.create', argIdx: 'unnamed', resolveValue: true },
13+
{ package: 'base', name: 'file.exists', argIdx: 'unnamed', resolveValue: true },
14+
{ package: 'base', name: 'file.remove', argIdx: 'unnamed', resolveValue: true },
15+
{ package: 'base', name: 'file.rename', argIdx: 0, argName: 'from', resolveValue: true },
16+
{ package: 'base', name: 'file.append', argIdx: 0, argName: 'file1', resolveValue: true },
17+
{ package: 'base', name: 'file.copy', argIdx: 0, argName: 'from', resolveValue: true },
18+
{ package: 'base', name: 'file.symlink', argIdx: 0, argName: 'from', resolveValue: true },
19+
{ package: 'base', name: 'file.link', argIdx: 0, argName: 'from', resolveValue: true },
20+
{ package: 'base', name: 'Sys.junction', argIdx: 0, argName: 'from', resolveValue: true },
21+
{ package: 'base', name: 'dir.exists', argIdx: 0, argName: 'path', resolveValue: true },
22+
{ package: 'base', name: 'list.files', argIdx: 0, argName: 'path', resolveValue: true, defaultValue: '.' },
23+
{ package: 'base', name: 'list.dirs', argIdx: 0, argName: 'path', resolveValue: true, defaultValue: '.' },
24+
{ package: 'base', name: 'dir', argIdx: 0, argName: 'path', resolveValue: true, defaultValue: '.' }
25+
];

0 commit comments

Comments
 (0)