@@ -6,7 +6,7 @@ import type { DocSymbolInfo } from '../DocSymbolInfo';
66import { getScopedSameNameWordsExcludeItself } from '../builders_util' ;
77
88import { _encodeTokenType , _encodeTokenModifiers , vscodeKindToTokenType } from './token_util' ;
9- import { overrideQuote , updateLoop , updatePairMatchFirstWord } from './update_util' ;
9+ import { overrideQuote , updateLoop } from './update_util' ;
1010
1111function genAllPossibleWord (
1212 currDocSymbolInfo : DocSymbolInfo
@@ -61,32 +61,19 @@ function getTokenDict(
6161 const excludedRanges : [ number , number ] [ ] =
6262 currDocSymbolInfo . docRes . getExcludedRangesForDocumentSemanticTokensProvider ( buildingConfig ) ;
6363
64- // colored position collector
65- // {index, [encodeTokenType, encodeTokenModifiers]}
66- // Note that the `index` should be no-translated result, that is,
67- // `index` should be the 1st character of current string.
68- // For example, `sb-c::instrument-consing` should be the index of `s` instead of `i`.
69- let coloredPosMap : Map < number , [ number , number ] > = new Map < number , [ number , number ] > ( ) ;
70-
7164 // overlap in order!
72- updateTokenDict ( currDocSymbolInfo , excludedRanges , needColorDict , 'local' , tokensBuilder , coloredPosMap ) ;
73-
74- // Due to the restrictions below, we cannot make this feature optional
75- // https://github.com/microsoft/vscode/issues/580
76- // https://github.com/microsoft/vscode/issues/68647
77- updatePairMatchFirstWord ( currDocSymbolInfo , coloredPosMap , tokensBuilder ) ;
78-
79- coloredPosMap = new Map < number , [ number , number ] > ( ) ;
65+ updateTokenDict ( currDocSymbolInfo , excludedRanges , needColorDict , 'local' , tokensBuilder ) ;
66+ updateTokenDict ( currDocSymbolInfo , excludedRanges , needColorDict , 'global' , tokensBuilder ) ;
8067
81- updateTokenDict ( currDocSymbolInfo , excludedRanges , needColorDict , 'global' , tokensBuilder , coloredPosMap ) ;
82-
83- updateLoop ( currDocSymbolInfo , excludedRanges , tokensBuilder , coloredPosMap ) ;
84- updatePairMatchFirstWord ( currDocSymbolInfo , coloredPosMap , tokensBuilder ) ;
85- coloredPosMap = new Map < number , [ number , number ] > ( ) ;
68+ updateLoop ( currDocSymbolInfo , excludedRanges , tokensBuilder ) ;
8669
8770 // 1. tried to de-color all single-quoted parts
88- // vscode semantic highlighting does not support multi-line token, does not work
89- overrideQuote ( currDocSymbolInfo , tokensBuilder ) ;
71+ // vscode semantic highlighting does not support multi-line tokens
72+ // so we split the multi-line tokens into multiple single-line tokens manually.
73+ // This may have a negative impact on performance.
74+ if ( buildingConfig . get ( 'commonLisp.DocumentSemanticTokensProvider.NotColorQuoted' ) === true ) {
75+ overrideQuote ( currDocSymbolInfo , tokensBuilder ) ;
76+ }
9077 //
9178 // 2. tried to de-color all no-formatted strings
9279 // not sure if it can cover all cases or not
@@ -100,7 +87,6 @@ function updateTokenDict(
10087 needColorDict : Map < string , [ number , number ] [ ] > ,
10188 updateScope : 'global' | 'local' ,
10289 tokensBuilder : vscode . SemanticTokensBuilder ,
103- coloredPosMap : Map < number , [ number , number ] > ,
10490) {
10591 const isGlobal = updateScope === 'global' ;
10692 const d = isGlobal ? currDocSymbolInfo . globalDef : currDocSymbolInfo . allLocal ;
@@ -125,11 +111,7 @@ function updateTokenDict(
125111
126112 // color def itself
127113 const startPos = item . startPos ;
128- const encoded = setParsedToken ( tokensBuilder , item , startPos , isGlobal ) ;
129- if ( encoded !== undefined ) {
130- coloredPosMap . set ( item . numRange [ 0 ] , encoded ) ;
131- }
132-
114+ setParsedToken ( tokensBuilder , item , startPos , isGlobal ) ;
133115 // color its scope
134116 const scopedSameNameWords = getScopedSameNameWordsExcludeItself ( item , needColorDict , currDocSymbolInfo ) ;
135117 for ( const rang of scopedSameNameWords ) {
@@ -138,10 +120,7 @@ function updateTokenDict(
138120 }
139121
140122 const startPos = currDocSymbolInfo . document . positionAt ( rang [ 0 ] ) ;
141- const encoded = setParsedToken ( tokensBuilder , item , startPos ) ;
142- if ( encoded !== undefined ) {
143- coloredPosMap . set ( rang [ 0 ] , encoded ) ;
144- }
123+ setParsedToken ( tokensBuilder , item , startPos ) ;
145124 }
146125
147126 }
@@ -155,7 +134,7 @@ function setParsedToken(
155134 item : SymbolInfo ,
156135 startPos : vscode . Position ,
157136 isGlobal = true
158- ) : [ number , number ] | undefined {
137+ ) {
159138 const nameStr = item . name ;
160139 const packagePrefixIndScope = nameStr . indexOf ( ':' ) ;
161140 let len = nameStr . length ;
@@ -168,7 +147,7 @@ function setParsedToken(
168147 isGlobal &&
169148 ( subItemName . startsWith ( '+' ) && subItemName . endsWith ( '+' ) ) ||
170149 ( subItemName . startsWith ( '*' ) && subItemName . endsWith ( '*' ) ) ) {
171- return undefined ;
150+ return ;
172151 }
173152 }
174153 startPos = startPos . translate ( 0 , packagePrefixIndScope ) ;
@@ -194,8 +173,6 @@ function setParsedToken(
194173 ) ;
195174 //const key = `${item.name}|${startPos.line},${startPos.character},${item.name.length}`;
196175 //console.log(key);
197-
198- return [ encodedTT , encodedTMs ] ;
199176}
200177
201178function buildSemanticTokens (
0 commit comments