From 2f53bf777e09431798e5c997e79fab12ca8a7c2e Mon Sep 17 00:00:00 2001 From: Rodrigo Fernandes Date: Tue, 12 Jul 2016 13:47:29 +0100 Subject: [PATCH] Use ESLint instead of JSCS --- .eslintrc | 344 ++++++++++++++++++++++++++++ .jscsrc | 49 ---- package.json | 4 +- src/diff-parser.js | 16 +- src/diff2html.js | 3 - src/file-list-printer.js | 2 - src/hoganjs-utils.js | 2 - src/html-printer.js | 2 - src/line-by-line-printer.js | 3 - src/printer-utils.js | 3 - src/rematch.js | 16 +- src/side-by-side-printer.js | 3 - src/ui/js/diff2html-ui.js | 33 ++- src/ui/js/highlight.js-internals.js | 19 +- src/utils.js | 4 +- 15 files changed, 379 insertions(+), 124 deletions(-) create mode 100644 .eslintrc delete mode 100644 .jscsrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..0a24ca6 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,344 @@ +{ + "parserOptions": { + "ecmaVersion": 6, + "ecmaFeatures": { + "experimentalObjectRestSpread": true, + "jsx": true + }, + "sourceType": "module" + }, + "env": { + "es6": true, + "node": true, + "browser": true, + "commonjs": true, + "jquery": true, + "phantomjs": true, + "jasmine": true, + "mocha": true, + "amd": true, + "worker": true, + "qunit": true + }, + "plugins": [ + "standard", + "promise" + ], + "globals": { + "document": false, + "navigator": false, + "window": false + }, + "rules": { + "accessor-pairs": 2, + "arrow-spacing": [ + 2, + { + "before": true, + "after": true + } + ], + "block-spacing": [ + 2, + "always" + ], + "brace-style": [ + 2, + "1tbs", + { + "allowSingleLine": true + } + ], + "camelcase": [ + 2, + { + "properties": "never" + } + ], + "comma-dangle": [ + 2, + "never" + ], + "comma-spacing": [ + 2, + { + "before": false, + "after": true + } + ], + "comma-style": [ + 2, + "last" + ], + "constructor-super": 2, + "curly": [ + 2, + "multi-line" + ], + "dot-location": [ + 2, + "property" + ], + "eol-last": 2, + "eqeqeq": [ + 2, + "allow-null" + ], + "generator-star-spacing": [ + 2, + { + "before": true, + "after": true + } + ], + "handle-callback-err": [ + 2, + "^(err|error)$" + ], + "indent": [ + 2, + 2, + { + "SwitchCase": 1 + } + ], + "jsx-quotes": [ + 2, + "prefer-single" + ], + "key-spacing": [ + 2, + { + "beforeColon": false, + "afterColon": true + } + ], + "keyword-spacing": [ + 2, + { + "before": true, + "after": true + } + ], + "new-cap": [ + 2, + { + "newIsCap": true, + "capIsNew": false + } + ], + "new-parens": 2, + "no-array-constructor": 2, + "no-caller": 2, + "no-class-assign": 2, + "no-cond-assign": 2, + "no-const-assign": 2, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-dupe-args": 2, + "no-dupe-class-members": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-duplicate-imports": 2, + "no-empty-character-class": 2, + "no-empty-pattern": 2, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": [ + 2, + "functions" + ], + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inner-declarations": [ + 2, + "functions" + ], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": [ + 2, + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [ + 2, + { + "max": 1 + } + ], + "no-native-reassign": 2, + "no-negated-in-lhs": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-require": 2, + "no-new-symbol": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-path-concat": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-return-assign": [ + 2, + "except-parens" + ], + "no-self-assign": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-unexpected-multiline": 2, + "no-unmodified-loop-condition": 2, + "no-unneeded-ternary": [ + 2, + { + "defaultAssignment": false + } + ], + "no-unreachable": 2, + "no-unsafe-finally": 2, + "no-unused-vars": [ + 2, + { + "vars": "all", + "args": "none" + } + ], + "no-useless-call": 2, + "no-useless-computed-key": 2, + "no-useless-constructor": 2, + "no-useless-escape": 2, + "no-whitespace-before-property": 2, + "no-with": 2, + "one-var": [ + 2, + { + "initialized": "never" + } + ], + "operator-linebreak": [ + 2, + "after", + { + "overrides": { + "?": "before", + ":": "before" + } + } + ], + "padded-blocks": [ + 2, + "never" + ], + "quotes": [ + 2, + "single", + "avoid-escape" + ], + "semi": [ + 2, + "always" + ], + "semi-spacing": [ + 2, + { + "before": false, + "after": true + } + ], + "space-before-blocks": [ + 2, + "always" + ], + "space-before-function-paren": [ + 2, + "never" + ], + "space-in-parens": [ + 2, + "never" + ], + "space-infix-ops": 2, + "space-unary-ops": [ + 2, + { + "words": true, + "nonwords": false + } + ], + "spaced-comment": [ + 2, + "always", + { + "markers": [ + "global", + "globals", + "eslint", + "eslint-disable", + "*package", + "!", + "," + ] + } + ], + "template-curly-spacing": [ + 2, + "never" + ], + "use-isnan": 2, + "valid-typeof": 2, + "wrap-iife": [ + 2, + "any" + ], + "yield-star-spacing": [ + 2, + "both" + ], + "yoda": [ + 2, + "never" + ], + "standard/object-curly-even-spacing": [ + 2, + "either" + ], + "standard/array-bracket-even-spacing": [ + 2, + "either" + ], + "standard/computed-property-even-spacing": [ + 2, + "even" + ], + "promise/param-names": 2, + "linebreak-style": [ + 2, + "unix" + ] + } +} diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index 8d2a6cc..0000000 --- a/.jscsrc +++ /dev/null @@ -1,49 +0,0 @@ -{ - "disallowKeywords": [ - "with" - ], - "disallowKeywordsOnNewLine": [ - "else" - ], - "disallowMixedSpacesAndTabs": true, - "disallowMultipleVarDecl": { - "allExcept": [ - "undefined" - ] - }, - "disallowNewlineBeforeBlockStatements": true, - "disallowSpaceAfterObjectKeys": true, - "disallowSpaceAfterPrefixUnaryOperators": true, - "disallowSpacesInFunction": { - "beforeOpeningRoundBrace": true - }, - "disallowSpacesInsideParentheses": true, - "disallowTrailingWhitespace": true, - "maximumLineLength": 130, - "requireCamelCaseOrUpperCaseIdentifiers": true, - "requireCapitalizedConstructors": true, - "requireSpaceAfterKeywords": [ - "if", - "else", - "for", - "while", - "do", - "switch", - "case", - "return", - "try", - "catch", - "typeof" - ], - "requireSpaceAfterLineComment": true, - "requireSpaceAfterBinaryOperators": true, - "requireSpaceBeforeBinaryOperators": true, - "requireSpaceBeforeBlockStatements": true, - "requireSpaceBeforeObjectValues": true, - "requireSpacesInFunction": { - "beforeOpeningCurlyBrace": true - }, - "requireTrailingComma": null, - "validateIndentation": 2, - "validateLineBreaks": "LF" -} diff --git a/package.json b/package.json index cf28aee..397e482 100644 --- a/package.json +++ b/package.json @@ -61,9 +61,11 @@ "browserify": "^13.0.1", "clean-css": "^3.4.18", "codacy-coverage": "^1.1.3", + "eslint": "^3.0.1", + "eslint-plugin-promise": "^1.3.2", + "eslint-plugin-standard": "^1.3.2", "fast-html-parser": "^1.0.1", "istanbul": "^0.4.4", - "jscs": "^3.0.6", "mkdirp": "^0.5.1", "mocha": "^2.5.3", "nopt": "^3.0.6", diff --git a/src/diff-parser.js b/src/diff-parser.js index 9672c0b..2dc0e92 100644 --- a/src/diff-parser.js +++ b/src/diff-parser.js @@ -6,7 +6,6 @@ */ (function() { - var utils = require('./utils.js').Utils; var LINE_TYPE = { @@ -82,17 +81,17 @@ * number of lines is optional, if omited consider 0 */ - if (values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line)) { + if ((values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line))) { currentFile.isCombined = false; oldLine = values[1]; newLine = values[2]; - } else if (values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line)) { + } else if ((values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line))) { currentFile.isCombined = true; oldLine = values[1]; oldLine2 = values[2]; newLine = values[3]; } else { - console.error("Failed to parse lines, starting in 0!"); + console.error('Failed to parse lines, starting in 0!'); oldLine = 0; newLine = 0; currentFile.isCombined = false; @@ -123,7 +122,6 @@ currentLine.newNumber = newLine++; currentBlock.lines.push(currentLine); - } else if (utils.startsWith(line, delLinePrefixes)) { currentFile.deletedLines++; @@ -132,7 +130,6 @@ currentLine.newNumber = null; currentBlock.lines.push(currentLine); - } else { currentLine.type = LINE_TYPE.CONTEXT; currentLine.oldNumber = oldLine++; @@ -219,7 +216,6 @@ (utils.startsWith(line, newFileNameHeader) && utils.startsWith(prevLine, oldFileNameHeader) && utils.startsWith(nxtLine, hunkHeaderPrefix)) ) { - /* * --- Date Timestamp[FractionalSeconds] TimeZone * --- 2002-02-21 23:30:39.942229878 -0800 @@ -241,7 +237,6 @@ currentFile.language = getExtension(currentFile.newName, currentFile.language); return; } - } if (currentFile && utils.startsWith(line, hunkHeaderPrefix)) { @@ -325,7 +320,7 @@ } function getSrcFilename(line, cfg) { - var prefixes = ["a/", "i/", "w/", "c/", "o/"]; + var prefixes = ['a/', 'i/', 'w/', 'c/', 'o/']; if (cfg.srcPrefix) { prefixes.push(cfg.srcPrefix); @@ -335,7 +330,7 @@ } function getDstFilename(line, cfg) { - var prefixes = ["b/", "i/", "w/", "c/", "o/"]; + var prefixes = ['b/', 'i/', 'w/', 'c/', 'o/']; if (cfg.dstPrefix) { prefixes.push(cfg.dstPrefix); @@ -365,5 +360,4 @@ } module.exports.DiffParser = new DiffParser(); - })(); diff --git a/src/diff2html.js b/src/diff2html.js index 0fe622f..21b0119 100644 --- a/src/diff2html.js +++ b/src/diff2html.js @@ -6,7 +6,6 @@ */ (function() { - var diffParser = require('./diff-parser.js').DiffParser; var fileLister = require('./file-list-printer.js').FileListPrinter; var htmlPrinter = require('./html-printer.js').HtmlPrinter; @@ -57,7 +56,6 @@ return fileList + diffOutput; }; - /* * Deprecated methods - The following methods exist only to maintain compatibility with previous versions */ @@ -107,5 +105,4 @@ // Expose diff2html in the browser global.Diff2Html = diffObject; - })(); diff --git a/src/file-list-printer.js b/src/file-list-printer.js index 18ccbbe..e408d9b 100644 --- a/src/file-list-printer.js +++ b/src/file-list-printer.js @@ -6,7 +6,6 @@ */ (function() { - var printerUtils = require('./printer-utils.js').PrinterUtils; var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; @@ -40,5 +39,4 @@ }; module.exports.FileListPrinter = new FileListPrinter(); - })(); diff --git a/src/hoganjs-utils.js b/src/hoganjs-utils.js index 70a5d12..9949e5f 100644 --- a/src/hoganjs-utils.js +++ b/src/hoganjs-utils.js @@ -6,7 +6,6 @@ */ (function() { - var fs = require('fs'); var path = require('path'); @@ -75,5 +74,4 @@ }; module.exports.HoganJsUtils = new HoganJsUtils(); - })(); diff --git a/src/html-printer.js b/src/html-printer.js index f954c25..585d5b6 100644 --- a/src/html-printer.js +++ b/src/html-printer.js @@ -6,7 +6,6 @@ */ (function() { - var LineByLinePrinter = require('./line-by-line-printer.js').LineByLinePrinter; var SideBySidePrinter = require('./side-by-side-printer.js').SideBySidePrinter; @@ -24,5 +23,4 @@ }; module.exports.HtmlPrinter = new HtmlPrinter(); - })(); diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index 6e7e4e6..cb18638 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -6,7 +6,6 @@ */ (function() { - var diffParser = require('./diff-parser.js').DiffParser; var printerUtils = require('./printer-utils.js').PrinterUtils; var utils = require('./utils.js').Utils; @@ -79,7 +78,6 @@ LineByLinePrinter.prototype._generateFileHtml = function(file) { var that = this; return file.blocks.map(function(block) { - var lines = that.makeColumnLineNumberHtml(block); var oldLines = []; var newLines = []; @@ -209,5 +207,4 @@ }; module.exports.LineByLinePrinter = LineByLinePrinter; - })(); diff --git a/src/printer-utils.js b/src/printer-utils.js index 1add31c..b4e39f5 100644 --- a/src/printer-utils.js +++ b/src/printer-utils.js @@ -6,7 +6,6 @@ */ (function() { - var jsDiff = require('diff'); var utils = require('./utils.js').Utils; var Rematch = require('./rematch.js').Rematch; @@ -85,7 +84,6 @@ } return oldFilename + ' → ' + newFilename; - } else if (newFilename && !isDevNullName(newFilename)) { return newFilename; } else if (oldFilename) { @@ -217,5 +215,4 @@ } module.exports.PrinterUtils = new PrinterUtils(); - })(); diff --git a/src/rematch.js b/src/rematch.js index 2f55b47..bad5665 100644 --- a/src/rematch.js +++ b/src/rematch.js @@ -7,7 +7,6 @@ */ (function() { - var Rematch = {}; /* @@ -23,10 +22,10 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ function levenshtein(a, b) { - if (a.length == 0) { + if (a.length === 0) { return b.length; } - if (b.length == 0) { + if (b.length === 0) { return a.length; } @@ -47,7 +46,7 @@ // Fill in the rest of the matrix for (i = 1; i <= b.length; i++) { for (j = 1; j <= a.length; j++) { - if (b.charAt(i - 1) == a.charAt(j - 1)) { + if (b.charAt(i - 1) === a.charAt(j - 1)) { matrix[i][j] = matrix[i - 1][j - 1]; } else { matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // Substitution @@ -73,12 +72,6 @@ Rematch.rematch = function rematch(distanceFunction) { function findBestMatch(a, b, cache) { - var cachecount = 0; - - for (var key in cache) { - cachecount++; - } - var bestMatchDist = Infinity; var bestMatch; for (var i = 0; i < a.length; ++i) { @@ -102,7 +95,7 @@ } function group(a, b, level, cache) { - if (typeof (cache) === "undefined") { + if (typeof (cache) === 'undefined') { cache = {}; } @@ -145,5 +138,4 @@ }; module.exports.Rematch = Rematch; - })(); diff --git a/src/side-by-side-printer.js b/src/side-by-side-printer.js index c990842..c554835 100644 --- a/src/side-by-side-printer.js +++ b/src/side-by-side-printer.js @@ -6,7 +6,6 @@ */ (function() { - var diffParser = require('./diff-parser.js').DiffParser; var printerUtils = require('./printer-utils.js').PrinterUtils; var utils = require('./utils.js').Utils; @@ -81,7 +80,6 @@ fileHtml.right = ''; file.blocks.forEach(function(block) { - fileHtml.left += that.makeSideHtml(block.header); fileHtml.right += that.makeSideHtml(''); @@ -244,5 +242,4 @@ }; module.exports.SideBySidePrinter = SideBySidePrinter; - })(); diff --git a/src/ui/js/diff2html-ui.js b/src/ui/js/diff2html-ui.js index 4d1a002..5210731 100644 --- a/src/ui/js/diff2html-ui.js +++ b/src/ui/js/diff2html-ui.js @@ -11,11 +11,10 @@ /*global $, hljs, Diff2Html*/ (function() { - var highlightJS = require('./highlight.js-internals.js').HighlightJS; var diffJson = null; - var defaultTarget = "body"; + var defaultTarget = 'body'; var currentSelectionColumnId = -1; function Diff2HtmlUI(config) { @@ -40,13 +39,11 @@ function synchronisedScroll($target, config) { if (config.synchronisedScroll) { - - $target.find(".d2h-file-side-diff").scroll(function() { + $target.find('.d2h-file-side-diff').scroll(function() { var $this = $(this); - $this.closest(".d2h-file-wrapper").find(".d2h-file-side-diff") + $this.closest('.d2h-file-wrapper').find('.d2h-file-side-diff') .scrollLeft($this.scrollLeft()); }); - } } @@ -55,9 +52,9 @@ var hashTag = this._getHashTag(); - var $showBtn = $target.find(".d2h-show"); - var $hideBtn = $target.find(".d2h-hide"); - var $fileList = $target.find(".d2h-file-list"); + var $showBtn = $target.find('.d2h-show'); + var $hideBtn = $target.find('.d2h-hide'); + var $fileList = $target.find('.d2h-file-list'); if (hashTag === 'files-summary-show') show(); else if (hashTag === 'files-summary-hide') hide(); @@ -86,22 +83,22 @@ var $target = that._getTarget(targetId); // collect all the diff files and execute the highlight on their lines - var $files = $target.find(".d2h-file-wrapper"); + var $files = $target.find('.d2h-file-wrapper'); $files.map(function(_i, file) { var oldLinesState; var newLinesState; var $file = $(file); - var language = $file.data("lang"); + var language = $file.data('lang'); // collect all the code lines and execute the highlight on them - var $codeLines = $file.find(".d2h-code-line-ctn"); + var $codeLines = $file.find('.d2h-code-line-ctn'); $codeLines.map(function(_j, line) { var $line = $(line); var text = line.textContent; var lineParent = line.parentNode; var lineState; - if (lineParent.className.indexOf("d2h-del") !== -1) { + if (lineParent.className.indexOf('d2h-del') !== -1) { lineState = oldLinesState; } else { lineState = newLinesState; @@ -109,9 +106,9 @@ var result = hljs.getLanguage(language) ? hljs.highlight(language, text, true, lineState) : hljs.highlightAuto(text); - if (lineParent.className.indexOf("d2h-del") !== -1) { + if (lineParent.className.indexOf('d2h-del') !== -1) { oldLinesState = result.top; - } else if (lineParent.className.indexOf("d2h-ins") !== -1) { + } else if (lineParent.className.indexOf('d2h-ins') !== -1) { newLinesState = result.top; } else { oldLinesState = result.top; @@ -125,7 +122,7 @@ result.value = highlightJS.mergeStreams(originalStream, highlightJS.nodeStream(resultNode), text); } - $line.addClass("hljs"); + $line.addClass('hljs'); $line.addClass(result.language); $line.html(result.value); }); @@ -141,7 +138,7 @@ $target = $(targetId); } else { console.error("Wrong target provided! Falling back to default value 'body'."); - console.log("Please provide a jQuery object or a valid DOM query string."); + console.log('Please provide a jQuery object or a valid DOM query string.'); $target = $(defaultTarget); } @@ -193,7 +190,6 @@ }); }; - Diff2HtmlUI.prototype._getSelectedText = function() { var sel = window.getSelection(); var range = sel.getRangeAt(0); @@ -218,5 +214,4 @@ // Expose diff2html in the browser global.Diff2HtmlUI = Diff2HtmlUI; - })(); diff --git a/src/ui/js/highlight.js-internals.js b/src/ui/js/highlight.js-internals.js index 8bac6b4..3c7c790 100644 --- a/src/ui/js/highlight.js-internals.js +++ b/src/ui/js/highlight.js-internals.js @@ -6,7 +6,6 @@ */ (function() { - function HighlightJS() { } @@ -31,9 +30,9 @@ var result = []; (function _nodeStream(node, offset) { for (var child = node.firstChild; child; child = child.nextSibling) { - if (child.nodeType == 3) + if (child.nodeType === 3) { offset += child.nodeValue.length; - else if (child.nodeType == 1) { + } else if (child.nodeType === 1) { result.push({ event: 'start', offset: offset, @@ -66,7 +65,7 @@ if (!original.length || !highlighted.length) { return original.length ? original : highlighted; } - if (original[0].offset != highlighted[0].offset) { + if (original[0].offset !== highlighted[0].offset) { return (original[0].offset < highlighted[0].offset) ? original : highlighted; } @@ -83,7 +82,7 @@ return highlighted; ... which is collapsed to: */ - return highlighted[0].event == 'start' ? original : highlighted; + return highlighted[0].event === 'start' ? original : highlighted; } function open(node) { @@ -99,15 +98,14 @@ } function render(event) { - (event.event == 'start' ? open : close)(event.node); + (event.event === 'start' ? open : close)(event.node); } while (original.length || highlighted.length) { var stream = selectStream(); result += escape(value.substr(processed, stream[0].offset - processed)); processed = stream[0].offset; - if (stream == original) { - + if (stream === original) { /* On any opening or closing tag of the original markup we first close the entire highlighted node stack, then render the original tag along @@ -118,10 +116,10 @@ do { render(stream.splice(0, 1)[0]); stream = selectStream(); - } while (stream == original && stream.length && stream[0].offset == processed); + } while (stream === original && stream.length && stream[0].offset === processed); nodeStack.reverse().forEach(open); } else { - if (stream[0].event == 'start') { + if (stream[0].event === 'start') { nodeStack.push(stream[0].node); } else { nodeStack.pop(); @@ -135,5 +133,4 @@ /* **** Highlight.js Private API **** */ module.exports.HighlightJS = new HighlightJS(); - })(); diff --git a/src/utils.js b/src/utils.js index e7b2b6f..341204c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,7 +6,6 @@ */ (function() { - function Utils() { } @@ -38,9 +37,8 @@ }; Utils.prototype.valueOrEmpty = function(value) { - return value ? value : ''; + return value || ''; }; module.exports.Utils = new Utils(); - })();