@sasjs/lint 4.6.1 → 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 +30 -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/index.d.ts +1 -0
- package/rules/file/index.js +3 -1
- package/rules/file/index.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/noMacroIfInOpenCode.d.ts +11 -0
- package/rules/file/noMacroIfInOpenCode.js +84 -0
- package/rules/file/noMacroIfInOpenCode.js.map +1 -0
- 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/sasjslint-schema.json +17 -0
- package/types/Diagnostic.d.ts +5 -0
- package/types/LintConfig.js +6 -0
- package/types/LintConfig.js.map +1 -1
- 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/getLintConfig.d.ts +1 -0
- package/utils/getLintConfig.js +1 -0
- package/utils/getLintConfig.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
|
@@ -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/sasjslint-schema.json
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"noBannedStrings": true,
|
|
26
26
|
"noEncodedPasswords": true,
|
|
27
27
|
"noGremlins": true,
|
|
28
|
+
"noMacroIfInOpenCode": false,
|
|
28
29
|
"noNestedCommentsInHeader": true,
|
|
29
30
|
"noNestedMacros": true,
|
|
30
31
|
"noSingleAsteriskComments": false,
|
|
@@ -50,6 +51,7 @@
|
|
|
50
51
|
"maxHeaderLineLength": 80,
|
|
51
52
|
"maxDataLineLength": 80,
|
|
52
53
|
"noGremlins": true,
|
|
54
|
+
"noMacroIfInOpenCode": false,
|
|
53
55
|
"allowedGremlins": ["0x0080", "0x3000"],
|
|
54
56
|
"noTabs": true,
|
|
55
57
|
"indentationMultiple": 4,
|
|
@@ -109,6 +111,14 @@
|
|
|
109
111
|
"default": [true],
|
|
110
112
|
"examples": [true, false]
|
|
111
113
|
},
|
|
114
|
+
"noMacroIfInOpenCode": {
|
|
115
|
+
"$id": "#/properties/noMacroIfInOpenCode",
|
|
116
|
+
"type": "boolean",
|
|
117
|
+
"title": "noMacroIfInOpenCode",
|
|
118
|
+
"description": "Reports %if used in open code - that is, outside every %macro definition in the file. Open-code %if-%then-%else is a SAS 9.4M5 feature, so a program that uses one cannot run on an earlier maintenance; at M5 the %then / %else clause has to be a %do / %end block. Off by default, because the rule encodes a release floor - enable it where the floor is earlier than 9.4M5. There is no fix; move the block inside a %macro definition.",
|
|
119
|
+
"default": false,
|
|
120
|
+
"examples": [true, false]
|
|
121
|
+
},
|
|
112
122
|
"bannedStrings": {
|
|
113
123
|
"$id": "#/properties/bannedStrings",
|
|
114
124
|
"type": "array",
|
|
@@ -499,6 +509,13 @@
|
|
|
499
509
|
"enum": ["error", "warn"],
|
|
500
510
|
"default": "warn"
|
|
501
511
|
},
|
|
512
|
+
"noMacroIfInOpenCode": {
|
|
513
|
+
"$id": "#/properties/severityLevel/noMacroIfInOpenCode",
|
|
514
|
+
"title": "noMacroIfInOpenCode",
|
|
515
|
+
"type": "string",
|
|
516
|
+
"enum": ["error", "warn"],
|
|
517
|
+
"default": "warn"
|
|
518
|
+
},
|
|
502
519
|
"hasRequiredMacroOptions": {
|
|
503
520
|
"$id": "#/properties/severityLevel/hasRequiredMacroOptions",
|
|
504
521
|
"title": "hasRequiredMacroOptions",
|
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;
|
package/types/LintConfig.js
CHANGED
|
@@ -145,6 +145,12 @@ class LintConfig {
|
|
|
145
145
|
if ((json === null || json === void 0 ? void 0 : json.noNestedMacros) !== false) {
|
|
146
146
|
this.fileLintRules.push(file_1.noNestedMacros);
|
|
147
147
|
}
|
|
148
|
+
// Off by default: the rule encodes a SAS release floor - open-code %if
|
|
149
|
+
// needs 9.4M5 - so it is enabled by the projects whose floor is earlier
|
|
150
|
+
// and is noise for everyone else.
|
|
151
|
+
if (json === null || json === void 0 ? void 0 : json.noMacroIfInOpenCode) {
|
|
152
|
+
this.fileLintRules.push(file_1.noMacroIfInOpenCode);
|
|
153
|
+
}
|
|
148
154
|
// Absence means the documented default, so a project that omits the key
|
|
149
155
|
// still gets the floor. A value below two switches the rule off, the way a
|
|
150
156
|
// zero `maxLineLength` does - and the value is still kept, so the macro
|
package/types/LintConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LintConfig.js","sourceRoot":"","sources":["../../src/types/LintConfig.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"LintConfig.js","sourceRoot":"","sources":["../../src/types/LintConfig.ts"],"names":[],"mappings":";;;AAAA,wCAesB;AACtB,wCAQsB;AACtB,wCAAuE;AACvE,+CAA2C;AAE3C,oCAIiB;AACjB,8DAA0D;AAC1D,yCAAqC;AAErC;;;;;;GAMG;AACH,MAAa,UAAU;IAqBrB,YAAY,IAAU;QAlBb,eAAU,GAAa,EAAE,CAAA;QACzB,oBAAe,GAAa,EAAE,CAAA;QAC9B,kBAAa,GAAmB,EAAE,CAAA;QAClC,kBAAa,GAAmB,EAAE,CAAA;QAClC,kBAAa,GAAmB,EAAE,CAAA;QAClC,kBAAa,GAAW,EAAE,CAAA;QAC1B,wBAAmB,GAAW,EAAE,CAAA;QAChC,sBAAiB,GAAW,EAAE,CAAA;QAC9B,wBAAmB,GAAW,CAAC,CAAA;QAC/B,uBAAkB,GAAW,CAAC,CAAA;QAC9B,gBAAW,GAAgB,yBAAW,CAAC,EAAE,CAAA;QACzC,kBAAa,GAAW,IAAA,wBAAgB,GAAE,CAAA;QAC1C,kBAAa,GAAgC,EAAE,CAAA;QAC/C,yBAAoB,GAAa,EAAE,CAAA;QACnC,oBAAe,GAAa,EAAE,CAAA;QAC9B,kBAAa,GAAa,EAAE,CAAA;QAC5B,kBAAa,GAAa,EAAE,CAAA;QAGnC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAA;QAExB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBACpC,IAAI,OAAO,IAAI,KAAK,QAAQ;wBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;wBAEtD,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAA;gBACL,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,wEAAwE;QACxE,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,MAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,4BAAoB,CAAC,CAAA;QAClD,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAA;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,MAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAgB,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,wDAAwD;QACxD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,MAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,4BAAoB,CAAC,CAAA;QAClD,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAA;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,MAAK,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAe,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAM,CAAC,CAAA;QAC/B,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAK,KAAK,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,MAAK,KAAK,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;QAC1B,CAAC;QAED,4EAA4E;QAC5E,kDAAkD;QAClD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,MAAK,SAAS,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,IAAG,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAa,CAAC,CAAA;YAEtC,IAAI,CAAC,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;YACzC,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAA;YACrD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;YACjD,CAAC;QACH,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,IAAI,CAAC,WAAW,KAAK,yBAAW,CAAC,GAAG,EAAE,CAAC;YAC9D,IACE,IAAI,CAAC,WAAW,KAAK,yBAAW,CAAC,EAAE;gBACnC,IAAI,CAAC,WAAW,KAAK,yBAAW,CAAC,IAAI,EACrC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,yCAAyC,yBAAW,CAAC,EAAE,OAAO,yBAAW,CAAC,IAAI,EAAE,CACjF,CAAA;YACH,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAW,CAAC,CAAA;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACrC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAA6B,CAAA;QAC/D,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,MAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAgB,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACzC,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,MAAK,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,wBAAwB,MAAK,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,+BAAwB,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,MAAK,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAc,CAAC,CAAA;QACzC,CAAC;QAED,uEAAuE;QACvE,wEAAwE;QACxE,kCAAkC;QAClC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAA;QAC9C,CAAC;QAED,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,wCAAwC;QACxC,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,SAAS,EAAE,CAAC;YAC3C,0EAA0E;YAC1E,uEAAuE;YACvE,iEAAiE;YACjE,yCAAyC;YACzC,IACE,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,CAAA,KAAK,QAAQ;gBAC5C,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAC3B,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAA;YACH,CAAC;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAA;QACnD,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,MAAK,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAAmB,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,qBAAqB,MAAK,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,4BAAqB,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,uBAAuB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,8BAAuB,CAAC,CAAA;YAEhD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,oBAAoB,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAA;gBACH,CAAC;gBAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACtC,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,wBAAwB,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,+BAAwB,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,MAAK,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAc,CAAC,CAAA;QACzC,CAAC;QAED,uEAAuE;QACvE,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAgB,CAAC,CAAA;YAEzC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAA;gBACH,CAAC;gBAED,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACjC,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAA;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,MAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAU,CAAC,CAAA;YAEnC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,EAAE,CAAC;gBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;wBACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC3D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;4BAE/B,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAA;oBACL,CAAC,CAAC,CAAA;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,IAAI,QAAQ,KAAK,MAAM;oBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,mBAAQ,CAAC,OAAO,CAAA;gBACpE,IAAI,QAAQ,KAAK,OAAO;oBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,mBAAQ,CAAC,KAAK,CAAA;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAS;QAChB,MAAM,MAAM,qBAAQ,IAAI,CAAC,MAAM,CAAE,CAAA;QAEjC,wEAAwE;QACxE,0EAA0E;QAC1E,4EAA4E;QAC5E,iEAAiE;QACjE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;QAChD,CAAC;QAED,OAAO,IAAI,UAAU,CAAC,IAAA,iCAAe,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IACtD,CAAC;CACF;AAzTD,gCAyTC"}
|
|
@@ -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/getLintConfig.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export declare const DefaultLintConfiguration: {
|
|
|
30
30
|
noBannedStrings: boolean;
|
|
31
31
|
noEncodedPasswords: boolean;
|
|
32
32
|
noGremlins: boolean;
|
|
33
|
+
noMacroIfInOpenCode: boolean;
|
|
33
34
|
noNestedCommentsInHeader: boolean;
|
|
34
35
|
noNestedMacros: boolean;
|
|
35
36
|
noSingleAsteriskComments: boolean;
|
package/utils/getLintConfig.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLintConfig.js","sourceRoot":"","sources":["../../src/utils/getLintConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"getLintConfig.js","sourceRoot":"","sources":["../../src/utils/getLintConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA6DA,sCASC;AAtED,gDAAuB;AACvB,4CAAmB;AACnB,oDAAgD;AAChD,4CAA4C;AAC5C,qDAAiD;AACjD,sDAAkD;AAClD,iEAA6D;AAC7D,iEAA6D;AAEtD,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,wIAAwI,CAAA;AAD7H,QAAA,gBAAgB,oBAC6G;AAE1I;;;;;;;GAOG;AACU,QAAA,wBAAwB,GAAG;IACtC,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,CAAC,GAAG,2CAAoB,CAAC;IACxC,aAAa,EAAE,IAAA,wBAAgB,GAAE;IACjC,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,IAAI;IACzB,uBAAuB,EAAE,KAAK;IAC9B,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,CAAC,GAAG,2CAAoB,CAAC;IACxC,mBAAmB,EAAE,CAAC;IACtB,WAAW,EAAE,yBAAW,CAAC,GAAG;IAC5B,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,EAAE;IACvB,aAAa,EAAE,EAAE;IACjB,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,IAAI;IACxB,UAAU,EAAE,IAAI;IAChB,mBAAmB,EAAE,KAAK;IAC1B,wBAAwB,EAAE,IAAI;IAC9B,cAAc,EAAE,IAAI;IACpB,wBAAwB,EAAE,KAAK;IAC/B,mBAAmB,EAAE,IAAI;IACzB,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,IAAI;IACpB,oBAAoB,EAAE,EAAE;IACxB,aAAa,EAAE,EAAE;IACjB,qBAAqB,EAAE,IAAI;CAC5B,CAAA;AAED;;;;GAIG;AACH,SAAsB,aAAa;;QACjC,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAc,GAAE,CAAA;QAC1C,MAAM,gBAAgB,GAAG,WAAW,IAAI,YAAE,CAAC,OAAO,EAAE,CAAA;QACpD,MAAM,aAAa,GAAG,MAAM,IAAA,eAAQ,EAClC,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAC1C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,IAAI,CAAC,SAAS,CAAC,gCAAwB,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,uBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;IAClD,CAAC;CAAA"}
|
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"}
|