mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-02 18:23:24 +01:00
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
32 lines
1.1 KiB
Swift
32 lines
1.1 KiB
Swift
//===----------------------------------------------------------------------===//
|
||
//
|
||
// 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 doesn’t 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)
|
||
)
|
||
}
|