Skip to content

Commit 63d897a

Browse files
authored
Merge pull request #28 from CppCXY/master
修改Annotator提供paramHint
2 parents c878fff + 6411bb1 commit 63d897a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+4034
-648
lines changed

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/editor/completion/LookupElementFactory.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.tang.intellij.lua.psi.LuaPsiElement
1111
import com.tang.intellij.lua.ty.IFunSignature
1212
import com.tang.intellij.lua.ty.ITy
1313
import com.tang.intellij.lua.ty.ITyFunction
14+
import com.tang.intellij.lua.ty.hasVarargs
1415
import com.tang.lsp.ILuaFile
1516
import org.eclipse.lsp4j.CompletionItemKind
1617
import javax.swing.Icon
@@ -88,6 +89,9 @@ object LookupElementFactory {
8889
val p = params[i]
8990
strings.add(p.name)
9091
}
92+
if(signature.hasVarargs()){
93+
strings.add("...")
94+
}
9195
append(strings.joinToString(","))
9296
append(")")
9397
}

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/editor/completion/LuaCompletionContributor.kt

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,14 @@ import com.intellij.codeInsight.completion.CompletionContributor
2020
import com.intellij.codeInsight.completion.CompletionInitializationContext
2121
import com.intellij.codeInsight.completion.CompletionParameters
2222
import com.intellij.codeInsight.completion.CompletionType
23+
import com.intellij.patterns.PatternCondition
2324
import com.intellij.patterns.PlatformPatterns.psiElement
25+
import com.intellij.psi.PsiElement
26+
import com.intellij.psi.PsiNamedElement
2427
import com.intellij.psi.tree.TokenSet
28+
import com.intellij.util.ProcessingContext
2529
import com.tang.intellij.lua.Constants
30+
import com.tang.intellij.lua.project.LuaSettings
2631
import com.tang.intellij.lua.psi.*
2732

