@sasjs/lint 4.3.0 → 4.3.2

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.
@@ -1,20 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeMacrosFromHeader = exports.addMacrosToHeader = exports.getHeaderMacros = void 0;
3
+ exports.removeMacrosFromHeader = exports.repairHeaderList = exports.addMacrosToHeader = exports.getHeaderMacros = void 0;
4
4
  const types_1 = require("../types");
5
5
  const LineEndings_1 = require("../types/LineEndings");
6
6
  const getHeaderLinesCount_1 = require("./getHeaderLinesCount");
7
7
  const splitText_1 = require("./splitText");
8
8
  const sasMacrosHeader = /<h4>\s*SAS Macros\s*<\/h4>/i;
9
- const otherMacrosHeader = /<h4>\s*Other Macros\s*<\/h4>/i;
10
9
  const anyHeader = /<h4>/i;
11
10
  const headerTag = '</h4>';
12
- const listItem = /^(\s*@li\s+)(.+?)(\s*)$/;
11
+ const listItem = /^(\s*@\s*)(\w+)(\s+)(\S+)(.*)$/;
12
+ const lineTag = /^\s*@\s*(\w+)(?:\s|$)/;
13
13
  /**
14
- * Reads an `@li` entry, returning the macro name and the column at which it
15
- * starts. The column is derived from the entry text rather than from a search
16
- * for the name, so an entry such as `@li li.sas` reports the `li` after the
17
- * tag, not the `li` inside it.
14
+ * The tags read as an entry: `li` itself, and the single-character slips that
15
+ * turn it into `il`, `l1` or `1i`. A line opening with any other tag is not an
16
+ * entry, and it is never converted into a macro declaration.
17
+ */
18
+ const entryTags = new Set(['li', 'il', 'l1', '1i']);
19
+ /** The tag a line opens with, lowercased, or `null` for a line with none. */
20
+ const getLineTag = (line) => {
21
+ const match = lineTag.exec(line);
22
+ return match ? match[1].toLowerCase() : null;
23
+ };
24
+ /**
25
+ * Reads an entry, returning the macro name, the file token after the tag, and
26
+ * the column at which the name starts. The column is derived from the entry
27
+ * text rather than from a search for the name, so an entry such as `@li li.sas`
28
+ * reports the `li` after the tag, not the `li` inside it.
29
+ *
30
+ * The entry is the tag and one file token, and nothing after the token: the
31
+ * section is maintained by the formatter, and reading prose as a declaration is
32
+ * how a sentence on an `@li` line ends up rewritten or removed as an unused
33
+ * entry.
34
+ *
35
+ * A tag one slip away from `li` is read the same way, so `@il mf_a.sas` - the
36
+ * commonest way to mistype the tag - is a declaration rather than the end of
37
+ * the list. The formatter writes such an entry back with `@li`, so the typo is
38
+ * repaired instead of being reported forever or silently truncating the list.
18
39
  *
19
40
  * @param {string} text - the line, or the tail of a line, to read.
20
41
  * @param {number} offset - the 0-based column at which `text` starts in the
@@ -24,30 +45,46 @@ const parseListItem = (text, offset = 0) => {
24
45
  const match = listItem.exec(text);
25
46
  if (!match)
26
47
  return null;
27
- const entry = match[2];
28
- const firstToken = entry.trim().split(/\s+/)[0] || '';
29
- const normalised = firstToken.replace(/\\/g, '/');
48
+ const [, prefix, tag, gap, payload, tail] = match;
49
+ if (!entryTags.has(tag.toLowerCase()))
50
+ return null;
51
+ if (tail.trim() !== '')
52
+ return null;
53
+ const normalised = payload.replace(/\\/g, '/');
30
54
  const fileName = normalised.split('/').pop() || '';
31
55
  const name = fileName.replace(/\.sas$/i, '');
32
56
  if (!name)
33
57
  return null;
34
- const tokenOffset = entry.indexOf(firstToken);
35
58
  const fileOffset = normalised.lastIndexOf('/') + 1;
36
- const column = offset + match[1].length + tokenOffset + fileOffset + 1;
37
- return { name, column };
59
+ const column = offset + prefix.length + tag.length + gap.length + fileOffset + 1;
60
+ return { name, payload, column };
38
61
  };
39
62
  /**
40
63
  * Reads the `@li` entries of a section that starts at `sectionIndex`.
41
64
  *
42
- * A blank line ends the list unless the next non-blank line is another entry,
43
- * so a list broken up by a stray blank line is still read in full - the
44
- * formatter rewrites exactly the lines it read, and an entry it did not read
45
- * would be left behind and duplicated.
65
+ * A blank line ends the list unless the next non-blank line opens with an
66
+ * entry tag, so a list broken up by a stray blank line is still read in full -
67
+ * the formatter rewrites exactly the lines it read, and an entry it did not
68
+ * read would be left behind and duplicated.
69
+ *
70
+ * A line that opens with an entry tag but cannot be read as one - `@li` with no
71
+ * file, or a file followed by other words - does not end the list: the scan
72
+ * records it and keeps reading, so one unreadable line cannot hide the
73
+ * declarations below it. The section then cannot be rewritten safely, because
74
+ * the rewrite would replace the span that line sits in.
46
75
  *
47
- * @returns the entries, and the index of the first line after the last one.
76
+ * Any other line ends the list, including one that opens with an unrelated tag
77
+ * (`@example`, `@param`). The entries above it are still readable and still
78
+ * rewritable, so the formatter keeps maintaining the list it understands and
79
+ * leaves the rest of the header alone.
80
+ *
81
+ * @param {number} limit - the last line index the header can occupy.
82
+ * @returns the entries, the index of the first line after the last one, and
83
+ * the indices of the entry-tagged lines the scan could not read.
48
84
  */
