Skip to content

Commit be1760d

Browse files
committed
暂存
1 parent 30bc80e commit be1760d

File tree

7 files changed

+68
-18
lines changed

7 files changed

+68
-18
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.tang.intellij.lua.psi
2+
3+
import com.tang.intellij.lua.Constants
4+
import com.tang.intellij.lua.search.SearchContext
5+
import com.tang.intellij.lua.stubs.index.LuaConstIndex
6+
7+
object LuaConst {
8+
9+
fun isConst(className: String, fieldName: String, context: SearchContext): Boolean{
10+
return LuaConstIndex.instance.isConst(className, fieldName, context)
11+
}
12+
13+
fun isConst(name: String, context: SearchContext): Boolean{
14+
return LuaConstIndex.instance.isConst(Constants.WORD_G, name, context)
15+
}
16+
17+
18+
19+
}

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/stubs/IndexSink.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class IndexSinkImpl(val file: LuaPsiFile) : IndexSink() {
2727
StubKeys.SUPER_CLASS -> LuaSuperClassIndex.instance.occurrence(file, key, value)
2828
StubKeys.SHORT_NAME -> LuaShortNameIndex.occurrence(file, key, value)
2929
StubKeys.ALIAS -> LuaAliasIndex.instance.occurrence(file, key, value)
30+
StubKeys.CONST -> LuaConstIndex.instance.occurrence(file, key, value)
3031
}
3132
}
3233
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.tang.intellij.lua.stubs.index
2+
3+
import com.intellij.util.Processor
4+
import com.intellij.util.containers.ContainerUtil
5+
import com.tang.intellij.lua.comment.psi.LuaDocTagField
6+
import com.tang.intellij.lua.psi.LuaClassMember
7+
import com.tang.intellij.lua.psi.LuaClassMethod
8+
import com.tang.intellij.lua.psi.LuaPsiElement
9+
import com.tang.intellij.lua.psi.LuaTableField
10+
import com.tang.intellij.lua.search.SearchContext
11+
import com.tang.intellij.lua.stubs.StubKeys
12+
import com.tang.intellij.lua.ty.ITyClass
13+
import com.tang.intellij.lua.ty.TyParameter
14+
15+
class LuaConstIndex: StubIndex<Int, LuaPsiElement>() {
16+
override fun getKey() = StubKeys.CONST
17+
18+
fun isConst(className: String, fieldName: String, context: SearchContext): Boolean {
19+
val key = "$className*$fieldName"
20+
return LuaClassMemberIndex.instance.get(key.hashCode(), context.project, context.scope).size == 1
21+
}
22+
23+
companion object {
24+
val instance = LuaConstIndex()
25+
26+
/*fun indexStub(indexSink: IndexSink, className: String, memberName: String) {
27+
indexSink.occurrence(StubKeys.CLASS_MEMBER, className.hashCode())
28+
indexSink.occurrence(StubKeys.CLASS_MEMBER, "$className*$memberName".hashCode())
29+
}*/
30+
}
31+
32+
}

EmmyLua-Common/src/main/java/com/tang/intellij/lua/stubs/StubKeys.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ object StubKeys {
2828
val CLASS: IndexId<String, LuaDocTagClass> = IndexId.create<String, LuaDocTagClass>("lua.index.class")
2929
val SUPER_CLASS: IndexId<String, LuaDocTagClass> = IndexId.create<String, LuaDocTagClass>("lua.index.super_class")
3030
val ALIAS: IndexId<String, LuaDocTagAlias> = IndexId.create<String, LuaDocTagAlias>("lua.index.alias")
31+
val CONST: IndexId<Int, LuaPsiElement> = IndexId.create<Int, LuaPsiElement>("lua.index.const")
3132
}

EmmyLua-Common/src/main/java/com/tang/intellij/lua/stubs/index.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ private fun index(indexExpr: LuaIndexExpr, sink: IndexSink) {
144144
classNameSet.forEach { className ->
145145
sink.occurrence(StubKeys.CLASS_MEMBER, className.hashCode(), indexExpr)
146146
sink.occurrence(StubKeys.CLASS_MEMBER, "$className*$name".hashCode(), indexExpr)
147-
147+
sink.occurrence(StubKeys.CONST, "$className*$name".hashCode(), indexExpr)
148148
sink.occurrence(StubKeys.SHORT_NAME, name, indexExpr)
149149
}
150150
}
@@ -161,6 +161,7 @@ private fun index(tableField: LuaTableField, sink: IndexSink) {
161161
sink.occurrence(StubKeys.CLASS_MEMBER, className.hashCode(), tableField)
162162
sink.occurrence(StubKeys.CLASS_MEMBER, "$className*$name".hashCode(), tableField)
163163
sink.occurrence(StubKeys.SHORT_NAME, name, tableField)
164+
sink.occurrence(StubKeys.CONST, "$className*$name".hashCode(), tableField)
164165
}
165166

