diff --git a/package.json b/package.json index e5981a07092f..a4c8e4adc3cb 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@babel/code-frame": "7.24.2", "@babel/parser": "7.24.4", "@babel/types": "7.24.0", - "@glimmer/syntax": "0.88.1", + "@glimmer/syntax": "0.91.1", "@iarna/toml": "2.2.5", "@prettier/is-es5-identifier-name": "0.2.0", "@prettier/parse-srcset": "3.1.0", @@ -109,7 +109,7 @@ "@babel/generator": "7.24.4", "@eslint/eslintrc": "3.0.2", "@eslint/js": "8.57.0", - "@glimmer/reference": "0.88.1", + "@glimmer/reference": "0.91.1", "@stylistic/eslint-plugin-js": "1.7.0", "@types/eslint__js": "8.42.3", "@types/estree": "1.0.5", diff --git a/src/language-handlebars/clean.js b/src/language-handlebars/clean.js index 5eeebb15702d..04ac8aa60584 100644 --- a/src/language-handlebars/clean.js +++ b/src/language-handlebars/clean.js @@ -12,13 +12,20 @@ function clean(original, cloned /*, parent*/) { if (original.type === "ElementNode") { delete cloned.startTag; + delete cloned.openTag; delete cloned.parts; delete cloned.endTag; + delete cloned.closeTag; delete cloned.nameNode; + delete cloned.body; + delete cloned.blockParamNodes; + delete cloned.params; + delete cloned.path; } - if (original.type === "Block" || original.type === "ElementNode") { + if (original.type === "Block") { delete cloned.blockParamNodes; + delete cloned.params; } // `class` is reformatted diff --git a/src/language-handlebars/printer-glimmer.js b/src/language-handlebars/printer-glimmer.js index 005fa5ae3aa0..658d2e251f15 100644 --- a/src/language-handlebars/printer-glimmer.js +++ b/src/language-handlebars/printer-glimmer.js @@ -449,13 +449,13 @@ function printStartingTagEndMarker(node) { /* MustacheStatement print helpers */ function printOpeningMustache(node) { - const mustache = node.escaped === false ? "{{{" : "{{"; + const mustache = node.trusting ? "{{{" : "{{"; const strip = node.strip?.open ? "~" : ""; return [mustache, strip]; } function printClosingMustache(node) { - const mustache = node.escaped === false ? "}}}" : "}}"; + const mustache = node.trusting ? "}}}" : "}}"; const strip = node.strip?.close ? "~" : ""; return [strip, mustache]; } @@ -530,12 +530,17 @@ function printElseBlock(node, options) { ]; } +const isPathWithSameHead = (pathA, pathB) => + pathA.head.type === "VarHead" && + pathB.head.type === "VarHead" && + pathA.head.name === pathB.head.name; + function isElseIfLike(path) { const { grandparent, node } = path; return ( grandparent?.inverse?.body.length === 1 && grandparent.inverse.body[0] === node && - grandparent.inverse.body[0].path.parts[0] === grandparent.path.parts[0] + isPathWithSameHead(grandparent.inverse.body[0].path, grandparent.path) ); } @@ -543,7 +548,7 @@ function printElseIfLikeBlock(path, print) { const { node, grandparent } = path; return group([ printInverseBlockOpeningMustache(grandparent), - ["else", " ", grandparent.inverse.body[0].path.parts[0]], + ["else", " ", grandparent.inverse.body[0].path.head.name], indent([ line, group(printParams(path, print)), @@ -591,7 +596,7 @@ function blockStatementHasElseIfLike(node) { blockStatementHasElse(node) && node.inverse.body.length === 1 && node.inverse.body[0].type === "BlockStatement" && - node.inverse.body[0].path.parts[0] === node.path.parts[0] + isPathWithSameHead(node.inverse.body[0].path, node.path) ); } @@ -781,17 +786,18 @@ const isPathExpressionPartNeedBrackets = (part, index) => Array.prototype.some.call(part, (character) => PATH_EXPRESSION_FORBIDDEN_CHARACTERS.has(character), ); +// TODO[@fisker]: Print `head` via `print` function printPathExpression(node) { - if (node.data || (node.parts.length === 1 && node.original.includes("/"))) { + if ( + node.head.type === "AtHead" || + (node.tail.length === 0 && node.original.includes("/")) + ) { // check if node has data, or // check if node is a legacy path expression (and leave it alone) return node.original; } - let { parts } = node; - if (node.this) { - parts = ["this", ...parts]; - } + const parts = [node.head.original, ...node.tail]; return parts .map((part, index) => diff --git a/src/language-handlebars/visitor-keys.evaluate.js b/src/language-handlebars/visitor-keys.evaluate.js index 5346ba13ff41..4d2df7bf0623 100644 --- a/src/language-handlebars/visitor-keys.evaluate.js +++ b/src/language-handlebars/visitor-keys.evaluate.js @@ -1,18 +1,11 @@ import { visitorKeys as glimmerVisitorKeys } from "@glimmer/syntax"; -const { - // These node types presents on `ElementNode`, but we don't care about them - // https://github.com/glimmerjs/glimmer-vm/pull/1553 - ElementStartNode, // `ElementNode.startTag` - ElementPartNode, // `ElementNode.parts` - ElementEndNode, // `ElementNode.endTag` - ElementNameNode, // `ElementNode.nameNode` - - // This presents on `{Block,ElementNode}.blockParamNodes`, but we don't care about them - // https://github.com/glimmerjs/glimmer-vm/pull/1552 - BlockParam, - - ...visitorKeys -} = glimmerVisitorKeys; +const visitorKeys = { + VarHead: [], + ThisHead: [], + AtHead: [], + ...glimmerVisitorKeys, + PathExpression: [...glimmerVisitorKeys.PathExpression, "head"], +}; export default visitorKeys; diff --git a/tests/format/handlebars/path-expressions/__snapshots__/format.test.js.snap b/tests/format/handlebars/path-expressions/__snapshots__/format.test.js.snap index ef4dcaba5909..1e2af028a2a9 100644 --- a/tests/format/handlebars/path-expressions/__snapshots__/format.test.js.snap +++ b/tests/format/handlebars/path-expressions/__snapshots__/format.test.js.snap @@ -39,7 +39,6 @@ printWidth: 80 =====================================input======================================
{{array.[true]}} - {{[dot.]}} {{array.2.[@#].[1]}} {{array.2.[a b]}} {{this.test}} @@ -52,7 +51,6 @@ printWidth: 80 =====================================output=====================================
{{array.[true]}} - {{[dot.]}} {{array.[2].[@#].[1]}} {{array.[2].[a b]}} {{this.test}} diff --git a/tests/format/handlebars/path-expressions/literal-expressions.hbs b/tests/format/handlebars/path-expressions/literal-expressions.hbs index d1ad30a124a6..ea2b3caec229 100644 --- a/tests/format/handlebars/path-expressions/literal-expressions.hbs +++ b/tests/format/handlebars/path-expressions/literal-expressions.hbs @@ -1,6 +1,5 @@
{{array.[true]}} - {{[dot.]}} {{array.2.[@#].[1]}} {{array.2.[a b]}} {{this.test}} diff --git a/tests/unit/__snapshots__/visitor-keys.js.snap b/tests/unit/__snapshots__/visitor-keys.js.snap index 781d0d2108fc..12eda1c5fd63 100644 --- a/tests/unit/__snapshots__/visitor-keys.js.snap +++ b/tests/unit/__snapshots__/visitor-keys.js.snap @@ -1158,6 +1158,7 @@ exports[`visitor keys estree-json 1`] = ` exports[`visitor keys glimmer 1`] = ` { + "AtHead": [], "AttrNode": [ "value", ], @@ -1173,13 +1174,6 @@ exports[`visitor keys glimmer 1`] = ` ], "BooleanLiteral": [], "CommentStatement": [], - "Component": [ - "head", - "attributes", - "modifiers", - "children", - "comments", - ], "ConcatStatement": [ "parts", ], @@ -1206,29 +1200,10 @@ exports[`visitor keys glimmer 1`] = ` "params", "hash", ], - "NamedBlock": [ - "attributes", - "modifiers", - "children", - "comments", - ], "NullLiteral": [], "NumberLiteral": [], - "PartialStatement": [ - "name", - "params", - "hash", - ], - "PathExpression": [], - "PathHead": [], - "Program": [ - "body", - ], - "SimpleElement": [ - "attributes", - "modifiers", - "children", - "comments", + "PathExpression": [ + "head", ], "StringLiteral": [], "SubExpression": [ @@ -1240,7 +1215,9 @@ exports[`visitor keys glimmer 1`] = ` "body", ], "TextNode": [], + "ThisHead": [], "UndefinedLiteral": [], + "VarHead": [], } `; diff --git a/yarn.lock b/yarn.lock index 052f7bcf7e27..df5b4e64a90b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1138,77 +1138,77 @@ __metadata: languageName: node linkType: hard -"@glimmer/global-context@npm:^0.88.1": - version: 0.88.1 - resolution: "@glimmer/global-context@npm:0.88.1" - checksum: 10/2785843ab8c8c70dbb1fa55b9d39e55945c1896c27be3f58d18f8a09c330d584681cbe5792fc74f72a5d348954803ed12d11cdfde55c4b4c248dcda347f5f6a2 +"@glimmer/global-context@npm:^0.91.1": + version: 0.91.1 + resolution: "@glimmer/global-context@npm:0.91.1" + checksum: 10/2d9c9ebedf3ac88ef2cb60cf1f2fc9848c169d3d62517164b315c53585334b85146335f00d64278333505d68cab81ebfe8eea0c6c515efe3b2b2aeaa3f667778 languageName: node linkType: hard -"@glimmer/interfaces@npm:^0.88.1": - version: 0.88.1 - resolution: "@glimmer/interfaces@npm:0.88.1" +"@glimmer/interfaces@npm:^0.91.1": + version: 0.91.1 + resolution: "@glimmer/interfaces@npm:0.91.1" dependencies: "@simple-dom/interface": "npm:^1.4.0" - checksum: 10/94f74ae8487135c0109eddf20b03b7fdf16214872688dec4f891682d55255b04897f50495e70c21f3363d8f2da8d2dfc1e7003acb32ec9dabfacaeac81345fd7 + checksum: 10/0ba49e922a3b17b57318b2625cae30d1194d5bf29e0503bd0e856b2b011e684da6dfb949f3fbc2b1d3434b5e23522086dc2cd56aab55d04400bbea0827d63612 languageName: node linkType: hard -"@glimmer/reference@npm:0.88.1": - version: 0.88.1 - resolution: "@glimmer/reference@npm:0.88.1" +"@glimmer/reference@npm:0.91.1": + version: 0.91.1 + resolution: "@glimmer/reference@npm:0.91.1" dependencies: "@glimmer/env": "npm:^0.1.7" - "@glimmer/global-context": "npm:^0.88.1" - "@glimmer/interfaces": "npm:^0.88.1" - "@glimmer/util": "npm:^0.88.1" - "@glimmer/validator": "npm:^0.88.1" - checksum: 10/f9c066c346ed1558c8f4c8388ae83cb393878efc1de32d78654b6fea790f29ac6a466d0e73f2eed1c5bf0ca193779d8c49e3e2c9f9191fedf4dbc64bf1d8f19e + "@glimmer/global-context": "npm:^0.91.1" + "@glimmer/interfaces": "npm:^0.91.1" + "@glimmer/util": "npm:^0.91.1" + "@glimmer/validator": "npm:^0.91.1" + checksum: 10/b336b51ce8e69007bccc218ab0f9e8d540190aeb06746a1eba80033751a69fd0f67e96d0549115848ccc31f0e04e9ffa926ef4c459736e16fa185604c313d9b8 languageName: node linkType: hard -"@glimmer/syntax@npm:0.88.1": - version: 0.88.1 - resolution: "@glimmer/syntax@npm:0.88.1" +"@glimmer/syntax@npm:0.91.1": + version: 0.91.1 + resolution: "@glimmer/syntax@npm:0.91.1" dependencies: - "@glimmer/interfaces": "npm:^0.88.1" - "@glimmer/util": "npm:^0.88.1" - "@glimmer/wire-format": "npm:^0.88.1" + "@glimmer/interfaces": "npm:^0.91.1" + "@glimmer/util": "npm:^0.91.1" + "@glimmer/wire-format": "npm:^0.91.1" "@handlebars/parser": "npm:~2.0.0" simple-html-tokenizer: "npm:^0.5.11" - checksum: 10/896c9cdfe9a606809782c18fc77839aa9d544be1d8cc67706e7af717ab0117f664bc36cd9f1da34c6474a6ba49efc16b1e7552ec15c522e4a70be603fd429c98 + checksum: 10/2f286a3f6a976b9c485925226576f78ac6174a8d964791e859034c5010d5800bad2d097e424ae5dc1096fb2ef62b10d822347387feda05edaad619fa33ffd5c1 languageName: node linkType: hard -"@glimmer/util@npm:^0.88.1": - version: 0.88.1 - resolution: "@glimmer/util@npm:0.88.1" +"@glimmer/util@npm:^0.91.1": + version: 0.91.1 + resolution: "@glimmer/util@npm:0.91.1" dependencies: "@glimmer/env": "npm:0.1.7" - "@glimmer/interfaces": "npm:^0.88.1" - checksum: 10/06947142bd87cbc01aeb9b86a1317fea01b80a7f373b98b1ed4ef55316d82c70526a45dfb15e1ffd4fc9c1802ba0b8493e14978370786dcacd69c695664319ec + "@glimmer/interfaces": "npm:^0.91.1" + checksum: 10/b4717a5c709519825a6c189ccc8fc02a96f87825e9511c6c28c9d2d9903e160052e9796e22411b441d46d56e50e36ca2d9d8c00bbd7fdf9f48698d939e8ce357 languageName: node linkType: hard -"@glimmer/validator@npm:^0.88.1": - version: 0.88.1 - resolution: "@glimmer/validator@npm:0.88.1" +"@glimmer/validator@npm:^0.91.1": + version: 0.91.1 + resolution: "@glimmer/validator@npm:0.91.1" dependencies: "@glimmer/env": "npm:^0.1.7" - "@glimmer/global-context": "npm:^0.88.1" - "@glimmer/interfaces": "npm:^0.88.1" - "@glimmer/util": "npm:^0.88.1" - checksum: 10/14d096ddd53362c479aa39437c6354c5b3fda90bbb89188c1cb7a45d5132303dea2c62c246f00499551df42bc1b0debe21d213a7ed5151ef7cd8fbd00927fea2 + "@glimmer/global-context": "npm:^0.91.1" + "@glimmer/interfaces": "npm:^0.91.1" + "@glimmer/util": "npm:^0.91.1" + checksum: 10/866f51a7c25b2facf0269768fc0311c9d7757ad1c4730fa9ef71fe20c9b5ee519b2f92991837b2ec3de5b4e83b27a68008492d501f29842a41f936363aebc1dc languageName: node linkType: hard -"@glimmer/wire-format@npm:^0.88.1": - version: 0.88.1 - resolution: "@glimmer/wire-format@npm:0.88.1" +"@glimmer/wire-format@npm:^0.91.1": + version: 0.91.1 + resolution: "@glimmer/wire-format@npm:0.91.1" dependencies: - "@glimmer/interfaces": "npm:^0.88.1" - "@glimmer/util": "npm:^0.88.1" - checksum: 10/7b01317cb84e2a51dbb9e7eb6cf29cb3740c0df59f9602e98393f727cb908ef8d08a575d2bb9d824722a6d0905dfd78fe9857ceb8b4e168fc0f5cbbca2e36bb4 + "@glimmer/interfaces": "npm:^0.91.1" + "@glimmer/util": "npm:^0.91.1" + checksum: 10/e42f13cafc4953ff23d690acebfc677dc86bb2429bede12e558b181a43e8c3e670173f683b5d18c6d5b9b47d6c56130122c8e3a7f45f219ae00257611b0a8a4f languageName: node linkType: hard @@ -7398,8 +7398,8 @@ __metadata: "@babel/types": "npm:7.24.0" "@eslint/eslintrc": "npm:3.0.2" "@eslint/js": "npm:8.57.0" - "@glimmer/reference": "npm:0.88.1" - "@glimmer/syntax": "npm:0.88.1" + "@glimmer/reference": "npm:0.91.1" + "@glimmer/syntax": "npm:0.91.1" "@iarna/toml": "npm:2.2.5" "@prettier/is-es5-identifier-name": "npm:0.2.0" "@prettier/parse-srcset": "npm:3.1.0"