@@ -18,7 +18,8 @@ import {
18
18
Position ,
19
19
CompletionList ,
20
20
NotificationType ,
21
- RequestType
21
+ RequestType ,
22
+ Disposable
22
23
} from "vscode-languageserver-protocol" ;
23
24
24
25
import { CancellationToken } from "vscode-jsonrpc" ;
@@ -31,12 +32,18 @@ const INDEX_WORKSPACE_REQUEST = new RequestType('indexWorkspace');
31
32
const CANCEL_INDEXING_REQUEST = new RequestType ( 'cancelIndexing' ) ;
32
33
33
34
let languageClient : LanguageClient ;
35
+ let extensionContext : ExtensionContext ;
36
+ let clientDisposable :Disposable ;
37
+ let file : string ;
34
38
35
39
export async function activate ( context : ExtensionContext ) : Promise < void > {
40
+ extensionContext = context ;
41
+
36
42
let c = workspace . getConfiguration ( ) ;
37
43
const config = c . get ( "phpls" ) as any ;
38
44
const enable = config . enable ;
39
- const file = require . resolve ( "intelephense" ) ;
45
+
46
+ file = require . resolve ( "intelephense" ) ;
40
47
41
48
if ( enable === false ) return ;
42
49
if ( ! file ) {
@@ -47,6 +54,26 @@ export async function activate(context: ExtensionContext): Promise<void> {
47
54
return ;
48
55
}
49
56
57
+ languageClient = createClient ( context , false ) ;
58
+
59
+ let indexWorkspaceDisposable = commands . registerCommand ( 'intelephense.index.workspace' , indexWorkspace ) ;
60
+ let cancelIndexingDisposable = commands . registerCommand ( 'intelephense.cancel.indexing' , cancelIndexing ) ;
61
+
62
+ context . subscriptions . push (
63
+ indexWorkspaceDisposable ,
64
+ cancelIndexingDisposable ,
65
+ ) ;
66
+
67
+ clientDisposable = languageClient . start ( ) ;
68
+ }
69
+
70
+ function fixItem ( item : CompletionItem ) : void {
71
+ if ( / ^ \\ \w + / . test ( item . insertText ) && ! / ^ ( \\ \w + ) { 2 , } / . test ( item . insertText ) ) {
72
+ item . insertText = item . insertText . replace ( '\\' , '' ) ;
73
+ }
74
+ }
75
+
76
+ function createClient ( context : ExtensionContext , clearCache : boolean ) {
50
77
// The debug options for the server
51
78
let debugOptions = {
52
79
execArgv : [ "--nolazy" , "--inspect=6039" , "--trace-warnings" , "--preserve-symlinks" ] ,
@@ -70,7 +97,7 @@ export async function activate(context: ExtensionContext): Promise<void> {
70
97
] ,
71
98
initializationOptions : {
72
99
storagePath : context . storagePath ,
73
- clearCache : false
100
+ clearCache : clearCache
74
101
} ,
75
102
middleware : {
76
103
provideCompletionItem : (
@@ -111,9 +138,7 @@ export async function activate(context: ExtensionContext): Promise<void> {
111
138
clientOptions
112
139
) ;
113
140
114
- let ready = languageClient . onReady ( ) ;
115
-
116
- ready . then ( ( ) => {
141
+ languageClient . onReady ( ) . then ( ( ) => {
117
142
languageClient . info ( 'Intelephense ' + VERSION ) ;
118
143
119
144
let startedTime : Date ;
@@ -131,18 +156,20 @@ export async function activate(context: ExtensionContext): Promise<void> {
131
156
} ) ;
132
157
} ) ;
133
158
134
- let indexWorkspaceDisposable = commands . registerCommand ( 'intelephense.index.workspace' , ( ) => languageClient . sendRequest ( INDEX_WORKSPACE_REQUEST . method ) ) ;
135
- let cancelIndexingDisposable = commands . registerCommand ( 'intelephense.cancel.indexing' , ( ) => languageClient . sendRequest ( CANCEL_INDEXING_REQUEST . method ) ) ;
159
+ return languageClient ;
160
+ }
136
161
137
- context . subscriptions . push (
138
- services . registLanguageClient ( languageClient ) ,
139
- indexWorkspaceDisposable ,
140
- cancelIndexingDisposable ,
141
- ) ;
162
+ function indexWorkspace ( ) {
163
+ if ( ! languageClient ) {
164
+ return ;
165
+ }
166
+ languageClient . stop ( ) . then ( _ => {
167
+ clientDisposable . dispose ( ) ;
168
+ languageClient = createClient ( extensionContext , true ) ;
169
+ clientDisposable = languageClient . start ( ) ;
170
+ } ) ;
142
171
}
143
172
144
- function fixItem ( item : CompletionItem ) : void {
145
- if ( / ^ \\ \w + / . test ( item . insertText ) && ! / ^ ( \\ \w + ) { 2 , } / . test ( item . insertText ) ) {
146
- item . insertText = item . insertText . replace ( '\\' , '' ) ;
147
- }
173
+ function cancelIndexing ( ) {
174
+ languageClient . sendRequest ( CANCEL_INDEXING_REQUEST . method ) ;
148
175
}
0 commit comments