(pragmas, range, text)
| 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; |
no test coverage detected