diff --git a/src/main/kotlin/com/intellij/StyledComponents/InterpolationArgumentsErrorFilter.kt b/src/main/kotlin/com/intellij/StyledComponents/InterpolationArgumentsErrorFilter.kt index ef113a4..e10ed48 100644 --- a/src/main/kotlin/com/intellij/StyledComponents/InterpolationArgumentsErrorFilter.kt +++ b/src/main/kotlin/com/intellij/StyledComponents/InterpolationArgumentsErrorFilter.kt @@ -24,10 +24,8 @@ class InterpolationArgumentsErrorFilter : HighlightErrorFilter(), HighlightInfoF if (highlightInfo.severity === HighlightSeverity.WARNING || highlightInfo.severity === HighlightSeverity.WEAK_WARNING || highlightInfo.severity === HighlightSeverity.ERROR) { - return acceptedRanges.any { range -> - highlightInfo.startOffset > range.startOffset - && highlightInfo.endOffset < range.endOffset - } + return acceptedRanges.any { highlightInfo.startOffset > it.startOffset + && highlightInfo.endOffset < it.endOffset } } return true } diff --git a/src/main/kotlin/com/intellij/StyledComponents/Patterns.kt b/src/main/kotlin/com/intellij/StyledComponents/Patterns.kt index 4425c62..83e6f10 100644 --- a/src/main/kotlin/com/intellij/StyledComponents/Patterns.kt +++ b/src/main/kotlin/com/intellij/StyledComponents/Patterns.kt @@ -1,5 +1,7 @@ package com.intellij.StyledComponents +import com.intellij.lang.javascript.JSTokenTypes +import com.intellij.lang.javascript.psi.JSBinaryExpression import com.intellij.lang.javascript.psi.JSCallExpression import com.intellij.lang.javascript.psi.JSExpression import com.intellij.lang.javascript.psi.JSReferenceExpression @@ -24,7 +26,15 @@ fun taggedTemplate(tagPattern: ElementPattern): ElementPattern .withParent(PlatformPatterns.psiElement(ES6TaggedTemplateExpression::class.java) .withChild(tagPattern)) } - +fun genericTaggedTemplate(tagPattern: ElementPattern): ElementPattern { + return PlatformPatterns.psiElement(JSStringTemplateExpression::class.java) + .withParent(PlatformPatterns.psiElement(JSBinaryExpression::class.java) + .withChild(PlatformPatterns.psiElement(JSBinaryExpression::class.java) + .withChild(PlatformPatterns.psiElement(JSReferenceExpression::class.java) + .withChild(tagPattern)) + .withChild(PlatformPatterns.psiElement(JSTokenTypes.LT))) + .withChild(PlatformPatterns.psiElement(JSTokenTypes.GT))) +} fun withReferenceName(name: String): ElementPattern { return referenceExpression() .with(object : PatternCondition("referenceName") { diff --git a/src/main/kotlin/com/intellij/StyledComponents/StyledComponentsInjector.kt b/src/main/kotlin/com/intellij/StyledComponents/StyledComponentsInjector.kt index e3d5ec6..dfb3029 100644 --- a/src/main/kotlin/com/intellij/StyledComponents/StyledComponentsInjector.kt +++ b/src/main/kotlin/com/intellij/StyledComponents/StyledComponentsInjector.kt @@ -18,6 +18,7 @@ class StyledComponentsInjector : MultiHostInjector { companion object { private val styledPattern = withNameStartingWith("styled") val places: List = listOf( + PlaceInfo(genericTaggedTemplate(styledPattern), "div {", "}"), PlaceInfo(taggedTemplate(PlatformPatterns.or(styledPattern, PlatformPatterns.psiElement(JSExpression::class.java) .withFirstChild(styledPattern))), "div {", "}"), diff --git a/src/test/InjectionTest.kt b/src/test/InjectionTest.kt index 26ddaca..c45aa96 100644 --- a/src/test/InjectionTest.kt +++ b/src/test/InjectionTest.kt @@ -24,6 +24,20 @@ class InjectionTest : LightCodeInsightFixtureTestCase() { " height:100px;}") } + fun testGenericTaggedTemplate() { + val fileContent = """ + const Div = styled.div` + color: red; + `; + """.trimIndent() + val expected = """ + div { + color: red; + } + """.trimIndent() + doTest(fileContent, expected) + } + fun testSimpleComponent() { doTest("const Title = styled.h1`\n" + " font-size: 1.5em;\n" +