@@ -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} ;
0 commit comments