@@ -104,25 +104,30 @@ function rustcSysroot(toolchain) {
104
104
* @return {object } environment vars
105
105
*/
106
106
function serverEnv ( toolchain ) {
107
- const env = { PATH : getPath ( ) }
107
+ const env = {
108
+ PATH : getPath ( ) ,
109
+ RUST_BACKTRACE : '1' ,
110
+ RUST_LOG : process . env . RUST_LOG ,
111
+ }
112
+
113
+ if ( ! env . RUST_LOG && atom . config . get ( 'core.debugLSP' ) ) {
114
+ env . RUST_LOG = 'rls=warn'
115
+ }
108
116
109
117
if ( toolchain ) {
110
- let rustSrcPath = process . env . RUST_SRC_PATH
111
- if ( ! rustSrcPath ) {
112
- try {
113
- rustSrcPath = path . join ( rustcSysroot ( toolchain ) , "/lib/rustlib/src/rust/src/" )
114
- }
115
- catch ( e ) {
116
- console . error ( "Failed to find sysroot" , e )
117
- return env
118
- }
118
+ try {
119
+ env . RUST_SRC_PATH = path . join ( rustcSysroot ( toolchain ) , "/lib/rustlib/src/rust/src/" )
120
+ }
121
+ catch ( e ) {
122
+ console . error ( "Failed to find sysroot" , e )
119
123
}
120
- env . RUST_SRC_PATH = rustSrcPath
121
124
}
122
-
123
125
return env
124
126
}
125
127
128
+ // ongoing promise
129
+ let _checkingRls
130
+
126
131
/**
127
132
* Check for and install Rls
128
133
* @param {BusySignalService } [busySignalService]
@@ -131,7 +136,9 @@ function serverEnv(toolchain) {
131
136
function checkRls ( busySignalService ) {
132
137
let toolchain = configToolchain ( )
133
138
134
- return exec ( `rustup component list --toolchain ${ toolchain } ` ) . then ( results => {
139
+ if ( _checkingRls ) return _checkingRls
140
+
141
+ _checkingRls = exec ( `rustup component list --toolchain ${ toolchain } ` ) . then ( results => {
135
142
const { stdout } = results
136
143
if (
137
144
stdout . search ( / ^ r l s - p r e v i e w .* \( ( d e f a u l t | i n s t a l l e d ) \) $ / m) >= 0 &&
@@ -197,6 +204,14 @@ function checkRls(busySignalService) {
197
204
198
205
return installRlsPromise
199
206
} )
207
+
208
+ try {
209
+ return _checkingRls
210
+ }
211
+ finally {
212
+ let clearOngoing = ( ) => _checkingRls = null
213
+ _checkingRls . then ( clearOngoing ) . catch ( clearOngoing )
214
+ }
200
215
}
201
216
202
217
class RustLanguageClient extends AutoLanguageClient {
0 commit comments