All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ai.vespa.schemals.lsp.schema.semantictokens.SchemaSemanticTokenConfig Maven / Gradle / Ivy

There is a newer version: 8.441.21
Show newest version
package ai.vespa.schemals.lsp.schema.semantictokens;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.lsp4j.SemanticTokenModifiers;
import org.eclipse.lsp4j.SemanticTokenTypes;

import ai.vespa.schemals.index.Symbol.SymbolType;
import ai.vespa.schemals.parser.Token.TokenType;

class SchemaSemanticTokenConfig {
    static final ArrayList manuallyRegisteredLSPNames = new ArrayList() {{
        add(SemanticTokenTypes.Type);
        add(SemanticTokenTypes.Comment);
        add(SemanticTokenTypes.Macro);
        add(SemanticTokenTypes.Enum);
        add(SemanticTokenTypes.EnumMember);
        add(SemanticTokenTypes.Property);
    }};

    static final List userDefinedSymbolTypes = new ArrayList() {{
        add(SymbolType.SCHEMA);
        add(SymbolType.DOCUMENT);
        add(SymbolType.FIELD);
        add(SymbolType.STRUCT);
        add(SymbolType.ANNOTATION);
        add(SymbolType.RANK_PROFILE);
        add(SymbolType.FIELDSET);
        add(SymbolType.STRUCT_FIELD);
        add(SymbolType.FUNCTION);
        add(SymbolType.TYPE_UNKNOWN);
        add(SymbolType.SUBFIELD);
        add(SymbolType.PARAMETER);
        add(SymbolType.LABEL);
        add(SymbolType.QUERY_INPUT);
        add(SymbolType.RANK_CONSTANT);
        add(SymbolType.PROPERTY);
        add(SymbolType.LAMBDA_FUNCTION);
        add(SymbolType.DIMENSION);
    }};

    static final List tokenModifiers = new ArrayList<>() {{
        add(SemanticTokenModifiers.Definition);
        add(SemanticTokenModifiers.Readonly);
        add(SemanticTokenModifiers.DefaultLibrary);
    }};

    // Keyword
    static final ArrayList keywordTokens = new ArrayList() {{
        add(TokenType.ALIAS);
        add(TokenType.ANNOTATION);
        add(TokenType.APPROXIMATE_THRESHOLD);
        add(TokenType.AS);
        add(TokenType.ATTRIBUTE);
        add(TokenType.BOLDING);
        add(TokenType.CONSTANT);
        add(TokenType.CONSTANTS);
        add(TokenType.DIVERSITY);
        add(TokenType.DOCUMENT);
        add(TokenType.DOCUMENT_SUMMARY);
        add(TokenType.EXPRESSION_SL);
        add(TokenType.FIELD);
        add(TokenType.FIELDS);
        add(TokenType.FIELDSET); 
        add(TokenType.FIRST_PHASE);
        add(TokenType.FUNCTION);
        add(TokenType.GLOBAL_PHASE);
        add(TokenType.ID);
        add(TokenType.IGNORE_DEFAULT_RANK_FEATURES);
        add(TokenType.IMPORT);
        add(TokenType.INDEX);
        add(TokenType.INDEXING);
        add(TokenType.INHERITS);
        add(TokenType.INPUTS);
        add(TokenType.MACRO);
        add(TokenType.MATCH);
        add(TokenType.MATCHFEATURES_SL);
        add(TokenType.MATCH_PHASE);
        add(TokenType.MUTATE);
        add(TokenType.NORMALIZING);
        add(TokenType.NUM_SEARCH_PARTITIONS);
        add(TokenType.NUM_THREADS_PER_SEARCH);
        add(TokenType.ONNX_MODEL);
        add(TokenType.POST_FILTER_THRESHOLD);
        add(TokenType.QUERY_COMMAND);
        add(TokenType.RANK);
        add(TokenType.RANKFEATURES_SL);
        add(TokenType.RANK_PROFILE);
        add(TokenType.RANK_PROPERTIES);
        add(TokenType.RANK_TYPE);
        add(TokenType.RAW_AS_BASE64_IN_SUMMARY);
        add(TokenType.SCHEMA);
        add(TokenType.SEARCH);
        add(TokenType.SECOND_PHASE);
        add(TokenType.SORTING);
        add(TokenType.STEMMING);
        add(TokenType.STRICT);
        add(TokenType.STRUCT);
        add(TokenType.STRUCT_FIELD);
        add(TokenType.SUMMARY);
        add(TokenType.SUMMARYFEATURES_SL);
        add(TokenType.SUMMARY_TO);
        add(TokenType.TARGET_HITS_MAX_ADJUSTMENT_FACTOR);
        add(TokenType.TERMWISE_LIMIT);
        add(TokenType.TYPE);
        add(TokenType.WEIGHT);
        add(TokenType.WEIGHTEDSET);
        add(TokenType.HNSW);
        add(TokenType.MAX_LINKS_PER_NODE);
        add(TokenType.NEIGHBORS_TO_EXPLORE_AT_INSERT);
        add(TokenType.UPPER_BOUND);
        add(TokenType.LOWER_BOUND);
        add(TokenType.ARITY);
        add(TokenType.ENABLE_BM25);
        add(TokenType.DENSE_POSTING_LIST_THRESHOLD);

        // maybe some of these should be something other than keyword
        add(TokenType.DISTANCE_METRIC);
        add(TokenType.FAST_ACCESS);
        add(TokenType.FAST_SEARCH);
        add(TokenType.FAST_RANK);
        add(TokenType.PAGED);
        add(TokenType.MUTABLE);
        add(TokenType.LOCALE);
        add(TokenType.STRENGTH);
        add(TokenType.ASCENDING);
        add(TokenType.DESCENDING);
        add(TokenType.DICTIONARY); // TODO: color dictionary items

    }};

