Skip to content

Commit 91d2984

Browse files
committed
optional params
1 parent 2141a01 commit 91d2984

File tree

3 files changed

+57
-32
lines changed

3 files changed

+57
-32
lines changed

src/main/java/com/tang/intellij/lua/editor/completion/ArgsInsertHandler.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public abstract class ArgsInsertHandler implements InsertHandler<LookupElement>
3434

3535
protected abstract LuaParamInfo[] getParams();
3636

37+
protected int mask = -1;
38+
39+
public ArgsInsertHandler withMask(int mask) {
40+
this.mask = mask;
41+
return this;
42+
}
43+
3744
@Override
3845
public void handleInsert(InsertionContext insertionContext, LookupElement lookupElement) {
3946
int startOffset = insertionContext.getStartOffset();
@@ -67,7 +74,10 @@ Template createTemplate(TemplateManager manager, LuaParamInfo[] paramNameDefList
6774
boolean isFirst = true;
6875
MacroCallNode name = new MacroCallNode(new SuggestVariableNameMacro());
6976

70-
for (LuaParamInfo paramNameDef : paramNameDefList) {
77+
for (int i = 0; i < paramNameDefList.length; i++) {
78+
if ((mask & (1 << i)) == 0) continue;
79+
80+
LuaParamInfo paramNameDef = paramNameDefList[i];
7181
if (!isFirst)
7282
template.addTextSegment(", ");
7383
template.addVariable(paramNameDef.getName(), name, new TextExpression(paramNameDef.getName()), false);

src/main/java/com/tang/intellij/lua/editor/completion/LuaCompletionContributor.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,13 @@ protected void addCompletions(@NotNull CompletionParameters completionParameters
9999
LuaPsiTreeUtil.walkUpLocalFuncDef(cur, localFuncDef -> {
100100
String name = localFuncDef.getName();
101101
if (name != null && completionResultSet.getPrefixMatcher().prefixMatches(name)) {
102-
LookupElementBuilder elementBuilder = LookupElementBuilder.create(localFuncDef.getName())
103-
.withInsertHandler(new FuncInsertHandler(localFuncDef))
104-
.withIcon(LuaIcons.LOCAL_FUNCTION)
105-
.withTailText(localFuncDef.getParamSignature());
106-
completionResultSet.addElement(elementBuilder);
102+
LuaPsiImplUtil.processOptional(localFuncDef.getParams(), (signature, mask) -> {
103+
LookupElementBuilder elementBuilder = LookupElementBuilder.create(name + signature, name)
104+
.withInsertHandler(new FuncInsertHandler(localFuncDef).withMask(mask))
105+
.withIcon(LuaIcons.LOCAL_FUNCTION)
106+
.withTailText(signature);
107+
completionResultSet.addElement(elementBuilder);
108+
});
107109
}
108110
return true;
109111
});
@@ -115,12 +117,14 @@ protected void addCompletions(@NotNull CompletionParameters completionParameters
115117
if (completionResultSet.getPrefixMatcher().prefixMatches(name)) {
116118
LuaGlobalFuncDef globalFuncDef = LuaGlobalFuncIndex.find(name, context);
117119
if (globalFuncDef != null) {
118-
LookupElementBuilder elementBuilder = LookupElementBuilder.create(name)
119-
.withTypeText("Global Func")
120-
.withInsertHandler(new GlobalFuncInsertHandler(name, project))
121-
.withIcon(LuaIcons.GLOBAL_FUNCTION)
122-
.withTailText(globalFuncDef.getParamSignature());
123-
completionResultSet.addElement(elementBuilder);
120+
LuaPsiImplUtil.processOptional(globalFuncDef.getParams(), (signature, mask) -> {
121+
LookupElementBuilder elementBuilder = LookupElementBuilder.create(name + signature, name)
122+
.withTypeText("Global Func")
123+
.withInsertHandler(new GlobalFuncInsertHandler(name, project).withMask(mask))
124+
.withIcon(LuaIcons.GLOBAL_FUNCTION)
125+
.withTailText(signature);
126+
completionResultSet.addElement(elementBuilder);
127+
});
124128
}
125129
}
126130
return true;

src/main/java/com/tang/intellij/lua/lang/type/LuaType.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,25 @@ private void addMethodCompletions(@NotNull CompletionResultSet completionResultS
105105
for (LuaClassMethodDef def : list) {
106106
String methodName = def.getName();
107107
if (methodName != null && completionResultSet.getPrefixMatcher().prefixMatches(methodName)) {
108-
LookupElementBuilder elementBuilder = LookupElementBuilder.create(methodName)
109-
.withIcon(LuaIcons.CLASS_METHOD)
110-
.withTypeText(clazzName)
111-
.withTailText(def.getParamSignature());
112-
if (!useAsField)
113-
elementBuilder = elementBuilder.withInsertHandler(new FuncInsertHandler(def));
114-
if (bold)
115-
elementBuilder = elementBuilder.bold();
116-
117-
completionResultSet.addElement(elementBuilder);
108+
if (useAsField) {
109+
LookupElementBuilder elementBuilder = LookupElementBuilder.create(methodName)
110+
.withIcon(LuaIcons.CLASS_METHOD)
111+
.withTypeText(clazzName)
112+
.withTailText(def.getParamSignature());
113+
if (bold)
114+
elementBuilder = elementBuilder.bold();
115+
completionResultSet.addElement(elementBuilder);
116+
} else {
117+
LuaPsiImplUtil.processOptional(def.getParams(), (signature, mask) -> {
118+
LookupElementBuilder elementBuilder = LookupElementBuilder.create(methodName + signature, methodName)
119+
.withIcon(LuaIcons.CLASS_METHOD)
120+
.withTypeText(clazzName)
121+
.withTailText(signature);
122+
if (bold)
123+
elementBuilder = elementBuilder.bold();
124+
completionResultSet.addElement(elementBuilder);
125+
});
126+
}
118127
}
119128
}
120129

@@ -133,16 +142,18 @@ private void addStaticMethodCompletions(@NotNull CompletionResultSet completionR
133142
for (LuaClassMethodDef def : list) {
134143
String methodName = def.getName();
135144
if (methodName != null && completionResultSet.getPrefixMatcher().prefixMatches(methodName)) {
136-
LookupElementBuilder elementBuilder = LookupElementBuilder.create(methodName)
137-
.withIcon(LuaIcons.CLASS_METHOD)
138-
.withInsertHandler(new FuncInsertHandler(def))
139-
.withTypeText(clazzName)
140-
.withItemTextUnderlined(true)
141-
.withTailText(def.getParamSignature());
142-
if (bold)
143-
elementBuilder = elementBuilder.bold();
144-
145-
completionResultSet.addElement(elementBuilder);
145+
LuaPsiImplUtil.processOptional(def.getParams(), (signature, mask) -> {
146+
LookupElementBuilder elementBuilder = LookupElementBuilder.create(methodName + signature, methodName)
147+
.withIcon(LuaIcons.CLASS_METHOD)
148+
.withInsertHandler(new FuncInsertHandler(def).withMask(mask))
149+
.withTypeText(clazzName)
150+
.withItemTextUnderlined(true)
151+
.withTailText(signature);
152+
if (bold)
153+
elementBuilder = elementBuilder.bold();
154+
155+
completionResultSet.addElement(elementBuilder);
156+
});
146157
}
147158
}
148159

0 commit comments

Comments
 (0)