Skip to content

Commit 8d8c24a

Browse files
committed
完善对字符串内联表达式注解的支持
1 parent 67988b3 commit 8d8c24a

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

EmmyLua-Common/src/main/java/com/tang/intellij/lua/editor/completion/StringInnerTypeCompletionProvider.kt

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.tang.intellij.lua.search.SearchContext
1616
import com.tang.intellij.lua.ty.*
1717
import com.tang.intellij.lua.ty.Ty.Companion.STRING
1818
import com.tang.lsp.ILuaFile
19+
import org.eclipse.lsp4j.CompletionItemKind
1920

2021

2122
class StringInnerTypeCompletionProvider : ClassMemberCompletionProvider() {
@@ -114,6 +115,9 @@ class StringInnerTypeCompletionProvider : ClassMemberCompletionProvider() {
114115
memberTy: ITy?
115116
): LookupElement {
116117
element.lookupString = prefix + element.lookupString
118+
if(element.kind == CompletionItemKind.Method) {
119+
element.insertText = prefix + element.insertText
120+
}
117121
return PrioritizedLookupElement.withPriority(element, 10.0)
118122
}
119123
}
@@ -132,9 +136,9 @@ class StringInnerTypeCompletionProvider : ClassMemberCompletionProvider() {
132136
return indexFields.joinToString(".")
133137
}
134138

135-
private fun guessPrefixType(baseType: ITy, context: SearchContext, content: String): MutableList<ITyClass> {
136-
if (content.contains('.')) {
137-
return mutableListOf()
139+
private fun guessPrefixType(baseType: ITyClass, context: SearchContext, content: String): MutableList<ITyClass> {
140+
if (!content.contains('.')) {
141+
return mutableListOf(baseType)
138142
}
139143

140144
val fields = content.split('.');
@@ -143,27 +147,37 @@ class StringInnerTypeCompletionProvider : ClassMemberCompletionProvider() {
143147
return result
144148
}
145149

146-
private fun innerGuessPrefixType(type: ITy, context: SearchContext, fields: List<String>, i: Int, result: MutableList<ITyClass>){
147-
when(type){
148-
is TyClass->{
149-
val member = type.findMember(fields[i], context) ?: return ;
150+
private fun innerGuessPrefixType(
151+
type: ITy,
152+
context: SearchContext,
153+
fields: List<String>,
154+
i: Int,
155+
result: MutableList<ITyClass>
156+
) {
157+
when (type) {
158+
is TyClass -> {
159+
val member = type.findMember(fields[i], context) ?: return;
150160
val guessType = member.guessType(context)
151-
if(i == fields.size - 2){
152-
when(guessType){
153-
is ITyClass->{
161+
if (i == fields.size - 2) {
162+
when (guessType) {
163+
is ITyClass -> {
154164
result.add(guessType)
155165
}
156-
is TyUnion->{
166+
is TyUnion -> {
157167
guessType.eachTopClass(Processor {
158168
result.add(it)
159169
})
160170
}
161171
}
162-
}
163-
else{
172+
} else {
164173
innerGuessPrefixType(guessType, context, fields, i + 1, result)
165174
}
166-
175+
}
176+
is TyUnion -> {
177+
type.eachTopClass(Processor {
178+
innerGuessPrefixType(it, context, fields, i, result)
179+
true
180+
})
167181
}
168182
}
169183

EmmyLua-Common/src/main/java/com/tang/intellij/lua/ty/TyPrimitive.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ class TyPrimitiveClass(override val primitiveKind: TyPrimitiveKind,
5151
// Handle unions, subtype if subtype of any of the union components.
5252
if (other is TyUnion) return other.getChildTypes().any { type -> subTypeOf(type, context, strict) }
5353

54+
if(other is TySerializedGeneric){
55+
return this == other.base
56+
}
57+
5458
return this == other
5559
}
5660

0 commit comments

Comments
 (0)