49
85
  const readSectionList = (lines, sectionIndex, limit) => {
50
86
  const entries = [];
87
+ const malformed = [];
51
88
  let end = sectionIndex + 1;
52
89
  let index = sectionIndex + 1;
53
90
  while (index < limit && index < lines.length) {
@@ -57,29 +94,36 @@ const readSectionList = (lines, sectionIndex, limit) => {
57
94
  while (next < limit && next < lines.length && lines[next].trim() === '') {
58
95
  next++;
59
96
  }
60
- if (next < limit && next < lines.length && listItem.test(lines[next])) {
97
+ const tag = next < limit && next < lines.length ? getLineTag(lines[next]) : null;
98
+ if (tag && entryTags.has(tag)) {
61
99
  index = next;
62
100
  continue;
63
101
  }
64
102
  break;
65
103
  }
66
104
  const parsed = parseListItem(line);
67
- if (!parsed)
68
- break;
105
+ if (!parsed) {
106
+ const tag = getLineTag(line);
107
+ if (!tag || !entryTags.has(tag))
108
+ break;
109
+ malformed.push(index);
110
+ index++;
111
+ continue;
112
+ }
69
113
  entries.push({
70
114
  name: parsed.name,
71
- line,
115
+ payload: parsed.payload,
72
116
  lineNumber: index + 1,
73
117
  column: parsed.column
74
118
  });
75
119
  index++;
76
120
  end = index;
77
121
  }
78
- return { entries, end };
122
+ return { entries, end, malformed };
79
123
  };
80
124
  /**
81
- * Reads the macros declared in the header of a file - both the
82
- * `<h4> SAS Macros </h4>` and the `<h4> Other Macros </h4>` sections.
125
+ * Reads the macros declared in the `<h4> SAS Macros </h4>` section of a file
126
+ * header - the compile dependencies, and the only list `sasjs compile` reads.
83
127
  * @param {string} text - the text content of the file.
84
128
  * @param {LintConfig} config - the lint configuration, used for line endings.
85
129
  * @returns {HeaderMacro[]} the declared macros, in the order they appear.
@@ -95,12 +139,7 @@ const getHeaderMacros = (text, config) => {
95
139
  const macros = [];
96
140
  for (let index = 0; index < headerLinesCount && index < lines.length; index++) {
97
141
  const line = lines[index];
98
- const section = sasMacrosHeader.test(line)
99
- ? 'sasMacros'
100
- : otherMacrosHeader.test(line)
101
- ? 'otherMacros'
102
- : null;
103
- if (!section)
142
+ if (!sasMacrosHeader.test(line))
104
143
  continue;
105
144
  // An entry can share the line with the section tag.
106
145
  const tagEnd = line.indexOf(headerTag) + headerTag.length;
@@ -110,8 +149,7 @@ const getHeaderMacros = (text, config) => {
110
149
  name: trailing.name,
111
150
  lineNumber: index + 1,
112
151
  startColumnNumber: trailing.column,
113
- endColumnNumber: trailing.column + trailing.name.length,
114
- section
152
+ endColumnNumber: trailing.column + trailing.name.length
115
153
  });
116
154
  }
117
155
  readSectionList(lines, index, headerLinesCount).entries.forEach((entry) => {
@@ -119,8 +157,7 @@ const getHeaderMacros = (text, config) => {
119
157
  name: entry.name,
120
158
  lineNumber: entry.lineNumber,
121
159
  startColumnNumber: entry.column,
122
- endColumnNumber: entry.column + entry.name.length,
123
- section
160
+ endColumnNumber: entry.column + entry.name.length
124
161
  });
125
162
  });
126
163
  }
@@ -159,8 +196,9 @@ const withSectionSpacing = (lines, sectionIndex, listEnd) => {
159
196
  *
160
197
  * Returns `null` when the section is absent, and `null` when it cannot be
161
198
  * rewritten without disturbing the surrounding text: when the section shares a
162
- * line with the header's closing `**`, or when an `@li` entry shares the line
163
- * with the section tag. In those cases the caller leaves the file alone, so a
199
+ * line with the header's closing `**`, when an `@li` entry shares the line
200
+ * with the section tag, or when the list carries a line the reader could not
201
+ * turn into an entry. In those cases the caller leaves the file alone, so a
164
202
  * warning that cannot be resolved is preferable to a corrupted header.
165
203
  */
166
204
  const findSasMacrosSection = (lines, headerLinesCount) => {
@@ -178,9 +216,20 @@ const findSasMacrosSection = (lines, headerLinesCount) => {
178
216
  const tagEnd = lines[sectionIndex].indexOf(headerTag) + headerTag.length;
179
217
  if (parseListItem(lines[sectionIndex].slice(tagEnd)))
180
218
  return null;
181
- const { entries, end } = readSectionList(lines, sectionIndex, headerLinesCount);
219
+ const { entries, end, malformed } = readSectionList(lines, sectionIndex, headerLinesCount);
220
+ // An unreadable line sits inside the span the rewrite replaces, so rewriting
221
+ // would delete it. Leave the section to its author instead.
222
+ if (malformed.length)
223
+ return null;
182
224
  return { sectionIndex, entries, end };
183
225
  };
226
+ /**
227
+ * Writes an entry back to a header line. The tag is always `@li`, the payload
228
+ * is the single file token the reader accepted, and the indentation is the
229
+ * section's - so a mistyped tag (`@il`) and entries indented to a different
230
+ * width are repaired by the same pass that rewrites the list.
231
+ */
232
+ const formatEntry = (entry, indent) => `${indent}@li ${entry.payload}`;
184
233
  /**
185
234
  * Adds macro names to the `<h4> SAS Macros </h4>` section of a file header,
186
235
  * merging them with the entries that are already listed, de-duplicating by
@@ -231,17 +280,17 @@ const addMacrosToHeader = (text, config, macros) => {
231
280
  entries.forEach((entry) => {
232
281
  const key = entry.name.toLowerCase();
233
282
  if (!byName.has(key))
234
- byName.set(key, { name: entry.name, line: entry.line });
283
+ byName.set(key, { name: entry.name, payload: entry.payload });
235
284
  });
236
285
  macros.forEach((macro) => {
237
286
  const key = macro.toLowerCase();
238
287
  if (byName.has(key))
239
288
  return;
240
- byName.set(key, { name: macro, line: `${indent}@li ${macro}.sas` });
289
+ byName.set(key, { name: macro, payload: `${macro}.sas` });
241
290
  });
242
291
  const sortedLines = [...byName.values()]
243
292
  .sort((a, b) => compareMacroNames(a.name, b.name))
244
- .map((entry) => entry.line);
293
+ .map((entry) => `${indent}@li ${entry.payload}`);
245
294
  const result = [
246
295
  ...lines.slice(0, sectionIndex + 1),
247
296
  ...sortedLines,
@@ -250,6 +299,47 @@ const addMacrosToHeader = (text, config, macros) => {
250
299
  return withSectionSpacing(result, sectionIndex, sectionIndex + 1 + sortedLines.length).join(lineEnding);
251
300
  };
252
301
  exports.addMacrosToHeader = addMacrosToHeader;
302
+ /**
303
+ * Writes the entries of the `<h4> SAS Macros </h4>` section back in their
304
+ * canonical shape, in place: `@li <file>` at the section's indentation.
305
+ *
306
+ * A mistyped tag (`@il`) and an entry indented to a different width are both
307
+ * read as declarations, so no diagnostic points at them and no other pass
308
+ * would touch them - this is the pass that repairs them. It edits only the
309
+ * lines whose text differs, so it never adds or removes a line, never re-spaces
310
+ * the section, and returns the text unchanged when there is nothing to repair
311
+ * or when the section cannot be rewritten safely.
312
+ *
313
+ * @param {string} text - the text content of the file.
314
+ * @param {LintConfig} config - the lint configuration, used for line endings.
315
+ * @returns {string} the updated text content.
316
+ */
317
+ const repairHeaderList = (text, config) => {
318
+ if (!text)
319
+ return text;
320
+ const headerLinesCount = (0, getHeaderLinesCount_1.getHeaderLinesCount)(text, config);
321
+ if (!headerLinesCount)
322
+ return text;
323
+ const lines = (0, splitText_1.splitText)(text, config);
324
+ const section = findSasMacrosSection(lines, headerLinesCount);
325
+ if (!section)
326
+ return text;
327
+ const { sectionIndex, entries } = section;
328
+ const indent = lines[sectionIndex].match(/^\s*/)[0];
329
+ const lineEnding = config.lineEndings === LineEndings_1.LineEndings.CRLF ? '\r\n' : '\n';
330
+ const repaired = [...lines];
331
+ let changed = false;
332
+ entries.forEach((entry) => {
333
+ const index = entry.lineNumber - 1;
334
+ const formatted = formatEntry(entry, indent);
335
+ if (lines[index] === formatted)
336
+ return;
337
+ repaired[index] = formatted;
338
+ changed = true;
339
+ });
340
+ return changed ? repaired.join(lineEnding) : text;
341
+ };
342
+ exports.repairHeaderList = repairHeaderList;
253
343
  /**
254
344
  * Removes macro names from the `<h4> SAS Macros </h4>` section of a file
255
345
  * header. The section header itself is kept, so an empty list remains a valid
@@ -258,7 +348,8 @@ exports.addMacrosToHeader = addMacrosToHeader;
258
348
  *
259
349
  * The file is returned unchanged when it has no Doxygen header, when the header
260
350
  * has no `SAS Macros` section, when the section cannot be rewritten safely, or
261
- * when none of the named macros are listed.
351
+ * when none of the named macros are listed. Normalising the entries is the job
352
+ * of `repairHeaderList`.
262
353
  *
263
354
  * @param {string} text - the text content of the file.
264
355
  * @param {LintConfig} config - the lint configuration, used for line endings.
@@ -277,6 +368,7 @@ const removeMacrosFromHeader = (text, config, macros) => {
277
368
  if (!section)
278
369
  return text;
279
370
  const { sectionIndex, entries, end } = section;
371
+ const indent = lines[sectionIndex].match(/^\s*/)[0];
280
372
  const remove = new Set(macros.map((macro) => macro.toLowerCase()));
281
373
  const kept = [];
282
374
  const seen = new Set();
@@ -293,7 +385,7 @@ const removeMacrosFromHeader = (text, config, macros) => {
293
385
  return;
294
386
  }
295
387
  seen.add(key);
296
- kept.push(entry.line);
388
+ kept.push(formatEntry(entry, indent));
297
389
  });
