<!doctype html>
< html class = "default no-js" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< title > DocumentSemanticTokensProvider | VS Code API 中文文档< / title >
< meta name = "description" content = "VS Code API 是一系列你可以在 Visual Studio Code 扩展中调用的 JavaScript API, 这个站点列出了扩展开发者可以使用的所有 vscode api 中文文档,是 vscode 插件开发必备。" >
< meta name = "author" content = "洛竹" >
< meta name = "copyright" content = "洛竹" >
< meta property = "og:type" content = "docs" >
< meta property = "og:url" content = "https://vscode-api-cn.js.org/index.html" >
< meta property = "og:site_name" content = "Vscode Api 中文文档" >
< meta property = "article:tag" content = "vscode api" >
< meta property = "article:tag" content = "vscode api 中文文档" >
< meta property = "article:tag" content = "vscode 插件" >
< meta property = "article:tag" content = "vscode 插件开发" >
< meta property = "article:tag" content = "vscode DocumentSemanticTokensProvider" >
< meta property = "og:description" content = "VS Code API 是一系列你可以在 Visual Studio Code 扩展中调用的 JavaScript API, 这个站点列出了扩展开发者可以使用的所有 vscode api 中文文档,是 vscode 插件开发必备。" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< link rel = "shortcut icon" href = "https://code.visualstudio.com/favicon.ico" sizes = "128x128" >
< link rel = "stylesheet" href = "../assets/css/main.css" >
< script async src = "../assets/js/search.js" id = "search-script" > < / script >
< script async src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7962287588031867" crossorigin = "anonymous" > < / script >
< script type = "text/javascript" >
(function (c, l, a, r, i, t, y) {
c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) };
t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i;
y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
})(window, document, "clarity", "script", "g1cbw4nxoq");
< / script >
<!-- Google tag (gtag.js) -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=G-T4TRRS1LB1" > < / script >
< script >
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-T4TRRS1LB1');
< / script >
< style >
.container-main {
padding-bottom: 50px;
}
< / style >
< / head >
< body >
< header >
< div class = "tsd-page-toolbar" >
< div class = "container" >
< div class = "table-wrap" >
< div class = "table-cell" id = "tsd-search" data-index = "../assets/js/search.json" data-base = ".." >
< div class = "field" >
< label for = "tsd-search-field" class = "tsd-widget search no-caption" > Search< / label >
< input id = "tsd-search-field" type = "text" / >
< / div >
< ul class = "results" >
< li class = "state loading" > Preparing search index...< / li >
< li class = "state failure" > The search index is not available< / li >
< / ul >
< a href = "../index.html" class = "title" > VS Code API 中文文档< / a >
< / div >
< div class = "table-cell" id = "tsd-widgets" >
< div id = "tsd-filter" >
< a href = "#" class = "tsd-widget options no-caption" data-toggle = "options" > Options< / a >
< div class = "tsd-filter-group" >
< div class = "tsd-select" id = "tsd-filter-visibility" >
< span class = "tsd-select-label" > All< / span >
< ul class = "tsd-select-list" >
< li data-value = "public" > Public< / li >
< li data-value = "protected" > Public/Protected< / li >
< li data-value = "private" class = "selected" > All< / li >
< / ul >
< / div >
< input type = "checkbox" id = "tsd-filter-inherited" checked / >
< label class = "tsd-widget" for = "tsd-filter-inherited" > Inherited< / label >
< input type = "checkbox" id = "tsd-filter-externals" checked / >
< label class = "tsd-widget" for = "tsd-filter-externals" > Externals< / label >
< / div >
< / div >
< a href = "#" class = "tsd-widget menu no-caption" data-toggle = "menu" > Menu< / a >
< / div >
< / div >
< / div >
< / div >
< div class = "tsd-page-title" >
< div class = "container" >
< ul class = "tsd-breadcrumb" >
< li >
< a href = "../modules.html" > VS Code API 中文文档< / a >
< / li >
< li >
< a href = "../modules/vscode.html" > vscode< / a >
< / li >
< li >
< a href = "vscode.DocumentSemanticTokensProvider.html" > DocumentSemanticTokensProvider< / a >
< / li >
< / ul >
< h1 > Interface DocumentSemanticTokensProvider< / h1 >
< / div >
< / div >
< / header >
< div class = "container container-main" >
< div class = "row" >
< div class = "col-8 col-content" >
< section class = "tsd-panel tsd-comment" >
< div class = "tsd-comment tsd-typography" >
< div class = "lead" >
< p > The document semantic tokens provider interface defines the contract between extensions and
semantic tokens.< / p >
< / div >
< / div >
< / section >
< section class = "tsd-panel tsd-hierarchy" >
< h3 > 层级< / h3 >
< ul class = "tsd-hierarchy" >
< li >
< span class = "target" > DocumentSemanticTokensProvider< / span >
< / li >
< / ul >
< / section >
< section class = "tsd-panel-group tsd-index-group" >
< h2 > 索引< / h2 >
< section class = "tsd-panel tsd-index-panel" >
< div class = "tsd-index-content" >
< section class = "tsd-index-section " >
< h3 > Properties( 1) < / h3 >
< ul class = "tsd-index-list" >
< li class = "tsd-kind-property tsd-parent-kind-interface" > < a href = "vscode.DocumentSemanticTokensProvider.html#onDidChangeSemanticTokens" class = "tsd-kind-icon" > on< wbr > Did< wbr > Change< wbr > Semantic< wbr > Tokens< / a > < / li >
< / ul >
< / section >
< section class = "tsd-index-section " >
< h3 > Methods( 2) < / h3 >
< ul class = "tsd-index-list" >
< li class = "tsd-kind-method tsd-parent-kind-interface" > < a href = "vscode.DocumentSemanticTokensProvider.html#provideDocumentSemanticTokens" class = "tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< / a > < / li >
< li class = "tsd-kind-method tsd-parent-kind-interface" > < a href = "vscode.DocumentSemanticTokensProvider.html#provideDocumentSemanticTokensEdits" class = "tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< wbr > Edits< / a > < / li >
< / ul >
< / section >
< / div >
< / section >
< / section >
< section class = "tsd-panel-group tsd-member-group " >
< h2 > Properties( 1) < / h2 >
< section class = "tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface" >
< a name = "onDidChangeSemanticTokens" class = "tsd-anchor" > < / a >
< h3 > < span class = "tsd-flag ts-flagOptional" > Optional< / span > on< wbr > Did< wbr > Change< wbr > Semantic< wbr > Tokens< / h3 >
< div class = "tsd-signature tsd-kind-icon" > on< wbr > Did< wbr > Change< wbr > Semantic< wbr > Tokens< span class = "tsd-signature-symbol" > :< / span > < a href = "vscode.Event.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > Event< / a > < span class = "tsd-signature-symbol" > < < / span > < span class = "tsd-signature-type" > void< / span > < span class = "tsd-signature-symbol" > > < / span > < / div >
< aside class = "tsd-sources" >
< ul >
< li > Defined in < a href = "https://github.com/youngjuning/vscode-api-cn/blob/0d64d57/vscode.d.ts#L3594" > vscode.d.ts:3594< / a > < / li >
< / ul >
< / aside >
< div class = "tsd-comment tsd-typography" >
< div class = "lead" >
< p > An optional event to signal that the semantic tokens from this provider have changed.< / p >
< / div >
< / div >
< / section >
< / section >
< section class = "tsd-panel-group tsd-member-group " >
< h2 > Methods( 2) < / h2 >
< section class = "tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface" >
< a name = "provideDocumentSemanticTokens" class = "tsd-anchor" > < / a >
< h3 > provide< wbr > Document< wbr > Semantic< wbr > Tokens< / h3 >
< ul class = "tsd-signatures tsd-kind-method tsd-parent-kind-interface" >
< li class = "tsd-signature tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< span class = "tsd-signature-symbol" > (< / span > document< span class = "tsd-signature-symbol" > : < / span > < a href = "vscode.TextDocument.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > TextDocument< / a > , token< span class = "tsd-signature-symbol" > : < / span > < a href = "vscode.CancellationToken.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > CancellationToken< / a > < span class = "tsd-signature-symbol" > )< / span > < span class = "tsd-signature-symbol" > : < / span > < a href = "../modules/vscode.html#ProviderResult" class = "tsd-signature-type" data-tsd-kind = "Type alias" > ProviderResult< / a > < span class = "tsd-signature-symbol" > < < / span > < a href = "../classes/vscode.SemanticTokens.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokens< / a > < span class = "tsd-signature-symbol" > > < / span > < / li >
< / ul >
< ul class = "tsd-descriptions" >
< li class = "tsd-description" >
< aside class = "tsd-sources" >
< ul >
< li > Defined in < a href = "https://github.com/youngjuning/vscode-api-cn/blob/0d64d57/vscode.d.ts#L3655" > vscode.d.ts:3655< / a > < / li >
< / ul >
< / aside >
< div class = "tsd-comment tsd-typography" >
< div class = "lead" >
< p > Tokens in a file are represented as an array of integers. The position of each token is expressed relative to
the token before it, because most tokens remain stable relative to each other when edits are made in a file.< / p >
< / div >
< hr >
< p > In short, each token takes 5 integers to represent, so a specific token < code > i< / code > in the file consists of the following array indices:< / p >
< ul >
< li > at index < code > 5*i< / code > - < code > deltaLine< / code > : token line number, relative to the previous token< / li >
< li > at index < code > 5*i+1< / code > - < code > deltaStart< / code > : token start character, relative to the previous token (relative to 0 or the previous token' s start if they are on the same line)< / li >
< li > at index < code > 5*i+2< / code > - < code > length< / code > : the length of the token. A token cannot be multiline.< / li >
< li > at index < code > 5*i+3< / code > - < code > tokenType< / code > : will be looked up in < code > SemanticTokensLegend.tokenTypes< / code > . We currently ask that < code > tokenType< / code > < 65536.< / li >
< li > at index < code > 5*i+4< / code > - < code > tokenModifiers< / code > : each set bit will be looked up in < code > SemanticTokensLegend.tokenModifiers< / code > < / li >
< / ul >
< hr >
< a href = "#how-to-encode-tokens" id = "how-to-encode-tokens" style = "color: inherit; text-decoration: none;" >
< h3 > How to encode tokens< / h3 >
< / a >
< p > Here is an example for encoding a file with 3 tokens in a uint32 array:< / p >
< pre > < code > < span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #A31515" > " property" < / span > < span style = "color: #000000" > , tokenModifiers: [< / span > < span style = "color: #A31515" > " private" < / span > < span style = "color: #000000" > , < / span > < span style = "color: #A31515" > " static" < / span > < span style = "color: #000000" > ] },< / span >
< span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 10< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #A31515" > " type" < / span > < span style = "color: #000000" > , tokenModifiers: [] },< / span >
< span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #A31515" > " class" < / span > < span style = "color: #000000" > , tokenModifiers: [] }< / span >
< / code > < / pre >
< ol >
< li > < p > First of all, a legend must be devised. This legend must be provided up-front and capture all possible token types.
For this example, we will choose the following legend which must be passed in when registering the provider:< / p >
< pre > < code > < span style = "color: #000000" > tokenTypes: [< / span > < span style = "color: #A31515" > ' property' < / span > < span style = "color: #000000" > , < / span > < span style = "color: #A31515" > ' type' < / span > < span style = "color: #000000" > , < / span > < span style = "color: #A31515" > ' class' < / span > < span style = "color: #000000" > ],< / span >
< span style = "color: #000000" > tokenModifiers: [< / span > < span style = "color: #A31515" > ' private' < / span > < span style = "color: #000000" > , < / span > < span style = "color: #A31515" > ' static' < / span > < span style = "color: #000000" > ]< / span >
< / code > < / pre >
< / li >
< li > < p > The first transformation step is to encode < code > tokenType< / code > and < code > tokenModifiers< / code > as integers using the legend. Token types are looked
up by index, so a < code > tokenType< / code > value of < code > 1< / code > means < code > tokenTypes[1]< / code > . Multiple token modifiers can be set by using bit flags,
so a < code > tokenModifier< / code > value of < code > 3< / code > is first viewed as binary < code > 0b00000011< / code > , which means < code > [tokenModifiers[0], tokenModifiers[1]]< / code > because
bits 0 and 1 are set. Using this legend, the tokens now are:< / p >
< pre > < code > < span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > },< / span >
< span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 10< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > },< / span >
< span style = "color: #000000" > { line: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , startChar: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > }< / span >
< / code > < / pre >
< / li >
< li > < p > The next step is to represent each token relative to the previous token in the file. In this case, the second token
is on the same line as the first token, so the < code > startChar< / code > of the second token is made relative to the < code > startChar< / code >
of the first token, so it will be < code > 10 - 5< / code > . The third token is on a different line than the second token, so the
< code > startChar< / code > of the third token will not be altered:< / p >
< pre > < code > < span style = "color: #000000" > { deltaLine: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , deltaStartChar: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > },< / span >
< span style = "color: #000000" > { deltaLine: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , deltaStartChar: < / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > },< / span >
< span style = "color: #000000" > { deltaLine: < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , deltaStartChar: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , length: < / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > , tokenType: < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > , tokenModifiers: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > }< / span >
< / code > < / pre >
< / li >
< li > < p > Finally, the last step is to inline each of the 5 fields for a token in a single array, which is a memory friendly representation:< / p >
< pre > < code > < span style = "color: #008000" > // 1st token, 2nd token, 3rd token< / span >
< span style = "color: #000000" > [ < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ]< / span >
< / code > < / pre >
< / li >
< / ol >
< dl class = "tsd-comment-tags" >
< dt > see< / dt >
< dd > < p > < a href = "../classes/vscode.SemanticTokensBuilder.html" > SemanticTokensBuilder< / a > for a helper to encode tokens as integers.
< em > NOTE< / em > : When doing edits, it is possible that multiple edits occur until the editor decides to invoke the semantic tokens provider.
< em > NOTE< / em > : If the provider cannot temporarily compute semantic tokens, it can indicate this by throwing an error with the message ' Busy' .< / p >
< / dd >
< / dl >
< / div >
< h4 class = "tsd-parameters-title" > Parameters< / h4 >
< ul class = "tsd-parameters" >
< li >
< h5 > document: < a href = "vscode.TextDocument.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > TextDocument< / a > < / h5 >
< / li >
< li >
< h5 > token: < a href = "vscode.CancellationToken.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > CancellationToken< / a > < / h5 >
< / li >
< / ul >
< h4 class = "tsd-returns-title" > Returns < a href = "../modules/vscode.html#ProviderResult" class = "tsd-signature-type" data-tsd-kind = "Type alias" > ProviderResult< / a > < span class = "tsd-signature-symbol" > < < / span > < a href = "../classes/vscode.SemanticTokens.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokens< / a > < span class = "tsd-signature-symbol" > > < / span > < / h4 >
< / li >
< / ul >
< / section >
< section class = "tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface" >
< a name = "provideDocumentSemanticTokensEdits" class = "tsd-anchor" > < / a >
< h3 > < span class = "tsd-flag ts-flagOptional" > Optional< / span > provide< wbr > Document< wbr > Semantic< wbr > Tokens< wbr > Edits< / h3 >
< ul class = "tsd-signatures tsd-kind-method tsd-parent-kind-interface" >
< li class = "tsd-signature tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< wbr > Edits< span class = "tsd-signature-symbol" > (< / span > document< span class = "tsd-signature-symbol" > : < / span > < a href = "vscode.TextDocument.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > TextDocument< / a > , previousResultId< span class = "tsd-signature-symbol" > : < / span > < span class = "tsd-signature-type" > string< / span > , token< span class = "tsd-signature-symbol" > : < / span > < a href = "vscode.CancellationToken.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > CancellationToken< / a > < span class = "tsd-signature-symbol" > )< / span > < span class = "tsd-signature-symbol" > : < / span > < a href = "../modules/vscode.html#ProviderResult" class = "tsd-signature-type" data-tsd-kind = "Type alias" > ProviderResult< / a > < span class = "tsd-signature-symbol" > < < / span > < a href = "../classes/vscode.SemanticTokens.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokens< / a > < span class = "tsd-signature-symbol" > | < / span > < a href = "../classes/vscode.SemanticTokensEdits.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokensEdits< / a > < span class = "tsd-signature-symbol" > > < / span > < / li >
< / ul >
< ul class = "tsd-descriptions" >
< li class = "tsd-description" >
< aside class = "tsd-sources" >
< ul >
< li > Defined in < a href = "https://github.com/youngjuning/vscode-api-cn/blob/0d64d57/vscode.d.ts#L3686" > vscode.d.ts:3686< / a > < / li >
< / ul >
< / aside >
< div class = "tsd-comment tsd-typography" >
< div class = "lead" >
< p > Instead of always returning all the tokens in a file, it is possible for a < code > DocumentSemanticTokensProvider< / code > to implement
this method (< code > provideDocumentSemanticTokensEdits< / code > ) and then return incremental updates to the previously provided semantic tokens.< / p >
< / div >
< hr >
< a href = "#how-tokens-change-when-the-document-changes" id = "how-tokens-change-when-the-document-changes" style = "color: inherit; text-decoration: none;" >
< h3 > How tokens change when the document changes< / h3 >
< / a >
< p > Suppose that < code > provideDocumentSemanticTokens< / code > has previously returned the following semantic tokens:< / p >
< pre > < code > < span style = "color: #000000" > < / span > < span style = "color: #008000" > // 1st token, 2nd token, 3rd token< / span >
< span style = "color: #000000" > [ < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ]< / span >
< / code > < / pre >
< p > Also suppose that after some edits, the new semantic tokens in a file are:< / p >
< pre > < code > < span style = "color: #000000" > < / span > < span style = "color: #008000" > // 1st token, 2nd token, 3rd token< / span >
< span style = "color: #000000" > [ < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ]< / span >
< / code > < / pre >
< p > It is possible to express these new tokens in terms of an edit applied to the previous tokens:< / p >
< pre > < code > < span style = "color: #000000" > [ < / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ] < / span > < span style = "color: #008000" > // old tokens< / span >
< span style = "color: #000000" > [ < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 5< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 4< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , < / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 7< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 2< / span > < span style = "color: #000000" > ,< / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > ] < / span > < span style = "color: #008000" > // new tokens< / span >
< span style = "color: #000000" > edit: { start: < / span > < span style = "color: #098658" > 0< / span > < span style = "color: #000000" > , deleteCount: < / span > < span style = "color: #098658" > 1< / span > < span style = "color: #000000" > , data: [< / span > < span style = "color: #098658" > 3< / span > < span style = "color: #000000" > ] } < / span > < span style = "color: #008000" > // replace integer at offset 0 with 3< / span >
< / code > < / pre >
< p > < em > NOTE< / em > : If the provider cannot compute < code > SemanticTokensEdits< / code > , it can " give up" and return all the tokens in the document again.
< em > NOTE< / em > : All edits in < code > SemanticTokensEdits< / code > contain indices in the old integers array, so they all refer to the previous result state.< / p >
< / div >
< h4 class = "tsd-parameters-title" > Parameters< / h4 >
< ul class = "tsd-parameters" >
< li >
< h5 > document: < a href = "vscode.TextDocument.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > TextDocument< / a > < / h5 >
< / li >
< li >
< h5 > previousResultId: < span class = "tsd-signature-type" > string< / span > < / h5 >
< / li >
< li >
< h5 > token: < a href = "vscode.CancellationToken.html" class = "tsd-signature-type" data-tsd-kind = "Interface" > CancellationToken< / a > < / h5 >
< / li >
< / ul >
< h4 class = "tsd-returns-title" > Returns < a href = "../modules/vscode.html#ProviderResult" class = "tsd-signature-type" data-tsd-kind = "Type alias" > ProviderResult< / a > < span class = "tsd-signature-symbol" > < < / span > < a href = "../classes/vscode.SemanticTokens.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokens< / a > < span class = "tsd-signature-symbol" > | < / span > < a href = "../classes/vscode.SemanticTokensEdits.html" class = "tsd-signature-type" data-tsd-kind = "Class" > SemanticTokensEdits< / a > < span class = "tsd-signature-symbol" > > < / span > < / h4 >
< / li >
< / ul >
< / section >
< / section >
< / div >
< div class = "col-4 col-menu menu-sticky-wrap menu-highlight" >
< nav class = "tsd-navigation primary" >
< ul >
< li class = " " >
< a href = "../modules.html" > Exports< / a >
< / li >
< li class = "current tsd-kind-namespace" >
< a href = "../modules/vscode.html" > vscode< / a >
< ul >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.authentication.html" > authentication< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.commands.html" > commands< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.comments.html" > comments< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.debug.html" > debug< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.env.html" > env< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.extensions.html" > extensions< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.languages.html" > languages< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.notebooks.html" > notebooks< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.scm.html" > scm< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.tasks.html" > tasks< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.tests.html" > tests< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.window.html" > window< / a >
< / li >
< li class = " tsd-kind-namespace tsd-parent-kind-namespace" >
< a href = "../modules/vscode.workspace.html" > workspace< / a >
< / li >
< / ul >
< / li >
< / ul >
< / nav >
< nav class = "tsd-navigation secondary menu-sticky" >
< div style = "width: 200px" >
< script type = "text/javascript" id = "clstr_globe" src = "//clustrmaps.com/globe.js?d=cMnk-gSDNcAzNMMm67U8rWRaHnjUc0Xb0giSGndepK4" > < / script >
< / div >
< ul class = "before-current" >
< / ul >
< ul class = "current" >
< li class = "current tsd-kind-interface tsd-parent-kind-namespace" >
< a href = "vscode.DocumentSemanticTokensProvider.html" class = "tsd-kind-icon" > Document< wbr > Semantic< wbr > Tokens< wbr > Provider< / a >
< ul >
< li class = " tsd-kind-property tsd-parent-kind-interface" >
< a href = "vscode.DocumentSemanticTokensProvider.html#onDidChangeSemanticTokens" class = "tsd-kind-icon" > on< wbr > Did< wbr > Change< wbr > Semantic< wbr > Tokens< / a >
< / li >
< li class = " tsd-kind-method tsd-parent-kind-interface" >
< a href = "vscode.DocumentSemanticTokensProvider.html#provideDocumentSemanticTokens" class = "tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< / a >
< / li >
< li class = " tsd-kind-method tsd-parent-kind-interface" >
< a href = "vscode.DocumentSemanticTokensProvider.html#provideDocumentSemanticTokensEdits" class = "tsd-kind-icon" > provide< wbr > Document< wbr > Semantic< wbr > Tokens< wbr > Edits< / a >
< / li >
< / ul >
< / li >
< / ul >
< ul class = "after-current" >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< footer class = "with-border-bottom" >
< div class = "container" >
< h2 > 图例< / h2 >
< div class = "tsd-legend-group" >
< ul class = "tsd-legend" >
< li class = "tsd-kind-property tsd-parent-kind-interface" > < span class = "tsd-kind-icon" > Property< / span > < / li >
< li class = "tsd-kind-method tsd-parent-kind-interface" > < span class = "tsd-kind-icon" > Method< / span > < / li >
< / ul >
< / div >
< / div >
< / footer >
< div class = "container tsd-generator" >
< p > 友链:< a href = "https://jeasonstudio.gitbooks.io/vscode-cn-doc/content/" target = "_blank" > VS Code 中文文档< / a > | < a href = "https://code.visualstudio.com/docs" target = "_blank" > VS Code 官网文档< / a > | < a href = "https://marketplace.visualstudio.com/" target = "_blank" > VS Code 扩展市场< / a > < / p >
< p > Generated by < a href = "https://typedoc.org/" target = "_blank" > TypeDoc< / a > . Maintained by < a href = "https://youngjuning.js.org" target = "_blank" > 洛竹< / a > < / p >
< / div >
< div class = "overlay" > < / div >
< script src = "../assets/js/main.js" > < / script >
< script type = 'text/javascript' src = '//harassinganticipation.com/49/55/54/495554c56caa1155c7e9c5609d16b472.js' > < / script >
< / body >
< / html >