Skip to content

Commit d548f29

Browse files
author
Robert Jackson
committed
Add linting setup to new projects.
1 parent a0417bc commit d548f29

4 files changed

Lines changed: 113 additions & 8 deletions

File tree

commands/global/new.js

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ module.exports.builder = function builder(yargs) {
99
});
1010
};
1111

12-
module.exports.handler = function handler(options) {
12+
module.exports.handler = async function handler(options) {
1313
let { projectName } = options;
1414

1515
const fs = require('fs-extra');
1616
const { stripIndent } = require('common-tags');
17+
const latestVersion = require('latest-version');
1718
const pkg = require('../../package.json');
1819

1920
fs.outputFileSync(
@@ -65,6 +66,7 @@ module.exports.handler = function handler(options) {
6566
name: projectName,
6667
version: '0.1.0',
6768
scripts: {
69+
lint: 'eslint --cache .',
6870
test: 'codemod-cli test',
6971
'test:coverage': 'codemod-cli test --coverage',
7072
'update-docs': 'codemod-cli update-docs',
@@ -76,8 +78,13 @@ module.exports.handler = function handler(options) {
7678
'codemod-cli': `^${pkg.version}`,
7779
},
7880
devDependencies: {
79-
jest: pkg.devDependencies.jest,
8081
coveralls: pkg.devDependencies.coveralls,
82+
eslint: `^${await latestVersion('eslint')}`,
83+
'eslint-config-prettier': `^${await latestVersion('eslint-config-prettier')}`,
84+
'eslint-plugin-node': `^${await latestVersion('eslint-plugin-node')}`,
85+
'eslint-plugin-prettier': `^${await latestVersion('eslint-plugin-prettier')}`,
86+
jest: pkg.devDependencies.jest,
87+
prettier: `^${await latestVersion('prettier')}`,
8188
},
8289
engines: pkg.engines,
8390
jest: {
@@ -88,6 +95,50 @@ module.exports.handler = function handler(options) {
8895
spaces: 2,
8996
}
9097
);
98+
99+
// linting setup
100+
fs.outputFileSync(
101+
projectName + '/.eslintrc.js',
102+
stripIndent`
103+
module.exports = {
104+
parserOptions: {
105+
ecmaVersion: 2018,
106+
},
107+
108+
plugins: ['prettier', 'node'],
109+
extends: ['eslint:recommended', 'plugin:prettier/recommended', 'plugin:node/recommended'],
110+
env: {
111+
node: true,
112+
},
113+
rules: {},
114+
overrides: [
115+
{
116+
files: ['__tests__/**/*.js'],
117+
env: {
118+
jest: true,
119+
},
120+
},
121+
],
122+
};` + '\n'
123+
);
124+
fs.outputFileSync(
125+
projectName + '/.eslintignore',
126+
stripIndent`
127+
!.*
128+
__testfixtures__
129+
`
130+
);
131+
fs.outputFileSync(
132+
projectName + '/.prettierrc',
133+
stripIndent`
134+
{
135+
"singleQuote": true,
136+
"trailingComma": "es5",
137+
"printWidth": 100
138+
}
139+
`
140+
);
141+
91142
fs.outputFileSync(
92143
projectName + '/.travis.yml',
93144
stripIndent`
@@ -110,6 +161,7 @@ module.exports.handler = function handler(options) {
110161
- yarn install
111162
112163
script:
164+
- yarn lint
113165
- yarn test:coverage
114166
115167
after_success:
@@ -124,15 +176,14 @@ module.exports.handler = function handler(options) {
124176
125177
require('codemod-cli').runTransform(
126178
__dirname,
127-
process.argv[2] /* transform name */,
179+
process.argv[2] /* transform name */,
128180
process.argv.slice(3) /* paths or globs */
129-
)
130-
`,
181+
);` + '\n',
131182
{
132183
encoding: 'utf8',
133184
mode: 0o755 /* -rwxr-xr-x */,
134185
}
135186
);
136-
fs.outputFileSync(projectName + '/.gitignore', '/node_modules');
187+
fs.outputFileSync(projectName + '/.gitignore', '/node_modules\n/.eslintcache');
137188
fs.ensureFileSync(projectName + '/transforms/.gitkeep');
138189
};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"import-cwd": "^3.0.0",
4444
"import-local": "^2.0.0",
4545
"jscodeshift": "^0.6.4",
46+
"latest-version": "^5.1.0",
4647
"pkg-up": "^3.1.0",
4748
"recast": "^0.18.1",
4849
"yargs": "^13.2.0"

tests/cli-test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ QUnit.module('codemod-cli', function(hooks) {
5353
assert.equal(result.code, 0, 'exited with zero');
5454
assert.deepEqual(walkSync(codemodProject.path()), [
5555
'ember-qunit-codemod/',
56+
'ember-qunit-codemod/.eslintignore',
57+
'ember-qunit-codemod/.eslintrc.js',
5658
'ember-qunit-codemod/.gitignore',
59+
'ember-qunit-codemod/.prettierrc',
5760
'ember-qunit-codemod/.travis.yml',
5861
'ember-qunit-codemod/README.md',
5962
'ember-qunit-codemod/bin/',
@@ -65,6 +68,19 @@ QUnit.module('codemod-cli', function(hooks) {
6568
});
6669
});
6770

71+
QUnit.module('linting', function(hooks) {
72+
setupProject(hooks);
73+
74+
hooks.beforeEach(async function() {
75+
await execa('yarn');
76+
});
77+
78+
QUnit.test('should pass for a basic project', async function(assert) {
79+
let result = await execa('yarn', ['lint']);
80+
assert.equal(result.code, 0, 'exited with zero');
81+
});
82+
});
83+
6884
QUnit.module('update-docs', function(hooks) {
6985
setupProject(hooks);
7086

yarn.lock

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2957,7 +2957,7 @@ [email protected], globby@^9.2.0:
29572957
pify "^4.0.1"
29582958
slash "^2.0.0"
29592959

2960-
2960+
[email protected], got@^9.6.0:
29612961
version "9.6.0"
29622962
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
29632963
integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
@@ -4218,6 +4218,13 @@ latest-version@^3.0.0:
42184218
dependencies:
42194219
package-json "^4.0.0"
42204220

4221+
latest-version@^5.1.0:
4222+
version "5.1.0"
4223+
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
4224+
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
4225+
dependencies:
4226+
package-json "^6.3.0"
4227+
42214228
lcid@^1.0.0:
42224229
version "1.0.0"
42234230
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@@ -5103,6 +5110,16 @@ package-json@^4.0.0:
51035110
registry-url "^3.0.3"
51045111
semver "^5.1.0"
51055112

5113+
package-json@^6.3.0:
5114+
version "6.5.0"
5115+
resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
5116+
integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
5117+
dependencies:
5118+
got "^9.6.0"
5119+
registry-auth-token "^4.0.0"
5120+
registry-url "^5.0.0"
5121+
semver "^6.2.0"
5122+
51065123
parallel-transform@^1.1.0:
51075124
version "1.1.0"
51085125
resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
@@ -5427,7 +5444,7 @@ qunit@^2.9.2:
54275444
node-watch "0.6.0"
54285445
resolve "1.9.0"
54295446

5430-
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
5447+
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
54315448
version "1.2.8"
54325449
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
54335450
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@@ -5579,13 +5596,28 @@ registry-auth-token@^3.0.1:
55795596
rc "^1.1.6"
55805597
safe-buffer "^5.0.1"
55815598

5599+
registry-auth-token@^4.0.0:
5600+
version "4.0.0"
5601+
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be"
5602+
integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==
5603+
dependencies:
5604+
rc "^1.2.8"
5605+
safe-buffer "^5.0.1"
5606+
55825607
registry-url@^3.0.3:
55835608
version "3.1.0"
55845609
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
55855610
integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
55865611
dependencies:
55875612
rc "^1.0.1"
55885613

5614+
registry-url@^5.0.0:
5615+
version "5.1.0"
5616+
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
5617+
integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
5618+
dependencies:
5619+
rc "^1.2.8"
5620+
55895621
regjsgen@^0.5.0:
55905622
version "0.5.0"
55915623
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
@@ -5916,6 +5948,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1:
59165948
resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b"
59175949
integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==
59185950

5951+
semver@^6.2.0:
5952+
version "6.3.0"
5953+
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
5954+
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
5955+
59195956
set-blocking@^2.0.0, set-blocking@~2.0.0:
59205957
version "2.0.0"
59215958
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"

0 commit comments

Comments
 (0)