298
390
  if (!changed)
299
391
  return text;
@@ -1 +1 @@
1
- {"version":3,"file":"headerMacros.js","sourceRoot":"","sources":["../../src/utils/headerMacros.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headerMacros.js","sourceRoot":"","sources":["../../src/utils/headerMacros.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,24 @@ const isIgnored = (fPath, configuration) => __awaiter(void 0, void 0, void 0, fu
27
27
  const config = configuration || (yield (0, _1.getLintConfig)());
28
28
  const projectRoot = yield (0, _1.getProjectRoot)();
29
29
  const gitIgnoreFilePath = path_1.default.join(projectRoot, '.gitignore');
30
- const rootPath = projectRoot + path_1.default.sep;
31
- const relativePath = fPath.replace(rootPath, '');
32
- if (fPath === projectRoot)
30
+ // path.relative rather than stripping `projectRoot + sep` from the string: a
31
+ // separator or a normalisation the caller did not apply leaves the strip with
32
+ // nothing to remove, and the `ignore` package then receives an absolute path
33
+ // and rejects it with a RangeError. path.relative is lexical - a symlinked root
34
+ // still yields a `..`-prefixed path, which the guard below catches.
35
+ const relativePath = path_1.default.relative(projectRoot, fPath);
36
+ if (relativePath === '')
37
+ return false;
38
+ // On Windows, `path.relative` returns an absolute path when the two paths sit
39
+ // on different drives, which the two guards below cannot see; passing that on
40
+ // reaches `ignore` and throws the RangeError this function exists to avoid.
41
+ if (path_1.default.isAbsolute(relativePath))
42
+ return false;
43
+ // Nothing in a project's .gitignore can match a path outside it, and the
44
+ // `ignore` package rejects a path that escapes the root ("path should be a
45
+ // path.relative()d string"), so a caller passing one gets `false` rather than
46
+ // a RangeError.
47
+ if (relativePath === '..' || relativePath.startsWith(`..${path_1.default.sep}`))
33
48
  return false;
34
49
  let gitIgnoreFileContent = '';
35
50
  if (yield (0, file_1.fileExists)(gitIgnoreFilePath))
@@ -1 +1 @@
1
- {"version":3,"file":"isIgnored.js","sourceRoot":"","sources":["../../src/utils/isIgnored.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAwD;AACxD,gDAAuB;AACvB,oDAA2B;AAC3B,wBAAiD;AAGjD;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CACvB,KAAa,EACb,aAA0B,EACR,EAAE;IACpB,MAAM,MAAM,GAAG,aAAa,IAAI,CAAC,MAAM,IAAA,gBAAa,GAAE,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,MAAM,IAAA,iBAAc,GAAE,CAAA;IAC1C,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAC9D,MAAM,QAAQ,GAAG,WAAW,GAAG,cAAI,CAAC,GAAG,CAAA;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAEhD,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IAEvC,IAAI,oBAAoB,GAAG,EAAE,CAAA;IAE7B,IAAI,MAAM,IAAA,iBAAU,EAAC,iBAAiB,CAAC;QACrC,oBAAoB,GAAG,MAAM,IAAA,eAAQ,EAAC,iBAAiB,CAAC,CAAA;IAE1D,OAAO,IAAA,gBAAM,GAAE;SACZ,GAAG,CAAC,oBAAoB,CAAC;SACzB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;SACtB,OAAO,CAAC,YAAY,CAAC,CAAA;AAC1B,CAAC,CAAA,CAAA;AArBY,QAAA,SAAS,aAqBrB"}
1
+ {"version":3,"file":"isIgnored.js","sourceRoot":"","sources":["../../src/utils/isIgnored.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAwD;AACxD,gDAAuB;AACvB,oDAA2B;AAC3B,wBAAiD;AAGjD;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CACvB,KAAa,EACb,aAA0B,EACR,EAAE;IACpB,MAAM,MAAM,GAAG,aAAa,IAAI,CAAC,MAAM,IAAA,gBAAa,GAAE,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,MAAM,IAAA,iBAAc,GAAE,CAAA;IAC1C,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAE9D,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,gFAAgF;IAChF,oEAAoE;IACpE,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAEtD,IAAI,YAAY,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAErC,8EAA8E;IAC9E,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAI,cAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAA;IAE/C,yEAAyE;IACzE,2EAA2E;IAC3E,8EAA8E;IAC9E,gBAAgB;IAChB,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,cAAI,CAAC,GAAG,EAAE,CAAC;QACnE,OAAO,KAAK,CAAA;IAEd,IAAI,oBAAoB,GAAG,EAAE,CAAA;IAE7B,IAAI,MAAM,IAAA,iBAAU,EAAC,iBAAiB,CAAC;QACrC,oBAAoB,GAAG,MAAM,IAAA,eAAQ,EAAC,iBAAiB,CAAC,CAAA;IAE1D,OAAO,IAAA,gBAAM,GAAE;SACZ,GAAG,CAAC,oBAAoB,CAAC;SACzB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;SACtB,OAAO,CAAC,YAAY,CAAC,CAAA;AAC1B,CAAC,CAAA,CAAA;AAtCY,QAAA,SAAS,aAsCrB"}
@@ -8,14 +8,32 @@ export interface MacroCall {
8
8
  startColumnNumber: number;
9
9
  endColumnNumber: number;
10
10
  }
11
+ /**
12
+ * Options for the scan.
13
+ */
14
+ export interface MacroCallScanOptions {
15
+ /**
16
+ * Reports the invocations written inside the argument of a masking function
17
+ * (`%str` / `%nrstr`).
18
+ *
19
+ * The argument is text while the masking function runs, but the caller
20
+ * normally unquotes it later: `%mp_assert(iftrue=%str(%mf_existds(work.x)=1))`
21
+ * resolves `%mf_existds` when `%mp_assert` evaluates the condition. A caller
22
+ * that asks which macros a file uses - the `noUnusedMacros` side - sets this.
23
+ * A caller that asks which macros a file invokes in open code leaves it off,
24
+ * so text a file masks only in order to print it is not reported.
25
+ */
26
+ includeMasked?: boolean;
27
+ }
11
28
  /**
12
29
  * Finds the macro invocations in a file.
13
30
  *
14
31
  * SAS resolves macro triggers inside double-quoted strings but not inside
15
32
  * single-quoted strings, so a double-quoted string is scanned as code while a
16
33
  * single-quoted string is opaque. Invocations inside block comments, macro
17
- * comments, comment statements, masking functions (`%str` / `%nrstr`), data
18
- * sections and embedded-language `submit` blocks are excluded.
34
+ * comments, comment statements, data sections and embedded-language `submit`
35
+ * blocks are excluded. The argument of a masking function (`%str` / `%nrstr`)
36
+ * is excluded unless the caller asks for it with `includeMasked`.
19
37
  *
20
38
  * Every `%name` token is reported, including the macro language keywords and
21
39
  * the macros that ship with SAS. Callers decide which names are interesting.
@@ -23,6 +41,9 @@ export interface MacroCall {
23
41
  * @param {string} text - the text content to scan.
24
42
  * @param {LintConfig} config - the lint configuration. It is accepted for
25
43
  * symmetry with the other utilities and is not used by the scan.
44
+ * @param {MacroCallScanOptions} options - how much of the masked text to scan.
45
+ * The default skips the argument of a masking function; `includeMasked` scans
46
+ * it for invocations.
26
47
  * @returns {MacroCall[]} the invocations, in the order they appear.
27
48
  */
28
- export declare const parseMacroCalls: (text: string, config?: LintConfig) => MacroCall[];
49
+ export declare const parseMacroCalls: (text: string, config?: LintConfig, options?: MacroCallScanOptions) => MacroCall[];
@@ -12,14 +12,49 @@ const embeddedLanguageProc = /^proc\s+(lua|groovy)\b/i;
12
12
  /** Matches the statement that closes an embedded-language block. */
13
13
  const embeddedLanguageEnd = /^endsubmit\s*;/i;
14
14
  const embeddedLanguageEndSearch = /endsubmit/i;
15
+ /**
16
+ * Finds the `%name` tokens inside the argument of a masking function.
17
+ *
18
+ * The argument is masked text rather than code, so a quote or a comment marker
19
+ * in it opens nothing. The scan therefore recognises only the escapes
20
+ * `%(` / `%)` and a `%name` token, and it does not report a `%name:` label.
21
+ *
22
+ * @param {string} text - the whole file.
23
+ * @param {number} from - the offset at which the argument starts.
24
+ * @param {number} to - the offset at which it ends.
25
+ * @returns {{ name: string; offset: number }[]} the tokens, in order.
26
+ */
27
+ const findMaskedCalls = (text, from, to) => {
28
+ const tokens = [];
29
+ let index = from;
30
+ while (index < to) {
31
+ if (text[index] === '%') {
32
+ if (text[index + 1] === '(' || text[index + 1] === ')') {
33
+ index += 2;
34
+ continue;
35
+ }
36
+ const macroName = macroNameStart.exec(text.slice(index, to));
37
+ if (macroName) {
38
+ if (text[index + macroName[0].length] !== ':') {
39
+ tokens.push({ name: macroName[1], offset: index });
40
+ }
41
+ index += macroName[0].length;
42
+ continue;
43
+ }
44
+ }
45
+ index++;
46
+ }
47
+ return tokens;
48
+ };
15
49
  /**
16
50
  * Finds the macro invocations in a file.
17
51
  *
18
52
  * SAS resolves macro triggers inside double-quoted strings but not inside
19
53
  * single-quoted strings, so a double-quoted string is scanned as code while a
20
54
  * single-quoted string is opaque. Invocations inside block comments, macro
21
- * comments, comment statements, masking functions (`%str` / `%nrstr`), data
22
- * sections and embedded-language `submit` blocks are excluded.
55
+ * comments, comment statements, data sections and embedded-language `submit`
56
+ * blocks are excluded. The argument of a masking function (`%str` / `%nrstr`)
57
+ * is excluded unless the caller asks for it with `includeMasked`.
23
58
  *
24
59
  * Every `%name` token is reported, including the macro language keywords and
25
60
  * the macros that ship with SAS. Callers decide which names are interesting.
@@ -27,9 +62,12 @@ const embeddedLanguageEndSearch = /endsubmit/i;
27
62
  * @param {string} text - the text content to scan.
28
63
  * @param {LintConfig} config - the lint configuration. It is accepted for
29
64
  * symmetry with the other utilities and is not used by the scan.
65
+ * @param {MacroCallScanOptions} options - how much of the masked text to scan.
66
+ * The default skips the argument of a masking function; `includeMasked` scans
67
+ * it for invocations.
30
68
  * @returns {MacroCall[]} the invocations, in the order they appear.
31
69
  */
32
- const parseMacroCalls = (text, config) => {
70
+ const parseMacroCalls = (text, config, options) => {
33
71
  const calls = [];
34
72
  if (!text)
35
73
  return calls;
@@ -131,9 +169,13 @@ const parseMacroCalls = (text, config) => {
131
169
  }
132
170
  // Masking functions - the argument is data, not code. `%(` and `%)` are
133
171
  // the escapes for literal parentheses inside the argument, so they do
134
- // not affect the nesting depth.
172
+ // not affect the nesting depth. When the caller asks for masked text,
173
+ // the function name is skipped and the argument is scanned in place, so
174
+ // an invocation the file defers is still reported at its own position.
135
175
  const maskingFunction = maskingFunctionStart.exec(text.slice(index));
136
176
  if (maskingFunction) {
177
+ // The extent of the argument comes from the parenthesis depth, with
178
+ // `%(` and `%)` treated as escapes rather than as delimiters.
137
179
  let depth = 0;
138
180
  let end = index + maskingFunction[0].length - 1;
139
181
  while (end < length) {
@@ -153,6 +195,24 @@ const parseMacroCalls = (text, config) => {
153
195
  }
154
196
  end++;
155
197
  }
198
+ if (options === null || options === void 0 ? void 0 : options.includeMasked) {
199
+ // The argument is scanned for `%name` tokens only, never as code: a
200
+ // quote or a comment marker in it is data to SAS, and letting one
201
+ // open a string or a comment here would swallow the invocations that
202
+ // follow - which under-counts uses, the direction that makes the
203
+ // formatter delete a declaration the file needs.
204
+ const argumentStart = index + maskingFunction[0].length;
205
+ advanceTo(argumentStart);
206
+ findMaskedCalls(text, argumentStart, end).forEach((token) => {
207
+ advanceTo(token.offset);
208
+ calls.push({
209
+ name: token.name,
210
+ lineNumber,
211
+ startColumnNumber: columnNumber,
212
+ endColumnNumber: columnNumber + 1 + token.name.length
213
+ });
214
+ });
215
+ }
156
216
  advanceTo(end);
157
217
  atStatementStart = false;
158
218
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"parseMacroCalls.js","sourceRoot":"","sources":["../../src/utils/parseMacroCalls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseMacroCalls.js","sourceRoot":"","sources":["../../src/utils/parseMacroCalls.ts"],"names":[],"mappings":"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"}