/* * Copyright 2013-2016 consulo.io * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package consulo.cgshader.completion; import java.util.Set; import org.jetbrains.annotations.NotNull; import com.intellij.codeInsight.completion.CompletionContributor; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionResultSet; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.icons.AllIcons; import com.intellij.patterns.StandardPatterns; import com.intellij.util.ProcessingContext; import com.intellij.util.containers.ContainerUtil; import consulo.annotations.RequiredReadAction; import consulo.cgshader.CGLanguage; import consulo.cgshader.lexer.CGKeywords; import consulo.codeInsight.completion.CompletionProvider; /** * @author VISTALL * @since 11.10.2015 */ public class CGCompletionContributor extends CompletionContributor { private static final Set<String> ourMethods = ContainerUtil.newHashSet("abs", "acos", "all", "any", "asin", "atan", "atan2", "ceil", "clamp", "clip", "cos", "cosh", "cross", "ddx", "ddy", "degrees", "determinant", "distance", "dot", "exp", "exp2", "faceforward", "floatToIntBits", "floatToRawIntBits", "floor", "fmod", "frac", "frexp", "fwidth", "intBitsToFloat", "isfinite", "isinf", "isnan", "ldexp", "length", "lerp", "lit", "log", "log10", "log2", "max", "min", "modf", "mul", "normalize", "pow", "radians", "reflect", "refract", "round", "rsqrt", "saturate", "sign", "sin", "sincos", "sinh", "smoothstep", "sqrt", "step", "tan", "tanh", "tex1D", "tex1DARRAY", "tex1DARRAYbias", "tex1DARRAYcmpbias", "tex1DARRAYcmplod", "tex1DARRAYfetch", "tex1DARRAYlod", "tex1DARRAYproj", "tex1DARRAYsize", "tex1Dbias", "tex1Dcmpbias", "tex1Dcmplod", "tex1Dfetch", "tex1Dlod", "tex1Dproj", "tex1Dsize", "tex2D", "tex2DARRAY", "tex2DARRAYbias", "tex2DARRAYfetch", "tex2DARRAYlod", "tex2DARRAYproj", "tex2DARRAYsize", "tex2Dbias", "tex2Dcmpbias", "tex2Dcmplod", "tex2Dfetch", "tex2Dlod", "tex2Dproj", "tex2Dsize", "tex3D", "tex3Dbias", "tex3Dfetch", "tex3Dlod", "tex3Dproj", "tex3Dsize", "texBUF", "texBUFsize", "texCUBE", "texCUBEARRAY", "texCUBEARRAYbias", "texCUBEARRAYlod", "texCUBEARRAYsize", "texCUBEbias", "texCUBElod", "texCUBEproj", "texCUBEsize", "texRECT", "texRECTbias", "texRECTfetch", "texRECTlod", "texRECTproj", "texRECTsize", "transpose", "trunc"); public CGCompletionContributor() { extend(CompletionType.BASIC, StandardPatterns.psiElement().withLanguage(CGLanguage.INSTANCE), new CompletionProvider() { @RequiredReadAction @Override public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { for(String keyword : CGKeywords.KEYWORDS) { result.addElement(LookupElementBuilder.create(keyword).bold()); } for(String m : ourMethods) { result.addElement(LookupElementBuilder.create(m + "()").withIcon(AllIcons.Nodes.Method).withInsertHandler(ParenthesesInsertHandler.getInstance(true))); } } }); } }