Files
sourcekit-lsp/Sources/SourceKitLSP/SemanticTokensLegend+SourceKitLSPLegend.swift
Alex Hoppen 4de0ba54c5 Translate the semantic token legend used by clangd to the semantic token legend used by SourceKit-LSP
clangd uses a completely different semantic token legend than SourceKit-LSP (it doesn’t even adhere to the ordering of the pre-defined token types) but we were passing index offsets from clangd through assuming that clangd uses the same legend, which was incorrect.

When retrieving semantic tokens from clangd, translate the semantic tokens from clangd’s legend to SourceKit-LSP’s legend.

rdar://129895062
2024-06-27 05:31:05 +02:00

32 lines
1.1 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import LanguageServerProtocol
extension SemanticTokenTypes {
// LSP doesnt know about actors. Display actors as classes.
public static var actor: Self { Self.class }
/// Token types are looked up by index
public var tokenType: UInt32 {
UInt32(Self.all.firstIndex(of: self)!)
}
}
extension SemanticTokensLegend {
/// The semantic tokens legend that is used between SourceKit-LSP and the editor.
static let sourceKitLSPLegend = SemanticTokensLegend(
tokenTypes: SemanticTokenTypes.all.map(\.name),
tokenModifiers: SemanticTokenModifiers.all.compactMap(\.name)
)
}