166167
private fun findTableExprTypeName(field: LuaTableField): String? {
@@ -188,6 +189,7 @@ private fun index(luaNameExpr: LuaNameExpr, sink: IndexSink) {
188189
sink.occurrence(StubKeys.CLASS_MEMBER, Constants.WORD_G.hashCode(), luaNameExpr)
189190
sink.occurrence(StubKeys.CLASS_MEMBER, "${Constants.WORD_G}*$name".hashCode(), luaNameExpr)
190191
sink.occurrence(StubKeys.SHORT_NAME, name, luaNameExpr)
192+
sink.occurrence(StubKeys.CONST, "${Constants.WORD_G}*$name".hashCode(), luaNameExpr)
191193
}
192194
}
193195

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaTextDocumentService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ class LuaTextDocumentService(private val workspace: LuaWorkspaceService) : TextD
354354
val position = arr[1].toInt()
355355
file.psi?.findElementAt(position)?.let { psi ->
356356
PsiTreeUtil.getParentOfType(psi, LuaClassMember::class.java)?.let { member ->
357-
val doc = documentProvider.generateDoc(member, false)
357+
val doc = documentProvider.generateDoc(member)
358358
val content = MarkupContent()
359359
content.kind = "markdown"
360360
content.value = doc
@@ -378,7 +378,7 @@ class LuaTextDocumentService(private val workspace: LuaWorkspaceService) : TextD
378378
val element = TargetElementUtil.findTarget(file.psi, pos)
379379
if (element != null) {
380380
val ref = element.reference?.resolve() ?: element
381-
val doc = documentProvider.generateDoc(ref, true)
381+
val doc = documentProvider.generateDoc(ref)
382382
if (doc != null)
383383
hover = Hover(listOf(Either.forLeft(doc)))
384384
}

EmmyLua-LS/src/main/kotlin/com/tang/vscode/documentation/LuaDocumentationProvider.kt

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class LuaDocumentationProvider : DocumentationProvider {
3939
}
4040

4141
override fun generateDoc(element: PsiElement, originalElement: PsiElement?): String? {
42-
return generateDoc(element, false)
42+
return generateDoc(element)
4343
}
4444

4545
override fun getQuickNavigateInfo(element: PsiElement?, originalElement: PsiElement?): String? {
@@ -73,12 +73,12 @@ class LuaDocumentationProvider : DocumentationProvider {
7373
}
7474

7575

76-
fun generateDoc(element: PsiElement, hover: Boolean): String? {
76+
fun generateDoc(element: PsiElement): String? {
7777
val sb = StringBuilder()
7878
when (element) {
7979
is LuaParamNameDef -> renderParamNameDef(sb, element)
8080
is LuaDocTagClass -> renderClassDef(sb, element)
81-
is LuaClassMember -> renderClassMember(sb, element, hover)
81+
is LuaClassMember -> renderClassMember(sb, element)
8282
is LuaNameDef -> renderNamDef(sb, element)
8383
is LuaLocalFuncDef -> {
8484
sb.wrapLanguage("lua") {
@@ -98,7 +98,7 @@ class LuaDocumentationProvider : DocumentationProvider {
9898
return null
9999
}
100100

101-
private fun renderClassMember(sb: StringBuilder, classMember: LuaClassMember, hover: Boolean) {
101+
private fun renderClassMember(sb: StringBuilder, classMember: LuaClassMember) {
102102
val context = SearchContext.get(classMember.project)
103103
val parentType = classMember.guessClassType(context)
104104
val ty = classMember.guessType(context)
@@ -135,8 +135,12 @@ class LuaDocumentationProvider : DocumentationProvider {
135135
sb.append("union ")
136136
}
137137
else -> {
138-
if (hover && isConstField(classMember)) {
139-
138+
if (classMember.name != null && LuaConst.isConst(
139+
parentType.className,
140+
classMember.name!!,
141+
context
142+
)
143+
) {
140144
when (classMember) {
141145
is LuaTableField -> {
142146
if (classMember.exprList.isNotEmpty()) {
@@ -267,13 +271,4 @@ class LuaDocumentationProvider : DocumentationProvider {
267271
return true
268272
}
269273

270-
private fun isConstField(element: PsiElement): Boolean {
271-
val refs = ReferencesSearch.search(element)
272-
for (ref in refs) {
273-
if (ref.element.parent is LuaVarList) {
274-
return false
275-
}
276-
}
277-
return true
278-
}
279274
}

0 commit comments

Comments
 (0)