@@ -16,6 +16,7 @@ import com.tang.intellij.lua.search.SearchContext
1616import com.tang.intellij.lua.ty.*
1717import com.tang.intellij.lua.ty.Ty.Companion.STRING
1818import com.tang.lsp.ILuaFile
19+ import org.eclipse.lsp4j.CompletionItemKind
1920
2021
2122class 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
0 commit comments