Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/main/kotlin/com/emberjs/hbs/HbReference.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.emberjs.hbs
import com.dmarcotte.handlebars.psi.HbSimpleMustache
import com.dmarcotte.handlebars.psi.HbStringLiteral
import com.dmarcotte.handlebars.psi.impl.HbStatementsImpl
import com.emberjs.gts.GjsLanguage
import com.emberjs.gts.GtsLanguage
import com.emberjs.index.EmberNameIndex
import com.emberjs.psi.EmberNamedAttribute
import com.emberjs.psi.EmberNamedElement
Expand All @@ -11,6 +13,7 @@ import com.emberjs.resolver.EmberName
import com.emberjs.utils.originalVirtualFile
import com.emberjs.xml.EmberAttrDec
import com.intellij.lang.Language
import com.intellij.lang.ecmascript6.psi.ES6ImportSpecifier
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiElement
Expand All @@ -34,6 +37,28 @@ abstract class HbReference(element: PsiElement): PsiReferenceBase<PsiElement>(el
if (res is EmberNamedElement) {
res = res.target
}
if (res is ES6ImportSpecifier) {
var resolved = res.containingFile.viewProvider.findReferenceAt(res.textOffset, GtsLanguage.INSTANCE)?.resolve()
resolved = resolved ?: res.containingFile.viewProvider.findReferenceAt(res.textOffset, GjsLanguage.INSTANCE)?.resolve()
if (element.manager.areElementsEquivalent(resolved, other)) {
return true
}
if (element.manager.areElementsEquivalent(res.reference?.resolve(), other)) {
return true
}
if (res.references.any {
element.manager.areElementsEquivalent(it.element, other) || super.isReferenceTo(other)
}) {
return true
}
val results = res.multiResolve(false)
val r = results.any {
element.manager.areElementsEquivalent(it.element, other) || super.isReferenceTo(other)
}
if (r) {
return true
}
}
return element.manager.areElementsEquivalent(res, other) || super.isReferenceTo(other)
}
}
Expand Down
28 changes: 28 additions & 0 deletions src/main/kotlin/com/emberjs/hbs/TagReferencesProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ import com.dmarcotte.handlebars.psi.impl.HbStatementsImpl
import com.emberjs.xml.EmberAttrDec
import com.emberjs.xml.EmberXmlElementDescriptor
import com.emberjs.glint.GlintLanguageServiceProvider
import com.emberjs.gts.GjsLanguage
import com.emberjs.gts.GtsFileViewProvider
import com.emberjs.gts.GtsLanguage
import com.emberjs.index.EmberNameIndex
import com.emberjs.psi.EmberNamedAttribute
import com.emberjs.psi.EmberNamedElement
Expand All @@ -23,6 +25,7 @@ import com.emberjs.utils.originalVirtualFile
import com.intellij.injected.editor.VirtualFileWindow
import com.intellij.lang.Language
import com.intellij.lang.ecmascript6.psi.ES6ImportDeclaration
import com.intellij.lang.ecmascript6.psi.ES6ImportSpecifier
import com.intellij.lang.injection.InjectedLanguageManager
import com.intellij.lang.javascript.JavaScriptSupportLoader
import com.intellij.lang.javascript.psi.JSObjectLiteralExpression
Expand Down Expand Up @@ -226,6 +229,31 @@ class TagReference(val element: XmlTag, val fullName: String, val rangeInElem: T
var res = resolve()
if (res is EmberNamedElement) {
res = res.target
if (element.manager.areElementsEquivalent(res, other) || super.isReferenceTo(other)) {
return true
}
}
if (res is ES6ImportSpecifier) {
var resolved = res.containingFile.viewProvider.findReferenceAt(res.textOffset, GtsLanguage.INSTANCE)?.resolve()
resolved = resolved ?: res.containingFile.viewProvider.findReferenceAt(res.textOffset, GjsLanguage.INSTANCE)?.resolve()
if (element.manager.areElementsEquivalent(resolved, other)) {
return true
}
if (element.manager.areElementsEquivalent(res.reference?.resolve(), other)) {
return true
}
if (res.references.any {
element.manager.areElementsEquivalent(it.element, other) || super.isReferenceTo(other)
}) {
return true
}
val results = res.multiResolve(false)
val r = results.any {
element.manager.areElementsEquivalent(it.element, other) || super.isReferenceTo(other)
}
if (r) {
return true
}
}
return element.manager.areElementsEquivalent(res, other) || super.isReferenceTo(other)
}
Expand Down
14 changes: 12 additions & 2 deletions src/test/kotlin/com/emberjs/gts/GtsFileTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,13 @@ class GtsFileTest : BasePlatformTestCase() {

@Test
fun testGtsImportUsed() {
val otherGts = """
export const OtherComponent = 2;
export const other = 2;
""".trimIndent()
val gts = """
import { OtherComponent } from './other-component';
import { other } from './other-component';
import x from "a";
import { y, quux } from "a";
import qux from "a";
Expand All @@ -85,24 +91,28 @@ class GtsFileTest : BasePlatformTestCase() {
export const Grault = {};

export default <template>
<OtherComponent />
<Foo />
<Baz />
<Grault />
{{x}}
{{y}}
{{bar}}
{{grault}}
{{other}}
</template>
""".trimIndent()
myFixture.configureByText(GtsFileType.INSTANCE, gts)
myFixture.addFileToProject("other-component.js", otherGts)
myFixture.addFileToProject("main.gts", gts)
myFixture.configureByFile("main.gts")
myFixture.enableInspections(ES6UnusedImportsInspection(), JSUnusedLocalSymbolsInspection(), JSUnusedGlobalSymbolsInspection())
CodeInsightTestFixtureImpl.ensureIndexesUpToDate(project)
val highlighting = myFixture.doHighlighting()
System.out.println(highlighting)
val unusedConstants = highlighting.filter { it.description?.startsWith("Unused constant") == true }
TestCase.assertEquals(unusedConstants.toString(), 0, unusedConstants.size)
val highlightInfos: List<HighlightInfo> = highlighting.filter { it.inspectionToolId == "ES6UnusedImports" }
TestCase.assertEquals(highlightInfos.size, 2)
TestCase.assertEquals(highlightInfos.toString(), 2, highlightInfos.size)
TestCase.assertTrue(highlightInfos.first().description.contains("quux"))
TestCase.assertTrue(highlightInfos.last().description.contains("qux"))
}
Expand Down
Loading