From 3f6ab438c7aa665c3f4784d904caa17018ff1a71 Mon Sep 17 00:00:00 2001 From: Ilya Rodionov Date: Sat, 30 Mar 2024 13:33:10 +0700 Subject: [PATCH] Conditional (ternary) operator formatting (fixes #15) --- .../javascript/formatting/JavaScriptBlock.kt | 16 ++++++++++++---- .../webcalm/javascript/psi/JavaScriptTypes.kt | 1 + .../testData/javascript/conditional-operator.js | 3 +++ 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 src/test/testData/javascript/conditional-operator.js diff --git a/src/main/kotlin/ris58h/webcalm/javascript/formatting/JavaScriptBlock.kt b/src/main/kotlin/ris58h/webcalm/javascript/formatting/JavaScriptBlock.kt index 819c447..2f47a74 100644 --- a/src/main/kotlin/ris58h/webcalm/javascript/formatting/JavaScriptBlock.kt +++ b/src/main/kotlin/ris58h/webcalm/javascript/formatting/JavaScriptBlock.kt @@ -17,6 +17,10 @@ class JavaScriptBlock(node: ASTNode, wrap: Wrap?, alignment: Alignment?) : Abstr if (elementType == JavaScriptTypes.DOT || elementType == JavaScriptTypes.QUESTION_MARK_DOT) { return Indent.getNormalIndent() } + //TODO: the same hack as above + if (elementType == JavaScriptTypes.QUESTION_MARK || elementType == JavaScriptTypes.COLON) { + return Indent.getNormalIndent() + } if (parentElement is JavaScriptFile) { return Indent.getNoneIndent() @@ -24,7 +28,8 @@ class JavaScriptBlock(node: ASTNode, wrap: Wrap?, alignment: Alignment?) : Abstr if (JavaScriptTokenSets.BRACES.contains(elementType) || JavaScriptTokenSets.BRACKETS.contains(elementType) || - JavaScriptTokenSets.PARENTHESES.contains(elementType)) { + JavaScriptTokenSets.PARENTHESES.contains(elementType) + ) { return Indent.getNoneIndent() } @@ -32,7 +37,8 @@ class JavaScriptBlock(node: ASTNode, wrap: Wrap?, alignment: Alignment?) : Abstr parentElement is JavaScriptObject || parentElement is JavaScriptArray || parentElement is JavaScriptArguments || - parentElement is JavaScriptCaseBlock) { + parentElement is JavaScriptCaseBlock + ) { return Indent.getNormalIndent() } @@ -52,7 +58,8 @@ class JavaScriptBlock(node: ASTNode, wrap: Wrap?, alignment: Alignment?) : Abstr if (element is JavaScriptIdentifier || element is JavaScriptIdentifierName || element is JavaScriptIdentifierExpression || - element is JavaScriptLiteral) return true + element is JavaScriptLiteral + ) return true return myNode.firstChildNode == null } @@ -86,7 +93,8 @@ class JavaScriptBlock(node: ASTNode, wrap: Wrap?, alignment: Alignment?) : Abstr element is JavaScriptObject || element is JavaScriptArray || element is JavaScriptArguments || - element is JavaScriptCaseBlock) { + element is JavaScriptCaseBlock + ) { return Indent.getNormalIndent() } diff --git a/src/main/kotlin/ris58h/webcalm/javascript/psi/JavaScriptTypes.kt b/src/main/kotlin/ris58h/webcalm/javascript/psi/JavaScriptTypes.kt index 8381907..538c735 100644 --- a/src/main/kotlin/ris58h/webcalm/javascript/psi/JavaScriptTypes.kt +++ b/src/main/kotlin/ris58h/webcalm/javascript/psi/JavaScriptTypes.kt @@ -43,6 +43,7 @@ object JavaScriptTypes { val QUESTION_MARK_DOT = TOKENS[JavaScriptLexer.QuestionMarkDot]!! val SEMICOLON = TOKENS[JavaScriptLexer.SemiColon]!! val COMMA = TOKENS[JavaScriptLexer.Comma]!! + val QUESTION_MARK = TOKENS[JavaScriptLexer.QuestionMark]!! val COLON = TOKENS[JavaScriptLexer.Colon]!! val PLUS_PLUS_OP = TOKENS[JavaScriptLexer.PlusPlus]!! val MINUS_MINUS_OP = TOKENS[JavaScriptLexer.MinusMinus]!! diff --git a/src/test/testData/javascript/conditional-operator.js b/src/test/testData/javascript/conditional-operator.js new file mode 100644 index 0000000..3988292 --- /dev/null +++ b/src/test/testData/javascript/conditional-operator.js @@ -0,0 +1,3 @@ +const result = condition + ? "true" + : "false"