    // Other
    static final Map schemaTokenTypeLSPNameMap = new HashMap() {{
        put(TokenType.DOUBLE, "number");
        put(TokenType.INTEGER, "number");
        put(TokenType.LONG, "number");
        put(TokenType.DOUBLEQUOTEDSTRING, "string");
        put(TokenType.SINGLEQUOTEDSTRING, "string");
        put(TokenType.QUERY, "function");

        // TODO: figure out boolean color
        put(TokenType.ON, SemanticTokenTypes.Type);
        put(TokenType.OFF, SemanticTokenTypes.Type);
        put(TokenType.TRUE, SemanticTokenTypes.Type);
        put(TokenType.FALSE, SemanticTokenTypes.Type);

    }};


    // ========= Ranking expressions =========
    // Keyword
    static final ArrayList rankingExpressionKeywordTokens = new ArrayList<>() {{
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.IF);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.IN);

        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.TRUE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.FALSE);

        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.AVG);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.COUNT);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MAX);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MEDIAN);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MIN);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.PROD);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.SUM);

        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MAP);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MAP_SUBSPACES);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.UNPACK_BITS);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.REDUCE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.JOIN);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MERGE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.RENAME);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.CONCAT);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.TENSOR);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.RANGE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.DIAG);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.RANDOM);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.L1_NORMALIZE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.L2_NORMALIZE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.EUCLIDEAN_DISTANCE);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.COSINE_SIMILARITY);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MATMUL);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.SOFTMAX);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.XW_PLUS_B);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.ARGMAX);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.ARGMIN);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.CELL_CAST);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.EXPAND);
    }};

    // Operations
    static final ArrayList rankingExpressionOperationTokens = new ArrayList<>() {{
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.ADD);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.SUB);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.DIV);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MUL);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.DOT);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.MOD);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.POWOP);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.GREATEREQUAL);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.GREATER);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.LESSEQUAL);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.LESS);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.APPROX);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.NOTEQUAL);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.EQUAL);
    }};

    // Functions
    static final ArrayList rankingExpressioFunctionTokens = new ArrayList<>() {{
        // Space in the ccc file as well :)
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.ATAN2);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.FMOD);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.LDEXP);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.POW);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.BIT);
        add(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.HAMMING);
    }};

    // Other
    static final Map rankingExpressionTokenTypeLSPNameMap = new HashMap() {{
        put(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.ISNAN, "function");
        put(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.STRING, "string");
        put(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.INTEGER, "number");
        put(ai.vespa.schemals.parser.rankingexpression.Token.TokenType.FLOAT, "number");
    }};


    static final Set indexingLanguageOperators = new HashSet<>() {{
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.BASE64_DECODE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.BASE64_ENCODE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.ECHO);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.FLATTEN);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.GET_FIELD);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.GET_VAR);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.HEX_DECODE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.HEX_ENCODE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.HOST_NAME);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.INPUT);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.JOIN);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.LOWER_CASE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.NGRAM);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.NORMALIZE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.NOW);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SET_LANGUAGE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SET_VAR);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SUBSTRING);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SPLIT);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TOKENIZE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TRIM);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_INT);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_POS);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_BOOL);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_BYTE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_LONG);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_WSET);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_ARRAY);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_DOUBLE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_FLOAT);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_STRING);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.EMBED);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.HASH);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.TO_EPOCH_SECOND);
    }};

    static final Set indexingLanguageOutputs = new HashSet<>() {{
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.ATTRIBUTE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.INDEX);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SUMMARY);
    }};

    static final Set indexingLanguageKeywords = new HashSet<>() {{
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.IF);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.FOR_EACH);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SWITCH);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.SELECT_INPUT);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.ELSE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.CASE);
        add(ai.vespa.schemals.parser.indexinglanguage.Token.TokenType.CASE_DEFAULT);
    }};

    static final HashMap identifierTypeLSPNameMap = new HashMap() {{
        put(SymbolType.SCHEMA, "namespace");
        put(SymbolType.DOCUMENT, "class");
        put(SymbolType.FIELD, "variable");
        put(SymbolType.FIELDSET, "variable");
        put(SymbolType.STRUCT, "variable");
        put(SymbolType.STRUCT_FIELD, "variable");
        put(SymbolType.RANK_PROFILE, "variable");
        put(SymbolType.FUNCTION, "function");
        put(SymbolType.DOCUMENT_SUMMARY, "variable");
        put(SymbolType.PARAMETER, "parameter");
        put(SymbolType.LABEL, "variable");
        put(SymbolType.QUERY_INPUT, "variable");
        put(SymbolType.RANK_CONSTANT, "variable");
        put(SymbolType.PROPERTY, "property");
        put(SymbolType.LAMBDA_FUNCTION, "keyword");
        put(SymbolType.DIMENSION, "keyword");
        put(SymbolType.ANNOTATION, "variable");
    }};
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy