@@ -11,6 +11,8 @@ import * as vscode from 'vscode-languageserver-types';
1111import * as config from './_config' ;
1212import { ConfigurationManager } from './_configuration' ;
1313import { VirtualDocumentProvider } from './_virtual-document-provider' ;
14+ import { TextDocument } from 'vscode-languageserver-textdocument' ;
15+
1416
1517const cssErrorCode = 9999 ;
1618
@@ -115,7 +117,9 @@ export class StyledTemplateLanguageService implements TemplateLanguageService {
115117 position : ts . LineAndCharacter
116118 ) : ts . WithMetadata < ts . CompletionInfo > {
117119 const items = this . getCompletionItems ( context , position ) ;
118- return translateCompletionItemsToCompletionInfo ( this . typescript , items ) ;
120+ const doc = this . virtualDocumentFactory . createVirtualDocument ( context ) ;
121+ const wrapper = this . virtualDocumentFactory . getVirtualDocumentWrapper ( context ) ;
122+ return translateCompletionItemsToCompletionInfo ( this . typescript , items , doc , wrapper ) ;
119123 }
120124
121125 public getCompletionEntryDetails (
@@ -242,7 +246,7 @@ export class StyledTemplateLanguageService implements TemplateLanguageService {
242246
243247 private translateDiagnostics (
244248 diagnostics : vscode . Diagnostic [ ] ,
245- doc : vscode . TextDocument ,
249+ doc : TextDocument ,
246250 context : TemplateContext ,
247251 content : string
248252 ) {
@@ -254,7 +258,7 @@ export class StyledTemplateLanguageService implements TemplateLanguageService {
254258 private translateDiagnostic (
255259 diagnostic : vscode . Diagnostic ,
256260 file : ts . SourceFile ,
257- doc : vscode . TextDocument ,
261+ doc : TextDocument ,
258262 context : TemplateContext ,
259263 content : string
260264 ) : ts . Diagnostic | undefined {
@@ -378,7 +382,9 @@ function filterScssCompletionItems(
378382
379383function translateCompletionItemsToCompletionInfo (
380384 typescript : typeof ts ,
381- items : vscode . CompletionList
385+ items : vscode . CompletionList ,
386+ doc : TextDocument ,
387+ wrapper : string
382388) : ts . WithMetadata < ts . CompletionInfo > {
383389 return {
384390 metadata : {
@@ -387,7 +393,7 @@ function translateCompletionItemsToCompletionInfo(
387393 isGlobalCompletion : false ,
388394 isMemberCompletion : false ,
389395 isNewIdentifierLocation : false ,
390- entries : items . items . map ( x => translateCompetionEntry ( typescript , x ) ) ,
396+ entries : items . items . map ( x => translateCompetionEntry ( typescript , x , doc , wrapper ) ) ,
391397 } ;
392398}
393399
@@ -407,13 +413,20 @@ function translateCompletionItemsToCompletionEntryDetails(
407413
408414function translateCompetionEntry (
409415 typescript : typeof ts ,
410- item : vscode . CompletionItem
416+ item : vscode . CompletionItem ,
417+ doc : TextDocument ,
418+ wrapper : string
411419) : ts . CompletionEntry {
412420 return {
413421 name : item . label ,
414422 kind : item . kind ? translateCompletionItemKind ( typescript , item . kind ) : typescript . ScriptElementKind . unknown ,
415423 kindModifiers : getKindModifiers ( item ) ,
416424 sortText : item . sortText || item . label ,
425+ replacementSpan : {
426+ // The correct offset for start seems to be the range.start minus the wrapper
427+ start : doc . offsetAt ( ( item as any ) . textEdit . range . start ) - wrapper . length ,
428+ length : doc . offsetAt ( ( item as any ) . textEdit . range . end ) - doc . offsetAt ( ( item as any ) . textEdit . range . start ) ,
429+ } ,
417430 } ;
418431}
419432
0 commit comments