@Override
    public List<CompletionItem> getCompletionItems(EventCompletionContext context) {
        if (!(context.document instanceof SchemaDocument)) return List.of();
        if (!match(context)) return List.of();

        if (isInsideTensor(context)) {
            return List.of(
                CompletionUtils.constructType("float"),
                CompletionUtils.constructType("double"),
                CompletionUtils.constructType("int8"),
                CompletionUtils.constructType("bfloat16")
            );
        }

        List<CompletionItem> items = new ArrayList<>() {{
            add(CompletionUtils.constructSnippet("annotationreference", "annotationreference<$1>"));
            add(CompletionUtils.constructSnippet("array", "array<$1>"));
            add(CompletionUtils.constructType("bool"));
            add(CompletionUtils.constructType("byte"));
            add(CompletionUtils.constructType("double"));
            add(CompletionUtils.constructType("float"));
            add(CompletionUtils.constructType("int"));
            add(CompletionUtils.constructType("long"));
            add(CompletionUtils.constructSnippet("map", "map<${1:Kt}, ${2:Vt}>"));
            add(CompletionUtils.constructType("position"));
            add(CompletionUtils.constructType("predicate"));
            add(CompletionUtils.constructType("raw"));
            add(CompletionUtils.constructSnippet("reference", "reference<$1>"));
            add(CompletionUtils.constructType("string"));
            add(CompletionUtils.constructSnippet("tensor", "tensor<$1>($0)"));
            add(CompletionUtils.constructType("uri"));
            add(CompletionUtils.constructSnippet("weightedset", "weightedset<$1>"));
        }};

        Optional<Symbol> documentScope = context.schemaIndex.findSymbol(null, SymbolType.DOCUMENT, ((SchemaDocument)context.document).getSchemaIdentifier());

        if (documentScope.isPresent()) {
            List<Symbol> structSymbols = context.schemaIndex.listSymbolsInScope(documentScope.get(), SymbolType.STRUCT);
            for (var symbol : structSymbols) {
                items.add(CompletionUtils.constructType(symbol.getShortIdentifier()));
            }
        }

        return items;
    }
For completing types for a field, as well as type parameters in tensor types. 
Field types include user defined structs.
integration/schema-language-server/language-server/src/main/java/ai/vespa/schemals/lsp/schema/completion/provider/TypeCompletion.java