From bfd5d5d4286ba8e50896629fef306d95b2ad7a2a Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 24 Jul 2018 09:33:19 +0200 Subject: [PATCH] [js&ts modes] Indent wrapped method calls under a new expression Closes #186 --- dist/javascript.js | 405 +++++++++++++++++++++-------------------- dist/typescript.js | 2 + src/c_indent.js | 2 + src/javascript.grammar | 2 +- test/js/new_target.js | 9 + 5 files changed, 222 insertions(+), 198 deletions(-) diff --git a/dist/javascript.js b/dist/javascript.js index 91141d3..d0b6a50 100644 --- a/dist/javascript.js +++ b/dist/javascript.js @@ -4,7 +4,7 @@ (factory(global.CodeMirror)); }(this, (function (CodeMirror) { 'use strict'; - var e = [/^(?:var|let|const)(?![a-zA-Z¡-￿_0-9_\$])/, /^while(?![a-zA-Z¡-￿_0-9_\$])/, /^with(?![a-zA-Z¡-￿_0-9_\$])/, /^do(?![a-zA-Z¡-￿_0-9_\$])/, /^debugger(?![a-zA-Z¡-￿_0-9_\$])/, /^if(?![a-zA-Z¡-￿_0-9_\$])/, /^function(?![a-zA-Z¡-￿_0-9_\$])/, /^for(?![a-zA-Z¡-￿_0-9_\$])/, /^default(?![a-zA-Z¡-￿_0-9_\$])/, /^case(?![a-zA-Z¡-￿_0-9_\$])/, /^return(?![a-zA-Z¡-￿_0-9_\$])/, /^throw(?![a-zA-Z¡-￿_0-9_\$])/, /^(?:break|continue)(?![a-zA-Z¡-￿_0-9_\$])/, /^switch(?![a-zA-Z¡-￿_0-9_\$])/, /^try(?![a-zA-Z¡-￿_0-9_\$])/, /^class(?![a-zA-Z¡-￿_0-9_\$])/, /^export(?![a-zA-Z¡-￿_0-9_\$])/, /^import(?![a-zA-Z¡-￿_0-9_\$])/, [0, "async", /^(?![a-zA-Z¡-￿_0-9_\$])/, [5, 128]], [1, ";", /^(?=\})/, [7, "canInsertSemi"]], /^[a-zA-Z¡-￿__\$][a-zA-Z¡-￿_0-9_\$]*/, /^catch(?![a-zA-Z¡-￿_0-9_\$])/, /^finally(?![a-zA-Z¡-￿_0-9_\$])/, /^extends(?![a-zA-Z¡-￿_0-9_\$])/, /^from(?![a-zA-Z¡-￿_0-9_\$])/, /^else(?![a-zA-Z¡-￿_0-9_\$])/, /^as(?![a-zA-Z¡-￿_0-9_\$])/, [0, /^(?!\*\/|\@[a-zA-Z¡-￿_]|\{)/, /^[^]/], /^(?:true|false|null|undefined|NaN|Infinity)(?![a-zA-Z¡-￿_0-9_\$])/, /^(?:super|this)(?![a-zA-Z¡-￿_0-9_\$])/, /^(?:delete|typeof|yield|await)(?![a-zA-Z¡-￿_0-9_\$])/, /^(?:\.\.\.|\!|\+\+?|\-\-?)/, /^new(?![a-zA-Z¡-￿_0-9_\$])/, /^(?:0x[0-9a-fA-F]+|0o[0-7]+|0b[01]+|(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][\+\-]?[0-9]+)?)/, /^\/(?![\/\*])(?:\\.|\[(?:(?!\]).)*\]|(?!\/).)+\/[gimyus]*/, /^(?:\+\+|\-\-)/, /^(?:\+|\-|\%|\*|\/(?![\/\*])|\>\>?\>?|\<\\>?\>?|\<\", -1], - [2, 268, 360, {"name":"ParamList"}], - [1, 6, 361], + [2, 264, 366, {"name":"ParamList"}], + [1, 6, 367], ["=>", -1], - [3, "operator", "=>", 363], - [1, 6, 364], + [3, "operator", "=>", 369], + [1, 6, 370], [2, 145, -1, {"name":"Block"}, 1, 158, -1], - [1, 158, 366, - 0, -1], - [1, 6, 367], - [",", 368, - 0, -1], - [1, 6, 369], - [1, 158, 370, - 0, 370], - [1, 6, 367], - [2, 284, 372, {"name":"ObjectMember"}, + [1, 158, 372, 0, -1], [1, 6, 373], [",", 374, 0, -1], [1, 6, 375], - [2, 284, 376, {"name":"ObjectMember"}, + [1, 158, 376, 0, 376], [1, 6, 373], - [1, 155, 378], + [2, 280, 378, {"name":"ObjectMember"}, + 0, -1], [1, 6, 379], - [3, "operator", "=", 380, + [",", 380, 0, -1], [1, 6, 381], - [1, 158, -1], - [3, "def", /^[a-zA-Z¡-￿__\$][a-zA-Z¡-￿_0-9_\$]*(?![a-z]|[A-Z]|[¡-￿]|_|[0-9]|_|\$| *\:)/, 383, - 3, "property", e[20], 387, - 3, "number", e[33], 387, - 2, 130, 387, {"name":"string","token":"string"}, - 3, "operator", "...", 391], - [1, 6, 384], - [3, "operator", "=", 385, + [2, 280, 382, {"name":"ObjectMember"}, + 0, 382], + [1, 6, 379], + [1, 155, 384], + [1, 6, 385], + [3, "operator", "=", 386, 0, -1], - [1, 6, 386], + [1, 6, 387], [1, 158, -1], - [1, 6, 388], - [":", 389], + [3, "def", /^[a-zA-Z¡-￿__\$][a-zA-Z¡-￿_0-9_\$]*(?![a-z]|[A-Z]|[¡-￿]|_|[0-9]|_|\$| *\:)/, 389, + 3, "property", e[20], 393, + 3, "number", e[32], 393, + 2, 130, 393, {"name":"string","token":"string"}, + 3, "operator", "...", 397], [1, 6, 390], - [1, 377, -1], + [3, "operator", "=", 391, + 0, -1], [1, 6, 392], - [1, 377, -1] + [1, 158, -1], + [1, 6, 394], + [":", 395], + [1, 6, 396], + [1, 383, -1], + [1, 6, 398], + [1, 383, -1] ]; var start = 0; var token = 5; @@ -715,6 +724,8 @@ return base + config.indentUnit } else if (cx.name == "ArrowRest") { return base + config.indentUnit + } else if (cx.name == "NewExpression" && cx.startLine.length > cx.startPos + 5) { + return CodeMirror.countColumn(cx.startLine, cx.startPos, config.tabSize) + 2 * config.indentUnit } else if (cx.name == "InitializerList") { return base + 2 } else if (cx.name == "ThrowsClause" && !/throws\s*$/.test(cx.startLine.slice(cx.startPos))) { diff --git a/dist/typescript.js b/dist/typescript.js index 44c322a..e89f35d 100644 --- a/dist/typescript.js +++ b/dist/typescript.js @@ -1132,6 +1132,8 @@ return base + config.indentUnit } else if (cx.name == "ArrowRest") { return base + config.indentUnit + } else if (cx.name == "NewExpression" && cx.startLine.length > cx.startPos + 5) { + return CodeMirror.countColumn(cx.startLine, cx.startPos, config.tabSize) + 2 * config.indentUnit } else if (cx.name == "InitializerList") { return base + 2 } else if (cx.name == "ThrowsClause" && !/throws\s*$/.test(cx.startLine.slice(cx.startPos))) { diff --git a/src/c_indent.js b/src/c_indent.js index 7f7289c..3aa11c1 100644 --- a/src/c_indent.js +++ b/src/c_indent.js @@ -76,6 +76,8 @@ function findIndent(cx, textAfter, config) { return base + config.indentUnit } else if (cx.name == "ArrowRest") { return base + config.indentUnit + } else if (cx.name == "NewExpression" && cx.startLine.length > cx.startPos + 5) { + return CodeMirror.countColumn(cx.startLine, cx.startPos, config.tabSize) + 2 * config.indentUnit } else if (cx.name == "InitializerList") { return base + 2 } else if (cx.name == "ThrowsClause" && !/throws\s*$/.test(cx.startLine.slice(cx.startPos))) { diff --git a/src/javascript.grammar b/src/javascript.grammar index e46e273..a6e897b 100644 --- a/src/javascript.grammar +++ b/src/javascript.grammar @@ -88,7 +88,7 @@ skip whitespace { Callee { calleeName } - NewExpression { new ("." kw("target") | BaseExpression) } + context NewExpression { new ("." kw("target") | BaseExpression (ArgList | "." (calleeProp | propName))*) } context ArrowFunc { (declNameAndArrow | ParamsAndArrow) ArrowRest } diff --git a/test/js/new_target.js b/test/js/new_target.js index 4eb1f26..84087e2 100644 --- a/test/js/new_target.js +++ b/test/js/new_target.js @@ -4,3 +4,12 @@ .[keyword target]; } } + +[keyword const] [def foo] [operator =] [keyword new] [callee&variable Bar]() + .[property&callee baz]() + .[property&callee quux](); + +[keyword const] [def foo] [operator =] + [keyword new] [callee&variable Bar]() + .[property&callee baz]() + .[property&callee quux]();