You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
10 months ago
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.getSvelteIgnoreItems = void 0;
|
||
|
const compat_1 = require("../../utils/compat");
|
||
|
const SVELTE_IGNORE_PATTERN = /^\s*svelte-ignore/m;
|
||
|
function getSvelteIgnoreItems(context) {
|
||
|
const sourceCode = (0, compat_1.getSourceCode)(context);
|
||
|
const ignoreComments = [];
|
||
|
for (const comment of sourceCode.getAllComments()) {
|
||
|
const ignores = extractSvelteIgnore(comment.value, comment.range[0] + 2, comment);
|
||
|
if (ignores) {
|
||
|
ignoreComments.push(...ignores);
|
||
|
}
|
||
|
else if (hasMissingCodeIgnore(comment.value)) {
|
||
|
ignoreComments.push({
|
||
|
range: comment.range,
|
||
|
code: null,
|
||
|
token: comment
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
for (const token of sourceCode.ast.tokens) {
|
||
|
if (token.type === 'HTMLComment') {
|
||
|
const text = token.value.slice(4, -3);
|
||
|
const ignores = extractSvelteIgnore(text, token.range[0] + 4, token);
|
||
|
if (ignores) {
|
||
|
ignoreComments.push(...ignores);
|
||
|
}
|
||
|
else if (hasMissingCodeIgnore(text)) {
|
||
|
ignoreComments.push({
|
||
|
range: token.range,
|
||
|
code: null,
|
||
|
token
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
ignoreComments.sort((a, b) => b.range[0] - a.range[0]);
|
||
|
return ignoreComments;
|
||
|
}
|
||
|
exports.getSvelteIgnoreItems = getSvelteIgnoreItems;
|
||
|
function extractSvelteIgnore(text, startIndex, token) {
|
||
|
const m1 = SVELTE_IGNORE_PATTERN.exec(text);
|
||
|
if (!m1) {
|
||
|
return null;
|
||
|
}
|
||
|
const ignoreStart = m1.index + m1[0].length;
|
||
|
const beforeText = text.slice(ignoreStart);
|
||
|
if (!/^\s/.test(beforeText) || !beforeText.trim()) {
|
||
|
return null;
|
||
|
}
|
||
|
let start = startIndex + ignoreStart;
|
||
|
const results = [];
|
||
|
for (const code of beforeText.split(/\s/)) {
|
||
|
const end = start + code.length;
|
||
|
const trimmed = code.trim();
|
||
|
if (trimmed) {
|
||
|
results.push({
|
||
|
code: trimmed,
|
||
|
range: [start, end],
|
||
|
token
|
||
|
});
|
||
|
}
|
||
|
start = end + 1;
|
||
|
}
|
||
|
return results;
|
||
|
}
|
||
|
function hasMissingCodeIgnore(text) {
|
||
|
const m1 = SVELTE_IGNORE_PATTERN.exec(text);
|
||
|
if (!m1) {
|
||
|
return false;
|
||
|
}
|
||
|
const ignoreStart = m1.index + m1[0].length;
|
||
|
const beforeText = text.slice(ignoreStart);
|
||
|
return !beforeText.trim();
|
||
|
}
|