summaryrefslogtreecommitdiff
path: root/deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-04-03 15:43:32 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-04-03 15:45:57 +0200
commit71e285b94c7edaa43aa8115965cf5a36b8e0f80a (patch)
tree7d4aa9d0d5aff686b106cd5da72ba77960c4af43 /deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js
parent7dadf9356b4f3f4137ce982ea5bb960283116e9a (diff)
downloadakono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.gz
akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.tar.bz2
akono-71e285b94c7edaa43aa8115965cf5a36b8e0f80a.zip
Node.js v11.13.0
Diffstat (limited to 'deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js')
-rw-r--r--deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js b/deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js
new file mode 100644
index 00000000..80896b5e
--- /dev/null
+++ b/deps/node/deps/node-inspect/tools/eslint-rules/align-multiline-assignment.js
@@ -0,0 +1,68 @@
+/**
+ * @fileoverview Align multiline variable assignments
+ * @author Rich Trott
+ */
+'use strict';
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+function getBinaryExpressionStarts(binaryExpression, starts) {
+ function getStartsFromOneSide(side, starts) {
+ starts.push(side.loc.start);
+ if (side.type === 'BinaryExpression') {
+ starts = getBinaryExpressionStarts(side, starts);
+ }
+ return starts;
+ }
+
+ starts = getStartsFromOneSide(binaryExpression.left, starts);
+ starts = getStartsFromOneSide(binaryExpression.right, starts);
+ return starts;
+}
+
+function checkExpressionAlignment(expression) {
+ if (!expression)
+ return;
+
+ var msg = '';
+
+ switch (expression.type) {
+ case 'BinaryExpression':
+ var starts = getBinaryExpressionStarts(expression, []);
+ var startLine = starts[0].line;
+ const startColumn = starts[0].column;
+ starts.forEach((loc) => {
+ if (loc.line > startLine) {
+ startLine = loc.line;
+ if (loc.column !== startColumn) {
+ msg = 'Misaligned multiline assignment';
+ }
+ }
+ });
+ break;
+ }
+ return msg;
+}
+
+function testAssignment(context, node) {
+ const msg = checkExpressionAlignment(node.right);
+ if (msg)
+ context.report(node, msg);
+}
+
+function testDeclaration(context, node) {
+ node.declarations.forEach((declaration) => {
+ const msg = checkExpressionAlignment(declaration.init);
+ // const start = declaration.init.loc.start;
+ if (msg)
+ context.report(node, msg);
+ });
+}
+
+module.exports = function(context) {
+ return {
+ 'AssignmentExpression': (node) => testAssignment(context, node),
+ 'VariableDeclaration': (node) => testDeclaration(context, node)
+ };
+};