@@ -35,30 +35,17 @@ import {
35
35
} from 'vscode-languageclient' ;
36
36
import { LanguageClient } from 'vscode-languageclient/node' ;
37
37
import { getGoConfig , getGoplsConfig , extensionInfo } from '../config' ;
38
- import { GoCodeActionProvider } from './legacy/goCodeAction' ;
39
- import { GoDefinitionProvider } from './legacy/goDeclaration' ;
40
38
import { toolExecutionEnvironment } from '../goEnv' ;
41
- import { GoHoverProvider } from './legacy/goExtraInfo' ;
42
39
import { GoDocumentFormattingEditProvider , usingCustomFormatTool } from './legacy/goFormat' ;
43
- import { GoImplementationProvider } from './legacy/goImplementations' ;
44
40
import { installTools , latestToolVersion , promptForMissingTool , promptForUpdatingTool } from '../goInstallTools' ;
45
- import { parseLiveFile } from './legacy/goLiveErrors' ;
46
41
import {
47
42
buildDiagnosticCollection ,
48
43
lintDiagnosticCollection ,
49
44
restartLanguageServer ,
50
45
vetDiagnosticCollection
51
46
} from '../goMain' ;
52
- import { GO_MODE } from '../goMode' ;
53
- import { GoDocumentSymbolProvider } from './legacy/goOutline' ;
54
- import { GoReferenceProvider } from './legacy/goReferences' ;
55
- import { GoRenameProvider } from './legacy/goRename' ;
56
- import { GoSignatureHelpProvider } from './legacy/goSignature' ;
57
47
import { outputChannel , updateLanguageServerIconGoStatusBar } from '../goStatus' ;
58
- import { GoCompletionItemProvider } from './legacy/goSuggest' ;
59
- import { GoWorkspaceSymbolProvider } from './legacy/goSymbol' ;
60
48
import { getTool , Tool } from '../goTools' ;
61
- import { GoTypeDefinitionProvider } from './legacy/goTypeDefinition' ;
62
49
import { getFromGlobalState , updateGlobalState , updateWorkspaceState } from '../stateUtils' ;
63
50
import {
64
51
getBinPath ,
@@ -75,6 +62,7 @@ import { FoldingContext } from 'vscode';
75
62
import { ProvideFoldingRangeSignature } from 'vscode-languageclient/lib/common/foldingRange' ;
76
63
import { daysBetween , getStateConfig , maybePromptForGoplsSurvey , timeDay , timeMinute } from '../goSurvey' ;
77
64
import { maybePromptForDeveloperSurvey } from '../goDeveloperSurvey' ;
65
+ import { LegacyLanguageService } from './registerDefaultProviders' ;
78
66
79
67
interface LanguageServerConfig {
80
68
serverName : string ;
@@ -101,6 +89,7 @@ let languageServerDisposable: vscode.Disposable;
101
89
export let latestConfig : LanguageServerConfig ;
102
90
export let serverOutputChannel : vscode . OutputChannel ;
103
91
export let languageServerIsRunning = false ;
92
+
104
93
// serverInfo is the information from the server received during initialization.
105
94
export let serverInfo : ServerInfo = undefined ;
106
95
@@ -111,6 +100,8 @@ interface ServerInfo {
111
100
Commands ?: string [ ] ;
112
101
}
113
102
103
+ let legacyLanguageService : LegacyLanguageService = undefined ;
104
+
114
105
const languageServerStartMutex = new Mutex ( ) ;
115
106
116
107
let serverTraceChannel : vscode . OutputChannel ;
@@ -149,9 +140,6 @@ class Restart {
149
140
}
150
141
}
151
142
152
- // defaultLanguageProviders is the list of providers currently registered.
153
- let defaultLanguageProviders : vscode . Disposable [ ] = [ ] ;
154
-
155
143
// restartCommand is the command used by the user to restart the language
156
144
// server.
157
145
let restartCommand : vscode . Disposable ;
@@ -216,8 +204,9 @@ export async function startLanguageServerWithFallback(ctx: vscode.ExtensionConte
216
204
// If the server has been disabled, or failed to start,
217
205
// fall back to the default providers, while making sure not to
218
206
// re-register any providers.
219
- if ( ! started && defaultLanguageProviders . length === 0 ) {
220
- registerDefaultProviders ( ctx ) ;
207
+ if ( ! started && ! legacyLanguageService ) {
208
+ legacyLanguageService = new LegacyLanguageService ( ctx ) ;
209
+ ctx . subscriptions . push ( legacyLanguageService ) ;
221
210
}
222
211
languageServerIsRunning = started ;
223
212
updateLanguageServerIconGoStatusBar ( started , goConfig [ 'useLanguageServer' ] === true ) ;
@@ -451,7 +440,9 @@ async function startLanguageServer(ctx: vscode.ExtensionContext, config: Languag
451
440
452
441
// Before starting the language server, make sure to deregister any
453
442
// currently registered language providers.
454
- disposeDefaultProviders ( ) ;
443
+
444
+ legacyLanguageService ?. dispose ( ) ;
445
+ legacyLanguageService = undefined ;
455
446
456
447
languageServerDisposable = languageClient . start ( ) ;
457
448
ctx . subscriptions . push ( languageServerDisposable ) ;
@@ -904,48 +895,6 @@ function createBenchmarkCodeLens(lens: vscode.CodeLens): vscode.CodeLens[] {
904
895
] ;
905
896
}
906
897
907
- // registerUsualProviders registers the language feature providers if the language server is not enabled.
908
- function registerDefaultProviders ( ctx : vscode . ExtensionContext ) {
909
- const completionProvider = new GoCompletionItemProvider ( ctx . globalState ) ;
910
- defaultLanguageProviders . push ( completionProvider ) ;
911
- defaultLanguageProviders . push (
912
- vscode . languages . registerCompletionItemProvider ( GO_MODE , completionProvider , '.' , '"' )
913
- ) ;
914
- defaultLanguageProviders . push ( vscode . languages . registerHoverProvider ( GO_MODE , new GoHoverProvider ( ) ) ) ;
915
- defaultLanguageProviders . push ( vscode . languages . registerDefinitionProvider ( GO_MODE , new GoDefinitionProvider ( ) ) ) ;
916
- defaultLanguageProviders . push ( vscode . languages . registerReferenceProvider ( GO_MODE , new GoReferenceProvider ( ) ) ) ;
917
- defaultLanguageProviders . push (
918
- vscode . languages . registerDocumentSymbolProvider ( GO_MODE , new GoDocumentSymbolProvider ( ) )
919
- ) ;
920
- defaultLanguageProviders . push ( vscode . languages . registerWorkspaceSymbolProvider ( new GoWorkspaceSymbolProvider ( ) ) ) ;
921
- defaultLanguageProviders . push (
922
- vscode . languages . registerSignatureHelpProvider ( GO_MODE , new GoSignatureHelpProvider ( ) , '(' , ',' )
923
- ) ;
924
- defaultLanguageProviders . push (
925
- vscode . languages . registerImplementationProvider ( GO_MODE , new GoImplementationProvider ( ) )
926
- ) ;
927
- defaultLanguageProviders . push (
928
- vscode . languages . registerDocumentFormattingEditProvider ( GO_MODE , new GoDocumentFormattingEditProvider ( ) )
929
- ) ;
930
- defaultLanguageProviders . push (
931
- vscode . languages . registerTypeDefinitionProvider ( GO_MODE , new GoTypeDefinitionProvider ( ) )
932
- ) ;
933
- defaultLanguageProviders . push ( vscode . languages . registerRenameProvider ( GO_MODE , new GoRenameProvider ( ) ) ) ;
934
- defaultLanguageProviders . push ( vscode . workspace . onDidChangeTextDocument ( parseLiveFile , null , ctx . subscriptions ) ) ;
935
- defaultLanguageProviders . push ( vscode . languages . registerCodeActionsProvider ( GO_MODE , new GoCodeActionProvider ( ) ) ) ;
936
-
937
- for ( const provider of defaultLanguageProviders ) {
938
- ctx . subscriptions . push ( provider ) ;
939
- }
940
- }
941
-
942
- function disposeDefaultProviders ( ) {
943
- for ( const disposable of defaultLanguageProviders ) {
944
- disposable . dispose ( ) ;
945
- }
946
- defaultLanguageProviders = [ ] ;
947
- }
948
-
949
898
export async function watchLanguageServerConfiguration ( e : vscode . ConfigurationChangeEvent ) {
950
899
if ( ! e . affectsConfiguration ( 'go' ) ) {
951
900
return ;
0 commit comments