@@ -19,9 +19,6 @@ import {
1919 PLUGIN_RPC_CONTEXT ,
2020 LanguagesMain ,
2121 SerializedLanguageConfiguration ,
22- SerializedRegExp ,
23- SerializedOnEnterRule ,
24- SerializedIndentationRule ,
2522 Position ,
2623 Selection ,
2724 RawColorInfo ,
@@ -63,6 +60,7 @@ import {
6360 CallHierarchyItem ,
6461 CallHierarchyIncomingCall ,
6562 CallHierarchyOutgoingCall ,
63+ LinkedEditingRanges ,
6664} from '../common/plugin-api-rpc-model' ;
6765import { CompletionAdapter } from './languages/completion' ;
6866import { Diagnostics } from './languages/diagnostics' ;
@@ -94,6 +92,8 @@ import { BinaryBuffer } from '@theia/core/lib/common/buffer';
9492import { DocumentSemanticTokensAdapter , DocumentRangeSemanticTokensAdapter } from './languages/semantic-highlighting' ;
9593import { isReadonlyArray } from '../common/arrays' ;
9694import { DisposableCollection } from '@theia/core/lib/common/disposable' ;
95+ import { LinkedEditingRangeAdapter } from './languages/linked-editing-range' ;
96+ import { serializeEnterRules , serializeIndentation , serializeRegExp } from './languages-utils' ;
9797
9898type Adapter = CompletionAdapter |
9999 SignatureHelpAdapter |
@@ -118,7 +118,8 @@ type Adapter = CompletionAdapter |
118118 RenameAdapter |
119119 CallHierarchyAdapter |
120120 DocumentRangeSemanticTokensAdapter |
121- DocumentSemanticTokensAdapter ;
121+ DocumentSemanticTokensAdapter |
122+ LinkedEditingRangeAdapter ;
122123
123124export class LanguagesExtImpl implements LanguagesExt {
124125
@@ -630,6 +631,19 @@ export class LanguagesExtImpl implements LanguagesExt {
630631 }
631632 // ### Call Hierarchy Provider end
632633
634+ // ### Linked Editing Range Provider begin
635+ registerLinkedEditingRangeProvider ( selector : theia . DocumentSelector , provider : theia . LinkedEditingRangeProvider ) : theia . Disposable {
636+ const handle = this . addNewAdapter ( new LinkedEditingRangeAdapter ( this . documents , provider ) ) ;
637+ this . proxy . $registerLinkedEditingRangeProvider ( handle , this . transformDocumentSelector ( selector ) ) ;
638+ return this . createDisposable ( handle ) ;
639+ }
640+
641+ $provideLinkedEditingRanges ( handle : number , resource : UriComponents , position : Position , token : theia . CancellationToken ) : Promise < LinkedEditingRanges | undefined > {
642+ return this . withAdapter ( handle , LinkedEditingRangeAdapter , async adapter => adapter . provideRanges ( URI . revive ( resource ) , position , token ) , undefined ) ;
643+ }
644+
645+ // ### Linked Editing Range Provider end
646+
633647 // #region semantic coloring
634648
635649 registerDocumentSemanticTokensProvider ( selector : theia . DocumentSelector , provider : theia . DocumentSemanticTokensProvider , legend : theia . SemanticTokensLegend ,
@@ -671,43 +685,7 @@ export class LanguagesExtImpl implements LanguagesExt {
671685 // #endregion
672686}
673687
674- function serializeEnterRules ( rules ?: theia . OnEnterRule [ ] ) : SerializedOnEnterRule [ ] | undefined {
675- if ( typeof rules === 'undefined' || rules === null ) {
676- return undefined ;
677- }
678-
679- return rules . map ( r =>
680- ( {
681- action : r . action ,
682- beforeText : serializeRegExp ( r . beforeText ) ,
683- afterText : serializeRegExp ( r . afterText )
684- } as SerializedOnEnterRule ) ) ;
685- }
686-
687- function serializeRegExp ( regexp ?: RegExp ) : SerializedRegExp | undefined {
688- if ( typeof regexp === 'undefined' || regexp === null ) {
689- return undefined ;
690- }
691-
692- return {
693- pattern : regexp . source ,
694- flags : ( regexp . global ? 'g' : '' ) + ( regexp . ignoreCase ? 'i' : '' ) + ( regexp . multiline ? 'm' : '' )
695- } ;
696- }
697-
698- function serializeIndentation ( indentationRules ?: theia . IndentationRule ) : SerializedIndentationRule | undefined {
699- if ( typeof indentationRules === 'undefined' || indentationRules === null ) {
700- return undefined ;
701- }
702-
703- return {
704- increaseIndentPattern : serializeRegExp ( indentationRules . increaseIndentPattern ) ,
705- decreaseIndentPattern : serializeRegExp ( indentationRules . decreaseIndentPattern ) ,
706- indentNextLinePattern : serializeRegExp ( indentationRules . indentNextLinePattern ) ,
707- unIndentedLinePattern : serializeRegExp ( indentationRules . unIndentedLinePattern )
708- } ;
709- }
710-
711688function getPluginLabel ( pluginInfo : PluginInfo ) : string {
712689 return pluginInfo . displayName || pluginInfo . name ;
713690}
691+
0 commit comments