diff options
author | Mike Rennie <Michael_Rennie@ca.ibm.com> | 2016-11-29 11:27:13 -0500 |
---|---|---|
committer | Mike Rennie <Michael_Rennie@ca.ibm.com> | 2016-11-29 11:29:57 -0500 |
commit | 3e55216911241c49b0a9ab4c47194f3d0302d50e (patch) | |
tree | 55fff55ab941cff2bde285b2d18679259e71d73f | |
parent | 9baee90bbefa6982aceadab8a283b90647860e0d (diff) | |
download | org.eclipse.orion.client-3e55216911241c49b0a9ab4c47194f3d0302d50e.zip org.eclipse.orion.client-3e55216911241c49b0a9ab4c47194f3d0302d50e.tar.gz org.eclipse.orion.client-3e55216911241c49b0a9ab4c47194f3d0302d50e.tar.bz2 |
Bug 508392 - [quickfix] Use isNaN fix breaks code logic
-rw-r--r-- | bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/quickfixes.js | 2365 | ||||
-rw-r--r-- | bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/quickfixTests.js | 1001 |
2 files changed, 1731 insertions, 1635 deletions
diff --git a/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/quickfixes.js b/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/quickfixes.js index ee927d9..116d760 100644 --- a/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/quickfixes.js +++ b/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/quickfixes.js @@ -1,10 +1,10 @@ /******************************************************************************* * @license * Copyright (c) 2016 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials are made - * available under the terms of the Eclipse Public License v1.0 - * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution - * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). + * All rights reserved. This program and the accompanying materials are made + * available under the terms of the Eclipse Public License v1.0 + * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution + * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). * * Contributors: * IBM Corporation - initial API and implementation @@ -17,10 +17,10 @@ define([ tern.registerPlugin("quickfixes", /* @callback */ function(server, options) { //$NON-NLS-1$ return { - //no pass hooks needed - }; + //no pass hooks needed + }; }); - + tern.defineQueryType("fixes", { //$NON-NLS-1$ takesFile: true, /** @@ -30,7 +30,7 @@ define([ return computeFixes(query, file); } }); - + var availableFixes = { /** * @description Fix for 'radix' problem @@ -149,7 +149,7 @@ define([ if(parent.arguments.length > 0) { var str = parent.arguments[0]; if(str.type === 'Literal') { - s = String(str.value); + s = String(str.value); } else if(str.type === 'Identifier') { if(str.name === 'undefined') { s = String(undefined); @@ -202,7 +202,7 @@ define([ } else { b = Boolean(arg.name); } - } else if(arg.type === 'UnaryExpression' && arg.operator === '-' && + } else if(arg.type === 'UnaryExpression' && arg.operator === '-' && arg.argument.type === 'Literal' && typeof arg.argument.value === 'number') { b = false; } @@ -226,7 +226,7 @@ define([ var tok = Finder.findToken(annot.end, file.ast.tokens); if(tok && tok.type === 'Punctuator' && tok.value === ';') { end = tok.range[1]; - } + } return {text: '', start: annot.start, end: end}; }); }, @@ -314,13 +314,13 @@ define([ return {text: '()', start: node.range[1], end: node.range[1]}; //$NON-NLS-1$ } }, - /** + /** * @description fix for the missing-nls rule - * @function + * @function * @callback */ "missing-nls": function(annotation, annotations, file){ - return applySingleFixToAll(annotations, function(annot) { + return applySingleFixToAll(annotations, function(annot) { if(annot.data && typeof annot.data.indexOnLine === 'number') { // Insert the correct non nls comment var end = getLineEnd(file.ast.sourceFile.text, annot.end); @@ -330,9 +330,9 @@ define([ } }); }, - /** + /** * @description fix for the 'no-comma-dangle' rule - * @function + * @function * @callback */ "no-comma-dangle": function(annotation, annotations, file) { @@ -344,9 +344,9 @@ define([ return {text: '', start: annot.start, end: end}; }); }, - /** + /** * @description fix for the 'no-comma-dangle' rule - * @function + * @function * @callback */ "no-empty-block": function(annotation, annotations, file) { @@ -357,9 +357,9 @@ define([ fix += computePostfix(file.ast.sourceFile.text, annotation); return {text: fix, start: annotation.start+1, end: annotation.start+1}; }, - /** + /** * @description fix for the 'no-extra-parens' rule - * @function + * @function * @callback */ "no-extra-parens": function(annotation, annotations, file) { @@ -395,9 +395,9 @@ define([ } }); }, - /** + /** * @description fix for the 'no-extra-semi' rule - * @function + * @function * @callback */ "no-extra-semi": function(annotation, annotations, file) { @@ -405,9 +405,9 @@ define([ return {text: '', start: currentAnnotation.start, end: currentAnnotation.end}; }); }, - /** + /** * @description fix for the 'no-fallthrough' rule - * @function + * @function * @callback */ "no-fallthrough": function(annotation, annotations, file) { @@ -417,9 +417,9 @@ define([ fix += computePostfix(file.ast.sourceFile.text, annotation, indent); return {text: fix, start: annotation.start, end: annotation.start}; }, - /** + /** * @description fix for the 'no-fallthrough-break' rule - * @function + * @function * @callback */ "no-fallthrough-break": function(annotation, annotations, file) { @@ -429,30 +429,30 @@ define([ fix += computePostfix(file.ast.sourceFile.text, annotation, indent); return {text: fix, start: annotation.start, end: annotation.start}; }, - /** + /** * @description fix for the 'no-new-array' rule - * @function + * @function * @callback */ "no-new-array": function(annotation, annotations, file) { - var node = Finder.findNode(annotation.start, file.ast, {parents:true}); - if(node && node.parents) { - var p = node.parents[node.parents.length-1]; - if(p.type === 'CallExpression' || p.type === 'NewExpression') { - var fix = ''; - if(p.arguments.length > 0) { - var start = p.arguments[0].range[0], end = p.arguments[p.arguments.length-1].range[1]; - fix += '[' + file.ast.sourceFile.text.substring(start, end) + ']'; - } else { - fix += '[]'; //$NON-NLS-1$ - } - return {text: fix, start: p.start, end: p.end}; - } - } + var node = Finder.findNode(annotation.start, file.ast, {parents:true}); + if(node && node.parents) { + var p = node.parents[node.parents.length-1]; + if(p.type === 'CallExpression' || p.type === 'NewExpression') { + var fix = ''; + if(p.arguments.length > 0) { + var start = p.arguments[0].range[0], end = p.arguments[p.arguments.length-1].range[1]; + fix += '[' + file.ast.sourceFile.text.substring(start, end) + ']'; + } else { + fix += '[]'; //$NON-NLS-1$ + } + return {text: fix, start: p.start, end: p.end}; + } + } }, - /** + /** * @description fix for the 'no-reserved-keys' rule - * @function + * @function * @callback */ "no-reserved-keys": function(annotation, annotations, file) { @@ -475,9 +475,9 @@ define([ } }); }, - /** + /** * @description fix for the 'no-throw-literal' rule - * @function + * @function * @callback */ "no-throw-literal": function(annotation, annotations, file) { @@ -485,9 +485,9 @@ define([ var source = node.raw || file.ast.sourceFile.text.slice(node.range[0], node.range[1]); return {text: 'new Error(' + source + ')', start: annotation.start, end: annotation.end}; //$NON-NLS-1$ }, - /** + /** * @description fix for the 'no-undef-defined' rule - * @function + * @function * @callback */ "no-undef-defined": function(annotation, annotations, file) { @@ -497,7 +497,7 @@ define([ function assignLike(node) { if(node && node.parents && node.parents.length > 0 && node.type === 'Identifier') { var parent = node.parents.pop(); - return parent && (parent.type === 'AssignmentExpression' || parent.type === 'UpdateExpression'); + return parent && (parent.type === 'AssignmentExpression' || parent.type === 'UpdateExpression'); } return false; } @@ -516,15 +516,15 @@ define([ return {text: updateDirective(comment.value, 'globals', insert), start: start, end: start+comment.value.length}; //$NON-NLS-1$ } var point = getDirectiveInsertionPoint(file.ast); - var linestart = getLineStart(file.ast.sourceFile.text, point); - var indent = computeIndent(file.ast.sourceFile.text, linestart, false); - var fix = '/*globals '+insert+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ + var linestart = getLineStart(file.ast.sourceFile.text, point); + var indent = computeIndent(file.ast.sourceFile.text, linestart, false); + var fix = '/*globals '+insert+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ return {text: fix, start: point, end: point}; } }, - /** + /** * @description fix for the 'no-undef-defined-inenv' rule - * @function + * @function * @callback */ "no-undef-defined-inenv": function(annotation, annotations, file) { @@ -539,32 +539,32 @@ define([ * @since 12.0 */ function getEnv(name) { - switch(name) { - case 'require': { - if(file.ast.environments) { - if(file.ast.environments.node && !file.ast.environments.amd) { - return 'node'; - } - if(file.ast.environments.node && file.ast.environments.amd) { - return 'amd'; - } - if(file.ast.environments.amd) { - return 'amd'; - } - } - break; - } - case 'console': { - if(file.ast.environments) { - if(file.ast.environments.node && !file.ast.environments.amd) { - return 'node'; - } - return 'browser'; - } - break; - } - } - return Finder.findESLintEnvForMember(name); + switch(name) { + case 'require': { + if(file.ast.environments) { + if(file.ast.environments.node && !file.ast.environments.amd) { + return 'node'; + } + if(file.ast.environments.node && file.ast.environments.amd) { + return 'amd'; + } + if(file.ast.environments.amd) { + return 'amd'; + } + } + break; + } + case 'console': { + if(file.ast.environments) { + if(file.ast.environments.node && !file.ast.environments.amd) { + return 'node'; + } + return 'browser'; + } + break; + } + } + return Finder.findESLintEnvForMember(name); } var env = getEnv(name); if(env) { @@ -574,1204 +574,1219 @@ define([ return {text: updateDirective(comment.value, 'eslint-env', env, true), start: start, end: start+comment.value.length}; //$NON-NLS-1$ } var point = getDirectiveInsertionPoint(file.ast); - var linestart = getLineStart(file.ast.sourceFile.text, point); - var indent = computeIndent(file.ast.sourceFile.text, linestart, false); - var fix = '/*eslint-env '+env+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ + var linestart = getLineStart(file.ast.sourceFile.text, point); + var indent = computeIndent(file.ast.sourceFile.text, linestart, false); + var fix = '/*eslint-env '+env+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ return {text: fix, start: point, end: point}; } } }, /** * @description Fix for the 'unknown-require-missing-env' rule - * @function - * @callback + * @function + * @callback * @since 12.0 */ "unknown-require-missing-env": function(annotation, annotations, file) { - var name = annotation.data; - if(typeof name === 'string') { - var start, - comment = Finder.findDirective(file.ast, 'eslint-env'); //$NON-NLS-1$ + var name = annotation.data; + if(typeof name === 'string') { + var start, + comment = Finder.findDirective(file.ast, 'eslint-env'); //$NON-NLS-1$ if(comment) { start = getDocOffset(file.ast.sourceFile.text, comment.range[0]) + comment.range[0]; return {text: updateDirective(comment.value, 'eslint-env', name, true), start: start, end: start+comment.value.length}; //$NON-NLS-1$ } var point = getDirectiveInsertionPoint(file.ast); - var linestart = getLineStart(file.ast.sourceFile.text, point); - var indent = computeIndent(file.ast.sourceFile.text, linestart, false); - var fix = '/*eslint-env '+name+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ + var linestart = getLineStart(file.ast.sourceFile.text, point); + var indent = computeIndent(file.ast.sourceFile.text, linestart, false); + var fix = '/*eslint-env '+name+' */\n' + indent; //$NON-NLS-1$ //$NON-NLS-2$ return {text: fix, start: point, end: point}; - } + } }, - /** + /** * @description fix for the 'no-unreachable' rule - * @function + * @function * @callback */ "no-unreachable": function(annotation, annotations, file) { - return {text: '', start: annotation.start, end: annotation.end}; + return {text: '', start: annotation.start, end: annotation.end}; }, - /** + /** * @description fix for the 'no-unused-params' rule - * @function + * @function * @callback */ "no-unused-params": function(annotation, annotations, file) { - var analyzed = false; - var analyzeResult = {}; - return applySingleFixToAll(annotations, function(annot){ - if (!analyzed){ - for (var i = annotations.length - 1; i >= 0; i--) { - var element = annotations[i]; - var node = Finder.findNode(element.start, file.ast, {parents:true}); - var parent = node.parents.pop(); - if (parent){ - var parentLocation = parent.start.toString() + ":" + parent.end.toString(); - if (analyzeResult[parentLocation] || !(analyzeResult[parentLocation] = 0)){ - analyzeResult[parentLocation] += 1; - } - } - } - analyzed = true; - } - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - if(node) { - var changes = []; - var parent = node.parents.pop(); - var parentLocation = parent.start.toString() + ":" + parent.end.toString(); - var paramindex = -1; - var greedy = false; - for(var i = 0; i < parent.params.length; i++) { - var p = parent.params[i]; - if(node.range[0] === p.range[0] && node.range[1] === p.range[1]) { - paramindex = i; - break; - } - } - if (paramindex === 1 && analyzeResult[parentLocation] === parent.params.length - 1){ - greedy = true; - } - var change = removeIndexedItemChange(parent.params, paramindex, greedy); - if(change) { - changes.push(change); - } - switch(parent.type) { - case 'FunctionExpression': { - var funcparent = node.parents.pop(); - if(funcparent.type === 'CallExpression' && (funcparent.callee.name === 'define' || funcparent.callee.name === 'require')) { - var args = funcparent.arguments; - for(i = 0; i < args.length; i++) { - var arg = args[i]; - if(arg.type === 'ArrayExpression') { - if (arg.elements.length === 1) { - // we remove the last element in the array - change = { "start" : arg.range[0], "end" : arg.range[1], "text" : "[]" }; - } else { - change = removeIndexedItemChange(arg.elements, paramindex, false, arg); - } - if(change) { - changes.push(change); - } - break; - } - } - } else if(funcparent.type === 'Property' && funcparent.key.leadingComments && funcparent.key.leadingComments.length > 0) { - change = updateDoc(funcparent.key, file.ast.sourceFile.text, parent.params[paramindex].name); - if(change) { - changes.push(change); - } - } else if(funcparent.type === 'Property' && funcparent.leadingComments && funcparent.leadingComments.length > 0) { - change = updateDoc(funcparent, file.ast.sourceFile.text, parent.params[paramindex].name); - if(change) { - changes.push(change); - } - } - break; - } - case 'FunctionDeclaration': { - change = updateDoc(parent, file.ast.sourceFile.text, parent.params[paramindex].name); - if(change) { - changes.push(change); - } - break; - } - } - return changes; - } - }); - }, - /** - * @description fix for the 'no-unused-params-expr' rule - * @function - * @callback - */ - "no-unused-params-expr": function(annotation, annotations, file) { - /** - * @callback - */ - function updateCallback(node, ast, comments) { - if(Array.isArray(comments)) { - //attach it to the last one - var comment = comments[comments.length-1]; - if(comment.type === 'Block') { - var valueend = comment.range[0]+comment.value.length+getDocOffset(ast.sourceFile.text, comment.range[0]); - var start = getLineStart(ast.sourceFile.text, valueend); - var indent = computeIndent(ast.sourceFile.text, start); - var fix = "* @callback\n"+indent; //$NON-NLS-1$ - /*if(comment.value.charAt(valueend) !== '\n') { - fix = '\n' + fix; - }*/ - return {text: fix, start: valueend-1, end: valueend-1}; + var analyzed = false; + var analyzeResult = {}; + return applySingleFixToAll(annotations, function(annot){ + if (!analyzed){ + for (var i = annotations.length - 1; i >= 0; i--) { + var element = annotations[i]; + var node = Finder.findNode(element.start, file.ast, {parents:true}); + var parent = node.parents.pop(); + if (parent){ + var parentLocation = parent.start.toString() + ":" + parent.end.toString(); + if (analyzeResult[parentLocation] || !(analyzeResult[parentLocation] = 0)){ + analyzeResult[parentLocation] += 1; + } + } + } + analyzed = true; + } + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + if(node) { + var changes = []; + var parent = node.parents.pop(); + var parentLocation = parent.start.toString() + ":" + parent.end.toString(); + var paramindex = -1; + var greedy = false; + for(var i = 0; i < parent.params.length; i++) { + var p = parent.params[i]; + if(node.range[0] === p.range[0] && node.range[1] === p.range[1]) { + paramindex = i; + break; + } + } + if (paramindex === 1 && analyzeResult[parentLocation] === parent.params.length - 1){ + greedy = true; + } + var change = removeIndexedItemChange(parent.params, paramindex, greedy); + if(change) { + changes.push(change); + } + switch(parent.type) { + case 'FunctionExpression': { + var funcparent = node.parents.pop(); + if(funcparent.type === 'CallExpression' && (funcparent.callee.name === 'define' || funcparent.callee.name === 'require')) { + var args = funcparent.arguments; + for(i = 0; i < args.length; i++) { + var arg = args[i]; + if(arg.type === 'ArrayExpression') { + if (arg.elements.length === 1) { + // we remove the last element in the array + change = { "start" : arg.range[0], "end" : arg.range[1], "text" : "[]" }; + } else { + change = removeIndexedItemChange(arg.elements, paramindex, false, arg); + } + if(change) { + changes.push(change); + } + break; + } + } + } else if(funcparent.type === 'Property' && funcparent.key.leadingComments && funcparent.key.leadingComments.length > 0) { + change = updateDoc(funcparent.key, file.ast.sourceFile.text, parent.params[paramindex].name); + if(change) { + changes.push(change); + } + } else if(funcparent.type === 'Property' && funcparent.leadingComments && funcparent.leadingComments.length > 0) { + change = updateDoc(funcparent, file.ast.sourceFile.text, parent.params[paramindex].name); + if(change) { + changes.push(change); + } + } + break; + } + case 'FunctionDeclaration': { + change = updateDoc(parent, file.ast.sourceFile.text, parent.params[paramindex].name); + if(change) { + changes.push(change); + } + break; + } } + return changes; } - start = getLineStart(ast.sourceFile.text, node.range[0]); - indent = computeIndent(ast.sourceFile.text, start); - return {text: "/**\n"+indent+" * @callback\n"+indent+" */\n"+indent, start: node.range[0], end: node.range[0]}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - var node = Finder.findNode(annotation.start, file.ast, {parents:true}); - if(node && node.parents && node.parents.length > 0) { - var func = node.parents.pop(); - var p = node.parents.pop(); - var change; - switch(p.type) { - case 'Property': { - if(!hasDocTag(['@callback', '@public'], p) && !hasDocTag(['@callback', '@public'], p.key)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - change = updateCallback(p, file.ast, p.leadingComments ? p.leadingComments : p.key.leadingComments); - } - break; - } - case 'AssignmentExpression': { - var left = p.left; - var parent = null; - if (node.parents.length > 0) { - parent = node.parents.pop(); - } - if (parent === null) { - parent = left; - } - if(left.type === 'MemberExpression' && !hasDocTag(['@callback', '@public'], parent)) { //$NON-NLS-1$ //$NON-NLS-2$ - change = updateCallback(left, file.ast, parent.leadingComments); - } else if(left.type === 'Identifier' && !hasDocTag(['@callback', '@public'], parent)) { //$NON-NLS-1$ //$NON-NLS-2$ - change = updateCallback(p.left, file.ast, parent.leadingComments); - } - break; - } - case 'VariableDeclarator': { - var oldp = p; - p = node.parents.pop(); - if(p.declarations[0].range[0] === oldp.range[0] && p.declarations[0].range[1] === oldp.range[1]) { - //insert at the var keyword level to not mess up the code - var leadingComments = oldp.leadingComments; - if (!leadingComments) { - leadingComments = p.leadingComments; - } - change = updateCallback(p, file.ast, leadingComments); - } else if(!hasDocTag(['@callback', '@public'], oldp.id)) { //$NON-NLS-1$ //$NON-NLS-2$ - change = updateCallback(oldp, file.ast, oldp.leadingComments); - } - break; - } - } - if(!change && !hasDocTag(['@callback', '@public'], func)) { //$NON-NLS-1$ //$NON-NLS-2$ - return {text: "/* @callback */ ", start: func.range[0], end: func.range[0]}; //$NON-NLS-1$ - } - } - return change; + }); }, - /** - * @description fix for the 'no-unused-vars-unused' rule - * @function - * @callback - */ - "no-unused-vars-unused": function(annotation, annotations, file) { - var node = Finder.findNode(annotation.start, file.ast, {parents:true}); - if(node && node.parents && node.parents.length > 0) { - var declr = node.parents.pop(); - if(declr.type === 'VariableDeclarator') { - var decl = node.parents.pop(); - if(decl.type === 'VariableDeclaration') { - if(decl.declarations.length === 1) { - return {text: '', start: decl.range[0], end: decl.range[1]}; - } - var idx = indexOf(decl.declarations, declr); - if(idx > -1) { - var change = removeIndexedItemChange(decl.declarations, idx); - if(change) { - return {text: change.text, start: change.start, end: change.end}; - } - } - } - } - } - }, - /** - * @description fix for the 'no-unused-vars-unread' rule - * @function - * @callback - */ - "no-unused-vars-unread": function(annotation, annotations, file) { - function getQuickfix(node, child, parents) { - if (parents.length === 0) { - return null; - } - var decl, idx, change, properties, propertyIndex; - switch(node.type) { - case 'VariableDeclarator' : { - return getQuickfix(parents.pop(), node, parents); + /** + * @description fix for the 'no-unused-params-expr' rule + * @function + * @callback + */ + "no-unused-params-expr": function(annotation, annotations, file) { + /** + * @callback + */ + function updateCallback(node, ast, comments) { + if(Array.isArray(comments)) { + //attach it to the last one + var comment = comments[comments.length-1]; + if(comment.type === 'Block') { + var valueend = comment.range[0]+comment.value.length+getDocOffset(ast.sourceFile.text, comment.range[0]); + var start = getLineStart(ast.sourceFile.text, valueend); + var indent = computeIndent(ast.sourceFile.text, start); + var fix = "* @callback\n"+indent; //$NON-NLS-1$ + /*if(comment.value.charAt(valueend) !== '\n') { + fix = '\n' + fix; + }*/ + return {text: fix, start: valueend-1, end: valueend-1}; + } + } + start = getLineStart(ast.sourceFile.text, node.range[0]); + indent = computeIndent(ast.sourceFile.text, start); + return {text: "/**\n"+indent+" * @callback\n"+indent+" */\n"+indent, start: node.range[0], end: node.range[0]}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + var node = Finder.findNode(annotation.start, file.ast, {parents:true}); + if(node && node.parents && node.parents.length > 0) { + var func = node.parents.pop(); + var p = node.parents.pop(); + var change; + switch(p.type) { + case 'Property': { + if(!hasDocTag(['@callback', '@public'], p) && !hasDocTag(['@callback', '@public'], p.key)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + change = updateCallback(p, file.ast, p.leadingComments ? p.leadingComments : p.key.leadingComments); + } + break; + } + case 'AssignmentExpression': { + var left = p.left; + var parent = null; + if (node.parents.length > 0) { + parent = node.parents.pop(); + } + if (parent === null) { + parent = left; + } + if(left.type === 'MemberExpression' && !hasDocTag(['@callback', '@public'], parent)) { //$NON-NLS-1$ //$NON-NLS-2$ + change = updateCallback(left, file.ast, parent.leadingComments); + } else if(left.type === 'Identifier' && !hasDocTag(['@callback', '@public'], parent)) { //$NON-NLS-1$ //$NON-NLS-2$ + change = updateCallback(p.left, file.ast, parent.leadingComments); + } + break; + } + case 'VariableDeclarator': { + var oldp = p; + p = node.parents.pop(); + if(p.declarations[0].range[0] === oldp.range[0] && p.declarations[0].range[1] === oldp.range[1]) { + //insert at the var keyword level to not mess up the code + var leadingComments = oldp.leadingComments; + if (!leadingComments) { + leadingComments = p.leadingComments; + } + change = updateCallback(p, file.ast, leadingComments); + } else if(!hasDocTag(['@callback', '@public'], oldp.id)) { //$NON-NLS-1$ //$NON-NLS-2$ + change = updateCallback(oldp, file.ast, oldp.leadingComments); + } + break; + } + } + if(!change && !hasDocTag(['@callback', '@public'], func)) { //$NON-NLS-1$ //$NON-NLS-2$ + return {text: "/* @callback */ ", start: func.range[0], end: func.range[0]}; //$NON-NLS-1$ + } } - case 'VariableDeclaration' : { - if(node.declarations.length === 1) { - return {text: '', start: node.range[0], end: node.range[1]}; - } - idx = indexOf(node.declarations, child); - if(idx > -1) { - change = removeIndexedItemChange(node.declarations, idx); - if(change) { - return {text: change.text, start: change.start, end: change.end}; - } - } - break; - } - case 'ArrayPattern' : { - var elements = node.elements; - if (elements.length === 1) { - // only one element - remove the whole variable declarator - return getQuickfix(parents.pop(), node, parents); - } - // remove only the corresponding elements - might also need to remove elements on the right hand side - // look for the index inside the elements array - var index = indexOf(elements, child); - if (index > -1) { - var chosenElement = elements[index]; - if(chosenElement) { - return {text: "", start: chosenElement.range[0], end: chosenElement.range[1]}; - } - } - break; - } - case 'Identifier' : { - return getQuickfix(parents.pop(), node, parents); - } - case 'Property' : { - return getQuickfix(parents.pop(), node, parents); - } - case 'ObjectPattern' : { - properties = node.properties; - if (properties.length === 1) { - // only one property - we can remove the whole declarator - return getQuickfix(parents.pop(), node, parents); - } - propertyIndex = indexOf(properties, child); - if(propertyIndex > -1) { - change = removeIndexedItemChange(properties, propertyIndex); - if(change) { - return {text: change.text, start: change.start, end: change.end}; - } - } - break; - } - } - return null; - } - var found = Finder.findNode(annotation.start, file.ast, {parents:true}); - if(found && found.parents && found.parents.length > 0) { - var quickfix = getQuickfix(found, null, found.parents); - if (quickfix) return quickfix; - } - }, - /** - * @description fix for the 'no-unused-vars-unused-funcdecl' rule - * @function - * @callback - */ - "no-unused-vars-unused-funcdecl": function(annotation, annotations, file) { - var node = Finder.findNode(annotation.start, file.ast, {parents:true}); - if(node && node.parents && node.parents.length > 0) { - var decl = node.parents.pop(); - if(decl.type === 'FunctionDeclaration') { - return {text: '', start: decl.range[0], end: decl.range[1]}; - } - } - }, - /** - * @description fix for the 'use-isnan' rule - * @function - * @callback - */ - "use-isnan": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot){ - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - if(node && node.parents && node.parents.length > 0) { - var bin = node.parents.pop(); - if(bin.type === 'BinaryExpression') { - var tomove; - if(bin.left.type === 'Identifier' && bin.left.name === 'NaN') { - tomove = bin.right; - } else if(bin.right.type === 'Identifier' && bin.right.name === 'NaN') { - tomove = bin.left; - } - if(tomove) { - var src = file.ast.sourceFile.text.slice(tomove.range[0], tomove.range[1]); - return { - text: 'isNaN('+src+')', //$NON-NLS-1$ - start: bin.range[0], - end: bin.range[1] - }; - } - } - } - }); - }, - /** - * @description fix for the 'semi' rule - * @function - * @callback - */ - "semi": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - if (annot.data) { - switch (annot.data.kind) { - case 'missing': + return change; + }, + /** + * @description fix for the 'no-unused-vars-unused' rule + * @function + * @callback + */ + "no-unused-vars-unused": function(annotation, annotations, file) { + var node = Finder.findNode(annotation.start, file.ast, {parents:true}); + if(node && node.parents && node.parents.length > 0) { + var declr = node.parents.pop(); + if(declr.type === 'VariableDeclarator') { + var decl = node.parents.pop(); + if(decl.type === 'VariableDeclaration') { + if(decl.declarations.length === 1) { + return {text: '', start: decl.range[0], end: decl.range[1]}; + } + var idx = indexOf(decl.declarations, declr); + if(idx > -1) { + var change = removeIndexedItemChange(decl.declarations, idx); + if(change) { + return {text: change.text, start: change.start, end: change.end}; + } + } + } + } + } + }, + /** + * @description fix for the 'no-unused-vars-unread' rule + * @function + * @callback + */ + "no-unused-vars-unread": function(annotation, annotations, file) { + function getQuickfix(node, child, parents) { + if (parents.length === 0) { + return null; + } + var decl, idx, change, properties, propertyIndex; + switch(node.type) { + case 'VariableDeclarator' : { + return getQuickfix(parents.pop(), node, parents); + } + case 'VariableDeclaration' : { + if(node.declarations.length === 1) { + return {text: '', start: node.range[0], end: node.range[1]}; + } + idx = indexOf(node.declarations, child); + if(idx > -1) { + change = removeIndexedItemChange(node.declarations, idx); + if(change) { + return {text: change.text, start: change.start, end: change.end}; + } + } + break; + } + case 'ArrayPattern' : { + var elements = node.elements; + if (elements.length === 1) { + // only one element - remove the whole variable declarator + return getQuickfix(parents.pop(), node, parents); + } + // remove only the corresponding elements - might also need to remove elements on the right hand side + // look for the index inside the elements array + var index = indexOf(elements, child); + if (index > -1) { + var chosenElement = elements[index]; + if(chosenElement) { + return {text: "", start: chosenElement.range[0], end: chosenElement.range[1]}; + } + } + break; + } + case 'Identifier' : { + return getQuickfix(parents.pop(), node, parents); + } + case 'Property' : { + return getQuickfix(parents.pop(), node, parents); + } + case 'ObjectPattern' : { + properties = node.properties; + if (properties.length === 1) { + // only one property - we can remove the whole declarator + return getQuickfix(parents.pop(), node, parents); + } + propertyIndex = indexOf(properties, child); + if(propertyIndex > -1) { + change = removeIndexedItemChange(properties, propertyIndex); + if(change) { + return {text: change.text, start: change.start, end: change.end}; + } + } + break; + } + } + return null; + } + var found = Finder.findNode(annotation.start, file.ast, {parents:true}); + if(found && found.parents && found.parents.length > 0) { + var quickfix = getQuickfix(found, null, found.parents); + if (quickfix) { return quickfix; } + } + }, + /** + * @description fix for the 'no-unused-vars-unused-funcdecl' rule + * @function + * @callback + */ + "no-unused-vars-unused-funcdecl": function(annotation, annotations, file) { + var node = Finder.findNode(annotation.start, file.ast, {parents:true}); + if(node && node.parents && node.parents.length > 0) { + var decl = node.parents.pop(); + if(decl.type === 'FunctionDeclaration') { + return {text: '', start: decl.range[0], end: decl.range[1]}; + } + } + }, + /** + * @description fix for the 'use-isnan' rule + * @function + * @callback + */ + "use-isnan": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot){ + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + if(node && node.parents && node.parents.length > 0) { + var bin = node.parents.pop(); + if(bin.type === 'BinaryExpression') { + var tomove; + if(bin.left.type === 'Identifier' && bin.left.name === 'NaN') { + tomove = bin.right; + } else if(bin.right.type === 'Identifier' && bin.right.name === 'NaN') { + tomove = bin.left; + } + if(tomove) { + var src = file.ast.sourceFile.text.slice(tomove.range[0], tomove.range[1]); + var pre = ""; + if(bin.operator.charAt(0) === '!') { + pre = "!"; + } + return { + text: pre+'isNaN('+src+')', //$NON-NLS-1$ + start: bin.range[0], + end: bin.range[1] + }; + } + } + } + }); + }, + /** + * @description fix for the 'semi' rule + * @function + * @callback + */ + "semi": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { + if (annot.data) { + switch (annot.data.kind) { + case 'missing': + return { + text: ';', + start: annot.end, + end: annot.end + }; + case 'extra': + return { + text: '', + start: annot.start, + end: annot.end + }; + } + } + }); + }, + /** + * @description fix for the 'unnecessary-nl' rule + * @function + * @callback + */ + "unnecessary-nls": function(annotation, annotations, file){ + return applySingleFixToAll(annotations, function(annot){ + var comment = Finder.findComment(annot.start + 2, file.ast); // Adjust for leading // + var nlsTag = annot.data.nlsComment; // We store the nls tag in the annotation + if (comment && comment.type.toLowerCase() === 'line' && nlsTag){ + var index = comment.value.indexOf(nlsTag); + // Check if we can delete the whole comment + if (index > 0){ + var start = annot.start; + while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ + start--; + } return { - text: ';', - start: annot.end, + text: '', + start: start, end: annot.end }; - case 'extra': + } else if (index === 0){ + var newComment = comment.value.substring(index+nlsTag.length); + start = annot.start; + var end = annot.end; + if (!newComment.match(/^(\s*|\s*\/\/.*)$/)){ + start += 2; // Only remove leading // if additional comments start with another // + } else { + while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ + start--; + } + } + if (newComment.match(/^\s*$/)){ + end = comment.range[1]; // If there is only whitespace left in the comment, delete it entirely + while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ + start--; + } + } return { text: '', - start: annot.start, - end: annot.end + start: start, + end: end }; + } } - } - }); - }, - /** - * @description fix for the 'unnecessary-nl' rule - * @function - * @callback - */ - "unnecessary-nls": function(annotation, annotations, file){ - return applySingleFixToAll(annotations, function(annot){ - var comment = Finder.findComment(annot.start + 2, file.ast); // Adjust for leading // - var nlsTag = annot.data.nlsComment; // We store the nls tag in the annotation - if (comment && comment.type.toLowerCase() === 'line' && nlsTag){ - var index = comment.value.indexOf(nlsTag); - // Check if we can delete the whole comment - if (index > 0){ - var start = annot.start; - while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ - start--; + }); + }, + /** + * @callback + */ + "no-else-return": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + // looking for the if statement + while (node && node.type !== 'IfStatement') { + node = node.parents.pop(); + } + var thenNode = node.consequent; + var elseNode = node.alternate; + var parent = node.parent || {}; + // Replace else statement with newline. + var replacement = '\n'; + if (parent.type === 'BlockStatement' || parent.type === 'IfStatement') { + // Preserve whitespace if inside of a block. + replacement = node.sourceFile.text.substring(parent.start + 1, parent.body[0].start); + if (replacement.charAt(0) !== '\n') { + replacement = '\n' + replacement; } - return { - text: '', - start: start, - end: annot.end - }; - } else if (index === 0){ - var newComment = comment.value.substring(index+nlsTag.length); - start = annot.start; - var end = annot.end; - if (!newComment.match(/^(\s*|\s*\/\/.*)$/)){ - start += 2; // Only remove leading // if additional comments start with another // - } else { - while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ - start--; - } + } + if (elseNode.type === 'BlockStatement') { + // need to remove the else { and the closing brace } + // check the first statement inside the block for trailing comment + var firstStatement = elseNode.body[0]; + var start = firstStatement.start; + if (firstStatement.leadingComments) { + start = firstStatement.leadingComments[0].start; } - if (newComment.match(/^\s*$/)){ - end = comment.range[1]; // If there is only whitespace left in the comment, delete it entirely - while (file.ast.sourceFile.text.charAt(start-1) === ' ' || file.ast.sourceFile.text.charAt(start-1) === '\t'){ - start--; - } + var lastStatement = elseNode.body[elseNode.body.length - 1]; + var closingStart = lastStatement.end; + var trailingComments = lastStatement.trailingComments; + if (trailingComments) { + closingStart = trailingComments[trailingComments.length - 1].end; + } + return [ + { text: replacement, start: thenNode.end, end: start }, + { text: '', start: closingStart, end: elseNode.end }, + ]; + } + // need to remove the else keyword + start = elseNode.start; + if (elseNode.leadingComments) { + start = elseNode.leadingComments[0].start; + } + return { + text: replacement, + start: thenNode.end + 1, + end: start + }; + }); + }, + /** + * @callback + */ + "no-cond-assign": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + var assignmentExpression = node.parents.pop(); + if (assignmentExpression && assignmentExpression.type === 'AssignmentExpression') { + var start = assignmentExpression.range[0]; + var end = assignmentExpression.range[1]; + return [ + {text: '(', start: start, end: start}, + {text: ')', start: end, end: end}, + ]; + } + }); + }, + /** + * @callback + */ + "no-extra-bind": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + var memberExpression = node.parents.pop(); + var callExpression = node.parents.pop(); + if (memberExpression && callExpression) { + var object = memberExpression.object; + if (object.type === 'ArrowFunctionExpression') { + return [ + {text: '', start: callExpression.range[0], end: object.range[0]}, + {text: '', start: object.range[1], end: callExpression.range[1]}, + ]; } return { text: '', - start: start, - end: end + start: memberExpression.object.range[1], + end: callExpression.range[1] }; } - } - }); - }, - "no-else-return": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - // looking for the if statement - while (node && node.type !== 'IfStatement') { - node = node.parents.pop(); - } - var thenNode = node.consequent; - var elseNode = node.alternate; - var parent = node.parent || {}; - // Replace else statement with newline. - var replacement = '\n'; - if (parent.type === 'BlockStatement' || parent.type === 'IfStatement') { - // Preserve whitespace if inside of a block. - replacement = node.sourceFile.text.substring(parent.start + 1, parent.body[0].start); - if (replacement.charAt(0) !== '\n') { - replacement = '\n' + replacement; - } - } - - if (elseNode.type === 'BlockStatement') { - // need to remove the else { and the closing brace } - // check the first statement inside the block for trailing comment - var firstStatement = elseNode.body[0]; - var start = firstStatement.start; - if (firstStatement.leadingComments) { - start = firstStatement.leadingComments[0].start; + }); + }, + "quotes" : function(annotation, annotations, file) { + function convertQuotes(str, newQuote) { + var oldQuote = str[0]; + if (newQuote === oldQuote) { + return str; } - var lastStatement = elseNode.body[elseNode.body.length - 1]; - var closingStart = lastStatement.end; - var trailingComments = lastStatement.trailingComments; - if (trailingComments) { - closingStart = trailingComments[trailingComments.length - 1].end; - } - return [ - { text: replacement, start: thenNode.end, end: start }, - { text: '', start: closingStart, end: elseNode.end }, - ]; - } - // need to remove the else keyword - var start = elseNode.start; - if (elseNode.leadingComments) { - start = elseNode.leadingComments[0].start; - } - return { - text: replacement, - start: thenNode.end + 1, - end: start - }; - }); - }, - "no-cond-assign": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - var assignmentExpression = node.parents.pop(); - if (assignmentExpression && assignmentExpression.type === 'AssignmentExpression') { - var start = assignmentExpression.range[0]; - var end = assignmentExpression.range[1]; - return [ - {text: '(', start: start, end: start}, - {text: ')', start: end, end: end}, - ]; + return newQuote + str.slice(1, -1).replace(/\\(\${|\r\n?|\n|.)|["'`]|\${|(\r\n?|\n)/g, function(match, escaped, newline) { + if (escaped === oldQuote || oldQuote === "`" && escaped === "${") { + return escaped; // unescape + } + if (match === newQuote || newQuote === "`" && match === "${") { + return "\\" + match; // escape + } + if (newline && oldQuote === "`") { + return "\\n"; // escape newlines + } + return match; + }) + newQuote; } - }); - }, - "no-extra-bind": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - var memberExpression = node.parents.pop(); - var callExpression = node.parents.pop(); - if (memberExpression && callExpression) { - var object = memberExpression.object; - if (object.type === 'ArrowFunctionExpression') { - return [ - {text: '', start: callExpression.range[0], end: object.range[0]}, - {text: '', start: object.range[1], end: callExpression.range[1]}, - ]; + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + if (node) { + switch(node.type) { + case 'Literal' : + return { + text: convertQuotes(node.raw, annotation.data.quote), + start: node.range[0], + end: node.range[1] + }; + case 'TemplateLiteral' : + return { + text: convertQuotes('`' + node.quasis[0].value.raw + '`', annotation.data.quote), + start: node.range[0], + end: node.range[1] + }; + } } + }); + }, + /** + * @callback + */ + "no-unused-expressions": function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { return { text: '', - start: memberExpression.object.range[1], - end: callExpression.range[1] + start: annot.start, + end: annot.end }; + }); + }, + /** + * @callback + */ + "no-implicit-coercion" : function(annotation, annotations, file) { + var INDEX_OF_PATTERN = /^(?:i|lastI)ndexOf$/; + /** + * Checks whether or not a node is a double logical negating. + * @param {ASTNode} node - An UnaryExpression node to check. + * @returns {boolean} Whether or not the node is a double logical negating. + */ + function isDoubleLogicalNegating(node) { + return node.operator === "!" && + node.argument.type === "UnaryExpression" && + node.argument.operator === "!"; } - }); - }, - "quotes" : function(annotation, annotations, file) { - function convertQuotes(str, newQuote) { - var oldQuote = str[0]; - - if (newQuote === oldQuote) { - return str; + /** + * Checks whether or not a node is a binary negating of `.indexOf()` method calling. + * @param {ASTNode} node - An UnaryExpression node to check. + * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling. + */ + function isBinaryNegatingOfIndexOf(node) { + return node.operator === "~" && + node.argument.type === "CallExpression" && + node.argument.callee.type === "MemberExpression" && + node.argument.callee.property.type === "Identifier" && + INDEX_OF_PATTERN.test(node.argument.callee.property.name); } - return newQuote + str.slice(1, -1).replace(/\\(\${|\r\n?|\n|.)|["'`]|\${|(\r\n?|\n)/g, function(match, escaped, newline) { - if (escaped === oldQuote || oldQuote === "`" && escaped === "${") { - return escaped; // unescape - } - if (match === newQuote || newQuote === "`" && match === "${") { - return "\\" + match; // escape - } - if (newline && oldQuote === "`") { - return "\\n"; // escape newlines + + /** + * Checks whether or not a node is a multiplying by one. + * @param {BinaryExpression} node - A BinaryExpression node to check. + * @returns {boolean} Whether or not the node is a multiplying by one. + */ + function isMultiplyByOne(node) { + return node.operator === "*" && ( + node.left.type === "Literal" && node.left.value === 1 || + node.right.type === "Literal" && node.right.value === 1 + ); + } + + /** + * Checks whether the result of a node is numeric or not + * @param {ASTNode} node The node to test + * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call + */ + function isNumeric(node) { + return node.type === "Literal" + && typeof node.value === "number" + || node.type === "CallExpression" + && (node.callee.name === "Number" || + node.callee.name === "parseInt" || + node.callee.name === "parseFloat"); + } + + /** + * Returns the first non-numeric operand in a BinaryExpression. Designed to be + * used from bottom to up since it walks up the BinaryExpression trees using + * node.parent to find the result. + * @param {BinaryExpression} node The BinaryExpression node to be walked up on + * @returns {ASTNode} The first non-numeric item in the BinaryExpression tree or + */ + function getNonNumericOperand(node) { + var left = node.left, + right = node.right; + if (right.type !== "BinaryExpression" && !isNumeric(right)) { + return right; } - return match; - }) + newQuote; - }; - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - if (node) { - switch(node.type) { - case 'Literal' : - return { - text: convertQuotes(node.raw, annotation.data.quote), - start: node.range[0], - end: node.range[1] - }; - case 'TemplateLiteral' : - return { - text: convertQuotes('`' + node.quasis[0].value.raw + '`', annotation.data.quote), - start: node.range[0], - end: node.range[1] - }; + if (left.type !== "BinaryExpression" && !isNumeric(left)) { + return left; } } - }); - }, - "no-unused-expressions": function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - return { - text: '', - start: annot.start, - end: annot.end - }; - }); - }, - "no-implicit-coercion" : function(annotation, annotations, file) { - var INDEX_OF_PATTERN = /^(?:i|lastI)ndexOf$/; - /** - * Checks whether or not a node is a double logical negating. - * @param {ASTNode} node - An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a double logical negating. - */ - function isDoubleLogicalNegating(node) { - return node.operator === "!" && - node.argument.type === "UnaryExpression" && - node.argument.operator === "!"; - } - /** - * Checks whether or not a node is a binary negating of `.indexOf()` method calling. - * @param {ASTNode} node - An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling. - */ - function isBinaryNegatingOfIndexOf(node) { - return node.operator === "~" && - node.argument.type === "CallExpression" && - node.argument.callee.type === "MemberExpression" && - node.argument.callee.property.type === "Identifier" && - INDEX_OF_PATTERN.test(node.argument.callee.property.name); - } - - /** - * Checks whether or not a node is a multiplying by one. - * @param {BinaryExpression} node - A BinaryExpression node to check. - * @returns {boolean} Whether or not the node is a multiplying by one. - */ - function isMultiplyByOne(node) { - return node.operator === "*" && ( - node.left.type === "Literal" && node.left.value === 1 || - node.right.type === "Literal" && node.right.value === 1 - ); - } - - /** - * Checks whether the result of a node is numeric or not - * @param {ASTNode} node The node to test - * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call - */ - function isNumeric(node) { - return node.type === "Literal" - && typeof node.value === "number" - || node.type === "CallExpression" - && (node.callee.name === "Number" || - node.callee.name === "parseInt" || - node.callee.name === "parseFloat"); - } - - /** - * Returns the first non-numeric operand in a BinaryExpression. Designed to be - * used from bottom to up since it walks up the BinaryExpression trees using - * node.parent to find the result. - * @param {BinaryExpression} node The BinaryExpression node to be walked up on - * @returns {ASTNode| - } The first non-numeric item in the BinaryExpression tree or - - */ - function getNonNumericOperand(node) { - var left = node.left, - right = node.right; - - if (right.type !== "BinaryExpression" && !isNumeric(right)) { - return right; + + /** + * Checks whether or not a node is a concatenating with an empty string. + * @param {ASTNode} node - A BinaryExpression node to check. + * @returns {boolean} Whether or not the node is a concatenating with an empty string. + */ + function isConcatWithEmptyString(node) { + return node.operator === "+" && ( + (node.left.type === "Literal" && node.left.value === "") || + (node.right.type === "Literal" && node.right.value === "") + ); } - - if (left.type !== "BinaryExpression" && !isNumeric(left)) { - return left; + + /** + * Gets a node that is the left or right operand of a node, is not the specified literal. + * @param {ASTNode} node - A BinaryExpression node to get. + * @param {any} value - A literal value to check. + * @returns {ASTNode} A node that is the left or right operand of the node, is not the specified literal. + */ + function getOtherOperand(node, value) { + if (node.left.type === "Literal" && node.left.value === value) { + return node.right; + } + return node.left; } - } - - /** - * Checks whether or not a node is a concatenating with an empty string. - * @param {ASTNode} node - A BinaryExpression node to check. - * @returns {boolean} Whether or not the node is a concatenating with an empty string. - */ - function isConcatWithEmptyString(node) { - return node.operator === "+" && ( - (node.left.type === "Literal" && node.left.value === "") || - (node.right.type === "Literal" && node.right.value === "") - ); - } - - /** - * Gets a node that is the left or right operand of a node, is not the specified literal. - * @param {ASTNode} node - A BinaryExpression node to get. - * @param {any} value - A literal value to check. - * @returns {ASTNode} A node that is the left or right operand of the node, is not the specified literal. - */ - function getOtherOperand(node, value) { - if (node.left.type === "Literal" && node.left.value === value) { - return node.right; + function getSource(text, node) { + return text.slice(node.range[0], node.range[1]); } - return node.left; - } - function getSource(text, node) { - return text.slice(node.range[0], node.range[1]); - } - function checkBinaryExpression(node, text, annot) { - if (isMultiplyByOne(node)) { - var operandNode = getNonNumericOperand(node); - if (operandNode) { - return { - text: 'Number(' + getSource(text, operandNode) + ')', - start: annot.start, - end: annot.end - }; + function checkBinaryExpression(node, text, annot) { + if (isMultiplyByOne(node)) { + var operandNode = getNonNumericOperand(node); + if (operandNode) { + return { + text: 'Number(' + getSource(text, operandNode) + ')', + start: annot.start, + end: annot.end + }; + } } + // "" + foo + return { + text: 'String(' + getSource(text, getOtherOperand(node, "")) + ')', + start: annot.start, + end: annot.end + }; } - // "" + foo - return { - text: 'String(' + getSource(text, getOtherOperand(node, "")) + ')', - start: annot.start, - end: annot.end - }; - } - function checkAssignmentExpression(node, text, annot) { - var operandNode = getOtherOperand(node, ""); - var source = getSource(text, operandNode); - return { - text: source + ' = String(' + source + ')', - start: annot.start, - end: annot.end - }; - } - var text = file.ast.sourceFile.text; - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - if (node) { - switch(node.type) { - case "UnaryExpression" : { - if (isDoubleLogicalNegating(node)) { - return { - text: 'Boolean(' + getSource(text, node.argument.argument) + ')', - start: annot.start, - end: annot.end - }; - } else if (isBinaryNegatingOfIndexOf(node)) { + function checkAssignmentExpression(node, text, annot) { + var operandNode = getOtherOperand(node, ""); + var source = getSource(text, operandNode); + return { + text: source + ' = String(' + source + ')', + start: annot.start, + end: annot.end + }; + } + var text = file.ast.sourceFile.text; + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + if (node) { + switch(node.type) { + case "UnaryExpression" : { + if (isDoubleLogicalNegating(node)) { + return { + text: 'Boolean(' + getSource(text, node.argument.argument) + ')', + start: annot.start, + end: annot.end + }; + } else if (isBinaryNegatingOfIndexOf(node)) { + return { + text: getSource(text, node.argument) + ' !== -1', + start: annot.start, + end: annot.end + }; + } + // +foo return { - text: getSource(text, node.argument) + ' !== -1', + text: 'Number(' + getSource(text, node.argument) + ')', start: annot.start, end: annot.end }; } - // +foo - return { - text: 'Number(' + getSource(text, node.argument) + ')', - start: annot.start, - end: annot.end - }; - } - case "Literal" : { - // check the parent - should be a binary expression - var parent = node.parents && node.parents.pop(); - if (parent) { - return checkBinaryExpression(parent, text, annot); + case "Literal" : { + // check the parent - should be a binary expression + var parent = node.parents && node.parents.pop(); + if (parent) { + return checkBinaryExpression(parent, text, annot); + } + return null; } - return null; - } - case "BinaryExpression" : { - return checkBinaryExpression(node, text, annot); - } - case "Identifier" : { - parent = node.parents && node.parents.pop(); - if (parent) { - return checkAssignmentExpression(parent, text, annot); + case "BinaryExpression" : { + return checkBinaryExpression(node, text, annot); + } + case "Identifier" : { + parent = node.parents && node.parents.pop(); + if (parent) { + return checkAssignmentExpression(parent, text, annot); + } + return null; + } + case "AssignmentExpression" : { + return checkAssignmentExpression(node, text, annot); } - return null; - } - case "AssignmentExpression" : { - return checkAssignmentExpression(node, text, annot); } } - } - }); - }, - "remove-duplicate-case" : function(annotation, annotations, file) { - function getFallthroughComment(node) { - var comments = node.leadingComments; - if (comments) { - var comment = comments[0]; - if (comment.type === 'Line' && comment.value === '$FALLTHROUGH$') { - // if there is only one comment remove it - return comment; + }); + }, + /** + * @callback + */ + "remove-duplicate-case" : function(annotation, annotations, file) { + function getFallthroughComment(node) { + var comments = node.leadingComments; + if (comments) { + var comment = comments[0]; + if (comment.type === 'Line' && comment.value === '$FALLTHROUGH$') { + // if there is only one comment remove it + return comment; + } } + return null; } - return null; - } - return applySingleFixToAll(annotations, function(annot) { - var node = Finder.findNode(annot.start, file.ast, {parents:true}); - if (node) { - // get the switch case - if (node.parents.length > 2) { - var switchCase = node.parents.pop(); - // get the switch statement - var statement = node.parents.pop(); - if (statement) { - // get the index of the switch case - var index = 0; - loop: for (var i = 0, max = statement.cases.length; i < max; i++) { - var currentCase = statement.cases[i]; - if (currentCase.range[0] === switchCase.range[0] && currentCase.range[1] === switchCase.range[1]) { - index = i; - break loop; + return applySingleFixToAll(annotations, function(annot) { + var node = Finder.findNode(annot.start, file.ast, {parents:true}); + if (node) { + // get the switch case + if (node.parents.length > 2) { + var switchCase = node.parents.pop(); + // get the switch statement + var statement = node.parents.pop(); + if (statement) { + // get the index of the switch case + var index = 0; + loop: for (var i = 0, max = statement.cases.length; i < max; i++) { + var currentCase = statement.cases[i]; + if (currentCase.range[0] === switchCase.range[0] && currentCase.range[1] === switchCase.range[1]) { + index = i; + break loop; + } } } - } - var start = switchCase.start; - var end = switchCase.end; - // check the next case - var nextCase = statement.cases[index + 1]; - var comment; - if (nextCase) { - // check leading comments if it is a fallthrough comment - comment = getFallthroughComment(nextCase); - if (comment) { - end = comment.end; + var start = switchCase.start; + var end = switchCase.end; + // check the next case + var nextCase = statement.cases[index + 1]; + var comment; + if (nextCase) { + // check leading comments if it is a fallthrough comment + comment = getFallthroughComment(nextCase); + if (comment) { + end = comment.end; + } } - } - if (index !== 0) { - // check if there is a fallthrough comment for the current case statement we want to remove - // if yes, we need to preserve it unless there is no other case statement after the one we remove - comment = getFallthroughComment(switchCase); - if (comment && nextCase) { - start = comment.end; - } else { - start = statement.cases[index - 1].end; + if (index !== 0) { + // check if there is a fallthrough comment for the current case statement we want to remove + // if yes, we need to preserve it unless there is no other case statement after the one we remove + comment = getFallthroughComment(switchCase); + if (comment && nextCase) { + start = comment.end; + } else { + start = statement.cases[index - 1].end; + } } + return { + text: '', + start: start, + end: end + }; } - return { - text: '', - start: start, - end: end - }; } - } - }); - }, + }); + }, + /** + * @callback + */ + "no-trailing-spaces" : function(annotation, annotations, file) { + return applySingleFixToAll(annotations, function(annot) { + return { + text: '', + start: annot.start, + end: annot.end + }; + }); + } + }; + /** - * @callback + * @description Compute the fixes + * @param {Object} query The original Tern query object + * @param {Object} file The file object from Tern */ - "no-trailing-spaces" : function(annotation, annotations, file) { - return applySingleFixToAll(annotations, function(annot) { - return { - text: '', - start: annot.start, - end: annot.end - }; - }); - }, - }; - - /** - * @description Compute the fixes - * @param {Object} query The original Tern query object - * @param {Object} file The file object from Tern - */ - function computeFixes(query, file) { - var func = availableFixes[query.problemId]; - if(typeof func === 'function') { - var fixes = func.call(this, query.annotation, query.annotations, file); - if(Array.isArray(fixes)) { - return fixes; - } else if(fixes) { - return [fixes]; + function computeFixes(query, file) { + var func = availableFixes[query.problemId]; + if(typeof func === 'function') { + var fixes = func.call(this, query.annotation, query.annotations, file); + if(Array.isArray(fixes)) { + return fixes; + } else if(fixes) { + return [fixes]; + } } + return []; } - return []; - } - - /** - * @description Finds the start of the line in the given text starting at the given offset - * @param {String} text The text - * @param {Number} offset The offset - * @returns {Number} The offset in the text of the new line - */ - function getLineStart(text, offset) { - if(!text) { - return 0; - } - if(offset < 0) { - return 0; - } - var off = offset; - var char = text[off]; - while(off > -1 && !/[\r\n]/.test(char)) { - char = text[--off]; - } - return off+1; //last char inspected will be @ -1 or the new line char - } - - /** - * @description Finds the end of the line in the given text starting at the given offset - * @param {String} text The text - * @param {Number} offset The offset - * @returns {Number} The offset in the text before the new line or end of file - */ - function getLineEnd(text, offset) { - if(!text) { - return 0; - } - if(offset < 0) { - return 0; - } - var off = offset; - var char = text[off]; - while(off < text.length && !/[\r\n]/.test(char)) { - char = text[++off]; - } - return off; - } - - /** - * @description Computes the indent to use in the editor - * @param {String} text The editor text - * @param {Number} linestart The start of the line - * @param {Boolean} extraIndent If we should add an extra indent - * @returns {String} The ammount of indent / formatting for the start of the string - */ - function computeIndent(text, linestart, extraIndent) { - if(!text || linestart < 0) { - return ''; - } - var off = linestart; - var char = text[off]; - var preamble = extraIndent ? '\t' : ''; //$NON-NLS-1$ - //walk the proceeding whitespace so we will insert formatted at the same level - while(char === ' ' || char === '\t') { - preamble += char; - char = text[++off]; - } - return preamble; - } - /** - * @description Computes the formatting for the trailing part of the fix - * @param {String} text The editor text - * @param {Object} annotation The annotation object - * @param {String} indent Additional formatting to apply after the fix - * @returns {String} The formatting to apply after the fix - */ - function computePostfix(text, annotation, indent) { - if(!text || !annotation) { - return ''; - } - var off = annotation.start; - var char = text[off]; - var val = ''; - var newline = false; - //walk the trailing whitespace so we can see if we need axtra whitespace - while(off >= annotation.start && off <= annotation.end) { - if(char === '\n') { - newline = true; - break; + /** + * @description Finds the start of the line in the given text starting at the given offset + * @param {String} text The text + * @param {Number} offset The offset + * @returns {Number} The offset in the text of the new line + */ + function getLineStart(text, offset) { + if(!text) { + return 0; + } + if(offset < 0) { + return 0; + } + var off = offset; + var char = text[off]; + while(off > -1 && !/[\r\n]/.test(char)) { + char = text[--off]; + } + return off+1; //last char inspected will be @ -1 or the new line char + } + + /** + * @description Finds the end of the line in the given text starting at the given offset + * @param {String} text The text + * @param {Number} offset The offset + * @returns {Number} The offset in the text before the new line or end of file + */ + function getLineEnd(text, offset) { + if(!text) { + return 0; + } + if(offset < 0) { + return 0; + } + var off = offset; + var char = text[off]; + while(off < text.length && !/[\r\n]/.test(char)) { + char = text[++off]; + } + return off; + } + + /** + * @description Computes the indent to use in the editor + * @param {String} text The editor text + * @param {Number} linestart The start of the line + * @param {Boolean} extraIndent If we should add an extra indent + * @returns {String} The ammount of indent / formatting for the start of the string + */ + function computeIndent(text, linestart, extraIndent) { + if(!text || linestart < 0) { + return ''; + } + var off = linestart; + var char = text[off]; + var preamble = extraIndent ? '\t' : ''; //$NON-NLS-1$ + //walk the proceeding whitespace so we will insert formatted at the same level + while(char === ' ' || char === '\t') { + preamble += char; + char = text[++off]; } - char = text[off++]; + return preamble; + } + + /** + * @description Computes the formatting for the trailing part of the fix + * @param {String} text The editor text + * @param {Object} annotation The annotation object + * @param {String} indent Additional formatting to apply after the fix + * @returns {String} The formatting to apply after the fix + */ + function computePostfix(text, annotation, indent) { + if(!text || !annotation) { + return ''; + } + var off = annotation.start; + var char = text[off]; + var val = ''; + var newline = false; + //walk the trailing whitespace so we can see if we need axtra whitespace + while(off >= annotation.start && off <= annotation.end) { + if(char === '\n') { + newline = true; + break; + } + char = text[off++]; + } + if(!newline) { + val += '\n'; //$NON-NLS-1$ + } + if(typeof indent !== 'undefined') { + val += indent; + } + return val; } - if(!newline) { - val += '\n'; //$NON-NLS-1$ + + /** + * @description Computes the offset for the block comment. i.e. 2 if the block starts with /*, 3 if it starts with /** + * @param {String} text The file text + * @param {Number} offset The doc node offset + * @returns {Number} 2 or 3 depending on the start of the comment block + */ + function getDocOffset(text, offset) { + if(text.charAt(offset+1) === '*') { + if(text.charAt(offset+2) === '*') { + return 3; + } + return 2; + } + return 0; } - if(typeof indent !== 'undefined') { - val += indent; + + /** + * @description Updates the eslint directive + * @param {String}] text The text of the source file + * @param {String} directive The directive text + * @param {String} name The name to add + * @param {Boolean} usecommas If we should separate the directive entries with commas or not + * @returns {String} The new directive text + */ + function updateDirective(text, directive, name, usecommas) { + if(usecommas) { + if(text.slice(directive.length).trim() !== '') { + return text.trim() + ', '+name; //$NON-NLS-1$ + } + return text.trim() + ' '+name; //$NON-NLS-1$ + } + return text.trim() + ' '+name; //$NON-NLS-1$ } - return val; - } - - /** - * @description Computes the offset for the block comment. i.e. 2 if the block starts with /*, 3 if it starts with /** - * @param {String} text The file text - * @param {Number} offset The doc node offset - * @returns {Number} 2 or 3 depending on the start of the comment block - */ - function getDocOffset(text, offset) { - if(text.charAt(offset+1) === '*') { - if(text.charAt(offset+2) === '*') { - return 3; - } - return 2; - } - return 0; - } - - /** - * @description Updates the eslint directive - * @param {String}] text The text of the source file - * @param {String} directive The directive text - * @param {String} name The name to add - * @param {Boolean} usecommas If we should separate the directive entries with commas or not - * @returns {String} The new directive text - */ - function updateDirective(text, directive, name, usecommas) { - if(usecommas) { - if(text.slice(directive.length).trim() !== '') { - return text.trim() + ', '+name; //$NON-NLS-1$ + + /** + * @description Finds the index of the given item in the given list + * @param {Array.<Object>} list The array of AST nodes + * @param {Object} item The AST node + * @returns {Number} The index of the node in the list or -1 + */ + function indexOf(list, item) { + if(list && list.length) { + for(var i = 0; i < list.length; i++) { + var p = list[i]; + if(p && item.range[0] === p.range[0] && item.range[1] === p.range[1]) { + return i; + } + } } - return text.trim() + ' '+name; //$NON-NLS-1$ - } - return text.trim() + ' '+name; //$NON-NLS-1$ - } - - /** - * @description Finds the index of the given item in the given list - * @param {Array.<Object>} list The array of AST nodes - * @param {Object} item The AST node - * @returns {Number} The index of the node in the list or -1 - */ - function indexOf(list, item) { - if(list && list.length) { - for(var i = 0; i < list.length; i++) { - var p = list[i]; - if(p && item.range[0] === p.range[0] && item.range[1] === p.range[1]) { - return i; - } - } - } - return -1; - } - - /** - * @description Remove the item from the list and return it as a change object - * @param {Array.<Object>} list The list of items to remove from - * @param {Number} index The index to remove - * @returns {Object} A change object containg the properties text, start and end - */ - function removeIndexedItemChange(list, index, greedy, parent) { - if (index < 0 || index > list.length) { - return; + return -1; } - var node = list[index]; - if (list.length === 1) { - return { - "start": node.range[0], - "end": parent ? parent.range[1] - 1 : node.range[1], - "text": "" - }; - } else if (index === list.length - 1) { - return { - "start": list[index - 1].range[1], - "end": parent ? parent.range[1] - 1 : node.range[1], - "text": "" - }; - } else if (node) { - if (index === 0) { - if (list.length === 1) { + + /** + * @description Remove the item from the list and return it as a change object + * @param {Array.<Object>} list The list of items to remove from + * @param {Number} index The index to remove + * @returns {Object} A change object containg the properties text, start and end + */ + function removeIndexedItemChange(list, index, greedy, parent) { + if (index < 0 || index > list.length) { + return; + } + var node = list[index]; + if (list.length === 1) { + return { + "start": node.range[0], + "end": parent ? parent.range[1] - 1 : node.range[1], + "text": "" + }; + } else if (index === list.length - 1) { + return { + "start": list[index - 1].range[1], + "end": parent ? parent.range[1] - 1 : node.range[1], + "text": "" + }; + } else if (node) { + if (index === 0) { + if (list.length === 1) { + return { + "start": node.range[0], + "end": node.range[1], + "text": "" + }; + } return { "start": node.range[0], - "end": node.range[1], + "end": list[index + 1].range[0], "text": "" }; } - return { - "start": node.range[0], + return greedy ? { + "start": list[index - 1].range[1], "end": list[index + 1].range[0], "text": "" + } : { + "start": list[index - 1].range[1], + "end": node.range[1], + "text": "" }; } - return greedy ? { - "start": list[index - 1].range[1], - "end": list[index + 1].range[0], - "text": "" - } : { - "start": list[index - 1].range[1], - "end": node.range[1], - "text": "" - }; + return null; } - return null; - } - /** - * @description Updates the JSDoc attached to the given AST node - * @param {Object} node The AST node to update - * @param {String} source The AST source - * @param {String} name The name of the doc element to remove - * @returns {Object} The change object or null - */ - function updateDoc(node, source, name) { - if(node.leadingComments && node.leadingComments.length > 0) { - for(var i = node.leadingComments.length-1; i > -1; i--) { - var comment = node.leadingComments[i]; - var edit = new RegExp("(\\s*[*]+\\s*(?:@param)\\s*(?:\\{.*\\})?\\s*(?:"+name+")+.*)").exec(comment.value); //$NON-NLS-1$ //$NON-NLS-2$ - if(edit) { - var start = comment.range[0] + edit.index + getDocOffset(source, comment.range[0]); - return {"start" : start, "end" :start+edit[1].length, "text" : ''}; - } - } - } - return null; - } + /** + * @description Updates the JSDoc attached to the given AST node + * @param {Object} node The AST node to update + * @param {String} source The AST source + * @param {String} name The name of the doc element to remove + * @returns {Object} The change object or null + */ + function updateDoc(node, source, name) { + if(node.leadingComments && node.leadingComments.length > 0) { + for(var i = node.leadingComments.length-1; i > -1; i--) { + var comment = node.leadingComments[i]; + var edit = new RegExp("(\\s*[*]+\\s*(?:@param)\\s*(?:\\{.*\\})?\\s*(?:"+name+")+.*)").exec(comment.value); //$NON-NLS-1$ //$NON-NLS-2$ + if(edit) { + var start = comment.range[0] + edit.index + getDocOffset(source, comment.range[0]); + return {"start" : start, "end" :start+edit[1].length, "text" : ''}; + } + } + } + return null; + } - /** - * @description Returns if the JSDoc attached to the given node has any of the given tags - * @param {Array.<String>} tags The array of tags - * @param {Object} node The AST node - * @returns {Boolean} If the doc attached to the given node has one of the given tags - */ - function hasDocTag(tags, node) { - // tags contains all tags that have to be checked - if(node.leadingComments) { - for(var i = 0; i < node.leadingComments.length; i++) { - var comment = node.leadingComments[i]; - for (var j = 0, len = tags.length; j < len; j++) { - var tag = tags[j]; - if(comment.value.indexOf(tag) > -1) { - return true; - } + /** + * @description Returns if the JSDoc attached to the given node has any of the given tags + * @param {Array.<String>} tags The array of tags + * @param {Object} node The AST node + * @returns {Boolean} If the doc attached to the given node has one of the given tags + */ + function hasDocTag(tags, node) { + // tags contains all tags that have to be checked + if(node.leadingComments) { + for(var i = 0; i < node.leadingComments.length; i++) { + var comment = node.leadingComments[i]; + for (var j = 0, len = tags.length; j < len; j++) { + var tag = tags[j]; + if(comment.value.indexOf(tag) > -1) { + return true; + } + } } + } + return false; + } + + /** + * @description Computes where the eslint directive should be inserted relative to the given node + * @param {Object} node The AST node + * @returns {Number} The insertion point + */ + function getDirectiveInsertionPoint(node) { + if(node.type === 'Program' && node.body && node.body.length > 0) { + var n = node.body[0]; + var val = -1; + switch(n.type) { + case 'FunctionDeclaration': { + val = getCommentStart(n); + if(val > -1) { + return val; + } + //TODO see https://github.com/jquery/esprima/issues/1071 + val = getCommentStart(n.id); + if(val > -1) { + return val; + } + return n.range[0]; + } + case 'ExpressionStatement': { + if(n.expression && n.expression.right && n.expression.right.type === 'FunctionExpression') { + val = getCommentStart(n); + if(val > -1) { + return val; + } + //TODO see https://github.com/jquery/esprima/issues/1071 + val = getCommentStart(n.expression.left); + if(val > -1) { + return val; + } + return n.range[0]; + } + return n.range[0]; + } + } + } + return node.range[0]; + } + + /** + * @description Returns the offset to use when inserting a comment directive + * @param {Object} node The node to check for comments + * @returns {Number} The offset to insert the comment + */ + function getCommentStart(node) { + if(node.leadingComments && node.leadingComments.length > 0) { + var comment = node.leadingComments[node.leadingComments.length-1]; + if(/(?:@param|@return|@returns|@type|@constructor|@name|@description)/ig.test(comment.value)) { + //if the immediate comment has any of the tags we use for inferencing, add the directive before it instead of after + return comment.range[0]; + } } - } - return false; - } - - /** - * @description Computes where the eslint directive should be inserted relative to the given node - * @param {Object} node The AST node - * @returns {Number} The insertion point - */ - function getDirectiveInsertionPoint(node) { - if(node.type === 'Program' && node.body && node.body.length > 0) { - var n = node.body[0]; - var val = -1; - switch(n.type) { - case 'FunctionDeclaration': { - val = getCommentStart(n); - if(val > -1) { - return val; - } - //TODO see https://github.com/jquery/esprima/issues/1071 - val = getCommentStart(n.id); - if(val > -1) { - return val; - } - return n.range[0]; - } - case 'ExpressionStatement': { - if(n.expression && n.expression.right && n.expression.right.type === 'FunctionExpression') { - val = getCommentStart(n); - if(val > -1) { - return val; - } - //TODO see https://github.com/jquery/esprima/issues/1071 - val = getCommentStart(n.expression.left); - if(val > -1) { - return val; - } - return n.range[0]; - } - return n.range[0]; - } - } - } - return node.range[0]; - } - - /** - * @description Returns the offset to use when inserting a comment directive - * @param {Object} node The node to check for comments - * @returns {Number} The offset to insert the comment - */ - function getCommentStart(node) { - if(node.leadingComments && node.leadingComments.length > 0) { - var comment = node.leadingComments[node.leadingComments.length-1]; - if(/(?:@param|@return|@returns|@type|@constructor|@name|@description)/ig.test(comment.value)) { - //if the immediate comment has any of the tags we use for inferencing, add the directive before it instead of after - return comment.range[0]; - } - } - return -1; - } - - var controlStatements = ['IfStatement', 'WhileStatement', 'ForStatement', 'ForInStatement', 'WithStatement', 'DoWhileStatement', 'ForOfStatement']; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ - - /** - * @description Walks the parents array and checks to see if there is a control statement as a direct parent - * @param {Object} node The AST node to check - * @returns {Object} The AST node that is a direct control statement parent of the given node, or null - */ - function getControlStatementParent(node) { - if(node && node.parents) { - var i = node.parents.length-1, - p = node.parents[i]; - while(p && i > -1) { - if(controlStatements.indexOf(p.type) > -1) { - return p; + return -1; + } + + var controlStatements = ['IfStatement', 'WhileStatement', 'ForStatement', 'ForInStatement', 'WithStatement', 'DoWhileStatement', 'ForOfStatement']; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ + + /** + * @description Walks the parents array and checks to see if there is a control statement as a direct parent + * @param {Object} node The AST node to check + * @returns {Object} The AST node that is a direct control statement parent of the given node, or null + */ + function getControlStatementParent(node) { + if(node && node.parents) { + var i = node.parents.length-1, + p = node.parents[i]; + while(p && i > -1) { + if(controlStatements.indexOf(p.type) > -1) { + return p; + } + p = node.parents[--i]; } - p = node.parents[--i]; + } + else { + return null; } } - else { - return null; - } - } - - /** - * Takes a quickfix implementation that can be applied to all fixes in a file and applies it to either all annotations (if multiple annotations provided) or - * just to the single annotation. Handles applying all edits in a single UNDO step as well as setting the caret to the single selected annotation afterward. - * @param {Array.<Object>} annotations Array of annotations to apply the fix to - * @param {Function} createTextChange function to create a text edit object (text, start, end) for a given annotation - */ - function applySingleFixToAll(annotations, createTextChange) { - var edits = []; - annotations.forEach(function(current) { - var change = createTextChange(current); - if(change) { - if(Array.isArray(change)) { - change.forEach(function(fix) { - edits.push(fix); - }); - } else { - edits.push(change); + + /** + * Takes a quickfix implementation that can be applied to all fixes in a file and applies it to either all annotations (if multiple annotations provided) or + * just to the single annotation. Handles applying all edits in a single UNDO step as well as setting the caret to the single selected annotation afterward. + * @param {Array.<Object>} annotations Array of annotations to apply the fix to + * @param {Function} createTextChange function to create a text edit object (text, start, end) for a given annotation + */ + function applySingleFixToAll(annotations, createTextChange) { + var edits = []; + annotations.forEach(function(current) { + var change = createTextChange(current); + if(change) { + if(Array.isArray(change)) { + change.forEach(function(fix) { + edits.push(fix); + }); + } else { + edits.push(change); + } } + }); + // To use setText() with multiple selections they must be in range order + edits = edits.sort(function(a, b){ + return a.start - b.start; + }); + var mergedEdits = []; + var intersectedRange = false; + for (var i = 0; i < edits.length ; i++) { + if(i === edits.length - 1 && !intersectedRange){ + mergedEdits.push(edits[i]); + break; + } else if (i === edits.length - 1) { + break; + } + var element = intersectedRange ? mergedEdits.pop() : edits[i]; + var nextElement = edits[i+1]; + if (element.end >= nextElement.start){ + mergedEdits.push({ + start: element.start, + end: nextElement.end, + text: element.text + nextElement.text + }); + intersectedRange = true; + } else { + mergedEdits.push(element); + intersectedRange = false; + } } - }); - // To use setText() with multiple selections they must be in range order - edits = edits.sort(function(a, b){ - return a.start - b.start; - }); - var mergedEdits = []; - var intersectedRange = false; - for (var i = 0; i < edits.length ; i++) { - if(i === edits.length - 1 && !intersectedRange){ - mergedEdits.push(edits[i]); - break; - } else if (i === edits.length - 1) { - break; - } - var element = intersectedRange ? mergedEdits.pop() : edits[i]; - var nextElement = edits[i+1]; - if (element.end >= nextElement.start){ - mergedEdits.push({ - start: element.start, - end: nextElement.end, - text: element.text + nextElement.text - }); - intersectedRange = true; - } else { - mergedEdits.push(element); - intersectedRange = false; - } - + return mergedEdits; } - return mergedEdits; - } -}); + }); diff --git a/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/quickfixTests.js b/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/quickfixTests.js index 14673e1..b08b054 100644 --- a/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/quickfixTests.js +++ b/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/quickfixTests.js @@ -1,9 +1,9 @@ /*******************************************************************************
* @license
* Copyright (c) 2014, 2016 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License v1.0
- * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
* License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
*
* Contributors:
@@ -25,17 +25,17 @@ define([ 'mocha/mocha', //must stay at the end, not a module
], function(QuickFixes, Validator, chai, Deferred, ASTManager, CUProvider, RenameCommand, GenerateDocCommand, mServiceRegistry, JSProject) {
var assert = chai.assert;
-
+
return function(worker) {
describe('Quick Fix Tests',function() {
this.timeout(10000);
before('Reset Tern Server', function(done) {
worker.start(done); // Reset the tern server state to remove any prior files
});
-
+
/**
* @description Sets up the test
- *
+ *
* Supported options include:
* - `buffer` - the source to process
* - `contentType` - the content type to load, defaults to application/javascript if not specified
@@ -70,15 +70,15 @@ define([ }
return new Deferred().resolve(buffer.slice(start, end));
},
-
+
setText: function(text, start, end) {
return new Deferred().resolve(assertFixes(text, start, end, options.expected));
},
-
+
getSelections: function(){
return new Deferred().resolve([]);
},
-
+
getFileMetadata:function() {
var o = Object.create(null);
o.contentType = Object.create(null);
@@ -107,7 +107,7 @@ define([ loc: loc
};
}
-
+
/**
* @callback from Mocha after each test run
*/
@@ -115,7 +115,7 @@ define([ CUProvider.onModelChanging({file: {location: 'quickfix_test_script.js'}});
CUProvider.onModelChanging({file: {location: 'quickfix_test_script.html'}});
});
-
+
/**
* @description Checks the state of the linked models
* @param {Object} linkedModel The linked model from the platform
@@ -150,7 +150,7 @@ define([ worker.getTestState().callback(err);
}
}
-
+
/**
* @description Runs the validator on the given options and computes fixes for those problems
* @param {Object} options {buffer, contentType, rule}
@@ -221,7 +221,7 @@ define([ worker.getTestState().callback(error);
});
}
-
+
/**
* @description Compares the computed fixes set against the expected ones
* @param {Array.<orion.Fix>} computed The computed set of fixes
@@ -234,7 +234,7 @@ define([ assert(Array.isArray(computed.text), "Expected multiple quick fix text edits");
assert(Array.isArray(computed.selection), "Expected multiple quick fix selections");
assert.equal(computed.text.length, expected.length, "Wrong number of quick fix text edits");
- assert.equal(computed.selection.length, expected.length, "Wrong number of quick fix selections");
+ assert.equal(computed.selection.length, expected.length, "Wrong number of quick fix selections");
for (var i=0; i<expected.length; i++) {
assert(computed.text[i] === expected[i].value, 'The fix: \"'+computed.text[i]+'\" does not match the expected fix of: \"'+expected[i].value + '\"');
assert.equal(computed.selection[i].start, expected[i].start, 'The fix starts do not match');
@@ -311,7 +311,7 @@ define([ expected: expected,
callback: done
});
- });
+ });
it("function declaration params", function(done) {
var rule = createTestRule("missing-doc");
var expected = {
@@ -1391,7 +1391,7 @@ define([ };
return getFixes({
buffer: "debugger",
- rule: rule,
+ rule: rule,
expected: expected,
callback: done
});
@@ -1405,7 +1405,7 @@ define([ };
return getFixes({
buffer: "debugger;",
- rule: rule,
+ rule: rule,
expected: expected,
callback: done
});
@@ -1418,7 +1418,7 @@ define([ ];
return getFixes({
buffer: "debugger\ndebugger",
- rule: rule,
+ rule: rule,
expected: expected,
callback: done
});
@@ -1431,7 +1431,7 @@ define([ ];
return getFixes({
buffer: "debugger;\ndebugger;",
- rule: rule,
+ rule: rule,
expected: expected,
callback: done
});
@@ -1439,13 +1439,13 @@ define([ it("no-debugger semicolon mixed multi", function(done) {
var rule = createTestRule("no-debugger");
var expected = [
- {value: "", start: 0, end: 8},
+ {value: "", start: 0, end: 8},
{value: "", start: 9, end: 18},
{value: "", start: 19, end: 27}
];
return getFixes({
buffer: "debugger\ndebugger;\ndebugger",
- rule: rule,
+ rule: rule,
expected: expected,
callback: done
});
@@ -2029,9 +2029,9 @@ define([ it("Test no-comma-dangle-1", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 15,
+ start: 15,
end: 16};
- return getFixes({buffer: 'f({one:1, two:2,});',
+ return getFixes({buffer: 'f({one:1, two:2,});',
rule: rule,
expected: expected,
callback: callback});
@@ -2039,9 +2039,9 @@ define([ it("Test no-comma-dangle-2", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 21,
+ start: 21,
end: 22};
- return getFixes({buffer: 'var f = {one:1, two:2,};',
+ return getFixes({buffer: 'var f = {one:1, two:2,};',
rule: rule,
expected: expected,
callback: callback});
@@ -2049,9 +2049,9 @@ define([ it("Test no-comma-dangle-3", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 22,
+ start: 22,
end: 23};
- return getFixes({buffer: 'var f = [{one:1, two:2,}];',
+ return getFixes({buffer: 'var f = [{one:1, two:2,}];',
rule: rule,
expected: expected,
callback: callback});
@@ -2059,9 +2059,9 @@ define([ it("Test no-comma-dangle-html-1", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 35,
+ start: 35,
end: 36};
- return getFixes({buffer: '<html><head><script>f({one:1, two:2,});</script></head></html>',
+ return getFixes({buffer: '<html><head><script>f({one:1, two:2,});</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2070,9 +2070,9 @@ define([ it("Test no-comma-dangle-html-2", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 41,
+ start: 41,
end: 42};
- return getFixes({buffer: '<html><head><script>var f = {one:1, two:2,};</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = {one:1, two:2,};</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2081,9 +2081,9 @@ define([ it("Test no-comma-dangle-html-3", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 42,
+ start: 42,
end: 43};
- return getFixes({buffer: '<html><head><script>var f = [{one:1, two:2,}];</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = [{one:1, two:2,}];</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2092,9 +2092,9 @@ define([ it("Test no-comma-dangle-html-4", function(callback) {
var rule = createTestRule('no-comma-dangle');
var expected = {value: "",
- start: 59,
+ start: 59,
end: 60};
- return getFixes({buffer: '<html><head><script></script><script>var f = [{one:1, two:2,}];</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>var f = [{one:1, two:2,}];</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2104,13 +2104,13 @@ define([ var rule = createTestRule('no-comma-dangle');
var expected = [
{value: "",
- start: 15,
+ start: 15,
end: 16},
{value: "",
- start: 35,
+ start: 35,
end: 36}
];
- return getFixes({buffer: 'f({one:1, two:2,}); f({one:1, two:2,});',
+ return getFixes({buffer: 'f({one:1, two:2,}); f({one:1, two:2,});',
rule: rule,
expected: expected,
callback: callback});
@@ -2119,13 +2119,13 @@ define([ var rule = createTestRule('no-comma-dangle');
var expected = [
{value: "",
- start: 15,
+ start: 15,
end: 16},
{value: "",
- start: 41,
+ start: 41,
end: 42}
];
- return getFixes({buffer: 'f({one:1, two:2,});\nvar f = {one:1, two:2,};',
+ return getFixes({buffer: 'f({one:1, two:2,});\nvar f = {one:1, two:2,};',
rule: rule,
expected: expected,
callback: callback});
@@ -2134,16 +2134,16 @@ define([ var rule = createTestRule('no-comma-dangle');
var expected = [
{value: "",
- start: 15,
+ start: 15,
end: 16},
{value: "",
- start: 41,
+ start: 41,
end: 42},
{value: "",
- start: 67,
+ start: 67,
end: 68}
];
- return getFixes({buffer: 'f({one:1, two:2,}); var f = {one:1, two:2,}; var f = [{one:1, two:2,}];',
+ return getFixes({buffer: 'f({one:1, two:2,}); var f = {one:1, two:2,}; var f = [{one:1, two:2,}];',
rule: rule,
expected: expected,
callback: callback});
@@ -2154,42 +2154,42 @@ define([ it("Test no-empty-block-1", function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 14,
+ start: 14,
end: 14};
- return getFixes({buffer: 'function f() {}',
+ return getFixes({buffer: 'function f() {}',
rule: rule,
expected: expected,
callback: callback});
});
-
+
it("Test no-empty-block-2",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 39,
+ start: 39,
end: 39};
- return getFixes({buffer: 'var f = {f: function() { function q() {}}}',
+ return getFixes({buffer: 'var f = {f: function() { function q() {}}}',
rule: rule,
expected: expected,
callback: callback});
});
-
+
it("Test no-empty-block-3",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 25,
+ start: 25,
end: 25};
- return getFixes({buffer: 'var f = { f: function() {}};',
+ return getFixes({buffer: 'var f = { f: function() {}};',
rule: rule,
expected: expected,
callback: callback});
});
-
+
it("Test no-empty-block-4",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 10,
+ start: 10,
end: 10};
- return getFixes({buffer: 'while(f) {}',
+ return getFixes({buffer: 'while(f) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -2197,9 +2197,9 @@ define([ it("Test no-empty-block-5",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 7,
+ start: 7,
end: 7};
- return getFixes({buffer: 'if(f) {}',
+ return getFixes({buffer: 'if(f) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -2207,9 +2207,9 @@ define([ it("Test no-empty-block-6",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 17,
+ start: 17,
end: 17};
- return getFixes({buffer: 'if(f) {while(f) {}}',
+ return getFixes({buffer: 'if(f) {while(f) {}}',
rule: rule,
expected: expected,
callback: callback});
@@ -2217,45 +2217,45 @@ define([ it("Test no-empty-block-html-1",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 34,
+ start: 34,
end: 34};
- return getFixes({buffer: '<html><head><script>function f() {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f() {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
contentType: 'text/html'});
});
-
+
it("Test no-empty-block-html-2",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 59,
+ start: 59,
end: 59};
- return getFixes({buffer: '<html><head><script>var f = {f: function() { function q() {}}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = {f: function() { function q() {}}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
contentType: 'text/html'});
});
-
+
it("Test no-empty-block-html-3",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 45,
+ start: 45,
end: 45};
- return getFixes({buffer: '<html><head><script>var f = { f: function() {}};</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = { f: function() {}};</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
contentType: 'text/html'});
});
-
+
it("Test no-empty-block-html-4",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 30,
+ start: 30,
end: 30};
- return getFixes({buffer: '<html><head><script>while(f) {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>while(f) {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2264,9 +2264,9 @@ define([ it("Test no-empty-block-html-5",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 27,
+ start: 27,
end: 27};
- return getFixes({buffer: '<html><head><script>if(f) {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(f) {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2275,9 +2275,9 @@ define([ it("Test no-empty-block-html-6",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 37,
+ start: 37,
end: 37};
- return getFixes({buffer: '<html><head><script>if(f) {while(f) {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(f) {while(f) {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2286,9 +2286,9 @@ define([ it("Test no-empty-block-html-7",function(callback) {
var rule = createTestRule('no-empty-block');
var expected = {value: "//TODO empty block",
- start: 54,
+ start: 54,
end: 54};
- return getFixes({buffer: '<html><head><script></script><script>if(f) {while(f) {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>if(f) {while(f) {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2301,13 +2301,13 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 12,
+ start: 12,
end: 13}
];
- return getFixes({buffer: 'if (a === (b)){}',
+ return getFixes({buffer: 'if (a === (b)){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2316,13 +2316,13 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: " ",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 12,
+ start: 12,
end: 13}
];
- return getFixes({buffer: 'if (typeof(a) === "object"){}',
+ return getFixes({buffer: 'if (typeof(a) === "object"){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2331,13 +2331,13 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 13,
+ start: 13,
end: 14}
];
- return getFixes({buffer: 'if (typeof( a) === "object"){}',
+ return getFixes({buffer: 'if (typeof( a) === "object"){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2346,13 +2346,13 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: "",
- start: 11,
+ start: 11,
end: 12},
{value: "",
- start: 13,
+ start: 13,
end: 14}
];
- return getFixes({buffer: 'if (typeof (a) === "object"){}',
+ return getFixes({buffer: 'if (typeof (a) === "object"){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2361,19 +2361,19 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: "",
- start: 8,
+ start: 8,
end: 9},
{value: "",
- start: 12,
+ start: 12,
end: 13},
{value: "",
- start: 23,
+ start: 23,
end: 24},
{value: "",
- start: 27,
+ start: 27,
end: 28}
];
- return getFixes({buffer: 'var a = (1+1);\nvar b = (1-1);',
+ return getFixes({buffer: 'var a = (1+1);\nvar b = (1-1);',
rule: rule,
expected: expected,
callback: callback});
@@ -2382,19 +2382,19 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 8,
+ start: 8,
end: 10},
{value: "",
- start: 11,
+ start: 11,
end: 12},
{value: "",
- start: 13,
+ start: 13,
end: 14},
{value: "",
- start: 15,
+ start: 15,
end: 17},
];
- return getFixes({buffer: 'var a = ((1)+(1));',
+ return getFixes({buffer: 'var a = ((1)+(1));',
rule: rule,
expected: expected,
callback: callback});
@@ -2404,13 +2404,13 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 12,
+ start: 12,
end: 13},
];
- return getFixes({buffer: 'var a = (((1)));',
+ return getFixes({buffer: 'var a = (((1)));',
rule: rule,
expected: expected,
callback: callback});
@@ -2419,13 +2419,13 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 18,
+ start: 18,
end: 19},
{value: "",
- start: 20,
+ start: 20,
end: 21}
];
- return getFixes({buffer: '<script>if (a === (b)){}</script>',
+ return getFixes({buffer: '<script>if (a === (b)){}</script>',
rule: rule,
expected: expected,
callback: callback,
@@ -2435,13 +2435,13 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: " ",
- start: 18,
+ start: 18,
end: 19},
{value: "",
- start: 20,
+ start: 20,
end: 21}
];
- return getFixes({buffer: '<script>if (typeof(a) === "object"){}</script>',
+ return getFixes({buffer: '<script>if (typeof(a) === "object"){}</script>',
rule: rule,
expected: expected,
callback: callback,
@@ -2451,19 +2451,19 @@ define([ var rule = createTestRule('no-extra-parens');
var expected = [
{value: "",
- start: 16,
+ start: 16,
end: 17},
{value: "",
- start: 20,
+ start: 20,
end: 21},
{value: "",
- start: 31,
+ start: 31,
end: 32},
{value: "",
- start: 35,
+ start: 35,
end: 36}
];
- return getFixes({buffer: '<script>var a = (1+1);\nvar b = (1-1);</script>',
+ return getFixes({buffer: '<script>var a = (1+1);\nvar b = (1-1);</script>',
rule: rule,
expected: expected,
callback: callback,
@@ -2473,19 +2473,19 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 16,
+ start: 16,
end: 18},
{value: "",
- start: 19,
+ start: 19,
end: 20},
{value: "",
- start: 21,
+ start: 21,
end: 22},
{value: "",
- start: 23,
+ start: 23,
end: 25},
];
- return getFixes({buffer: '<script>var a = ((1)+(1));</script>',
+ return getFixes({buffer: '<script>var a = ((1)+(1));</script>',
rule: rule,
expected: expected,
callback: callback,
@@ -2495,13 +2495,13 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 14,
+ start: 14,
end: 15}
];
- return getFixes({buffer: 'if (a === (\nb\n)){}',
+ return getFixes({buffer: 'if (a === (\nb\n)){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2510,13 +2510,13 @@ define([ var rule = createTestRule('no-extra-parens', 2, {"conditionalAssign": false, "returnAssign": false, "nestedBinaryExpressions": true});
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 11},
{value: "",
- start: 13,
+ start: 13,
end: 14}
];
- return getFixes({buffer: 'if (a === (b )){}',
+ return getFixes({buffer: 'if (a === (b )){}',
rule: rule,
expected: expected,
callback: callback});
@@ -2527,9 +2527,9 @@ define([ it("Test no-extra-semi-1",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 15,
+ start: 15,
end: 16};
- return getFixes({buffer: 'function f() {};',
+ return getFixes({buffer: 'function f() {};',
rule: rule,
expected: expected,
callback: callback});
@@ -2537,9 +2537,9 @@ define([ it("Test no-extra-semi-2",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 13,
+ start: 13,
end: 14};
- return getFixes({buffer: 'var foo = 10;;',
+ return getFixes({buffer: 'var foo = 10;;',
rule: rule,
expected: expected,
callback: callback});
@@ -2547,9 +2547,9 @@ define([ it("Test no-extra-semi-3",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 13,
+ start: 13,
end: 14};
- return getFixes({buffer: 'var foo = {};;',
+ return getFixes({buffer: 'var foo = {};;',
rule: rule,
expected: expected,
callback: callback});
@@ -2557,9 +2557,9 @@ define([ it("Test no-extra-semi-4",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 0,
+ start: 0,
end: 1};
- return getFixes({buffer: ';',
+ return getFixes({buffer: ';',
rule: rule,
expected: expected,
callback: callback});
@@ -2567,9 +2567,9 @@ define([ it("Test no-extra-semi-html-1",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 35,
+ start: 35,
end: 36};
- return getFixes({buffer: '<html><head><script>function f() {};</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f() {};</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2578,9 +2578,9 @@ define([ it("Test no-extra-semi-html-2",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 33,
+ start: 33,
end: 34};
- return getFixes({buffer: '<html><head><script>var foo = 10;;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var foo = 10;;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2589,9 +2589,9 @@ define([ it("Test no-extra-semi-html-3",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 33,
+ start: 33,
end: 34};
- return getFixes({buffer: '<html><head><script>var foo = {};;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var foo = {};;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2600,9 +2600,9 @@ define([ it("Test no-extra-semi-html-4",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 20,
+ start: 20,
end: 21};
- return getFixes({buffer: '<html><head><script>;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2611,9 +2611,9 @@ define([ it("Test no-extra-semi-html-5",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 37,
+ start: 37,
end: 38};
- return getFixes({buffer: '<html><head><script></script><script>;</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2623,13 +2623,13 @@ define([ var rule = createTestRule('no-extra-semi');
var expected = [
{value: "",
- start: 15,
+ start: 15,
end: 16},
{value: "",
- start: 32,
+ start: 32,
end: 33}
];
- return getFixes({buffer: 'function f() {}; function g() {};',
+ return getFixes({buffer: 'function f() {}; function g() {};',
rule: rule,
expected: expected,
callback: callback});
@@ -2638,10 +2638,10 @@ define([ var rule = createTestRule('no-extra-semi');
var expected = [
{value: "",
- start: 11,
+ start: 11,
end: 14}
];
- return getFixes({buffer: 'var a = 10;;;;',
+ return getFixes({buffer: 'var a = 10;;;;',
rule: rule,
expected: expected,
callback: callback});
@@ -2650,10 +2650,10 @@ define([ var rule = createTestRule('no-extra-semi');
var expected = [
{value: "",
- start: 14,
+ start: 14,
end: 17}
];
- return getFixes({buffer: 'function f(){};;;',
+ return getFixes({buffer: 'function f(){};;;',
rule: rule,
expected: expected,
callback: callback});
@@ -2662,19 +2662,19 @@ define([ var rule = createTestRule('no-extra-semi');
var expected = [
{value: "",
- start: 0,
+ start: 0,
end: 1},
{value: "",
- start: 17,
+ start: 17,
end: 18},
{value: "",
- start: 29,
+ start: 29,
end: 30},
{value: "",
- start: 42,
+ start: 42,
end: 43}
];
- return getFixes({buffer: '; function f() {}; var a = 0;; var b = {};;',
+ return getFixes({buffer: '; function f() {}; var a = 0;; var b = {};;',
rule: rule,
expected: expected,
callback: callback});
@@ -2683,10 +2683,10 @@ define([ var rule = createTestRule('no-extra-semi');
var expected = [
{value: "",
- start: 18,
+ start: 18,
end: 21}
];
- return getFixes({buffer: '<script>var a = 0;;;;</script>',
+ return getFixes({buffer: '<script>var a = 0;;;;</script>',
rule: rule,
expected: expected,
callback: callback,
@@ -2695,9 +2695,9 @@ define([ it("Test no-extra-semi-2",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 13,
+ start: 13,
end: 14};
- return getFixes({buffer: 'var foo = 10;;',
+ return getFixes({buffer: 'var foo = 10;;',
rule: rule,
expected: expected,
callback: callback});
@@ -2705,9 +2705,9 @@ define([ it("Test no-extra-semi-3",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 13,
+ start: 13,
end: 14};
- return getFixes({buffer: 'var foo = {};;',
+ return getFixes({buffer: 'var foo = {};;',
rule: rule,
expected: expected,
callback: callback});
@@ -2715,25 +2715,25 @@ define([ it("Test no-extra-semi-4",function(callback) {
var rule = createTestRule('no-extra-semi');
var expected = {value: "",
- start: 0,
+ start: 0,
end: 1};
- return getFixes({buffer: ';',
+ return getFixes({buffer: ';',
rule: rule,
expected: expected,
callback: callback});
});
-
-
-
+
+
+
});
//NO-FALLTHROUGH
describe("no-fallthrough", function() {
it("Test no-fallthrough-1",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "//$FALLTHROUGH$",
- start: 30,
+ start: 30,
end: 30};
- return getFixes({buffer: 'switch(num) {case 1:{code();} case 2:{}}',
+ return getFixes({buffer: 'switch(num) {case 1:{code();} case 2:{}}',
rule: rule,
expected: expected,
callback: callback});
@@ -2741,9 +2741,9 @@ define([ it("Test no-fallthrough-2",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "//$FALLTHROUGH$",
- start: 46,
+ start: 46,
end: 46};
- return getFixes({buffer: 'switch(num) {case 1:{break;} case 2:{code();} default: {}}',
+ return getFixes({buffer: 'switch(num) {case 1:{break;} case 2:{code();} default: {}}',
rule: rule,
expected: expected,
callback: callback});
@@ -2751,9 +2751,9 @@ define([ it("Test no-fallthrough-html-1",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "//$FALLTHROUGH$",
- start: 50,
+ start: 50,
end: 50};
- return getFixes({buffer: '<html><head><script>switch(num) {case 1:{code();} case 2:{}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>switch(num) {case 1:{code();} case 2:{}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2762,9 +2762,9 @@ define([ it("Test no-fallthrough-html-2",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "//$FALLTHROUGH$",
- start: 66,
+ start: 66,
end: 66};
- return getFixes({buffer: '<html><head><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2773,9 +2773,9 @@ define([ it("Test no-fallthrough-html-3",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "//$FALLTHROUGH$",
- start: 83,
+ start: 83,
end: 83};
- return getFixes({buffer: '<html><head><script></script><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2784,9 +2784,9 @@ define([ it("Test no-fallthrough-break-1",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "break;",
- start: 30,
+ start: 30,
end: 30};
- return getFixes({buffer: 'switch(num) {case 1:{code();} case 2:{}}',
+ return getFixes({buffer: 'switch(num) {case 1:{code();} case 2:{}}',
rule: rule,
expected: expected,
callback: callback,
@@ -2795,9 +2795,9 @@ define([ it("Test no-fallthrough-break-2",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "break;",
- start: 46,
+ start: 46,
end: 46};
- return getFixes({buffer: 'switch(num) {case 1:{break;} case 2:{code();} default: {}}',
+ return getFixes({buffer: 'switch(num) {case 1:{break;} case 2:{code();} default: {}}',
rule: rule,
expected: expected,
callback: callback,
@@ -2806,9 +2806,9 @@ define([ it("Test no-fallthrough-break-html-1",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "break;",
- start: 50,
+ start: 50,
end: 50};
- return getFixes({buffer: '<html><head><script>switch(num) {case 1:{code();} case 2:{}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>switch(num) {case 1:{code();} case 2:{}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2818,9 +2818,9 @@ define([ it("Test no-fallthrough-break-html-2",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "break;",
- start: 66,
+ start: 66,
end: 66};
- return getFixes({buffer: '<html><head><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -2830,9 +2830,9 @@ define([ it("Test no-fallthrough-break-html-3",function(callback) {
var rule = createTestRule('no-fallthrough');
var expected = {value: "break;",
- start: 83,
+ start: 83,
end: 83};
- return getFixes({buffer: '<html><head><script></script><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>switch(num) {case 1:{break;} case 2:{code();} default: {}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3007,9 +3007,9 @@ define([ it("Test no-undef-defined-existing-doc",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals aa:true */",
- start: 0,
+ start: 0,
end: 0};
- return getFixes({buffer: '/** @returns {Object} */ function f() {aa = 10;}',
+ return getFixes({buffer: '/** @returns {Object} */ function f() {aa = 10;}',
rule: rule,
expected: expected,
callback: callback});
@@ -3020,9 +3020,9 @@ define([ it("Test no-undef-defined-existing-doc 2",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals aa:true */",
- start: 25,
+ start: 25,
end: 25};
- return getFixes({buffer: '/** just some comment */ function f() {aa = 10;}',
+ return getFixes({buffer: '/** just some comment */ function f() {aa = 10;}',
rule: rule,
expected: expected,
callback: callback});
@@ -3033,9 +3033,9 @@ define([ it("Test no-undef-defined-existing-doc 3",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals Foo */",
- start: 0,
+ start: 0,
end: 0};
- return getFixes({buffer: '/** @returns {Object} */ Foo["bar"] =function() {};',
+ return getFixes({buffer: '/** @returns {Object} */ Foo["bar"] =function() {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3046,9 +3046,9 @@ define([ it("Test no-undef-defined-existing-doc 4",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals Foo */",
- start: 25,
+ start: 25,
end: 25};
- return getFixes({buffer: '/** just some comment */ Foo["bar"] =function() {};',
+ return getFixes({buffer: '/** just some comment */ Foo["bar"] =function() {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3056,10 +3056,10 @@ define([ it("Test no-undef-defined-1",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'console.log(10);',
+ {buffer: 'console.log(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3070,10 +3070,10 @@ define([ it("Test no-undef-defined-1a",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env node */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'var v = require("");\nconsole.log(10);',
+ {buffer: 'var v = require("");\nconsole.log(10);',
rule: rule,
pbcount: 2,
expected: expected,
@@ -3085,10 +3085,10 @@ define([ it("Test no-undef-defined-1b",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'define([], function() {console.log(10);});',
+ {buffer: 'define([], function() {console.log(10);});',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3101,10 +3101,10 @@ define([ it("Test no-undef-defined-1c",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'define([], function(require) { var v = require("");\nconsole.log(10);});',
+ {buffer: 'define([], function(require) { var v = require("");\nconsole.log(10);});',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3117,10 +3117,10 @@ define([ it("Test no-undef-defined-1d",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'define("", [], function() {console.log(10);});',
+ {buffer: 'define("", [], function() {console.log(10);});',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3133,10 +3133,10 @@ define([ it("Test no-undef-defined-1e",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'define(function() {console.log(10);});',
+ {buffer: 'define(function() {console.log(10);});',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3149,10 +3149,10 @@ define([ it("Test no-undef-defined-1f",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'require({}); console.log(10);',
+ {buffer: 'require({}); console.log(10);',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3165,10 +3165,10 @@ define([ it("Test no-undef-defined-1g",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'require([""]); console.log(10);',
+ {buffer: 'require([""]); console.log(10);',
rule: rule,
pbcount: 2,
pbindex: 1,
@@ -3178,10 +3178,10 @@ define([ it("Test no-undef-defined-2",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals foo */",
- start: 0,
+ start: 0,
end: 0};
return getFixes(
- {buffer: 'foo(10);',
+ {buffer: 'foo(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3189,10 +3189,10 @@ define([ it("Test no-undef-defined-3",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "globals foo bar",
- start: 2,
+ start: 2,
end: 14};
return getFixes(
- {buffer: '/*globals foo */ foo(10); bar();',
+ {buffer: '/*globals foo */ foo(10); bar();',
rule: rule,
expected: expected,
callback: callback});
@@ -3200,9 +3200,9 @@ define([ it("Test no-undef-defined-4",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "globals bar foo:true",
- start: 2,
+ start: 2,
end: 13};
- return getFixes({buffer: '/*globals bar*/ foo++; bar();',
+ return getFixes({buffer: '/*globals bar*/ foo++; bar();',
rule: rule,
expected: expected,
callback: callback});
@@ -3210,9 +3210,9 @@ define([ it("Test no-undef-defined-5",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "globals bar foo:true",
- start: 2,
+ start: 2,
end: 13};
- return getFixes({buffer: '/*globals bar*/ foo = bar; bar();',
+ return getFixes({buffer: '/*globals bar*/ foo = bar; bar();',
rule: rule,
expected: expected,
callback: callback});
@@ -3220,9 +3220,9 @@ define([ it("Test no-undef-defined-eslint-env-4",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "eslint-env node, browser",
- start: 2,
+ start: 2,
end: 18};
- return getFixes({buffer: '/*eslint-env node */ console.log(10); window.open();',
+ return getFixes({buffer: '/*eslint-env node */ console.log(10); window.open();',
rule: rule,
expected: expected,
callback: callback});
@@ -3230,9 +3230,9 @@ define([ it("Test no-undef-defined-indent-1",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals foo */\n\t\t",
- start: 2,
+ start: 2,
end: 2};
- return getFixes({buffer: '\t\tfoo(10);',
+ return getFixes({buffer: '\t\tfoo(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3240,9 +3240,9 @@ define([ it("Test no-undef-defined-indent-2",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals foo */\n ",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: ' foo(10);',
+ return getFixes({buffer: ' foo(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3250,9 +3250,9 @@ define([ it("Test no-undef-defined-indent-3",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*globals foo */\n\t \t",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: '\t \tfoo(10);',
+ return getFixes({buffer: '\t \tfoo(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3260,9 +3260,9 @@ define([ it("Test no-undef-defined-indent-4",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */\n\t\t",
- start: 2,
+ start: 2,
end: 2};
- return getFixes({buffer: '\t\tconsole.log(10);',
+ return getFixes({buffer: '\t\tconsole.log(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3270,9 +3270,9 @@ define([ it("Test no-undef-defined-indent-5",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */\n ",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: ' console.log(10);',
+ return getFixes({buffer: ' console.log(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3280,9 +3280,9 @@ define([ it("Test no-undef-defined-indent-6",function(callback) {
var rule = createTestRule('no-undef');
var expected = {value: "/*eslint-env browser */\n\t \t",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: '\t \tconsole.log(10);',
+ return getFixes({buffer: '\t \tconsole.log(10);',
rule: rule,
expected: expected,
callback: callback});
@@ -3293,9 +3293,9 @@ define([ it("Navigate to definition in file",function(callback) {
var rule = createTestRule('no-undef-expression');
var expected = {file: 'quickfix_test_script.js',
- start: 8,
+ start: 8,
end: 15};
- return getFixes({buffer: 'var a = {b: ""}; var c = a; c.d();',
+ return getFixes({buffer: 'var a = {b: ""}; var c = a; c.d();',
rule: rule,
expected: expected,
callback: callback});
@@ -3309,7 +3309,7 @@ define([ var expected = {value: "",
start: 11,
end: 12};
- return getFixes({buffer: 'function f(p) {}',
+ return getFixes({buffer: 'function f(p) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3319,7 +3319,7 @@ define([ var expected = {value: "",
start: 12,
end: 16};
- return getFixes({buffer: 'function f(p, p2, p3) {p(); p3();}',
+ return getFixes({buffer: 'function f(p, p2, p3) {p(); p3();}',
rule: rule,
expected: expected,
callback: callback});
@@ -3329,7 +3329,7 @@ define([ var expected = {value: "",
start:16,
end:20};
- return getFixes({buffer: 'function f(p, p2, p3) {p(); p2();}',
+ return getFixes({buffer: 'function f(p, p2, p3) {p(); p2();}',
rule: rule,
expected: expected,
callback: callback});
@@ -3337,9 +3337,9 @@ define([ it("Test no-unused-params-4",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/* @callback */",
- start: 11,
+ start: 11,
end: 11};
- return getFixes({buffer: 'define([], function(p, p2, p3) {p(); p2();});',
+ return getFixes({buffer: 'define([], function(p, p2, p3) {p(); p2();});',
rule: rule,
expected: expected,
callback: callback});
@@ -3347,9 +3347,9 @@ define([ it("Test no-unused-params-5",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */",
- start: 10,
+ start: 10,
end: 10};
- return getFixes({buffer: 'var f = { one: function(p, p2, p3) {p(); p2();}};',
+ return getFixes({buffer: 'var f = { one: function(p, p2, p3) {p(); p2();}};',
rule: rule,
expected: expected,
callback: callback});
@@ -3360,9 +3360,9 @@ define([ it("Test no-unused-params-existing-doc-1",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback\n",
- start: 25,
+ start: 25,
end: 25};
- return getFixes({buffer: 'var f = { /**\n *@see\n *\n */\none: function(p, p2, p3) {p(); p2();}};',
+ return getFixes({buffer: 'var f = { /**\n *@see\n *\n */\none: function(p, p2, p3) {p(); p2();}};',
rule: rule,
expected: expected,
callback: callback});
@@ -3374,9 +3374,9 @@ define([ it("Test no-unused-params-assignment-1",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback\n",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: '/** */a.b.c = function(p1) {};',
+ return getFixes({buffer: '/** */a.b.c = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3388,9 +3388,9 @@ define([ it("Test no-unused-params-assignment-2",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback\n",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: '/** */f = function(p1) {};',
+ return getFixes({buffer: '/** */f = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3402,9 +3402,9 @@ define([ it("Test no-unused-params-assignment-3",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback\n",
- start: 4,
+ start: 4,
end: 4};
- return getFixes({buffer: '/** */var f = function(p1) {};',
+ return getFixes({buffer: '/** */var f = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3416,9 +3416,9 @@ define([ it("Test no-unused-params-assignment-4",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback\n",
- start: 16,
+ start: 16,
end: 16};
- return getFixes({buffer: 'var f = 10, /** */g = function(p1) {};',
+ return getFixes({buffer: 'var f = 10, /** */g = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3430,9 +3430,9 @@ define([ it("Test no-unused-params-assignment-5",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n",
- start: 0,
+ start: 0,
end: 0};
- return getFixes({buffer: 'a.b.c = function(p1) {};',
+ return getFixes({buffer: 'a.b.c = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3444,9 +3444,9 @@ define([ it("Test no-unused-params-assignment-6",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n",
- start: 0,
+ start: 0,
end: 0};
- return getFixes({buffer: 'f = function(p1) {};',
+ return getFixes({buffer: 'f = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3458,9 +3458,9 @@ define([ it("Test no-unused-params-assignment-7",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n",
- start: 0,
+ start: 0,
end: 0};
- return getFixes({buffer: 'var f = function(p1) {};',
+ return getFixes({buffer: 'var f = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3472,9 +3472,9 @@ define([ it("Test no-unused-params-assignment-8",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n",
- start: 12,
+ start: 12,
end: 12};
- return getFixes({buffer: 'var f = 10, g = function(p1) {};',
+ return getFixes({buffer: 'var f = 10, g = function(p1) {};',
rule: rule,
expected: expected,
callback: callback});
@@ -3485,9 +3485,9 @@ define([ it("Test no-unused-params-leading-line-comment-1",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n ",
- start: 16,
+ start: 16,
end: 16};
- return getFixes({buffer: 'var f = {//foo\n one: function(p, p2, p3) {p(); p2();}};',
+ return getFixes({buffer: 'var f = {//foo\n one: function(p, p2, p3) {p(); p2();}};',
rule: rule,
expected: expected,
callback: callback});
@@ -3497,7 +3497,7 @@ define([ var expected = {value: "",
start: 31,
end: 32};
- return getFixes({buffer: '<html><head><script>function f(p) {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f(p) {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3508,7 +3508,7 @@ define([ var expected = {value: "",
start: 32,
end: 36};
- return getFixes({buffer: '<html><head><script>function f(p, p2, p3) {p(); p3();}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f(p, p2, p3) {p(); p3();}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3519,7 +3519,7 @@ define([ var expected = {value: "",
start:36,
end:40};
- return getFixes({buffer: '<html><head><script>function f(p, p2, p3) {p(); p2();}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f(p, p2, p3) {p(); p2();}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3528,9 +3528,9 @@ define([ it("Test no-unused-params-html-4",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/* @callback */",
- start: 31,
+ start: 31,
end: 31};
- return getFixes({buffer: '<html><head><script>define([], function(p, p2, p3) {p(); p2();});</script></head></html>',
+ return getFixes({buffer: '<html><head><script>define([], function(p, p2, p3) {p(); p2();});</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3539,9 +3539,9 @@ define([ it("Test no-unused-params-html-5",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "/**\n * @callback\n */\n",
- start: 30,
+ start: 30,
end: 30};
- return getFixes({buffer: '<html><head><script>var f = { one: function(p, p2, p3) {p(); p2();}};</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = { one: function(p, p2, p3) {p(); p2();}};</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3553,22 +3553,22 @@ define([ it("Test no-unused-params-html-existing-doc-1",function(callback) {
var rule = createTestRule('no-unused-params');
var expected = {value: "* @callback",
- start: 45,
+ start: 45,
end: 45};
- return getFixes({buffer: '<html><head><script>var f = { /**\n *@see\n *\n */\none: function(p, p2, p3) {p(); p2();}};</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var f = { /**\n *@see\n *\n */\none: function(p, p2, p3) {p(); p2();}};</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
contentType: 'text/html'});
});
-
+
/**
* @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=488790
*/
it("Test no-unused-params-update-doc-1", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{value: '',
- start: 18,
+ start: 18,
end: 72},
{value:'',
start: 94,
@@ -3579,11 +3579,11 @@ define([ callback: callback,
fixid: "no-unused-params"});
});
-
+
it("Test no-unused-params-update-doc-2", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{value: '',
- start: 12,
+ start: 12,
end: 66},
{value:'',
start: 132,
@@ -3594,11 +3594,11 @@ define([ callback: callback,
fixid: "no-unused-params"});
});
-
+
it("Test no-unused-params-update-doc-3", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{value: '',
- start: 57,
+ start: 57,
end: 100},
{value:'',
start: 123,
@@ -3609,7 +3609,7 @@ define([ callback: callback,
fixid: "no-unused-params"});
});
-
+
/**
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=490109
*/
@@ -3631,7 +3631,7 @@ define([ callback: callback
});
});
-
+
it("Test no-unused-params-fix-all-2", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{
@@ -3650,7 +3650,7 @@ define([ callback: callback
});
});
-
+
it("Test no-unused-params-fix-all-3", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{
@@ -3669,7 +3669,7 @@ define([ callback: callback
});
});
-
+
it("Test no-unused-params-fix-all-4", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{
@@ -3685,7 +3685,7 @@ define([ fixid: "no-unused-params"
});
});
-
+
it("Test no-unused-params-fix-all-5", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{
@@ -3705,7 +3705,7 @@ define([ fixid: "no-unused-params"
});
});
-
+
it("Test no-unused-params-fix-all-6", function(callback){
var rule = createTestRule('no-unused-params');
var expected = [{
@@ -3756,9 +3756,9 @@ define([ it("Test eqeqeq-1",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "===",
- start: 5,
+ start: 5,
end: 7};
- return getFixes({buffer: 'if(1 == 3) {}',
+ return getFixes({buffer: 'if(1 == 3) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3766,9 +3766,9 @@ define([ it("Test eqeqeq-2",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "===",
- start: 12,
+ start: 12,
end: 14};
- return getFixes({buffer: 'if(typeof f == "undefined") {}',
+ return getFixes({buffer: 'if(typeof f == "undefined") {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3776,9 +3776,9 @@ define([ it("Test eqeqeq-3",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "!==",
- start: 5,
+ start: 5,
end: 7};
- return getFixes({buffer: 'if(1 != 3) {}',
+ return getFixes({buffer: 'if(1 != 3) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3786,9 +3786,9 @@ define([ it("Test eqeqeq-4",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "!==",
- start: 12,
+ start: 12,
end: 14};
- return getFixes({buffer: 'if(typeof f != "undefined") {}',
+ return getFixes({buffer: 'if(typeof f != "undefined") {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3796,9 +3796,9 @@ define([ it("Test eqeqeq-html-1",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "===",
- start: 25,
+ start: 25,
end: 27};
- return getFixes({buffer: '<html><head><script>if(1 == 3) {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(1 == 3) {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3807,9 +3807,9 @@ define([ it("Test eqeqeq-html-2",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "===",
- start: 32,
+ start: 32,
end: 34};
- return getFixes({buffer: '<html><head><script>if(typeof f == "undefined") {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(typeof f == "undefined") {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3818,9 +3818,9 @@ define([ it("Test eqeqeq-html-3",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "!==",
- start: 25,
+ start: 25,
end: 27};
- return getFixes({buffer: '<html><head><script>if(1 != 3) {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(1 != 3) {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3829,9 +3829,9 @@ define([ it("Test eqeqeq-html-4",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "!==",
- start: 32,
+ start: 32,
end: 34};
- return getFixes({buffer: '<html><head><script>if(typeof f != "undefined") {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>if(typeof f != "undefined") {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3840,9 +3840,9 @@ define([ it("Test eqeqeq-html-5",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = {value: "!==",
- start: 49,
+ start: 49,
end: 51};
- return getFixes({buffer: '<html><head><script></script><script>if(typeof f != "undefined") {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script></script><script>if(typeof f != "undefined") {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3851,13 +3851,13 @@ define([ it("Test eqeqeq fix all 1",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = [{value: "===",
- start: 5,
+ start: 5,
end: 7},
{value: "===",
start: 20,
end: 22}
];
- return getFixes({buffer: 'if(1 == 3) {} if (1 == 4) {}',
+ return getFixes({buffer: 'if(1 == 3) {} if (1 == 4) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3865,13 +3865,13 @@ define([ it("Test eqeqeq fix all 2",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = [{value: "!==",
- start: 5,
+ start: 5,
end: 7},
{value: "!==",
start: 20,
end: 22}
];
- return getFixes({buffer: 'if(1 != 3) {} if (1 != 4) {}',
+ return getFixes({buffer: 'if(1 != 3) {} if (1 != 4) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3879,13 +3879,13 @@ define([ it("Test eqeqeq fix all 3",function(callback) {
var rule = createTestRule('eqeqeq');
var expected = [{value: "===",
- start: 5,
+ start: 5,
end: 7},
{value: "!==",
start: 20,
end: 22}
];
- return getFixes({buffer: 'if(1 == 3) {} if (1 != 4) {}',
+ return getFixes({buffer: 'if(1 == 3) {} if (1 != 4) {}',
rule: rule,
expected: expected,
callback: callback});
@@ -3896,9 +3896,9 @@ define([ it("Test no-unreachable-1",function(callback) {
var rule = createTestRule('no-unreachable');
var expected = {value: "",
- start: 30,
+ start: 30,
end: 36};
- return getFixes({buffer: 'function foo(){var f;return 1;f = 9;}',
+ return getFixes({buffer: 'function foo(){var f;return 1;f = 9;}',
rule: rule,
expected: expected,
callback: callback});
@@ -3906,9 +3906,9 @@ define([ it("Test no-unreachable-2",function(callback) {
var rule = createTestRule('no-unreachable');
var expected = {value: "",
- start: 32,
+ start: 32,
end: 39};
- return getFixes({buffer: 'switch(num) { case 1: {throw e; f = 10;}}',
+ return getFixes({buffer: 'switch(num) { case 1: {throw e; f = 10;}}',
rule: rule,
expected: expected,
callback: callback});
@@ -3916,9 +3916,9 @@ define([ it("Test no-unreachable-html-1",function(callback) {
var rule = createTestRule('no-unreachable');
var expected = {value: "",
- start: 43,
+ start: 43,
end: 51};
- return getFixes({buffer: '<html><head><script>function f(p) {return; foo = 9;}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f(p) {return; foo = 9;}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3927,9 +3927,9 @@ define([ it("Test no-unreachable-html-2",function(callback) {
var rule = createTestRule('no-unreachable');
var expected = {value: "",
- start: 52,
+ start: 52,
end: 59};
- return getFixes({buffer: '<html><head><script>switch(num) { case 1: {throw e; f = 10;}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>switch(num) { case 1: {throw e; f = 10;}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -3941,9 +3941,9 @@ define([ it("Test no-sparse-arrays-1",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 16};
- return getFixes({buffer: 'var a = [1, , 2]',
+ return getFixes({buffer: 'var a = [1, , 2]',
rule: rule,
expected: expected,
callback: callback});
@@ -3951,9 +3951,9 @@ define([ it("Test no-sparse-arrays-2",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 20};
- return getFixes({buffer: 'var a = [1, , 2, , ]',
+ return getFixes({buffer: 'var a = [1, , 2, , ]',
rule: rule,
expected: expected,
callback: callback});
@@ -3961,9 +3961,9 @@ define([ it("Test no-sparse-arrays-3",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 24};
- return getFixes({buffer: 'var a = [, , 1, , 2, , ]',
+ return getFixes({buffer: 'var a = [, , 1, , 2, , ]',
rule: rule,
expected: expected,
callback: callback});
@@ -3971,9 +3971,9 @@ define([ it("Test no-sparse-arrays-4",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 27};
- return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, ]',
+ return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, ]',
rule: rule,
expected: expected,
callback: callback});
@@ -3981,9 +3981,9 @@ define([ it("Test no-sparse-arrays-5",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2, 3]",
- start: 8,
+ start: 8,
end: 28};
- return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, 3]',
+ return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, 3]',
rule: rule,
expected: expected,
callback: callback});
@@ -3991,9 +3991,9 @@ define([ it("Test no-sparse-arrays-6",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2, 3]",
- start: 8,
+ start: 8,
end: 41};
- return getFixes({buffer: 'var a = [, ,,,, \n1, \n, , ,, ,\n,, 2, \n, 3]',
+ return getFixes({buffer: 'var a = [, ,,,, \n1, \n, , ,, ,\n,, 2, \n, 3]',
rule: rule,
expected: expected,
callback: callback});
@@ -4001,9 +4001,9 @@ define([ it("Test no-sparse-arrays-7",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 20};
- return getFixes({buffer: 'var a = [1, , 2, , ];',
+ return getFixes({buffer: 'var a = [1, , 2, , ];',
rule: rule,
expected: expected,
callback: callback});
@@ -4011,9 +4011,9 @@ define([ it("Test no-sparse-arrays-8",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 27};
- return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, ];',
+ return getFixes({buffer: 'var a = [, , \n1, \n, 2, \n, ];',
rule: rule,
expected: expected,
callback: callback});
@@ -4024,9 +4024,9 @@ define([ it("Test no-sparse-arrays-no-spacing-1",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 22};
- return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,]',
+ return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,]',
rule: rule,
expected: expected,
callback: callback});
@@ -4037,9 +4037,9 @@ define([ it("Test no-sparse-arrays-no-spacing-2",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 0,
+ start: 0,
end: 14};
- return getFixes({buffer: '[,,\n1,\n,2,\n,,]',
+ return getFixes({buffer: '[,,\n1,\n,2,\n,,]',
rule: rule,
expected: expected,
callback: callback,
@@ -4051,9 +4051,9 @@ define([ it("Test no-sparse-arrays-no-spacing-3",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 22};
- return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,];',
+ return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,];',
rule: rule,
expected: expected,
callback: callback});
@@ -4064,9 +4064,9 @@ define([ it("Test no-sparse-arrays-no-spacing-4",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 8,
+ start: 8,
end: 22};
- return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,]\nvar foo = "bar";',
+ return getFixes({buffer: 'var a = [,,\n1,\n,2,\n,,]\nvar foo = "bar";',
rule: rule,
expected: expected,
callback: callback});
@@ -4074,9 +4074,9 @@ define([ it("Test no-sparse-arrays-html-1",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 36};
- return getFixes({buffer: '<html><head><script>var a = [1, , 2]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [1, , 2]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4085,9 +4085,9 @@ define([ it("Test no-sparse-arrays-html-2",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 40};
- return getFixes({buffer: '<html><head><script>var a = [1, , 2, , ]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [1, , 2, , ]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4096,9 +4096,9 @@ define([ it("Test no-sparse-arrays-html-3",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 44};
- return getFixes({buffer: '<html><head><script>var a = [, , 1, , 2, , ]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [, , 1, , 2, , ]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4107,9 +4107,9 @@ define([ it("Test no-sparse-arrays-html-4",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 46};
- return getFixes({buffer: '<html><head><script>var a = [, , 1, \n, 2, \n, ]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [, , 1, \n, 2, \n, ]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4118,9 +4118,9 @@ define([ it("Test no-sparse-arrays-html-5",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2, 3]",
- start: 28,
+ start: 28,
end: 48};
- return getFixes({buffer: '<html><head><script>var a = [, , \n1, \n, 2, \n, 3]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [, , \n1, \n, 2, \n, 3]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4129,9 +4129,9 @@ define([ it("Test no-sparse-arrays-html-6",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2, 3]",
- start: 28,
+ start: 28,
end: 61};
- return getFixes({buffer: '<html><head><script>var a = [, ,,,, \n1, \n, , ,, ,\n,, 2, \n, 3]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [, ,,,, \n1, \n, , ,, ,\n,, 2, \n, 3]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4140,9 +4140,9 @@ define([ it("Test no-sparse-arrays-html-7",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 40};
- return getFixes({buffer: '<html><head><script>var a = [1, , 2, , ];</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [1, , 2, , ];</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4151,35 +4151,35 @@ define([ it("Test no-sparse-arrays-html-8",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "[1, 2]",
- start: 28,
+ start: 28,
end: 47};
- return getFixes({buffer: '<html><head><script>var a = [, , \n1, \n, 2, \n, ];</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [, , \n1, \n, 2, \n, ];</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
contentType: 'text/html'});
});
-
+
/**
* @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=489146
*/
it("Test no-sparse-arrays-empty-array-1",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "",
- start: 9,
+ start: 9,
end: 24};
- return getFixes({buffer: 'var a = [, , \n, \n, , \n, ];',
+ return getFixes({buffer: 'var a = [, , \n, \n, , \n, ];',
rule: rule,
expected: expected,
callback: callback});
});
-
+
it("Test no-sparse-arrays-empty-array-2",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "",
- start: 9,
+ start: 9,
end: 13};
- return getFixes({buffer: 'var a = [, , ]',
+ return getFixes({buffer: 'var a = [, , ]',
rule: rule,
expected: expected,
callback: callback});
@@ -4187,9 +4187,9 @@ define([ it("Test no-sparse-arrays-empty-array-3",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 22};
- return getFixes({buffer: 'var a = \n[, , , , , , ]',
+ return getFixes({buffer: 'var a = \n[, , , , , , ]',
rule: rule,
expected: expected,
callback: callback});
@@ -4197,9 +4197,9 @@ define([ it("Test no-sparse-arrays-empty-array-4",function(callback) {
var rule = createTestRule('no-sparse-arrays');
var expected = {value: "",
- start: 9,
+ start: 9,
end: 24};
- return getFixes({buffer: 'var a = [, , \n, \n, , \n, ]\n;',
+ return getFixes({buffer: 'var a = [, , \n, \n, , \n, ]\n;',
rule: rule,
expected: expected,
callback: callback});
@@ -4210,9 +4210,9 @@ define([ it("Test semi-1",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 14,
+ start: 14,
end: 14};
- return getFixes({buffer: 'var a = [1, 2]',
+ return getFixes({buffer: 'var a = [1, 2]',
rule: rule,
expected: expected,
callback: callback});
@@ -4220,9 +4220,9 @@ define([ it("Test semi-2",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 5,
+ start: 5,
end: 5};
- return getFixes({buffer: 'foo()',
+ return getFixes({buffer: 'foo()',
rule: rule,
expected: expected,
callback: callback});
@@ -4230,9 +4230,9 @@ define([ it("Test semi-3",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 10,
+ start: 10,
end: 10};
- return getFixes({buffer: 'var a = {}',
+ return getFixes({buffer: 'var a = {}',
rule: rule,
expected: expected,
callback: callback});
@@ -4240,9 +4240,9 @@ define([ it("Test semi-html-1",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 34,
+ start: 34,
end: 34};
- return getFixes({buffer: '<html><head><script>var a = [1, 2]</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = [1, 2]</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4251,9 +4251,9 @@ define([ it("Test semi-html-2",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 25,
+ start: 25,
end: 25};
- return getFixes({buffer: '<html><head><script>foo()</script></head></html>',
+ return getFixes({buffer: '<html><head><script>foo()</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4262,9 +4262,9 @@ define([ it("Test semi-html-3",function(callback) {
var rule = createTestRule('semi');
var expected = {value: ";",
- start: 30,
+ start: 30,
end: 30};
- return getFixes({buffer: '<html><head><script>var a = {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4274,13 +4274,13 @@ define([ var rule = createTestRule('semi');
var expected = [
{value: ";",
- start: 14,
+ start: 14,
end: 14},
{value: ";",
- start: 29,
+ start: 29,
end: 29}
];
- return getFixes({buffer: 'var a = [1, 2]\nvar b = [1, 2]',
+ return getFixes({buffer: 'var a = [1, 2]\nvar b = [1, 2]',
rule: rule,
expected: expected,
callback: callback});
@@ -4289,13 +4289,13 @@ define([ var rule = createTestRule('semi');
var expected = [
{value: ";",
- start: 5,
+ start: 5,
end: 5},
{value: ";",
- start: 11,
+ start: 11,
end: 11}
];
- return getFixes({buffer: 'foo()\nfoo()',
+ return getFixes({buffer: 'foo()\nfoo()',
rule: rule,
expected: expected,
callback: callback});
@@ -4304,13 +4304,13 @@ define([ var rule = createTestRule('semi');
var expected = [
{value: ";",
- start: 10,
+ start: 10,
end: 10},
{value: ";",
- start: 21,
+ start: 21,
end: 21}
];
- return getFixes({buffer: 'var a = {}\nvar a = {}',
+ return getFixes({buffer: 'var a = {}\nvar a = {}',
rule: rule,
expected: expected,
callback: callback});
@@ -4319,16 +4319,16 @@ define([ var rule = createTestRule('semi');
var expected = [
{value: ";",
- start: 14,
+ start: 14,
end: 14},
{value: ";",
- start: 20,
+ start: 20,
end: 20},
{value: ";",
- start: 31,
+ start: 31,
end: 31}
];
- return getFixes({buffer: 'var a = [1, 2]\nfoo()\nvar a = {}',
+ return getFixes({buffer: 'var a = [1, 2]\nfoo()\nvar a = {}',
rule: rule,
expected: expected,
callback: callback});
@@ -4339,9 +4339,9 @@ define([ it("Test no-unused-vars-unused-1",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 0,
+ start: 0,
end: 6};
- return getFixes({buffer: 'var a;',
+ return getFixes({buffer: 'var a;',
rule: rule,
expected: expected,
callback: callback,
@@ -4350,9 +4350,9 @@ define([ it("Test no-unused-vars-unused-2",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 13};
- return getFixes({buffer: 'var a = 10, b;',
+ return getFixes({buffer: 'var a = 10, b;',
rule: rule,
expected: expected,
callback: callback,
@@ -4361,9 +4361,9 @@ define([ it("Test no-unused-vars-unused-3",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 13};
- return getFixes({buffer: 'var a = 10, b, c = 1;',
+ return getFixes({buffer: 'var a = 10, b, c = 1;',
rule: rule,
expected: expected,
callback: callback,
@@ -4372,9 +4372,9 @@ define([ it("Test no-unused-vars-unused-funcdecl-1",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 0,
+ start: 0,
end: 15};
- return getFixes({buffer: 'function f() {}',
+ return getFixes({buffer: 'function f() {}',
rule: rule,
expected: expected,
callback: callback,
@@ -4383,9 +4383,9 @@ define([ it("Test no-unused-vars-unused-funcdecl-2",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 26,
+ start: 26,
end: 41};
- return getFixes({buffer: 'var a = {one: function() {function f() {}}}',
+ return getFixes({buffer: 'var a = {one: function() {function f() {}}}',
rule: rule,
expected: expected,
callback: callback,
@@ -4394,9 +4394,9 @@ define([ it("Test no-unused-vars-unused-html-1",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 20,
+ start: 20,
end: 26};
- return getFixes({buffer: '<html><head><script>var a;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4406,9 +4406,9 @@ define([ it("Test no-unused-vars-unused-html-2",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 30,
+ start: 30,
end: 33};
- return getFixes({buffer: '<html><head><script>var a = 10, b;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = 10, b;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4418,9 +4418,9 @@ define([ it("Test no-unused-vars-unused-html-3",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 30,
+ start: 30,
end: 33};
- return getFixes({buffer: '<html><head><script>var a = 10, b, c = 1;</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = 10, b, c = 1;</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4430,9 +4430,9 @@ define([ it("Test no-unused-vars-unused-funcdecl-html-1",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 20,
+ start: 20,
end: 35};
- return getFixes({buffer: '<html><head><script>function f() {}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>function f() {}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4442,9 +4442,9 @@ define([ it("Test no-unused-vars-unused-funcdecl-html-2",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 46,
+ start: 46,
end: 61};
- return getFixes({buffer: '<html><head><script>var a = {one: function() {function f() {}}}</script></head></html>',
+ return getFixes({buffer: '<html><head><script>var a = {one: function() {function f() {}}}</script></head></html>',
rule: rule,
expected: expected,
callback: callback,
@@ -4457,9 +4457,9 @@ define([ it("Test no-unused-vars-unread-1",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 0,
+ start: 0,
end: 10};
- return getFixes({buffer: 'var a = 4;',
+ return getFixes({buffer: 'var a = 4;',
rule: rule,
expected: expected,
callback: callback,
@@ -4468,9 +4468,9 @@ define([ it("Test no-unused-vars-unread-2",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 4,
+ start: 4,
end: 12};
- return getFixes({buffer: 'var a = 10, b;',
+ return getFixes({buffer: 'var a = 10, b;',
rule: rule,
expected: expected,
callback: callback,
@@ -4479,9 +4479,9 @@ define([ it("Test no-unused-vars-unread-3",function(callback) {
var rule = createTestRule('no-unused-vars');
var expected = {value: "",
- start: 5,
+ start: 5,
end: 12};
- return getFixes({buffer: 'var a, b = 4;',
+ return getFixes({buffer: 'var a, b = 4;',
rule: rule,
expected: expected,
callback: callback,
@@ -4493,9 +4493,9 @@ define([ it("Test missing-nls-1", function(callback) {
var rule = createTestRule('missing-nls');
var expected = {value: " //$NON-NLS-1$",
- start: 12,
+ start: 12,
end: 12};
- return getFixes({buffer: 'var a = "a";',
+ return getFixes({buffer: 'var a = "a";',
rule: rule,
expected: expected,
callback: callback,
@@ -4504,9 +4504,9 @@ define([ it("Test missing-nls-2",function(callback) {
var rule = createTestRule('missing-nls');
var expected = {value: " //$NON-NLS-2$",
- start: 39,
+ start: 39,
end: 39};
- return getFixes({buffer: 'var a = "a"; var b = "b"; //$NON-NLS-1$',
+ return getFixes({buffer: 'var a = "a"; var b = "b"; //$NON-NLS-1$',
rule: rule,
expected: expected,
callback: callback,
@@ -4515,9 +4515,9 @@ define([ it("Test missing-nls-3",function(callback) {
var rule = createTestRule('missing-nls');
var expected = {value: " //$NON-NLS-1$",
- start: 39,
+ start: 39,
end: 39};
- return getFixes({buffer: 'var a = "a"; var b = "b"; //$NON-NLS-2$',
+ return getFixes({buffer: 'var a = "a"; var b = "b"; //$NON-NLS-2$',
rule: rule,
expected: expected,
callback: callback,
@@ -4553,9 +4553,9 @@ define([ it("Test unnecessary-nls-1", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 24};
- return getFixes({buffer: 'var a = 1; //$NON-NLS-0$',
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-0$',
rule: rule,
expected: expected,
callback: callback,
@@ -4564,9 +4564,9 @@ define([ it("Test unnecessary-nls-2", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 24};
- return getFixes({buffer: 'var a = 1; //$NON-NLS-1$',
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-1$',
rule: rule,
expected: expected,
callback: callback,
@@ -4575,9 +4575,9 @@ define([ it("Test unnecessary-nls-3", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 10,
+ start: 10,
end: 24};
- return getFixes({buffer: 'var a = 1; //$NON-NLS-2$',
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-2$',
rule: rule,
expected: expected,
callback: callback,
@@ -4586,9 +4586,9 @@ define([ it("Test unnecessary-nls-4", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 13,
+ start: 13,
end: 24};
- return getFixes({buffer: 'var a = 1; //$NON-NLS-1$ foo',
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-1$ foo',
rule: rule,
expected: expected,
callback: callback,
@@ -4597,9 +4597,9 @@ define([ it("Test unnecessary-nls-5", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 26,
+ start: 26,
end: 40};
- return getFixes({buffer: 'var a = "a"; //$NON-NLS-1$ //$NON-NLS-2$',
+ return getFixes({buffer: 'var a = "a"; //$NON-NLS-1$ //$NON-NLS-2$',
rule: rule,
expected: expected,
callback: callback,
@@ -4608,9 +4608,9 @@ define([ it("Test unnecessary-nls-6", function(callback) {
var rule = createTestRule('unnecessary-nls');
var expected = {value: "",
- start: 12,
+ start: 12,
end: 26};
- return getFixes({buffer: 'var a = "a"; //$NON-NLS-2$ //$NON-NLS-1$',
+ return getFixes({buffer: 'var a = "a"; //$NON-NLS-2$ //$NON-NLS-1$',
rule: rule,
expected: expected,
callback: callback,
@@ -4620,14 +4620,14 @@ define([ var rule = createTestRule('unnecessary-nls');
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 24},
{value: "",
- start: 35,
+ start: 35,
end: 49},
];
-
- return getFixes({buffer: 'var a = 1; //$NON-NLS-0$\nvar b = 1; //$NON-NLS-0$',
+
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-0$\nvar b = 1; //$NON-NLS-0$',
rule: rule,
expected: expected,
callback: callback,
@@ -4637,11 +4637,11 @@ define([ var rule = createTestRule('unnecessary-nls');
var expected = [
{value: "",
- start: 10,
+ start: 10,
end: 38}
];
-
- return getFixes({buffer: 'var a = 1; //$NON-NLS-0$ //$NON-NLS-1$',
+
+ return getFixes({buffer: 'var a = 1; //$NON-NLS-0$ //$NON-NLS-1$',
rule: rule,
expected: expected,
callback: callback,
@@ -4651,14 +4651,14 @@ define([ var rule = createTestRule('unnecessary-nls');
var expected = [
{value: "",
- start: 12,
+ start: 12,
end: 26},
{value: "",
- start: 40,
+ start: 40,
end: 54},
];
-
- return getFixes({buffer: 'var a = "a"; //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-9$',
+
+ return getFixes({buffer: 'var a = "a"; //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-9$',
rule: rule,
expected: expected,
callback: callback,
@@ -4668,11 +4668,11 @@ define([ var rule = createTestRule('unnecessary-nls');
var expected = [
{value: "",
- start: 11,
+ start: 11,
end: 40}
];
-
- return getFixes({buffer: 'var v = 10; //$NON-NLS-1$ //$NON-NLS-2$\nvar v2;',
+
+ return getFixes({buffer: 'var v = 10; //$NON-NLS-1$ //$NON-NLS-2$\nvar v2;',
rule: rule,
expected: expected,
callback: callback,
@@ -4682,11 +4682,11 @@ define([ var rule = createTestRule('unnecessary-nls');
var expected = [
{value: "",
- start: 11,
+ start: 11,
end: 40}
];
-
- return getFixes({buffer: 'var v = 10; //$NON-NLS-1$ //$NON-NLS-2$ \nvar v2;',
+
+ return getFixes({buffer: 'var v = 10; //$NON-NLS-1$ //$NON-NLS-2$ \nvar v2;',
rule: rule,
expected: expected,
callback: callback,
@@ -4724,9 +4724,9 @@ define([ it("Test use-isnan-1",function(callback) {
var rule = createTestRule('use-isnan');
var expected = {value: "isNaN(foo)",
- start: 3,
+ start: 3,
end: 14};
- return getFixes({buffer: 'if(foo === NaN){}',
+ return getFixes({buffer: 'if(foo === NaN){}',
rule: rule,
expected: expected,
callback: callback,
@@ -4735,9 +4735,9 @@ define([ it("Test use-isnan-2",function(callback) {
var rule = createTestRule('use-isnan');
var expected = {value: "isNaN(foo)",
- start: 3,
+ start: 3,
end: 14};
- return getFixes({buffer: 'if(NaN === foo){}',
+ return getFixes({buffer: 'if(NaN === foo){}',
rule: rule,
expected: expected,
callback: callback,
@@ -4746,9 +4746,9 @@ define([ it("Test use-isnan-3",function(callback) {
var rule = createTestRule('use-isnan');
var expected = {value: "isNaN(foo+23)",
- start: 3,
+ start: 3,
end: 19};
- return getFixes({buffer: 'if((foo+23) === NaN){}',
+ return getFixes({buffer: 'if((foo+23) === NaN){}',
rule: rule,
expected: expected,
callback: callback,
@@ -4757,9 +4757,9 @@ define([ it("Test use-isnan-4",function(callback) {
var rule = createTestRule('use-isnan');
var expected = {value: "isNaN(foo+23)",
- start: 3,
+ start: 3,
end: 19};
- return getFixes({buffer: 'if(NaN === (foo+23)){}',
+ return getFixes({buffer: 'if(NaN === (foo+23)){}',
rule: rule,
expected: expected,
callback: callback,
@@ -4768,9 +4768,90 @@ define([ it("Test use-isnan-5",function(callback) {
var rule = createTestRule('use-isnan');
var expected = {value: "isNaN(45 === (foo+23))",
- start: 3,
+ start: 3,
+ end: 28};
+ return getFixes({buffer: 'if(NaN === (45 === (foo+23))){}',
+ rule: rule,
+ expected: expected,
+ callback: callback,
+ pid: 'use-isnan'});
+ });
+ it("Test use-isnan multi fix 1", function(done) {
+ var rule = createTestRule("use-isnan");
+ var expected = [
+ {value: "isNaN(foo)", start: 3, end: 14},
+ {value: "isNaN(bar)", start: 21, end: 32}
+ ];
+ return getFixes({
+ buffer: "if(foo === NaN){} if(NaN === bar){}",
+ rule: rule,
+ expected: expected,
+ callback: done
+ });
+ });
+ it("Test use-isnan multi fix 2", function(done) {
+ var rule = createTestRule("use-isnan");
+ var expected = [
+ {value: "isNaN(foo)", start: 3, end: 14},
+ {value: "isNaN(bar)", start: 18, end: 29}
+ ];
+ return getFixes({
+ buffer: "if(foo === NaN || NaN === bar){}",
+ rule: rule,
+ expected: expected,
+ callback: done
+ });
+ });
+ it("Test use-isnan-not-1",function(callback) {
+ var rule = createTestRule('use-isnan');
+ var expected = {value: "!isNaN(foo)",
+ start: 3,
+ end: 14};
+ return getFixes({buffer: 'if(foo !== NaN){}',
+ rule: rule,
+ expected: expected,
+ callback: callback,
+ pid: 'use-isnan'});
+ });
+ it("Test use-isnan-not-2",function(callback) {
+ var rule = createTestRule('use-isnan');
+ var expected = {value: "!isNaN(foo)",
+ start: 3,
+ end: 14};
+ return getFixes({buffer: 'if(NaN !== foo){}',
+ rule: rule,
+ expected: expected,
+ callback: callback,
+ pid: 'use-isnan'});
+ });
+ it("Test use-isnan-not-3",function(callback) {
+ var rule = createTestRule('use-isnan');
+ var expected = {value: "!isNaN(foo+23)",
+ start: 3,
+ end: 19};
+ return getFixes({buffer: 'if((foo+23) !== NaN){}',
+ rule: rule,
+ expected: expected,
+ callback: callback,
+ pid: 'use-isnan'});
+ });
+ it("Test use-isnan-not-4",function(callback) {
+ var rule = createTestRule('use-isnan');
+ var expected = {value: "!isNaN(foo+23)",
+ start: 3,
+ end: 19};
+ return getFixes({buffer: 'if(NaN !== (foo+23)){}',
+ rule: rule,
+ expected: expected,
+ callback: callback,
+ pid: 'use-isnan'});
+ });
+ it("Test use-isnan-not-5",function(callback) {
+ var rule = createTestRule('use-isnan');
+ var expected = {value: "!isNaN(45 === (foo+23))",
+ start: 3,
end: 28};
- return getFixes({buffer: 'if(NaN === (45 === (foo+23))){}',
+ return getFixes({buffer: 'if(NaN !== (45 === (foo+23))){}',
rule: rule,
expected: expected,
callback: callback,
@@ -5074,7 +5155,7 @@ define([ {value: "(", start: 29, end: 29},
{value: ")", start: 34, end: 34}
];
- return getFixes({buffer: 'var i = 0; if (i = 0) {} if (i = 1) {}',
+ return getFixes({buffer: 'var i = 0; if (i = 0) {} if (i = 1) {}',
rule: rule,
expected: expected,
callback: callback});
|