diff --git a/packages/addon/manifest.json b/packages/addon/manifest.json index 7b4b2f3..8f7a114 100644 --- a/packages/addon/manifest.json +++ b/packages/addon/manifest.json @@ -113,5 +113,12 @@ }, "nodeVersionRange": ">=8", "commands": ["github:ember-codemods/ember-data-codemod globals-to-ember-data-imports app/**/*.js"] + }, + "ember-no-implicit-this-codemod": { + "versionRanges": { + "ember-source": ">=3.12" + }, + "nodeVersionRange": ">=8", + "script": "let ps = execa.command(\"ember s\", { stderr: \"inherit\", preferLocal: true }); ps.stdout.pipe(process.stdout); try { let url = await new Promise((resolve, reject) => { ps.stdout.on(\"data\", data => { let str = data.toString(); let matches = str.match(/^Build successful \\(\\d+ms\\) – Serving on (.*)$/m); if (matches) { resolve(matches[1]); } }); ps.once(\"error\", reject); ps.once(\"exit\", reject); }); await execa.command(`npx ember-no-implicit-this-codemod ${url} app/`, { stdio: \"inherit\" }); } finally { if (!ps.exitCode) { ps.kill(); await new Promise(resolve => { ps.once(\"exit\", resolve); }); } }" } } diff --git a/packages/app/manifest.json b/packages/app/manifest.json index 7b4b2f3..8f7a114 100644 --- a/packages/app/manifest.json +++ b/packages/app/manifest.json @@ -113,5 +113,12 @@ }, "nodeVersionRange": ">=8", "commands": ["github:ember-codemods/ember-data-codemod globals-to-ember-data-imports app/**/*.js"] + }, + "ember-no-implicit-this-codemod": { + "versionRanges": { + "ember-source": ">=3.12" + }, + "nodeVersionRange": ">=8", + "script": "let ps = execa.command(\"ember s\", { stderr: \"inherit\", preferLocal: true }); ps.stdout.pipe(process.stdout); try { let url = await new Promise((resolve, reject) => { ps.stdout.on(\"data\", data => { let str = data.toString(); let matches = str.match(/^Build successful \\(\\d+ms\\) – Serving on (.*)$/m); if (matches) { resolve(matches[1]); } }); ps.once(\"error\", reject); ps.once(\"exit\", reject); }); await execa.command(`npx ember-no-implicit-this-codemod ${url} app/`, { stdio: \"inherit\" }); } finally { if (!ps.exitCode) { ps.kill(); await new Promise(resolve => { ps.once(\"exit\", resolve); }); } }" } } diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/controllers/application.js b/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/controllers/application.js new file mode 100644 index 0000000..9d32b82 --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/controllers/application.js @@ -0,0 +1,5 @@ +import Controller from '@ember/controller'; + +export default Controller.extend({ + controllerProperty: 'test' +}); diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/templates/application.hbs b/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/templates/application.hbs new file mode 100644 index 0000000..2a9976f --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/latest-node/my-app/app/templates/application.hbs @@ -0,0 +1 @@ +{{this.controllerProperty}} diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/controllers/application.js b/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/controllers/application.js new file mode 100644 index 0000000..9d32b82 --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/controllers/application.js @@ -0,0 +1,5 @@ +import Controller from '@ember/controller'; + +export default Controller.extend({ + controllerProperty: 'test' +}); diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/templates/application.hbs b/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/templates/application.hbs new file mode 100644 index 0000000..475c4bf --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/local/my-app/app/templates/application.hbs @@ -0,0 +1 @@ +{{controllerProperty}} diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/controllers/application.js b/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/controllers/application.js new file mode 100644 index 0000000..9d32b82 --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/controllers/application.js @@ -0,0 +1,5 @@ +import Controller from '@ember/controller'; + +export default Controller.extend({ + controllerProperty: 'test' +}); diff --git a/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/templates/application.hbs b/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/templates/application.hbs new file mode 100644 index 0000000..2a9976f --- /dev/null +++ b/test/fixtures/codemods/ember-no-implicit-this-codemod/min-node/my-app/app/templates/application.hbs @@ -0,0 +1 @@ +{{this.controllerProperty}} diff --git a/test/tests.js b/test/tests.js index 1a89d76..4773fe5 100644 --- a/test/tests.js +++ b/test/tests.js @@ -12,6 +12,7 @@ const { assertNoUnstaged, assertCodemodRan } = require('./helpers/assertions'); +const run = require('ember-cli-update/src/run'); let manifest; let fixturesPath; @@ -121,6 +122,10 @@ describe('runs codemods', function() { } = await merge({ async beforeMerge() { await _merge('local', tmpPath); + + if (manifest[codemod].script) { + await run('npm install', { cwd: tmpPath }); + } } }); @@ -148,9 +153,14 @@ describe('runs codemods', function() { assertNoUnstaged(status); assertCodemodRan(status); + await fs.remove(path.join(tmpPath, 'package-lock.json')); + // file is indeterminent between OS's, so ignore await fs.remove(path.join(tmpPath, 'MODULE_REPORT.md')); + // remove dist and node_modules before fixture compare + await run('git clean -fdX', { cwd: tmpPath }); + let nodeVersion = 'latest-node'; if (process.env.NODE_LTS) { nodeVersion = 'min-node';