MCPcopy Create free account
hub / github.com/nodejs/node / extractPragmas

Function extractPragmas

test/fixtures/snapshot/typescript.js:38993–39043  ·  view source on GitHub ↗
(pragmas, range, text)

Source from the content-addressed store, hash-verified

38991 var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im;
38992 var singleLinePragmaRegEx = /^\/\/\/?\s*@(\S+)\s*(.*)\s*$/im;
38993 function extractPragmas(pragmas, range, text) {
38994 var tripleSlash = range.kind === 2 /* SyntaxKind.SingleLineCommentTrivia */ && tripleSlashXMLCommentStartRegEx.exec(text);
38995 if (tripleSlash) {
38996 var name = tripleSlash[1].toLowerCase(); // Technically unsafe cast, but we do it so the below check to make it safe typechecks
38997 var pragma = ts.commentPragmas[name];
38998 if (!pragma || !(pragma.kind & 1 /* PragmaKindFlags.TripleSlashXML */)) {
38999 return;
39000 }
39001 if (pragma.args) {
39002 var argument = {};
39003 for (var _i = 0, _a = pragma.args; _i < _a.length; _i++) {
39004 var arg = _a[_i];
39005 var matcher = getNamedArgRegEx(arg.name);
39006 var matchResult = matcher.exec(text);
39007 if (!matchResult && !arg.optional) {
39008 return; // Missing required argument, don't parse
39009 }
39010 else if (matchResult) {
39011 var value = matchResult[2] || matchResult[3];
39012 if (arg.captureSpan) {
39013 var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
39014 argument[arg.name] = {
39015 value: value,
39016 pos: startPos,
39017 end: startPos + value.length
39018 };
39019 }
39020 else {
39021 argument[arg.name] = value;
39022 }
39023 }
39024 }
39025 pragmas.push({ name: name, args: { arguments: argument, range: range } });
39026 }
39027 else {
39028 pragmas.push({ name: name, args: { arguments: {}, range: range } });
39029 }
39030 return;
39031 }
39032 var singleLine = range.kind === 2 /* SyntaxKind.SingleLineCommentTrivia */ && singleLinePragmaRegEx.exec(text);
39033 if (singleLine) {
39034 return addPragmaForMatch(pragmas, range, 2 /* PragmaKindFlags.SingleLine */, singleLine);
39035 }
39036 if (range.kind === 3 /* SyntaxKind.MultiLineCommentTrivia */) {
39037 var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
39038 var multiLineMatch = void 0;
39039 while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
39040 addPragmaForMatch(pragmas, range, 4 /* PragmaKindFlags.MultiLine */, multiLineMatch);
39041 }
39042 }
39043 }
39044 function addPragmaForMatch(pragmas, range, kind, match) {
39045 if (!match)
39046 return;

Callers 1

processCommentPragmasFunction · 0.85

Calls 4

getNamedArgRegExFunction · 0.85
addPragmaForMatchFunction · 0.85
execMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected