From 6d70aa18da1aeccde0674dc3d2607c4e710e1ad8 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Tue, 2 Jul 2019 09:14:10 -0700 Subject: [PATCH] Deprecate and add migrator for top level named classes --- .../components/class-tag-node-factory.js | 6 ++++++ .../components/class-tag-transformer.js | 7 +++++++ src/core-tags/components/marko.json | 8 ++++++++ src/core-tags/core/class-tag.js | 9 --------- src/core-tags/core/marko.json | 4 ---- src/core-tags/migrate/class-tag.js | 19 +++++++++++++++++++ src/core-tags/migrate/marko.json | 4 ++++ .../class-named/index.marko | 0 .../class-named/test.js | 0 .../fixtures/diffpatch-simple/index.marko | 2 +- .../class-tag-named/snapshot-expected.marko | 5 +++++ .../fixtures/class-tag-named/template.marko | 5 +++++ 12 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 src/core-tags/components/class-tag-node-factory.js create mode 100644 src/core-tags/components/class-tag-transformer.js delete mode 100644 src/core-tags/core/class-tag.js create mode 100644 src/core-tags/migrate/class-tag.js rename test/components-browser/{fixtures => fixtures-deprecated}/class-named/index.marko (100%) rename test/components-browser/{fixtures => fixtures-deprecated}/class-named/test.js (100%) create mode 100644 test/migrate/fixtures/class-tag-named/snapshot-expected.marko create mode 100644 test/migrate/fixtures/class-tag-named/template.marko diff --git a/src/core-tags/components/class-tag-node-factory.js b/src/core-tags/components/class-tag-node-factory.js new file mode 100644 index 000000000..1978c76b1 --- /dev/null +++ b/src/core-tags/components/class-tag-node-factory.js @@ -0,0 +1,6 @@ +module.exports = function nodeFactory(el) { + // Previously `class` was a CodeGenerator. + // CodeGenerators have their `type` overwritten and some code is relying on that for `class`. + el.type = __filename; + return el; +}; diff --git a/src/core-tags/components/class-tag-transformer.js b/src/core-tags/components/class-tag-transformer.js new file mode 100644 index 000000000..cd48f8e36 --- /dev/null +++ b/src/core-tags/components/class-tag-transformer.js @@ -0,0 +1,7 @@ +module.exports = function transformer(el, context) { + if (el.parentNode.type !== "TemplateRoot") { + context.addError( + "class is a static tag and can only be declared at the template root" + ); + } +}; diff --git a/src/core-tags/components/marko.json b/src/core-tags/components/marko.json index eec87d836..6613d0941 100644 --- a/src/core-tags/components/marko.json +++ b/src/core-tags/components/marko.json @@ -123,5 +123,13 @@ "": { "transformer": "./body-transformer.js" }, + "": { + "node-factory": "./class-tag-node-factory.js", + "transformer": { + "path": "./class-tag-transformer.js", + "priority": -1 + }, + "open-tag-only": true + }, "transformer": "./components-transformer.js" } diff --git a/src/core-tags/core/class-tag.js b/src/core-tags/core/class-tag.js deleted file mode 100644 index d232b7ee2..000000000 --- a/src/core-tags/core/class-tag.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function functionCodeGenerator(el, codegen) { - if (el.parentNode.type !== "TemplateRoot") { - codegen.addError( - "class is a static tag and can only be declared at the template root" - ); - } - codegen.addStaticCode(codegen.builder.expression(el.tagString)); - return null; -}; diff --git a/src/core-tags/core/marko.json b/src/core-tags/core/marko.json index 56abe3bba..9c0048a09 100644 --- a/src/core-tags/core/marko.json +++ b/src/core-tags/core/marko.json @@ -1,8 +1,4 @@ { - "": { - "code-generator": "./class-tag", - "open-tag-only": true - }, "": { "node-factory": "./else-tag", "attributes": {}, diff --git a/src/core-tags/migrate/class-tag.js b/src/core-tags/migrate/class-tag.js new file mode 100644 index 000000000..750a4fc41 --- /dev/null +++ b/src/core-tags/migrate/class-tag.js @@ -0,0 +1,19 @@ +const classNamedRegexp = /^(": { "@marko-init": "boolean", "@template-helpers": "boolean" + }, + "": { + "migrator": "./class-tag", + "open-tag-only": true } } diff --git a/test/components-browser/fixtures/class-named/index.marko b/test/components-browser/fixtures-deprecated/class-named/index.marko similarity index 100% rename from test/components-browser/fixtures/class-named/index.marko rename to test/components-browser/fixtures-deprecated/class-named/index.marko diff --git a/test/components-browser/fixtures/class-named/test.js b/test/components-browser/fixtures-deprecated/class-named/test.js similarity index 100% rename from test/components-browser/fixtures/class-named/test.js rename to test/components-browser/fixtures-deprecated/class-named/test.js diff --git a/test/components-browser/fixtures/diffpatch-simple/index.marko b/test/components-browser/fixtures/diffpatch-simple/index.marko index 44e7a2bdf..644144d1d 100644 --- a/test/components-browser/fixtures/diffpatch-simple/index.marko +++ b/test/components-browser/fixtures/diffpatch-simple/index.marko @@ -1,4 +1,4 @@ -class MyComponent { +class { onCreate() { this.state = { count: 0 diff --git a/test/migrate/fixtures/class-tag-named/snapshot-expected.marko b/test/migrate/fixtures/class-tag-named/snapshot-expected.marko new file mode 100644 index 000000000..9c1b4b363 --- /dev/null +++ b/test/migrate/fixtures/class-tag-named/snapshot-expected.marko @@ -0,0 +1,5 @@ + + +class { + y() {} +} diff --git a/test/migrate/fixtures/class-tag-named/template.marko b/test/migrate/fixtures/class-tag-named/template.marko new file mode 100644 index 000000000..e4ebc6f9a --- /dev/null +++ b/test/migrate/fixtures/class-tag-named/template.marko @@ -0,0 +1,5 @@ +class abc { + y() { + + } +}