diff --git a/.editorconfig b/.editorconfig index 2ea17b5..cdc522a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,8 +10,8 @@ indent_style = space insert_final_newline = true trim_trailing_whitespace = true -# JS/JSON -[{*.js,*.json}] +# JS +[{*.js}] quote_type = single curly_bracket_next_line = false spaces_around_operators = true diff --git a/.jshintignore b/.eslintignore similarity index 100% rename from .jshintignore rename to .eslintignore diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 0000000..6ce13af --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,138 @@ +root: true +extends: eslint:recommended +parserOptions: + ecmaVersion: 6 + ecmaFeatures: + impliedStrict: true + sourceType: module +env: + es6: true + node: true + mocha: true + jasmine: true +rules: + linebreak-style: + - error + - unix + max-len: + - warn + - code: 80 + tabWidth: 2 + indent: + - error + - 2 + - SwitchCase: 1 + VariableDeclarator: + let: 2 + const: 3 + semi: + - error + - always + consistent-this: + - error + - self + - $ctrl + quotes: + - error + - single + - allowTemplateLiterals: true + curly: + - error + - all + comma-dangle: + - error + - always-multiline + new-cap: + - error + - newIsCap: true + capIsNew: true + properties: false + camelcase: + - error + - properties: never + array-bracket-spacing: + - error + - never + arrow-spacing: + - error + - before: true + after: true + block-spacing: + - error + - always + comma-spacing: + - error + - before: false + after: true + computed-property-spacing: + - error + - never + generator-star-spacing: + - error + - before: true + after: false + key-spacing: + - error + - beforeColon: false + afterColon: true + mode: minimum + keyword-spacing: + - error + - before: true + semi-spacing: + - error + - before: false + after: true + space-in-parens: + - error + - never + space-unary-ops: + - error + - words: true + nonwords: false + space-before-function-paren: + - error + - never + space-before-blocks: + - error + - always + yoda: + - error + - never + wrap-iife: + - error + - outside + eqeqeq: + - error + - always + newline-per-chained-call: + - error + - ignoreChainWithDepth: 3 + one-var-declaration-per-line: + - error + - initializations + brace-style: + - error + - stroustrup + no-implicit-coercion: + - error + - boolean: false + no-multiple-empty-lines: + - error + - max: 1 + eol-last: error + dot-notation: error + space-infix-ops: error + no-with: error + no-unreachable: error + no-redeclare: error + no-unexpected-multiline: error + no-multi-spaces: error + no-multi-str: error + no-trailing-spaces: error + no-mixed-spaces-and-tabs: error + no-spaced-func: error + no-whitespace-before-property: error + no-lonely-if: error + no-var: error + no-console: off diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index ea629c2..0000000 --- a/.jscsrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "preset": "google", - "fileExtensions": [".js"], - "maxErrors": 100, - "excludeFiles": [ - "node_modules/**", - "coverage/**" - ], - "requireParenthesesAroundIIFE": true, - "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties", - "maximumLineLength": 100, - "validateLineBreaks": "LF", - "validateIndentation": 2, - "disallowTrailingComma": true, - "disallowMultipleSpaces": true, - "disallowMultipleVarDecl": "exceptUndefined", - "disallowKeywordsOnNewLine": null, - "disallowSpacesInsideObjectBrackets": null, - "disallowImplicitTypeConversion": ["string"], - "safeContextKeyword": "self" -} diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 46b3abe..0000000 --- a/.jshintrc +++ /dev/null @@ -1,34 +0,0 @@ -{ - "bitwise": false, - "curly": true, - "devel": true, - "esnext": true, - "eqeqeq": true, - "forin": true, - "funcscope": true, - "futurehostile": true, - "globals": { - "define": false, - "require": false, - "exports": false, - "module": false, - "describe": false, - "before": false, - "beforeEach": false, - "after": false, - "afterEach": false, - "it": false, - "inject": false, - "expect": false, - "Promise": true - }, - "latedef": "nofunc", - "noarg": true, - "nonew": true, - "notypeof": true, - "strict": false, - "undef": true, - "unused": true, - "browser": false, - "node": true -} diff --git a/lib/replace-in-file.js b/lib/replace-in-file.js index 28d142f..0bde08b 100644 --- a/lib/replace-in-file.js +++ b/lib/replace-in-file.js @@ -3,7 +3,7 @@ /** * Module dependencies */ -var fs = require('fs'); +let fs = require('fs'); /** * Helper to replace in a single file @@ -15,7 +15,7 @@ function replace(filePath, find, replace, cb) { } //Replace contents and check if anything changed - var newContents = contents.replace(find, replace); + let newContents = contents.replace(find, replace); if (newContents === contents) { return cb(null, false); } @@ -36,10 +36,10 @@ function replace(filePath, find, replace, cb) { function replaceSync(filePath, find, replace) { //Read contents - var contents = fs.readFileSync(filePath, 'utf8'); + let contents = fs.readFileSync(filePath, 'utf8'); //Replace contents and check if anything changed - var newContents = contents.replace(find, replace); + let newContents = contents.replace(find, replace); if (newContents === contents) { return false; } @@ -60,9 +60,9 @@ module.exports = function replaceInFile(config, cb) { } //Initialize helper vars - var totalFiles = config.files.length; - var processedFiles = 0; - var changedFiles = []; + let totalFiles = config.files.length; + let processedFiles = 0; + let changedFiles = []; //No callback given? Perform sync operation if (!cb) { diff --git a/package.json b/package.json index 894c2f5..79d7d26 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,7 @@ ], "main": "index.js", "scripts": { - "lint": "npm run lint:jshint -s && npm run lint:jscs -s", - "lint:jshint": "jshint . --reporter=node_modules/jshint-stylish", - "lint:jscs": "jscs . --reporter=node_modules/jscs-stylish", + "lint": "eslint . --fix", "pretest": "npm run lint -s", "istanbul": "babel-node ./node_modules/istanbul/lib/cli cover ./node_modules/mocha/bin/_mocha test/**/*.spec.js", "test": "npm run istanbul -s", @@ -35,17 +33,14 @@ "coverage": "open -a \"Google Chrome\" ./coverage/lcov-report/index.html" }, "devDependencies": { - "babel-cli": "^6.9.0", - "babel-preset-es2015": "^6.9.0", - "bluebird": "^3.4.0", + "babel-cli": "^6.11.4", + "babel-preset-es2015": "^6.13.2", + "bluebird": "^3.4.1", "chai": "^3.5.0", "chai-as-promised": "^5.3.0", "dirty-chai": "^1.2.2", + "eslint": "^3.2.2", "istanbul": "^1.0.0-alpha.2", - "jscs": "^3.0.0", - "jscs-stylish": "^0.3.1", - "jshint": "^2.9.2", - "jshint-stylish": "^2.2.0", - "mocha": "^2.5.3" + "mocha": "^3.0.1" } } diff --git a/test/replace-in-file.spec.js b/test/replace-in-file.spec.js index 488a8c3..db52963 100644 --- a/test/replace-in-file.spec.js +++ b/test/replace-in-file.spec.js @@ -22,7 +22,7 @@ describe('Replace in file', () => { beforeEach(() => Promise.all([ writeFile('test1', testData, 'utf8'), writeFile('test2', testData, 'utf8'), - writeFile('test3', 'nope', 'utf8') + writeFile('test3', 'nope', 'utf8'), ])); /** @@ -31,7 +31,7 @@ describe('Replace in file', () => { afterEach(() => Promise.all([ deleteFile('test1'), deleteFile('test2'), - deleteFile('test3') + deleteFile('test3'), ])); /** @@ -46,7 +46,7 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }, () => { let test1 = fs.readFileSync('test1', 'utf8'); let test2 = fs.readFileSync('test2', 'utf8'); @@ -60,7 +60,7 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: 're place', - with: 'b' + with: 'b', }, () => { let test1 = fs.readFileSync('test1', 'utf8'); expect(test1).to.equal('a b c'); @@ -72,7 +72,7 @@ describe('Replace in file', () => { replace({ files: ['test1', 'test2'], replace: /re\splace/g, - with: 'b' + with: 'b', }, () => { let test1 = fs.readFileSync('test1', 'utf8'); let test2 = fs.readFileSync('test2', 'utf8'); @@ -86,7 +86,7 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }, (error) => { expect(error).to.equal(null); done(); @@ -97,7 +97,7 @@ describe('Replace in file', () => { replace({ files: 'nope', replace: /re\splace/g, - with: 'b' + with: 'b', }, (error) => { expect(error).not.to.equal(null); done(); @@ -108,18 +108,18 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }, (error, changedFiles) => { expect(changedFiles).to.be.instanceof(Array); done(); }); }); - it('should return in changed files if something was replaced', function(done) { + it('should return in files if something was replaced', function(done) { replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }, (error, changedFiles) => { expect(changedFiles).to.have.length(1); expect(changedFiles[0]).to.equal('test1'); @@ -127,11 +127,11 @@ describe('Replace in file', () => { }); }); - it('should not return in changed files if nothing replaced', function(done) { + it('should not return in files if nothing replaced', function(done) { replace({ files: 'test1', replace: 'nope', - with: 'b' + with: 'b', }, (error, changedFiles) => { expect(changedFiles).to.have.length(0); done(); @@ -142,7 +142,7 @@ describe('Replace in file', () => { replace({ files: ['test1', 'test2', 'test3'], replace: /re\splace/g, - with: 'b' + with: 'b', }, (error, changedFiles) => { expect(changedFiles).to.have.length(2); expect(changedFiles).to.contain('test1'); @@ -164,7 +164,7 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }); let test1 = fs.readFileSync('test1', 'utf8'); let test2 = fs.readFileSync('test2', 'utf8'); @@ -176,7 +176,7 @@ describe('Replace in file', () => { replace({ files: 'test1', replace: 're place', - with: 'b' + with: 'b', }); let test1 = fs.readFileSync('test1', 'utf8'); expect(test1).to.equal('a b c'); @@ -186,7 +186,7 @@ describe('Replace in file', () => { replace({ files: ['test1', 'test2'], replace: /re\splace/g, - with: 'b' + with: 'b', }); let test1 = fs.readFileSync('test1', 'utf8'); let test2 = fs.readFileSync('test2', 'utf8'); @@ -198,7 +198,7 @@ describe('Replace in file', () => { let changedFiles = replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }); expect(changedFiles).to.be.instanceof(Array); }); @@ -207,7 +207,7 @@ describe('Replace in file', () => { let changedFiles = replace({ files: 'test1', replace: /re\splace/g, - with: 'b' + with: 'b', }); expect(changedFiles).to.have.length(1); expect(changedFiles[0]).to.equal('test1'); @@ -217,7 +217,7 @@ describe('Replace in file', () => { let changedFiles = replace({ files: 'test1', replace: 'nope', - with: 'b' + with: 'b', }); expect(changedFiles).to.have.length(0); }); @@ -226,7 +226,7 @@ describe('Replace in file', () => { let changedFiles = replace({ files: ['test1', 'test2', 'test3'], replace: /re\splace/g, - with: 'b' + with: 'b', }); expect(changedFiles).to.have.length(2); expect(changedFiles).to.contain('test1');