refactor css comments (#7021)

* refactor css comments

* workarounds for postcss-less location bugs

* improve replaceQuotesInInlineComments

* update changelog

* fix comments in selectors

* fix comments in values

* use \ufffe instead of \0 because that's what these characters are for

see http://www.unicode.org/faq/private_use.html#nonchar6

* fix quoted urls

Co-authored-by: Georgii Dolzhykov <thorn.mailbox@gmail.com>
This commit is contained in:
Evilebot TnawiandGeorgii Dolzhykov authored and GitHub committed 2020-03-20 18:09:07 +02:00
1 parent 1ad13d7420
commit 4602bb6b95
11 files changed
+455 -38

No files matched your search

+13 -10
View File
@@ -2,9 +2,9 @@
const createError = require("../common/parser-create-error");
const parseFrontMatter = require("../utils/front-matter");
const lineColumnToIndex = require("../utils/line-column-to-index");
const { hasPragma } = require("./pragma");
const { isLessParser, isSCSS, isSCSSNestedPropertyNode } = require("./utils");
const { calculateLoc, replaceQuotesInInlineComments } = require("./loc");
function parseValueNodes(nodes) {
let parenGroup = {
@@ -294,7 +294,7 @@ function parseNestedCSS(node, options) {
value = value.trim();
node.raws.value = selector;
node.raws.value = value;
}
let params = "";
@@ -541,6 +541,8 @@ function parseWithParser(parser, text, options) {
result = parseNestedCSS(addTypePrefix(result, "css-"), options);
calculateLoc(result, text);
if (frontMatter) {
result.nodes.unshift(frontMatter);
}
@@ -553,7 +555,12 @@ function requireParser(isSCSSParser) {
return require("postcss-scss");
}
return require("postcss-less");
const lessParser = require("postcss-less");
return {
// Workaround for https://github.com/shellscape/postcss-less/issues/145
// See comments for `replaceQuotesInInlineComments` in `loc.js`.
parse: text => lessParser.parse(replaceQuotesInInlineComments(text))
};
}
function parse(text, parsers, options) {
@@ -582,17 +589,13 @@ const parser = {
hasPragma,
locStart(node) {
if (node.source) {
return lineColumnToIndex(node.source.start, node.source.input.css) - 1;
return node.source.startOffset;
}
return null;
},
locEnd(node) {
const endNode = node.nodes && node.nodes[node.nodes.length - 1];
if (endNode && node.source && !node.source.end) {
node = endNode;
}
if (node.source && node.source.end) {
return lineColumnToIndex(node.source.end, node.source.input.css);
if (node.source) {
return node.source.endOffset;
}
return null;
}