diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index 4976371eba3..12b36368571 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -616,6 +616,7 @@ + diff --git a/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt new file mode 100644 index 00000000000..dc7e6c6f575 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinEscapedIdentifierSelectioner.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.editor.wordSelection + +import com.intellij.codeInsight.editorActions.ExtendWordSelectionHandlerBase +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset + +class KotlinEscapedIdentifierSelectioner : ExtendWordSelectionHandlerBase() { + override fun canSelect(e: PsiElement) = e.node.elementType == KtTokens.IDENTIFIER + + override fun select(e: PsiElement, editorText: CharSequence, cursorOffset: Int, editor: Editor): List? { + val text = e.text + if (!text.startsWith('`') || !text.endsWith('`')) return null + val start = e.startOffset + 1 + val end = e.endOffset - 1 + if (start >= end) return null + return listOf(TextRange(start, end)) + } +} diff --git a/idea/testData/wordSelection/EscapedIdentifier/0.kt b/idea/testData/wordSelection/EscapedIdentifier/0.kt new file mode 100644 index 00000000000..f49dba2e2fa --- /dev/null +++ b/idea/testData/wordSelection/EscapedIdentifier/0.kt @@ -0,0 +1,2 @@ +fun `my function`() { +} \ No newline at end of file diff --git a/idea/testData/wordSelection/EscapedIdentifier/1.kt b/idea/testData/wordSelection/EscapedIdentifier/1.kt new file mode 100644 index 00000000000..b2795055172 --- /dev/null +++ b/idea/testData/wordSelection/EscapedIdentifier/1.kt @@ -0,0 +1,2 @@ +fun `my function`() { +} \ No newline at end of file diff --git a/idea/testData/wordSelection/EscapedIdentifier/2.kt b/idea/testData/wordSelection/EscapedIdentifier/2.kt new file mode 100644 index 00000000000..e1b833a830a --- /dev/null +++ b/idea/testData/wordSelection/EscapedIdentifier/2.kt @@ -0,0 +1,2 @@ +fun `my function`() { +} \ No newline at end of file diff --git a/idea/testData/wordSelection/EscapedIdentifier/3.kt b/idea/testData/wordSelection/EscapedIdentifier/3.kt new file mode 100644 index 00000000000..cb85160a157 --- /dev/null +++ b/idea/testData/wordSelection/EscapedIdentifier/3.kt @@ -0,0 +1,2 @@ +fun `my function`() { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java index 88aae1830b2..899244ecb32 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java @@ -135,6 +135,8 @@ public class WordSelectionTest extends KotlinLightCodeInsightFixtureTestCase { public void testClassMember4() { doTest(); } public void testClassMember5() { doTest(); } + public void testEscapedIdentifier() { doTest(); } + private void doTest() { String dirName = getTestName(false);