@sasjs/lint 4.7.0 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/package.json +1 -1
- package/rules/file/hasDoxygenHeader.js +1 -1
- package/rules/file/hasMacroNameInMend.js +22 -10
- package/rules/file/hasMacroNameInMend.js.map +1 -1
- package/rules/file/hasMacroParentheses.js +6 -3
- package/rules/file/hasMacroParentheses.js.map +1 -1
- package/rules/file/lineEndings.js +7 -5
- package/rules/file/lineEndings.js.map +1 -1
- package/rules/file/minMacroNameLength.js +2 -4
- package/rules/file/minMacroNameLength.js.map +1 -1
- package/rules/file/noNestedCommentsInHeader.js +1 -1
- package/rules/file/noNestedMacros.js +2 -2
- package/rules/file/noNestedMacros.js.map +1 -1
- package/rules/file/noSingleAsteriskComments.js +1 -1
- package/rules/file/noSingleAsteriskComments.js.map +1 -1
- package/rules/file/strictMacroDefinition.js +121 -46
- package/rules/file/strictMacroDefinition.js.map +1 -1
- package/rules/line/noBannedStrings.js +1 -1
- package/rules/line/noBannedStrings.js.map +1 -1
- package/rules/line/noEncodedPasswords.js +1 -1
- package/rules/line/noEncodedPasswords.js.map +1 -1
- package/rules/line/noGremlins.js +1 -1
- package/rules/line/noGremlins.js.map +1 -1
- package/rules/line/noTabs.js +1 -1
- package/types/Diagnostic.d.ts +5 -0
- package/utils/escapeRegExp.d.ts +2 -0
- package/utils/escapeRegExp.js +7 -0
- package/utils/escapeRegExp.js.map +1 -0
- package/utils/getColumnNumber.d.ts +14 -1
- package/utils/getColumnNumber.js +20 -3
- package/utils/getColumnNumber.js.map +1 -1
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/index.js.map +1 -1
- package/utils/parseMacros.js +45 -20
- package/utils/parseMacros.js.map +1 -1
- package/utils/trimComments.d.ts +21 -1
- package/utils/trimComments.js +52 -30
- package/utils/trimComments.js.map +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ _Note:_ The SASjs project and its repositories are not affiliated with SAS Insti
|
|
|
16
16
|
|
|
17
17
|
- [@sasjs/vscode-extension](https://github.com/sasjs/vscode-extension) - just download SASjs in the VSCode marketplace, and select view/problems in the menu bar.
|
|
18
18
|
- [@sasjs/cli](https://cli.sasjs.io/lint) - run `sasjs lint` to get a list of all files with their problems, along with line and column indexes.
|
|
19
|
+
- [SASjs Server](https://server.sasjs.io) - the Studio editor lints and formats its buffer through `POST /SASjsApi/code/lint` and `POST /SASjsApi/code/format`, resolving the `.sasjslint` nearest to the file so each folder in the drive can carry its own rules.
|
|
19
20
|
|
|
20
21
|
Configuration is via a `.sasjslint` file with the following structure (these are also the defaults - a setting that is absent, and a project with no `.sasjslint` file at all, uses the value below):
|
|
21
22
|
|
|
@@ -71,6 +72,10 @@ For more details, and the default state, see the description of each rule below.
|
|
|
71
72
|
|
|
72
73
|
Configuring a non-zero return code (ERROR) is helpful when running `sasjs lint` as part of a git pre-commit hook. An example is available [here](https://github.com/sasjs/template_jobs/blob/main/.git-hooks/pre-commit).
|
|
73
74
|
|
|
75
|
+
## Diagnostic columns
|
|
76
|
+
|
|
77
|
+
A diagnostic carries `lineNumber`, `startColumnNumber` and `endColumnNumber`. Both columns are 1-based, and `endColumnNumber` is the column of the span's LAST character - a one-character span starts and ends on the same column. A consumer that highlights `startColumnNumber` through `endColumnNumber` inclusive therefore covers exactly the text the rule reports.
|
|
78
|
+
|
|
74
79
|
## Per-file overrides
|
|
75
80
|
|
|
76
81
|
A file can adjust the configuration for itself, with a `@sasjslint` block in its Doxygen header:
|
package/package.json
CHANGED
|
@@ -21,8 +21,10 @@ const test = (value, config) => {
|
|
|
21
21
|
diagnostics.push({
|
|
22
22
|
message: `%mend statement is redundant`,
|
|
23
23
|
lineNumber: macro.endLineNumber,
|
|
24
|
-
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend'),
|
|
25
|
-
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend') +
|
|
24
|
+
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true),
|
|
25
|
+
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true) +
|
|
26
|
+
macro.termination.length -
|
|
27
|
+
1,
|
|
26
28
|
severity
|
|
27
29
|
});
|
|
28
30
|
}
|
|
@@ -53,8 +55,10 @@ const test = (value, config) => {
|
|
|
53
55
|
diagnostics.push({
|
|
54
56
|
message: `%mend statement is missing macro name - ${macro.name}`,
|
|
55
57
|
lineNumber: macro.endLineNumber,
|
|
56
|
-
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend'),
|
|
57
|
-
|
|
58
|
+
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true),
|
|
59
|
+
// The span covers the keyword itself, so it ends on its last character
|
|
60
|
+
// whatever its length - `%mend` is five characters, not seven.
|
|
61
|
+
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true) + '%mend'.length - 1,
|
|
58
62
|
severity
|
|
59
63
|
});
|
|
60
64
|
}
|
|
@@ -69,10 +73,13 @@ const fix = (value, config) => {
|
|
|
69
73
|
if (macro.startLineNumbers.length === 0 && macro.endLineNumber !== null) {
|
|
70
74
|
// %mend statement is redundant
|
|
71
75
|
const endLine = lines[macro.endLineNumber - 1];
|
|
72
|
-
const startColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend');
|
|
73
|
-
const endColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend') + macro.termination.length;
|
|
76
|
+
const startColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true);
|
|
77
|
+
const endColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true) + macro.termination.length - 1;
|
|
74
78
|
const beforeStatement = endLine.slice(0, startColumnNumber - 1);
|
|
75
|
-
|
|
79
|
+
// `termination` is the statement as the parser split it, so what follows it
|
|
80
|
+
// is optional whitespace and its own `;` - both go with the statement.
|
|
81
|
+
const trailing = endLine.slice(endColumnNumber).match(/^\s*;?/)[0].length;
|
|
82
|
+
const afterStatement = endLine.slice(endColumnNumber + trailing);
|
|
76
83
|
lines[macro.endLineNumber - 1] = beforeStatement + afterStatement;
|
|
77
84
|
}
|
|
78
85
|
else if (macro.endLineNumber === null &&
|
|
@@ -94,12 +101,17 @@ const fix = (value, config) => {
|
|
|
94
101
|
else if (!macro.hasMacroNameInMend) {
|
|
95
102
|
// %mend statement is missing macro name
|
|
96
103
|
const endLine = lines[macro.endLineNumber - 1];
|
|
97
|
-
const startColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend');
|
|
98
|
-
|
|
104
|
+
const startColumnNumber = (0, getColumnNumber_1.getColumnNumber)(endLine, '%mend', true);
|
|
105
|
+
// The keyword keeps the capitalisation the file wrote - the fix adds a
|
|
106
|
+
// name, it does not restyle the statement.
|
|
107
|
+
const keyword = endLine.slice(startColumnNumber - 1, startColumnNumber - 1 + '%mend'.length);
|
|
108
|
+
const endColumnNumber = startColumnNumber + keyword.length - 1;
|
|
99
109
|
const beforeStatement = endLine.slice(0, startColumnNumber - 1);
|
|
110
|
+
// The keyword is replaced in place: whatever follows it, `;` included, is
|
|
111
|
+
// kept.
|
|
100
112
|
const afterStatement = endLine.slice(endColumnNumber);
|
|
101
113
|
lines[macro.endLineNumber - 1] =
|
|
102
|
-
beforeStatement +
|
|
114
|
+
beforeStatement + `${keyword} ${macro.name}` + afterStatement;
|
|
103
115
|
}
|
|
104
116
|
});
|
|
105
117
|
const formattedText = lines.join(lineEnding);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasMacroNameInMend.js","sourceRoot":"","sources":["../../../src/rules/file/hasMacroNameInMend.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,iEAA6D;AAE7D,yDAAqD;AACrD,yDAAqD;AACrD,uDAAmD;AAEnD,MAAM,IAAI,GAAG,oBAAoB,CAAA;AACjC,MAAM,WAAW,GACf,kEAAkE,CAAA;AACpE,MAAM,OAAO,GAAG,qDAAqD,CAAA;AAErE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,IAAA,uBAAU,EAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAChE,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YAC9C,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,8BAA8B;gBACvC,UAAU,EAAE,KAAK,CAAC,aAAa;gBAC/B,iBAAiB,EAAE,IAAA,iCAAe,EAAC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"hasMacroNameInMend.js","sourceRoot":"","sources":["../../../src/rules/file/hasMacroNameInMend.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,12 @@ const test = (value, config) => {
|
|
|
17
17
|
diagnostics.push({
|
|
18
18
|
message: 'Macro definition missing name',
|
|
19
19
|
lineNumber: macro.startLineNumbers[0],
|
|
20
|
-
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[0], '%macro'),
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[0], '%macro', true),
|
|
21
|
+
// The span ends on the declaration's last character, the convention the
|
|
22
|
+
// other macro rules use.
|
|
23
|
+
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[0], '%macro', true) +
|
|
24
|
+
macro.declaration.length -
|
|
25
|
+
1,
|
|
23
26
|
severity
|
|
24
27
|
});
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasMacroParentheses.js","sourceRoot":"","sources":["../../../src/rules/file/hasMacroParentheses.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,iEAA6D;AAC7D,yDAAqD;AAGrD,MAAM,IAAI,GAAG,qBAAqB,CAAA;AAClC,MAAM,WAAW,GAAG,4DAA4D,CAAA;AAChF,MAAM,OAAO,GAAG,sCAAsC,CAAA;AAEtD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,+BAA+B;gBACxC,UAAU,EAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC;gBACtC,iBAAiB,EAAE,IAAA,iCAAe,EAChC,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC,EAC1B,QAAQ,
|
|
1
|
+
{"version":3,"file":"hasMacroParentheses.js","sourceRoot":"","sources":["../../../src/rules/file/hasMacroParentheses.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,iEAA6D;AAC7D,yDAAqD;AAGrD,MAAM,IAAI,GAAG,qBAAqB,CAAA;AAClC,MAAM,WAAW,GAAG,4DAA4D,CAAA;AAChF,MAAM,OAAO,GAAG,sCAAsC,CAAA;AAEtD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,+BAA+B;gBACxC,UAAU,EAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC;gBACtC,iBAAiB,EAAE,IAAA,iCAAe,EAChC,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC,EAC1B,QAAQ,EACR,IAAI,CACL;gBACD,wEAAwE;gBACxE,yBAAyB;gBACzB,eAAe,EACb,IAAA,iCAAe,EAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC;oBAC3D,KAAK,CAAC,WAAW,CAAC,MAAM;oBACxB,CAAC;gBACH,QAAQ;aACT,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CACjE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CACxB,CAAA;YACD,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO;gBACP,UAAU,EAAE,KAAK,CAAC,gBAAiB,CAAC,kBAAkB,CAAC;gBACvD,iBAAiB,EAAE,IAAA,iCAAe,EAChC,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC1C,KAAK,CAAC,IAAI,CACX;gBACD,eAAe,EACb,IAAA,iCAAe,EACb,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC1C,KAAK,CAAC,IAAI,CACX;oBACD,KAAK,CAAC,IAAI,CAAC,MAAM;oBACjB,CAAC;gBACH,QAAQ;aACT,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED;;GAEG;AACU,QAAA,mBAAmB,GAAiB;IAC/C,IAAI,EAAE,2BAAY,CAAC,IAAI;IACvB,IAAI;IACJ,WAAW;IACX,OAAO;IACP,IAAI;CACL,CAAA"}
|
|
@@ -26,8 +26,9 @@ const test = (value, config) => {
|
|
|
26
26
|
.replace('{expected}', expectedLineEnding === '{lf}' ? 'LF' : 'CRLF')
|
|
27
27
|
.replace('{actual}', incorrectLineEnding === '{lf}' ? 'LF' : 'CRLF'),
|
|
28
28
|
lineNumber: index + 1 + indexOffset,
|
|
29
|
-
startColumnNumber: line.indexOf(incorrectLineEnding),
|
|
30
|
-
endColumnNumber: line.indexOf(incorrectLineEnding) +
|
|
29
|
+
startColumnNumber: line.indexOf(incorrectLineEnding) + 1,
|
|
30
|
+
endColumnNumber: line.indexOf(incorrectLineEnding) +
|
|
31
|
+
(incorrectLineEnding === '{crlf}' ? 2 : 1),
|
|
31
32
|
severity
|
|
32
33
|
});
|
|
33
34
|
}
|
|
@@ -43,8 +44,9 @@ const test = (value, config) => {
|
|
|
43
44
|
.replace('{expected}', expectedLineEnding === '{lf}' ? 'LF' : 'CRLF')
|
|
44
45
|
.replace('{actual}', incorrectLineEnding === '{lf}' ? 'LF' : 'CRLF'),
|
|
45
46
|
lineNumber: index + i + 1,
|
|
46
|
-
startColumnNumber: l.indexOf(incorrectLineEnding),
|
|
47
|
-
endColumnNumber: l.indexOf(incorrectLineEnding) +
|
|
47
|
+
startColumnNumber: l.indexOf(incorrectLineEnding) + 1,
|
|
48
|
+
endColumnNumber: l.indexOf(incorrectLineEnding) +
|
|
49
|
+
(incorrectLineEnding === '{crlf}' ? 2 : 1),
|
|
48
50
|
severity
|
|
49
51
|
});
|
|
50
52
|
}
|
|
@@ -63,7 +65,7 @@ const test = (value, config) => {
|
|
|
63
65
|
message: missingMessage.replace('{expected}', expectedLineEnding === '{lf}' ? 'LF' : 'CRLF'),
|
|
64
66
|
lineNumber: lastLines.length,
|
|
65
67
|
startColumnNumber: lastLine.length + 1,
|
|
66
|
-
endColumnNumber: lastLine.length +
|
|
68
|
+
endColumnNumber: lastLine.length + 1,
|
|
67
69
|
severity
|
|
68
70
|
});
|
|
69
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineEndings.js","sourceRoot":"","sources":["../../../src/rules/file/lineEndings.ts"],"names":[],"mappings":";;;AACA,yDAAqD;AAErD,2DAAuD;AACvD,mDAA+C;AAE/C,MAAM,IAAI,GAAG,aAAa,CAAA;AAC1B,MAAM,WAAW,GACf,+EAA+E,CAAA;AACjF,MAAM,OAAO,GAAG,wDAAwD,CAAA;AACxE,MAAM,cAAc,GAAG,iDAAiD,CAAA;AAExE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,gBAAgB,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,yBAAW,CAAC,EAAE,CAAA;IAC9D,MAAM,kBAAkB,GACtB,gBAAgB,KAAK,yBAAW,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IACzD,MAAM,mBAAmB,GAAG,kBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;IAE7E,MAAM,KAAK,GAAG,KAAK;SAChB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,kBAAkB,GAAG,CAAC,CAAC,CAAA;IAClD,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAEhE,IAAI,WAAW,GAAG,CAAC,CAAA;IAEnB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,OAAO;qBACb,OAAO,CAAC,YAAY,EAAE,kBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;qBACpE,OAAO,CAAC,UAAU,EAAE,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtE,UAAU,EAAE,KAAK,GAAG,CAAC,GAAG,WAAW;gBACnC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lineEndings.js","sourceRoot":"","sources":["../../../src/rules/file/lineEndings.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,6 @@ const splitLines_1 = require("../../utils/splitLines");
|
|
|
11
11
|
const name = 'minMacroNameLength';
|
|
12
12
|
const description = 'Ensure a macro name is long enough not to collide with another language.';
|
|
13
13
|
const message = `Macro name '{macro}' is shorter than {length} characters`;
|
|
14
|
-
/** Escapes a macro name so it can be interpolated into a RegExp literally. */
|
|
15
|
-
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
16
14
|
/**
|
|
17
15
|
* The block-comment spans on a line. A `/*` inside a single-quoted string opens
|
|
18
16
|
* nothing - `%put '/*';` writes those characters - so the scan tracks quotes.
|
|
@@ -90,12 +88,12 @@ const test = (value, config) => {
|
|
|
90
88
|
const occurrence = (_a = seen.get(key)) !== null && _a !== void 0 ? _a : 0;
|
|
91
89
|
seen.set(key, occurrence + 1);
|
|
92
90
|
const matches = [
|
|
93
|
-
...line.matchAll(new RegExp(`%macro\\s+${escapeRegExp(macro.name)}\\b`, 'gi'))
|
|
91
|
+
...line.matchAll(new RegExp(`%macro\\s+${(0, utils_1.escapeRegExp)(macro.name)}\\b`, 'gi'))
|
|
94
92
|
].filter((match) => !inComment(line, match.index));
|
|
95
93
|
const declaration = matches[occurrence];
|
|
96
94
|
const startColumnNumber = declaration
|
|
97
95
|
? declaration.index + 1
|
|
98
|
-
: (0, getColumnNumber_1.getColumnNumber)(line, '%macro');
|
|
96
|
+
: (0, getColumnNumber_1.getColumnNumber)(line, '%macro', true);
|
|
99
97
|
return {
|
|
100
98
|
message: message
|
|
101
99
|
.replace('{macro}', macro.name)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minMacroNameLength.js","sourceRoot":"","sources":["../../../src/rules/file/minMacroNameLength.ts"],"names":[],"mappings":";;;AAAA,uCAAoD;AAEpD,2DAAuD;AACvD,mDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"minMacroNameLength.js","sourceRoot":"","sources":["../../../src/rules/file/minMacroNameLength.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,8 +22,8 @@ const test = (value, config) => {
|
|
|
22
22
|
.replace('{macro}', macro.name)
|
|
23
23
|
.replace('{parent}', macro.parentMacro),
|
|
24
24
|
lineNumber: macro.startLineNumbers[0],
|
|
25
|
-
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro'),
|
|
26
|
-
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro') +
|
|
25
|
+
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro', true),
|
|
26
|
+
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro', true) +
|
|
27
27
|
lines[macro.startLineNumbers[0] - 1].trim().length -
|
|
28
28
|
1,
|
|
29
29
|
severity
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noNestedMacros.js","sourceRoot":"","sources":["../../../src/rules/file/noNestedMacros.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,iEAA6D;AAC7D,yDAAqD;AACrD,uDAAmD;AAGnD,MAAM,IAAI,GAAG,gBAAgB,CAAA;AAC7B,MAAM,WAAW,GAAG,kDAAkD,CAAA;AACtE,MAAM,OAAO,GAAG,4DAA4D,CAAA;AAE5E,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,IAAA,uBAAU,EAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAEhE,MAAM;SACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;SAC9B,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,WAAW,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,OAAO;iBACb,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;iBAC9B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;YACzC,UAAU,EAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAW;YAChD,iBAAiB,EAAE,IAAA,iCAAe,EAChC,KAAK,CAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAY,GAAG,CAAC,CAAC,EACjD,QAAQ,
|
|
1
|
+
{"version":3,"file":"noNestedMacros.js","sourceRoot":"","sources":["../../../src/rules/file/noNestedMacros.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,iEAA6D;AAC7D,yDAAqD;AACrD,uDAAmD;AAGnD,MAAM,IAAI,GAAG,gBAAgB,CAAA;AAC7B,MAAM,WAAW,GAAG,kDAAkD,CAAA;AACtE,MAAM,OAAO,GAAG,4DAA4D,CAAA;AAE5E,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,IAAA,uBAAU,EAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,WAAW,GAAiB,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAEhE,MAAM;SACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;SAC9B,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,WAAW,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,OAAO;iBACb,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;iBAC9B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;YACzC,UAAU,EAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAW;YAChD,iBAAiB,EAAE,IAAA,iCAAe,EAChC,KAAK,CAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAY,GAAG,CAAC,CAAC,EACjD,QAAQ,EACR,IAAI,CACL;YACD,eAAe,EACb,IAAA,iCAAe,EACb,KAAK,CAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAY,GAAG,CAAC,CAAC,EACjD,QAAQ,EACR,IAAI,CACL;gBACD,KAAK,CAAE,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAY,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM;gBAC/D,CAAC;YACH,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACJ,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED;;GAEG;AACU,QAAA,cAAc,GAAiB;IAC1C,IAAI,EAAE,2BAAY,CAAC,IAAI;IACvB,IAAI;IACJ,WAAW;IACX,OAAO;IACP,IAAI;CACL,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noSingleAsteriskComments.js","sourceRoot":"","sources":["../../../src/rules/file/noSingleAsteriskComments.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"noSingleAsteriskComments.js","sourceRoot":"","sources":["../../../src/rules/file/noSingleAsteriskComments.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.strictMacroDefinition = void 0;
|
|
4
4
|
const types_1 = require("../../types");
|
|
5
5
|
const LintRuleType_1 = require("../../types/LintRuleType");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
6
7
|
const parseMacros_1 = require("../../utils/parseMacros");
|
|
7
8
|
const name = 'strictMacroDefinition';
|
|
8
9
|
const description = 'Enforce strictly rules of macro definition syntax.';
|
|
@@ -21,63 +22,137 @@ const validOptions = [
|
|
|
21
22
|
'SRC',
|
|
22
23
|
'STORE'
|
|
23
24
|
];
|
|
25
|
+
/**
|
|
26
|
+
* Reads a declaration's parameter list: where the list sits, and the text of each
|
|
27
|
+
* parameter, from ONE depth- and quote-aware pass.
|
|
28
|
+
*
|
|
29
|
+
* A declaration can run past its list - `)/secure`, then `des = '...'` - and a
|
|
30
|
+
* value can carry parentheses or commas of its own (`%sysfunc(pathname(work))`,
|
|
31
|
+
* `%sysfunc(catx(,x y,z))`, `des = 'a, b'`), so:
|
|
32
|
+
*
|
|
33
|
+
* - the list ends at the parenthesis that closes the first one, not at the last
|
|
34
|
+
* `)` in the declaration;
|
|
35
|
+
* - a comma separates parameters only at depth zero and outside a quoted value.
|
|
36
|
+
*
|
|
37
|
+
* Both facts come from the same reading of the same text. They used to be two
|
|
38
|
+
* scans - one delimiting the list, one splitting it - which disagreed about a
|
|
39
|
+
* comma inside a nested call and left `x y` looking like a parameter name.
|
|
40
|
+
* Returns an unclosed list as `null`, in which case there is nothing to check.
|
|
41
|
+
*/
|
|
42
|
+
const parseParamList = (declaration) => {
|
|
43
|
+
const open = declaration.indexOf('(');
|
|
44
|
+
if (open === -1)
|
|
45
|
+
return { list: null, params: [], listEnd: -1 };
|
|
46
|
+
const params = [];
|
|
47
|
+
let current = '';
|
|
48
|
+
let quote = '';
|
|
49
|
+
let depth = 0;
|
|
50
|
+
for (let index = open + 1; index < declaration.length; index++) {
|
|
51
|
+
const character = declaration[index];
|
|
52
|
+
// Inside a quoted value nothing is syntax: SAS accepts both quote characters,
|
|
53
|
+
// and a `)` or a `,` in a value is text.
|
|
54
|
+
if (quote) {
|
|
55
|
+
current += character;
|
|
56
|
+
if (character === quote)
|
|
57
|
+
quote = '';
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (character === "'" || character === '"') {
|
|
61
|
+
quote = character;
|
|
62
|
+
current += character;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (character === '(')
|
|
66
|
+
depth++;
|
|
67
|
+
if (character === ')') {
|
|
68
|
+
if (depth === 0) {
|
|
69
|
+
params.push(current);
|
|
70
|
+
return {
|
|
71
|
+
list: declaration.slice(open + 1, index),
|
|
72
|
+
params,
|
|
73
|
+
listEnd: index
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
depth--;
|
|
77
|
+
}
|
|
78
|
+
if (character === ',' && depth === 0) {
|
|
79
|
+
params.push(current);
|
|
80
|
+
current = '';
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
current += character;
|
|
84
|
+
}
|
|
85
|
+
return { list: null, params: [], listEnd: -1 };
|
|
86
|
+
};
|
|
24
87
|
const processParams = (content, macro, diagnostics, config) => {
|
|
25
88
|
const declaration = macro.declaration;
|
|
26
89
|
const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || types_1.Severity.Warning;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
90
|
+
// The parser reports a declaration with its comments removed, including one that
|
|
91
|
+
// spans lines (sasjs/lint#274), so the list is read from the declaration itself.
|
|
92
|
+
const { list: paramList, params: rawParams, listEnd } = parseParamList(declaration);
|
|
93
|
+
const params = rawParams.map((param) => param.trim());
|
|
94
|
+
params.forEach((param) => {
|
|
95
|
+
const trimedParam = param.split('=')[0].trim();
|
|
96
|
+
let paramLineNumber = 1, paramStartIndex = 1, paramEndIndex = content.length;
|
|
97
|
+
if (macro.declarationLines.findIndex((dl) => dl.indexOf(trimedParam) !== -1) === -1) {
|
|
98
|
+
// The parameter name is interrupted by a comment in the declaration line,
|
|
99
|
+
// so the name as the parser reads it is not the text the line holds. Look
|
|
100
|
+
// for it with a comment in each possible position - the name and the
|
|
101
|
+
// suffix are escaped, since they come from the file and a parenthesis in
|
|
102
|
+
// one of them used to make the pattern invalid.
|
|
103
|
+
const comment = '/\\*(.*?)\\*/';
|
|
104
|
+
for (let i = 1; i < trimedParam.length; i++) {
|
|
105
|
+
const paramWithComment = (0, utils_1.escapeRegExp)(trimedParam.slice(0, i)) +
|
|
106
|
+
comment +
|
|
107
|
+
(0, utils_1.escapeRegExp)(trimedParam.slice(i));
|
|
108
|
+
const regEx = new RegExp(paramWithComment);
|
|
109
|
+
const declarationLineIndex = macro.declarationLines.findIndex((dl) => !!regEx.exec(dl));
|
|
110
|
+
if (declarationLineIndex !== -1) {
|
|
111
|
+
const declarationLine = macro.declarationLines[declarationLineIndex];
|
|
112
|
+
const partFound = regEx.exec(declarationLine)[0];
|
|
113
|
+
paramLineNumber = macro.startLineNumbers[declarationLineIndex];
|
|
114
|
+
paramStartIndex = declarationLine.indexOf(partFound);
|
|
115
|
+
paramEndIndex = declarationLine.indexOf(partFound) + partFound.length;
|
|
116
|
+
break;
|
|
51
117
|
}
|
|
52
118
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const declarationLineIndex = macro.declarationLines.findIndex((dl) => dl.indexOf(trimedParam) !== -1);
|
|
122
|
+
const declarationLine = macro.declarationLines[declarationLineIndex];
|
|
123
|
+
paramLineNumber = macro.startLineNumbers[declarationLineIndex];
|
|
124
|
+
paramStartIndex = declarationLine.indexOf(trimedParam);
|
|
125
|
+
paramEndIndex = declarationLine.indexOf(trimedParam) + trimedParam.length;
|
|
126
|
+
}
|
|
127
|
+
if (trimedParam.includes(' ')) {
|
|
128
|
+
diagnostics.push({
|
|
129
|
+
message: `Param '${trimedParam}' cannot have space`,
|
|
130
|
+
lineNumber: paramLineNumber,
|
|
131
|
+
startColumnNumber: paramStartIndex + 1,
|
|
132
|
+
endColumnNumber: paramEndIndex,
|
|
133
|
+
severity
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (paramList === null)
|
|
138
|
+
return declaration;
|
|
139
|
+
// The options text starts after the parenthesis that CLOSES the parameter list,
|
|
140
|
+
// which is where `parseParamList` says the list ends. It used to start after the
|
|
141
|
+
// LAST `)` in the declaration, so an option value carrying its own parenthesis
|
|
142
|
+
// (`des = 'Run %m(HELP) for help.'`) cut the text short and the options after it
|
|
143
|
+
// were never checked.
|
|
144
|
+
return declaration.slice(listEnd + 1);
|
|
74
145
|
};
|
|
75
146
|
const processOptions = (_declaration, macro, diagnostics, config) => {
|
|
76
147
|
var _a, _b, _c;
|
|
77
148
|
let optionsPresent = (_b = (_a = _declaration.split('/')) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.trim();
|
|
78
149
|
const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || types_1.Severity.Warning;
|
|
79
150
|
if (optionsPresent) {
|
|
80
|
-
|
|
151
|
+
// An option value is quoted and can hold spaces - and the other quote
|
|
152
|
+
// character, as in `des = 'Run %m("x") for help.'` - so the value is removed
|
|
153
|
+
// up to its matching quote before the text is split on spaces. SAS accepts
|
|
154
|
+
// whitespace around the `=`.
|
|
155
|
+
const regex = new RegExp(/=\s*(['"])([\s\S]*?)\1/, 'g');
|
|
81
156
|
let result = regex.exec(optionsPresent);
|
|
82
157
|
// removing Option's `="..."` part, e.g. des="..."
|
|
83
158
|
while (result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strictMacroDefinition.js","sourceRoot":"","sources":["../../../src/rules/file/strictMacroDefinition.ts"],"names":[],"mappings":";;;AAAA,uCAAqE;AAErE,2DAAuD;AACvD,yDAAqD;AAErD,MAAM,IAAI,GAAG,uBAAuB,CAAA;AACpC,MAAM,WAAW,GAAG,oDAAoD,CAAA;AACxE,MAAM,OAAO,GAAG,mCAAmC,CAAA;AAEnD,MAAM,YAAY,GAAG;IACnB,KAAK;IACL,KAAK;IACL,cAAc;IACd,aAAa;IACb,eAAe;IACf,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;CACR,CAAA;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"strictMacroDefinition.js","sourceRoot":"","sources":["../../../src/rules/file/strictMacroDefinition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noBannedStrings.js","sourceRoot":"","sources":["../../../src/rules/line/noBannedStrings.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,uCAAkD;AAElD,MAAM,IAAI,GAAG,iBAAiB,CAAA;AAC9B,MAAM,WAAW,GACf,wEAAwE,CAAA;AAC1E,MAAM,OAAO,GAAG,+BAA+B,CAAA;AAE/C;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AAE9C;;;;GAIG;AACH,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAE7C,MAAM,IAAI,GAAG,CACX,KAAa,EACb,UAAkB,EAClB,MAAmB,EACnB,OAA6B,EAC7B,EAAE;IACF,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,6EAA6E;IAC7E,6EAA6E;IAC7E,kCAAkC;IAClC,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU;QAAE,OAAO,WAAW,CAAA;IAC3C,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAA;IAEhD,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAChE,MAAM,aAAa,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,KAAI,4BAAoB,CAAA;IAEnE,IAAI,CAAC,aAAa,CAAC,MAAM;QAAE,OAAO,WAAW,CAAA;IAE7C,+EAA+E;IAC/E,yDAAyD;IACzD,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IAEvE,MAAM,OAAO,GAAc,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAE9D,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE,CAAC;QACpC,6EAA6E;QAC7E,oEAAoE;QACpE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAA;QAE1D,IAAI,KAAK,CAAA;QACT,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACzB,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAEnC,2EAA2E;YAC3E,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAQ;YACrD,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE;gBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAEnE,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,GAAG,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG;gBACpC,UAAU;gBACV,iBAAiB,EAAE,KAAK,GAAG,CAAC;gBAC5B,eAAe,EAAE,GAAG
|
|
1
|
+
{"version":3,"file":"noBannedStrings.js","sourceRoot":"","sources":["../../../src/rules/line/noBannedStrings.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ const test = (value, lineNumber, config) => {
|
|
|
16
16
|
message,
|
|
17
17
|
lineNumber,
|
|
18
18
|
startColumnNumber: value.indexOf(match) + 1,
|
|
19
|
-
endColumnNumber: value.indexOf(match) + match.length
|
|
19
|
+
endColumnNumber: value.indexOf(match) + match.length,
|
|
20
20
|
severity
|
|
21
21
|
}));
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noEncodedPasswords.js","sourceRoot":"","sources":["../../../src/rules/line/noEncodedPasswords.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAE/C,MAAM,IAAI,GAAG,oBAAoB,CAAA;AACjC,MAAM,WAAW,GAAG,yCAAyC,CAAA;AAC7D,MAAM,OAAO,GAAG,gCAAgC,CAAA;AAEhD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,MAAmB,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,KAAK,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO;QACP,UAAU;QACV,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3C,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM
|
|
1
|
+
{"version":3,"file":"noEncodedPasswords.js","sourceRoot":"","sources":["../../../src/rules/line/noEncodedPasswords.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAE/C,MAAM,IAAI,GAAG,oBAAoB,CAAA;AACjC,MAAM,WAAW,GAAG,yCAAyC,CAAA;AAC7D,MAAM,OAAO,GAAG,gCAAgC,CAAA;AAEhD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,MAAmB,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,KAAK,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO;QACP,UAAU;QACV,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3C,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM;QACpD,QAAQ;KACT,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AAED;;GAEG;AACU,QAAA,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,2BAAY,CAAC,IAAI;IACvB,IAAI;IACJ,WAAW;IACX,OAAO;IACP,IAAI;CACL,CAAA"}
|
package/rules/line/noGremlins.js
CHANGED
|
@@ -30,7 +30,7 @@ const test = (value, lineNumber, config) => {
|
|
|
30
30
|
message: `${message}: ${gremlin.description}, hexCode(${gremlin.hexCode})`,
|
|
31
31
|
lineNumber,
|
|
32
32
|
startColumnNumber: match.index + 1,
|
|
33
|
-
endColumnNumber: match.index +
|
|
33
|
+
endColumnNumber: match.index + match[0].length,
|
|
34
34
|
severity
|
|
35
35
|
});
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noGremlins.js","sourceRoot":"","sources":["../../../src/rules/line/noGremlins.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,uCAA+C;AAE/C,MAAM,IAAI,GAAG,YAAY,CAAA;AACzB,MAAM,WAAW,GAAG,iDAAiD,CAAA;AACrE,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEzC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,MAAmB,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAChE,MAAM,eAAe,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,KAAI,EAAE,CAAA;IAErD,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,MAAM,QAAQ,GAAQ,EAAE,CAAA;IAExB,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAiB,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE;gBAChE,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,MAAM,CACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SAClB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;SACzB,IAAI,CAAC,GAAG,CAAC,EACZ,GAAG,CACJ,CAAA;IAED,IAAI,KAAK,CAAA;IACT,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAA;QAE1C,WAAW,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,GAAG,OAAO,KAAK,OAAO,CAAC,WAAW,aAAa,OAAO,CAAC,OAAO,GAAG;YAC1E,UAAU;YACV,iBAAiB,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;YAClC,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"noGremlins.js","sourceRoot":"","sources":["../../../src/rules/line/noGremlins.ts"],"names":[],"mappings":";;;AAEA,2DAAuD;AACvD,mDAA+C;AAC/C,uCAA+C;AAE/C,MAAM,IAAI,GAAG,YAAY,CAAA;AACzB,MAAM,WAAW,GAAG,iDAAiD,CAAA;AACrE,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEzC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAE,MAAmB,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,CAAC,KAAI,mBAAQ,CAAC,OAAO,CAAA;IAChE,MAAM,eAAe,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,KAAI,EAAE,CAAA;IAErD,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,MAAM,QAAQ,GAAQ,EAAE,CAAA;IAExB,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAiB,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE;gBAChE,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,MAAM,CACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SAClB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;SACzB,IAAI,CAAC,GAAG,CAAC,EACZ,GAAG,CACJ,CAAA;IAED,IAAI,KAAK,CAAA;IACT,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAA;QAE1C,WAAW,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,GAAG,OAAO,KAAK,OAAO,CAAC,WAAW,aAAa,OAAO,CAAC,OAAO,GAAG;YAC1E,UAAU;YACV,iBAAiB,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;YAClC,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAC9C,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED;;GAEG;AACU,QAAA,UAAU,GAAiB;IACtC,IAAI,EAAE,2BAAY,CAAC,IAAI;IACvB,IAAI;IACJ,WAAW;IACX,OAAO;IACP,IAAI;CACL,CAAA;AAEM,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,EAAE,CAC7C,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AAD5B,QAAA,WAAW,eACiB"}
|
package/rules/line/noTabs.js
CHANGED
package/types/Diagnostic.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Severity } from './Severity';
|
|
2
2
|
/**
|
|
3
3
|
* A diagnostic is produced by the execution of a lint rule against a file or line of text.
|
|
4
|
+
*
|
|
5
|
+
* Both columns are 1-based, and `endColumnNumber` is the column of the span's LAST
|
|
6
|
+
* character - a one-character span starts and ends on the same column. A consumer
|
|
7
|
+
* that highlights `startColumnNumber` through `endColumnNumber` inclusive covers
|
|
8
|
+
* exactly the text the rule reports, for every rule in the set.
|
|
4
9
|
*/
|
|
5
10
|
export interface Diagnostic {
|
|
6
11
|
lineNumber: number;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeRegExp = void 0;
|
|
4
|
+
/** Escapes a string so it matches literally inside a RegExp. */
|
|
5
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
6
|
+
exports.escapeRegExp = escapeRegExp;
|
|
7
|
+
//# sourceMappingURL=escapeRegExp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeRegExp.js","sourceRoot":"","sources":["../../src/utils/escapeRegExp.ts"],"names":[],"mappings":";;;AAAA,gEAAgE;AACzD,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CACpD,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AADjC,QAAA,YAAY,gBACqB"}
|
|
@@ -1 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The 1-based column at which `text` starts on the last line of `line`.
|
|
3
|
+
*
|
|
4
|
+
* `caseInsensitive` compares the characters without regard to case, which is
|
|
5
|
+
* what a SAS keyword needs: `%MACRO` and `%macro` are the same statement. It
|
|
6
|
+
* leaves the default exact, because the other callers search for a macro name or
|
|
7
|
+
* a parameter exactly as it is written in the file.
|
|
8
|
+
*
|
|
9
|
+
* The folded comparison runs as a RegExp over the ORIGINAL line rather than over
|
|
10
|
+
* a lowercased copy, because folding is not always length-preserving - `'İ'` is
|
|
11
|
+
* one character and lowercases to two - and an offset measured on the copy points
|
|
12
|
+
* somewhere else in the line that is returned to the caller.
|
|
13
|
+
*/
|
|
14
|
+
export declare const getColumnNumber: (line: string, text: string, caseInsensitive?: boolean) => number;
|
package/utils/getColumnNumber.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getColumnNumber = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
4
|
+
const escapeRegExp_1 = require("./escapeRegExp");
|
|
5
|
+
/**
|
|
6
|
+
* The 1-based column at which `text` starts on the last line of `line`.
|
|
7
|
+
*
|
|
8
|
+
* `caseInsensitive` compares the characters without regard to case, which is
|
|
9
|
+
* what a SAS keyword needs: `%MACRO` and `%macro` are the same statement. It
|
|
10
|
+
* leaves the default exact, because the other callers search for a macro name or
|
|
11
|
+
* a parameter exactly as it is written in the file.
|
|
12
|
+
*
|
|
13
|
+
* The folded comparison runs as a RegExp over the ORIGINAL line rather than over
|
|
14
|
+
* a lowercased copy, because folding is not always length-preserving - `'İ'` is
|
|
15
|
+
* one character and lowercases to two - and an offset measured on the copy points
|
|
16
|
+
* somewhere else in the line that is returned to the caller.
|
|
17
|
+
*/
|
|
18
|
+
const getColumnNumber = (line, text, caseInsensitive = false) => {
|
|
19
|
+
const lastLine = line.split('\n').pop();
|
|
20
|
+
const index = caseInsensitive
|
|
21
|
+
? lastLine.search(new RegExp((0, escapeRegExp_1.escapeRegExp)(text), 'i'))
|
|
22
|
+
: lastLine.indexOf(text);
|
|
6
23
|
if (index < 0) {
|
|
7
24
|
throw new Error(`String '${text}' was not found in line '${line}'`);
|
|
8
25
|
}
|
|
9
|
-
return
|
|
26
|
+
return index + 1;
|
|
10
27
|
};
|
|
11
28
|
exports.getColumnNumber = getColumnNumber;
|
|
12
29
|
//# sourceMappingURL=getColumnNumber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getColumnNumber.js","sourceRoot":"","sources":["../../src/utils/getColumnNumber.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"getColumnNumber.js","sourceRoot":"","sources":["../../src/utils/getColumnNumber.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAE7C;;;;;;;;;;;;GAYG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAY,EACZ,IAAY,EACZ,eAAe,GAAG,KAAK,EACf,EAAE;IACV,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAY,CAAA;IACjD,MAAM,KAAK,GAAG,eAAe;QAC3B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAA,2BAAY,EAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,4BAA4B,IAAI,GAAG,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA;AAbY,QAAA,eAAe,mBAa3B"}
|
package/utils/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export * from './getHeaderLinesCount';
|
|
|
12
12
|
export * from './getDataSectionsDetail';
|
|
13
13
|
export * from './defaultBannedStrings';
|
|
14
14
|
export * from './defaultIgnoredMacros';
|
|
15
|
+
export * from './escapeRegExp';
|
|
15
16
|
export * from './headerMacros';
|
|
16
17
|
export * from './mergeLintConfig';
|
|
17
18
|
export * from './parseLibnames';
|
package/utils/index.js
CHANGED
|
@@ -28,6 +28,7 @@ __exportStar(require("./getHeaderLinesCount"), exports);
|
|
|
28
28
|
__exportStar(require("./getDataSectionsDetail"), exports);
|
|
29
29
|
__exportStar(require("./defaultBannedStrings"), exports);
|
|
30
30
|
__exportStar(require("./defaultIgnoredMacros"), exports);
|
|
31
|
+
__exportStar(require("./escapeRegExp"), exports);
|
|
31
32
|
__exportStar(require("./headerMacros"), exports);
|
|
32
33
|
__exportStar(require("./mergeLintConfig"), exports);
|
|
33
34
|
__exportStar(require("./parseLibnames"), exports);
|
package/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,kDAA+B;AAC/B,mDAAgC;AAChC,sDAAmC;AACnC,8CAA2B;AAC3B,iDAA8B;AAC9B,8CAA2B;AAC3B,gDAA6B;AAC7B,+CAA4B;AAC5B,iDAA8B;AAC9B,wDAAqC;AACrC,0DAAuC;AACvC,yDAAsC;AACtC,yDAAsC;AACtC,iDAA8B;AAC9B,oDAAiC;AACjC,kDAA+B;AAC/B,sDAAmC;AACnC,oDAAiC;AACjC,8CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,kDAA+B;AAC/B,mDAAgC;AAChC,sDAAmC;AACnC,8CAA2B;AAC3B,iDAA8B;AAC9B,8CAA2B;AAC3B,gDAA6B;AAC7B,+CAA4B;AAC5B,iDAA8B;AAC9B,wDAAqC;AACrC,0DAAuC;AACvC,yDAAsC;AACtC,yDAAsC;AACtC,iDAA8B;AAC9B,iDAA8B;AAC9B,oDAAiC;AACjC,kDAA+B;AAC/B,sDAAmC;AACnC,oDAAiC;AACjC,8CAA2B"}
|
package/utils/parseMacros.js
CHANGED
|
@@ -3,10 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.parseMacros = void 0;
|
|
4
4
|
const trimComments_1 = require("./trimComments");
|
|
5
5
|
const splitLines_1 = require("./splitLines");
|
|
6
|
+
/** The `%macro` statement, in any capitalisation. */
|
|
7
|
+
const macroStatement = /^%macro\b/i;
|
|
8
|
+
/** The `%mend` statement, in any capitalisation. */
|
|
9
|
+
const mendStatement = /^%mend\b/i;
|
|
10
|
+
/**
|
|
11
|
+
* The name in a `%macro` declaration, as written.
|
|
12
|
+
*
|
|
13
|
+
* The name runs to the first character that cannot belong to it: whitespace, an
|
|
14
|
+
* opening parenthesis, the `/` that introduces the options, or an end of
|
|
15
|
+
* statement. Reading it by pattern rather than from a fixed offset is what makes
|
|
16
|
+
* `%MACRO`, `%macro s` and `%macro\ts` yield the same name - the keyword and the
|
|
17
|
+
* whitespace before the name can each be a different length.
|
|
18
|
+
*/
|
|
19
|
+
const declarationName = /^%macro\b\s*([^\s(;/]*)/i;
|
|
20
|
+
/** The name in a `%mend` statement, as written. */
|
|
21
|
+
const mendName = /^%mend\b\s*([^\s;]*)/i;
|
|
22
|
+
/** The name a macro statement carries, or an empty string when it has none. */
|
|
23
|
+
const getName = (statement, pattern) => {
|
|
24
|
+
const match = pattern.exec(statement);
|
|
25
|
+
return match ? match[1].trim() : '';
|
|
26
|
+
};
|
|
6
27
|
const parseMacros = (text, config) => {
|
|
7
28
|
const lines = (0, splitLines_1.splitLines)(text);
|
|
8
29
|
const macros = [];
|
|
9
30
|
let isCommentStarted = false;
|
|
31
|
+
let isQuoteStarted = '';
|
|
10
32
|
let macroStack = [];
|
|
11
33
|
let isReadingMacroDefinition = false;
|
|
12
34
|
let isStatementContinues = true;
|
|
@@ -14,8 +36,14 @@ const parseMacros = (text, config) => {
|
|
|
14
36
|
let tempMacroDeclarationLines = [];
|
|
15
37
|
let tempStartLineNumbers = [];
|
|
16
38
|
lines.forEach((line, lineIndex) => {
|
|
17
|
-
|
|
18
|
-
|
|
39
|
+
// The state a line STARTS in belongs to the line's statements, and the state
|
|
40
|
+
// it ENDS in belongs to the next line. Reading the second into the statement
|
|
41
|
+
// loop swallowed the code that precedes a comment opening mid-line
|
|
42
|
+
// (sasjs/lint#274).
|
|
43
|
+
const stateBeforeLine = isCommentStarted;
|
|
44
|
+
const { statement: trimmedLine, commentStarted: stateAfterLine, quoteStarted: quoteAfterLine } = (0, trimComments_1.trimComments)(line, stateBeforeLine, false, isQuoteStarted);
|
|
45
|
+
isCommentStarted = stateAfterLine;
|
|
46
|
+
isQuoteStarted = quoteAfterLine;
|
|
19
47
|
isStatementContinues = !trimmedLine.endsWith(';');
|
|
20
48
|
const statements = trimmedLine.split(';');
|
|
21
49
|
if (isReadingMacroDefinition) {
|
|
@@ -31,8 +59,11 @@ const parseMacros = (text, config) => {
|
|
|
31
59
|
});
|
|
32
60
|
}
|
|
33
61
|
statements.forEach((statement, statementIndex) => {
|
|
34
|
-
|
|
35
|
-
|
|
62
|
+
// The statements were split from the line's ALREADY trimmed text, so they
|
|
63
|
+
// carry no comment and no quoted value: trimming them again either swallowed
|
|
64
|
+
// the code after a comment that closes at the start of the line (`... */
|
|
65
|
+
// %macro foo;`) or re-read a `/*` inside a multi-line string as a comment.
|
|
66
|
+
const trimmedStatement = statement.trim();
|
|
36
67
|
if (isReadingMacroDefinition) {
|
|
37
68
|
tempMacroDeclaration =
|
|
38
69
|
tempMacroDeclaration +
|
|
@@ -41,12 +72,7 @@ const parseMacros = (text, config) => {
|
|
|
41
72
|
tempStartLineNumbers.push(lineIndex + 1);
|
|
42
73
|
if (!Object.is(statements.length - 1, statementIndex)) {
|
|
43
74
|
isReadingMacroDefinition = false;
|
|
44
|
-
const name = tempMacroDeclaration
|
|
45
|
-
.slice(7, tempMacroDeclaration.length)
|
|
46
|
-
.trim()
|
|
47
|
-
.split('/')[0]
|
|
48
|
-
.split('(')[0]
|
|
49
|
-
.trim();
|
|
75
|
+
const name = getName(tempMacroDeclaration, declarationName);
|
|
50
76
|
macroStack.push({
|
|
51
77
|
name,
|
|
52
78
|
startLineNumbers: tempStartLineNumbers,
|
|
@@ -63,7 +89,7 @@ const parseMacros = (text, config) => {
|
|
|
63
89
|
});
|
|
64
90
|
}
|
|
65
91
|
}
|
|
66
|
-
if (
|
|
92
|
+
if (macroStatement.test(trimmedStatement)) {
|
|
67
93
|
const startLineNumber = lineIndex + 1;
|
|
68
94
|
if (isStatementContinues &&
|
|
69
95
|
Object.is(statements.length - 1, statementIndex)) {
|
|
@@ -73,12 +99,7 @@ const parseMacros = (text, config) => {
|
|
|
73
99
|
isReadingMacroDefinition = true;
|
|
74
100
|
return;
|
|
75
101
|
}
|
|
76
|
-
const name = trimmedStatement
|
|
77
|
-
.slice(7, trimmedStatement.length)
|
|
78
|
-
.trim()
|
|
79
|
-
.split('/')[0]
|
|
80
|
-
.split('(')[0]
|
|
81
|
-
.trim();
|
|
102
|
+
const name = getName(trimmedStatement, declarationName);
|
|
82
103
|
macroStack.push({
|
|
83
104
|
name,
|
|
84
105
|
startLineNumbers: [startLineNumber],
|
|
@@ -94,12 +115,16 @@ const parseMacros = (text, config) => {
|
|
|
94
115
|
termination: ''
|
|
95
116
|
});
|
|
96
117
|
}
|
|
97
|
-
else if (
|
|
118
|
+
else if (mendStatement.test(trimmedStatement)) {
|
|
98
119
|
if (macroStack.length) {
|
|
99
120
|
const macro = macroStack.pop();
|
|
100
|
-
const mendMacroName = trimmedStatement
|
|
121
|
+
const mendMacroName = getName(trimmedStatement, mendName);
|
|
101
122
|
macro.endLineNumber = lineIndex + 1;
|
|
102
|
-
|
|
123
|
+
// SAS matches a macro name without regard to case, so `%mend s` closes
|
|
124
|
+
// `%macro S()`. The name is kept as written for the rules that point at
|
|
125
|
+
// it, and only the comparison folds the case.
|
|
126
|
+
macro.hasMacroNameInMend =
|
|
127
|
+
mendMacroName.toLowerCase() === macro.name.toLowerCase();
|
|
103
128
|
macro.mismatchedMendMacroName = macro.hasMacroNameInMend
|
|
104
129
|
? ''
|
|
105
130
|
: mendMacroName;
|
package/utils/parseMacros.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseMacros.js","sourceRoot":"","sources":["../../src/utils/parseMacros.ts"],"names":[],"mappings":";;;AACA,iDAA6C;AAC7C,6CAAyC;
|
|
1
|
+
{"version":3,"file":"parseMacros.js","sourceRoot":"","sources":["../../src/utils/parseMacros.ts"],"names":[],"mappings":"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"}
|
package/utils/trimComments.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Removes the block comments from a statement, or from one line of a statement.
|
|
3
|
+
*
|
|
4
|
+
* The scan tracks two states the previous implementation did not:
|
|
5
|
+
*
|
|
6
|
+
* - a quoted value, because SAS accepts both quote characters, so an opening
|
|
7
|
+
* comment marker inside a string is data rather than the start of a comment;
|
|
8
|
+
* - a comment that is still open at the end of the text, which is reported back
|
|
9
|
+
* as `commentStarted` so the caller carries it into the next line. The old
|
|
10
|
+
* implementation lost that state when the opening marker had no closing
|
|
11
|
+
* delimiter on the same line, and returned the comment's content as code
|
|
12
|
+
* (sasjs/lint#274).
|
|
13
|
+
*
|
|
14
|
+
* A quoted value is carried across lines too (`quoteStarted`), because a SAS
|
|
15
|
+
* literal really does continue onto the next physical line: measured on a live
|
|
16
|
+
* engine, `x = "ab` / `cd";` is one string and `length(x)` is 4. An UNTERMINATED
|
|
17
|
+
* quote is carried as far as the text goes, which is also what the engine does -
|
|
18
|
+
* it consumes the rest of the file as string content.
|
|
19
|
+
*/
|
|
20
|
+
export declare const trimComments: (statement: string, commentStarted?: boolean, trimEnd?: boolean, quoteStarted?: string) => {
|
|
2
21
|
statement: string;
|
|
3
22
|
commentStarted: boolean;
|
|
23
|
+
quoteStarted: string;
|
|
4
24
|
};
|
package/utils/trimComments.js
CHANGED
|
@@ -1,40 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.trimComments = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Removes the block comments from a statement, or from one line of a statement.
|
|
6
|
+
*
|
|
7
|
+
* The scan tracks two states the previous implementation did not:
|
|
8
|
+
*
|
|
9
|
+
* - a quoted value, because SAS accepts both quote characters, so an opening
|
|
10
|
+
* comment marker inside a string is data rather than the start of a comment;
|
|
11
|
+
* - a comment that is still open at the end of the text, which is reported back
|
|
12
|
+
* as `commentStarted` so the caller carries it into the next line. The old
|
|
13
|
+
* implementation lost that state when the opening marker had no closing
|
|
14
|
+
* delimiter on the same line, and returned the comment's content as code
|
|
15
|
+
* (sasjs/lint#274).
|
|
16
|
+
*
|
|
17
|
+
* A quoted value is carried across lines too (`quoteStarted`), because a SAS
|
|
18
|
+
* literal really does continue onto the next physical line: measured on a live
|
|
19
|
+
* engine, `x = "ab` / `cd";` is one string and `length(x)` is 4. An UNTERMINATED
|
|
20
|
+
* quote is carried as far as the text goes, which is also what the engine does -
|
|
21
|
+
* it consumes the rest of the file as string content.
|
|
22
|
+
*/
|
|
23
|
+
const trimComments = (statement, commentStarted = false, trimEnd = false, quoteStarted = '') => {
|
|
24
|
+
const text = statement || '';
|
|
25
|
+
let result = '';
|
|
26
|
+
let quote = quoteStarted;
|
|
27
|
+
let inComment = commentStarted;
|
|
28
|
+
for (let index = 0; index < text.length; index++) {
|
|
29
|
+
const character = text[index];
|
|
30
|
+
if (inComment) {
|
|
31
|
+
if (character === '*' && text[index + 1] === '/') {
|
|
32
|
+
inComment = false;
|
|
33
|
+
index++;
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
15
36
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
37
|
+
if (quote) {
|
|
38
|
+
result += character;
|
|
39
|
+
if (character === quote)
|
|
40
|
+
quote = '';
|
|
41
|
+
continue;
|
|
19
42
|
}
|
|
20
|
-
|
|
21
|
-
|
|
43
|
+
if (character === "'" || character === '"') {
|
|
44
|
+
quote = character;
|
|
45
|
+
result += character;
|
|
46
|
+
continue;
|
|
22
47
|
}
|
|
48
|
+
if (character === '/' && text[index + 1] === '*') {
|
|
49
|
+
inComment = true;
|
|
50
|
+
index++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
result += character;
|
|
23
54
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const completeStatement = statementBeforeCommentStarts + result.statement;
|
|
30
|
-
return {
|
|
31
|
-
statement: trimEnd
|
|
32
|
-
? completeStatement.trimEnd()
|
|
33
|
-
: completeStatement.trim(),
|
|
34
|
-
commentStarted: result.commentStarted
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return { statement: trimmed, commentStarted: false };
|
|
55
|
+
return {
|
|
56
|
+
statement: trimEnd ? result.trimEnd() : result.trim(),
|
|
57
|
+
commentStarted: inComment,
|
|
58
|
+
quoteStarted: quote
|
|
59
|
+
};
|
|
38
60
|
};
|
|
39
61
|
exports.trimComments = trimComments;
|
|
40
62
|
//# sourceMappingURL=trimComments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trimComments.js","sourceRoot":"","sources":["../../src/utils/trimComments.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"trimComments.js","sourceRoot":"","sources":["../../src/utils/trimComments.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,YAAY,GAAG,CAC1B,SAAiB,EACjB,iBAA0B,KAAK,EAC/B,UAAmB,KAAK,EACxB,eAAuB,EAAE,EAC6C,EAAE;IACxE,MAAM,IAAI,GAAG,SAAS,IAAI,EAAE,CAAA;IAC5B,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,KAAK,GAAG,YAAY,CAAA;IACxB,IAAI,SAAS,GAAG,cAAc,CAAA;IAE9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAE7B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjD,SAAS,GAAG,KAAK,CAAA;gBACjB,KAAK,EAAE,CAAA;YACT,CAAC;YAED,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,SAAS,CAAA;YACnB,IAAI,SAAS,KAAK,KAAK;gBAAE,KAAK,GAAG,EAAE,CAAA;YACnC,SAAQ;QACV,CAAC;QAED,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3C,KAAK,GAAG,SAAS,CAAA;YACjB,MAAM,IAAI,SAAS,CAAA;YACnB,SAAQ;QACV,CAAC;QAED,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjD,SAAS,GAAG,IAAI,CAAA;YAChB,KAAK,EAAE,CAAA;YACP,SAAQ;QACV,CAAC;QAED,MAAM,IAAI,SAAS,CAAA;IACrB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;QACrD,cAAc,EAAE,SAAS;QACzB,YAAY,EAAE,KAAK;KACpB,CAAA;AACH,CAAC,CAAA;AAjDY,QAAA,YAAY,gBAiDxB"}
|