From baf6cf6a147f89af28dc2a6814f2acfdb1b47480 Mon Sep 17 00:00:00 2001 From: Patrick Steele-Idem Date: Wed, 8 Feb 2017 22:53:46 -0800 Subject: [PATCH] Reject class with extends for single file UI components --- .../render/error-component-class-extends/expected.html | 0 .../render/error-component-class-extends/template.marko | 6 ++++++ test/autotests/render/error-component-class-extends/test.js | 6 ++++++ widgets/taglib/TransformHelper/handleRootNodes.js | 6 ++++++ 4 files changed, 18 insertions(+) create mode 100644 test/autotests/render/error-component-class-extends/expected.html create mode 100644 test/autotests/render/error-component-class-extends/template.marko create mode 100644 test/autotests/render/error-component-class-extends/test.js diff --git a/test/autotests/render/error-component-class-extends/expected.html b/test/autotests/render/error-component-class-extends/expected.html new file mode 100644 index 000000000..e69de29bb diff --git a/test/autotests/render/error-component-class-extends/template.marko b/test/autotests/render/error-component-class-extends/template.marko new file mode 100644 index 000000000..c8a684809 --- /dev/null +++ b/test/autotests/render/error-component-class-extends/template.marko @@ -0,0 +1,6 @@ +class Foo extends Bar { + +} + +
+
\ No newline at end of file diff --git a/test/autotests/render/error-component-class-extends/test.js b/test/autotests/render/error-component-class-extends/test.js new file mode 100644 index 000000000..5b9d164f1 --- /dev/null +++ b/test/autotests/render/error-component-class-extends/test.js @@ -0,0 +1,6 @@ +var expect = require('chai').expect; + +exports.checkError = function(e) { + expect(e.toString()).to.contain('A component class is not allowed to use `extends`'); + expect(e.toString()).to.contain('https://github.com/marko-js/marko/wiki/Error:-Component-class-with-extends'); +}; \ No newline at end of file diff --git a/widgets/taglib/TransformHelper/handleRootNodes.js b/widgets/taglib/TransformHelper/handleRootNodes.js index 689d96632..b8a98ac73 100644 --- a/widgets/taglib/TransformHelper/handleRootNodes.js +++ b/widgets/taglib/TransformHelper/handleRootNodes.js @@ -207,6 +207,12 @@ function handleClassDeclaration(classEl, transformHelper) { return; } let expression = tree.body[0].expression; + + if (expression.superClass && expression.superClass.name) { + transformHelper.context.addError(classEl, 'A component class is not allowed to use `extends`. See: https://github.com/marko-js/marko/wiki/Error:-Component-class-with-extends'); + return; + } + let object = classToObject(expression); let componentVar = transformHelper.context.addStaticVar('marko_component', escodegen.generate(object));