Skip to content

Commit

Permalink
Revert "Fix Liquid capture sorting (#135)" (#140)
Browse files Browse the repository at this point in the history
This reverts commit 3ebd6d0.
  • Loading branch information
bradlc committed Mar 29, 2023
1 parent 41c7738 commit 2aabc3c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 55 deletions.
74 changes: 27 additions & 47 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -379,75 +379,55 @@ function transformLiquid(ast, { env }) {
: node.name === 'class'
}

/** @type {{type: string, source: string}[]} */
let sources = []

/** @type {{pos: {start: number, end: number}, value: string}[]} */
let changes = []

function sortAttribute(attr) {
function sortAttribute(attr, path) {
visit(attr.value, {
TextNode(node) {
node.value = sortClasses(node.value, { env });
changes.push({
pos: node.position,
value: node.value,
})

let source = node.source.slice(0, node.position.start) + node.value + node.source.slice(node.position.end)
path.forEach(node => (node.source = source))
},

String(node) {
node.value = sortClasses(node.value, { env });
changes.push({
pos: {
// String position includes the quotes even if the value doesn't
// Hence the +1 and -1 when slicing
start: node.position.start+1,
end: node.position.end-1,
},
value: node.value,
})

// String position includes the quotes even if the value doesn't
// Hence the +1 and -1 when slicing
let source = node.source.slice(0, node.position.start+1) + node.value + node.source.slice(node.position.end-1)
path.forEach(node => (node.source = source))
},
})
}

visit(ast, {
LiquidTag(node) {
sources.push(node)
LiquidTag(node, _parent, _key, _index, meta) {
meta.path = [...meta.path ?? [], node];
},

HtmlElement(node) {
sources.push(node)
HtmlElement(node, _parent, _key, _index, meta) {
meta.path = [...meta.path ?? [], node];
},

AttrSingleQuoted(node) {
if (isClassAttr(node)) {
sources.push(node)
sortAttribute(node)
AttrSingleQuoted(node, _parent, _key, _index, meta) {
if (!isClassAttr(node)) {
return;
}

meta.path = [...meta.path ?? [], node];

sortAttribute(node, meta.path)
},

AttrDoubleQuoted(node) {
if (isClassAttr(node)) {
sources.push(node)
sortAttribute(node)
AttrDoubleQuoted(node, _parent, _key, _index, meta) {
if (!isClassAttr(node)) {
return;
}
},
});

// Sort so all changes occur in order
changes = changes.sort((a, b) => {
return a.start - b.start
|| a.end - b.end
})
meta.path = [...meta.path ?? [], node];

for (let change of changes) {
for (let node of sources) {
node.source =
node.source.slice(0, change.pos.start) +
change.value +
node.source.slice(change.pos.end)
}
}
sortAttribute(node, meta.path)
},
});
}

function sortStringLiteral(node, { env }) {
Expand Down
8 changes: 0 additions & 8 deletions tests/plugins.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,14 +257,6 @@ let tests = [
`{%- capture class_ordering -%}<div class="sm:p-0 p-4"></div>{%- endcapture -%}`,
`{%- capture class_ordering -%}<div class="p-4 sm:p-0"></div>{%- endcapture -%}`,
],
[
`{%- capture class_ordering -%}<div class="foo1 sm:p-0 p-4"></div><div class="foo2 sm:p-0 p-4"></div>{%- endcapture -%}`,
`{%- capture class_ordering -%}<div class="foo1 p-4 sm:p-0"></div><div class="foo2 p-4 sm:p-0"></div>{%- endcapture -%}`,
],
[
`{%- capture class_ordering -%}<div class="foo1 sm:p-0 p-4"><div class="foo2 sm:p-0 p-4"></div></div>{%- endcapture -%}`,
`{%- capture class_ordering -%}<div class="foo1 p-4 sm:p-0"><div class="foo2 p-4 sm:p-0"></div></div>{%- endcapture -%}`,
],
],
}
},
Expand Down

0 comments on commit 2aabc3c

Please sign in to comment.