0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-30 15:30:56 +01:00
nodejs/deps/node-inspect/tools/eslint-rules/align-function-arguments.js
Jan Krems 8c9762e150
deps: add node-inspect 1.10.2
Squashed from:

- deps: Add node-inspect 1.10.1

This adds a reimplementation of the old CLI debugger (`node debug`)
against the new debugger protocol (`node --inspect`). This is necessary
because the old protocol won't be supported in future versions of V8.

- deps: Update node-inspect to 1.10.2

Starting with 1.10.2 the test suite should pass consistently on
windows.

- deps: Update to node-inspect 1.10.4

PR-URL: https://github.com/nodejs/node/pull/10187
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
2017-02-13 14:46:12 +01:00

77 lines
2.0 KiB
JavaScript

/**
* @fileoverview Align arguments in multiline function calls
* @author Rich Trott
*/
'use strict';
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
function checkArgumentAlignment(context, node) {
function isNodeFirstInLine(node, byEndLocation) {
const firstToken = byEndLocation === true ? context.getLastToken(node, 1) :
context.getTokenBefore(node);
const startLine = byEndLocation === true ? node.loc.end.line :
node.loc.start.line;
const endLine = firstToken ? firstToken.loc.end.line : -1;
return startLine !== endLine;
}
if (node.arguments.length === 0)
return;
var msg = '';
const first = node.arguments[0];
var currentLine = first.loc.start.line;
const firstColumn = first.loc.start.column;
const ignoreTypes = [
'ArrowFunctionExpression',
'FunctionExpression',
'ObjectExpression',
];
const args = node.arguments;
// For now, don't bother trying to validate potentially complicating things
// like closures. Different people will have very different ideas and it's
// probably best to implement configuration options.
if (args.some((node) => { return ignoreTypes.indexOf(node.type) !== -1; })) {
return;
}
if (!isNodeFirstInLine(node)) {
return;
}
var misaligned;
args.slice(1).forEach((argument) => {
if (!misaligned) {
if (argument.loc.start.line === currentLine + 1) {
if (argument.loc.start.column !== firstColumn) {
if (isNodeFirstInLine(argument)) {
msg = 'Function argument in column ' +
`${argument.loc.start.column + 1}, ` +
`expected in ${firstColumn + 1}`;
misaligned = argument;
}
}
}
}
currentLine = argument.loc.start.line;
});
if (msg)
context.report(misaligned, msg);
}
module.exports = function(context) {
return {
'CallExpression': (node) => checkArgumentAlignment(context, node)
};
};