Strip trailing spaces on Save: do not strip trailing spaces inside raw String
#KT-13048 Fixed
This commit is contained in:
committed by
Alexander Podkhalyuzin
parent
9fc869397d
commit
e082522cdf
@@ -3371,5 +3371,6 @@
|
|||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.framework.TargetRetrieveActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.framework.TargetRetrieveActivity"/>
|
||||||
|
|
||||||
|
<stripTrailingSpacesFilterFactory implementation="org.jetbrains.kotlin.idea.editor.KotlinStripTrailingSpacesFilterFactory"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</idea-plugin>
|
</idea-plugin>
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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
|
||||||
|
|
||||||
|
import com.intellij.lang.Language
|
||||||
|
import com.intellij.openapi.editor.Document
|
||||||
|
import com.intellij.openapi.editor.impl.PsiBasedStripTrailingSpacesFilter
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
|
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||||
|
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
||||||
|
|
||||||
|
class KotlinStripTrailingSpacesFilterFactory : PsiBasedStripTrailingSpacesFilter.Factory() {
|
||||||
|
override fun isApplicableTo(language: Language): Boolean {
|
||||||
|
return language.`is`(KotlinLanguage.INSTANCE)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createFilter(document: Document): PsiBasedStripTrailingSpacesFilter {
|
||||||
|
return KotlinStripTrailingSpacesFilter(document)
|
||||||
|
}
|
||||||
|
|
||||||
|
private class KotlinStripTrailingSpacesFilter(document: Document) : PsiBasedStripTrailingSpacesFilter(document) {
|
||||||
|
override fun process(psiFile: PsiFile) {
|
||||||
|
psiFile.accept(object : KtTreeVisitorVoid() {
|
||||||
|
override fun visitStringTemplateExpression(expression: KtStringTemplateExpression) {
|
||||||
|
disableRange(expression.textRange, false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
val s =<caret>"""
|
||||||
|
foo, foo
|
||||||
|
bar, bar
|
||||||
|
"""
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
val s = """
|
||||||
|
foo, foo
|
||||||
|
bar, bar
|
||||||
|
"""
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. 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
|
||||||
|
|
||||||
|
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable
|
||||||
|
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||||
|
import com.intellij.psi.PsiDocumentManager
|
||||||
|
import com.intellij.testFramework.EditorTestUtil
|
||||||
|
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||||
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
|
|
||||||
|
class StripTrailingSpacesTest : LightCodeInsightFixtureTestCase() {
|
||||||
|
override fun getTestDataPath(): String {
|
||||||
|
return PluginTestCaseBase.getTestDataPathBase() + "/editor/stripTrailingSpaces/"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testKeepTrailingSpacesInRawString() {
|
||||||
|
doTest()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doTest() {
|
||||||
|
myFixture.configureByFile("${getTestName(true)}.kt")
|
||||||
|
|
||||||
|
val editorSettings = EditorSettingsExternalizable.getInstance()
|
||||||
|
val stripSpaces = editorSettings.stripTrailingSpaces
|
||||||
|
try {
|
||||||
|
editorSettings.stripTrailingSpaces = EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE
|
||||||
|
val doc = myFixture.editor.document
|
||||||
|
EditorTestUtil.performTypingAction(editor, ' ')
|
||||||
|
PsiDocumentManager.getInstance(project).commitDocument(doc)
|
||||||
|
FileDocumentManager.getInstance().saveDocument(doc)
|
||||||
|
} finally {
|
||||||
|
editorSettings.stripTrailingSpaces = stripSpaces
|
||||||
|
}
|
||||||
|
|
||||||
|
myFixture.checkResultByFile("${getTestName(true)}.kt.after")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user