From cc4288a7f1a9bc62ac779b9ee42b2812d343b768 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Sun, 27 Nov 2022 15:59:28 +0800 Subject: [PATCH] feat: auto insert parentheses for `instanceof` expressions close #2099 --- .../src/plugins/vue-autoinsert-parentheses.ts | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/vue-language-tools/vue-language-service/src/plugins/vue-autoinsert-parentheses.ts b/vue-language-tools/vue-language-service/src/plugins/vue-autoinsert-parentheses.ts index 0871f8be0..8d5cc71f5 100644 --- a/vue-language-tools/vue-language-service/src/plugins/vue-autoinsert-parentheses.ts +++ b/vue-language-tools/vue-language-service/src/plugins/vue-autoinsert-parentheses.ts @@ -34,8 +34,7 @@ export default function (options: { let templateFormatScript: EmbeddedFile | undefined; embedded.forEachEmbeddeds(vueDocument.file.embeddeds, embedded => { - if (embedded.fileName.endsWith('.__VLS_template_format.tsx') - || embedded.fileName.endsWith('.__VLS_template_format.jsx')) { + if (embedded.fileName.endsWith('.__VLS_template_format.ts')) { templateFormatScript = embedded; } }); @@ -54,10 +53,22 @@ export default function (options: { const statement = ast.statements[0]; if ( ts.isExpressionStatement(statement) - && ts.isAsExpression(statement.expression) - && ts.isTypeReferenceNode(statement.expression.type) - && ts.isIdentifier(statement.expression.type.typeName) - && statement.expression.type.typeName.text + && ( + ( + ts.isAsExpression(statement.expression) + && ts.isTypeReferenceNode(statement.expression.type) + && ts.isIdentifier(statement.expression.type.typeName) + && statement.expression.type.typeName.text + ) + || ( + ts.isBinaryExpression(statement.expression) + && statement.expression.right.getText(ast) + ) + || ( + ts.isTypeOfExpression(statement.expression) + && statement.expression.expression.getText(ast) + ) + ) ) { // https://code.visualstudio.com/docs/editor/userdefinedsnippets#_grammar const escapedText = text