2833
/**
@@ -31,6 +36,7 @@ import com.tang.intellij.lua.psi.*
3136
*/
3237
class LuaCompletionContributor : CompletionContributor() {
3338
private var suggestWords = true
39+
3440
init {
3541
//可以override
3642
/*extend(CompletionType.BASIC, SHOW_OVERRIDE, OverrideCompletionProvider())
@@ -71,6 +77,13 @@ class LuaCompletionContributor : CompletionContributor() {
7177
extend(CompletionType.BASIC, SHOW_CLASS_FIELD, ClassMemberCompletionProvider())
7278
//提示全局函数,local变量,local函数
7379
extend(CompletionType.BASIC, IN_NAME_EXPR, LocalAndGlobalCompletionProvider(LocalAndGlobalCompletionProvider.ALL))
80+
// 表的[]索引方式提示
81+
extend(CompletionType.BASIC, IN_TABLE_STRING_INDEX, TableStringIndexCompletionProvider())
82+
// lua5.4
83+
extend(CompletionType.BASIC, ATTRIBUTE, AttributeCompletionProvider())
84+
// enum
85+
extend(CompletionType.BASIC, SHOW_ENUM, EnumCompletionProvider())
86+
7487
}
7588

7689
/*override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
@@ -129,11 +142,17 @@ class LuaCompletionContributor : CompletionContributor() {
129142
.withParent(
130143
psiElement(LuaTypes.LITERAL_EXPR).withParent(
131144
psiElement(LuaArgs::class.java).afterSibling(
132-
psiElement().withName(Constants.WORD_REQUIRE)
145+
psiElement().with(RequireLikePatternCondition())
133146
)
134147
)
135148
)
136149

150+
private val SHOW_ENUM = psiElement(LuaTypes.ID)
151+
.withParent(psiElement(LuaNameExpr::class.java)
152+
.withParent(psiElement(LuaArgs::class.java))
153+
)
154+
155+
137156
private val GOTO = psiElement(LuaTypes.ID).withParent(LuaGotoStat::class.java)
138157

139158
private val IN_TABLE_FIELD = psiElement().andOr(
@@ -143,6 +162,20 @@ class LuaCompletionContributor : CompletionContributor() {
143162
psiElement(LuaTypes.ID).withParent(LuaTableField::class.java)
144163
)
145164

165+
private val IN_TABLE_STRING_INDEX = psiElement().andOr(
166+
// psiElement(LuaTypes.LITERAL_EXPR).withParent(
167+
// psiElement(LuaIndexExpr::class.java)
168+
// ),
169+
psiElement(LuaTypes.STRING)
170+
.withParent(
171+
psiElement(LuaTypes.LITERAL_EXPR).withParent(
172+
psiElement(LuaIndexExpr::class.java)
173+
)
174+
)
175+
)
176+
177+
private val ATTRIBUTE = psiElement(LuaTypes.ID).withParent(LuaAttribute::class.java)
178+
146179
private fun suggestWordsInFile(parameters: CompletionParameters) {
147180
/*val session = CompletionSession[parameters]!!
148181
val originalPosition = parameters.originalPosition
@@ -162,4 +195,11 @@ class LuaCompletionContributor : CompletionContributor() {
162195
}*/
163196
}
164197
}
198+
}
199+
200+
class RequireLikePatternCondition : PatternCondition<PsiElement>("requireLike") {
201+
override fun accepts(psi: PsiElement, context: ProcessingContext?): Boolean {
202+
val name = (psi as? PsiNamedElement)?.name
203+
return if (name != null) LuaSettings.isRequireLikeFunctionName(name) else false
204+
}
165205
}

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/lang/LuaParserDefinition.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ class LuaParserDefinition : ParserDefinition {
135135
LuaDocTypes.TAG_NAME_RETURN,
136136
LuaDocTypes.TAG_NAME_CLASS,
137137
LuaDocTypes.TAG_NAME_MODULE,
138+
LuaDocTypes.TAG_NAME_ENUM,
138139
LuaDocTypes.TAG_NAME_TYPE,
139140
LuaDocTypes.TAG_NAME_FIELD,
140141
LuaDocTypes.TAG_NAME_LANGUAGE,

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/project/LuaSettings.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import com.tang.intellij.lua.lang.LuaLanguageLevel
2626
class LuaSettings {
2727
var constructorNames: Array<String> = arrayOf("new", "get")
2828

29+
var requireLikeFunctions : Array<String> = arrayOf("require")
30+
2931
//Doc文档严格模式,对不合法的注解报错
3032
var isStrictDoc: Boolean = false
3133

@@ -51,7 +53,13 @@ class LuaSettings {
5153
*/
5254
var enableGeneric: Boolean = false
5355

54-
var languageLevel: LuaLanguageLevel = LuaLanguageLevel.LUA53
56+
var languageLevel: LuaLanguageLevel = LuaLanguageLevel.LUA54
57+
58+
var paramHint = true
59+
60+
var localHint = false
61+
62+
var varargHint = false
5563

5664
companion object {
5765

@@ -62,7 +70,7 @@ class LuaSettings {
6270
}
6371

6472
fun isRequireLikeFunctionName(name: String): Boolean {
65-
return name == Constants.WORD_REQUIRE
73+
return name == Constants.WORD_REQUIRE || instance.requireLikeFunctions.contains(name.toLowerCase())
6674
}
6775
}
6876
}

EmmyLua-Common/src/main/ext/com/tang/intellij/lua/psi/parser/LuaStatementParser.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,16 +231,31 @@ object LuaStatementParser : GeneratedParserUtilBase() {
231231
return m
232232
}
233233

234+
// Lua 5.4
235+
private fun parseAttribute(b: PsiBuilder): PsiBuilder.Marker? {
236+
if (b.tokenType == LT) {
237+
val m = b.mark()
238+
b.advanceLexer()
239+
expectError(b, ID) { "ID" }
240+
expectError(b, GT) { ">" }
241+
m.done(ATTRIBUTE)
242+
return m
243+
}
244+
return null
245+
}
246+
234247
private fun parseNameList(b: PsiBuilder): PsiBuilder.Marker? {
235248
var m = b.mark()
236249
if (expectError(b, ID) { "ID" }) {
237250
m.done(NAME_DEF)
251+
parseAttribute(b)
238252
while (b.tokenType == COMMA) {
239253
b.advanceLexer()
240254
val nameDef = b.mark()
241-
if (expectError(b, ID) { "ID" })
255+
if (expectError(b, ID) { "ID" }) {
242256
nameDef.done(NAME_DEF)
243-
else nameDef.drop()
257+
parseAttribute(b)
258+
} else nameDef.drop()
244259
}
245260
m = m.precede()
246261
}

0 commit comments

Comments
 (0)