Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7e3ff84

Browse files
authored
Improve TU selection (microsoft#4519)
1 parent4795a5e commit7e3ff84

File tree

7 files changed

+42
-57
lines changed

7 files changed

+42
-57
lines changed

‎Extension/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name":"cpptools",
33
"displayName":"C/C++",
44
"description":"C/C++ IntelliSense, debugging, and code browsing.",
5-
"version":"0.26.1-master",
5+
"version":"0.26.2-master",
66
"publisher":"ms-vscode",
77
"preview":true,
88
"icon":"LanguageCCPP_color_128x.png",

‎Extension/src/LanguageServer/client.ts‎

Lines changed: 32 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -118,27 +118,8 @@ interface QueryTranslationUnitSourceParams {
118118
uri:string;
119119
}
120120

121-
exportenumQueryTranslationUnitSourceConfigDisposition{
122-
123-
/**
124-
* No custom config needed for this file
125-
*/
126-
ConfigNotNeeded=0,
127-
128-
/**
129-
* Custom config is needed for this file
130-
*/
131-
ConfigNeeded=1,
132-
133-
/**
134-
* Custom config is needed for the ancestor file returned in uri
135-
*/
136-
AncestorConfigNeeded=2
137-
}
138-
139121
interfaceQueryTranslationUnitSourceResult{
140-
uri:string;
141-
configDisposition:QueryTranslationUnitSourceConfigDisposition;
122+
candidates:string[];
142123
}
143124

144125
interfaceGetDiagnosticsResult{
@@ -1192,6 +1173,7 @@ export class DefaultClient implements Client {
11921173

11931174
publicupdateCustomConfigurations(requestingProvider?:CustomConfigurationProvider1):Thenable<void>{
11941175
returnthis.notifyWhenReady(()=>{
1176+
this.clearCustomConfigurations();
11951177
if(!this.configurationProvider){
11961178
return;
11971179
}
@@ -1309,7 +1291,7 @@ export class DefaultClient implements Client {
13091291
returnPromise.resolve();
13101292
}
13111293
console.log("provideCustomConfiguration");
1312-
letproviderId:string|undefined=this.configuration.CurrentConfigurationProvider;
1294+
letproviderId:string|undefined=this.configuration.CurrentConfigurationProvider;
13131295
if(!providerId){
13141296
onFinished();
13151297
returnPromise.resolve();
@@ -1320,43 +1302,48 @@ export class DefaultClient implements Client {
13201302
uri:docUri.toString()
13211303
};
13221304
letresponse:QueryTranslationUnitSourceResult=awaitthis.languageClient.sendRequest(QueryTranslationUnitSourceRequest,params);
1323-
if(response.configDisposition===QueryTranslationUnitSourceConfigDisposition.ConfigNotNeeded){
1305+
if(!response.candidates||response.candidates.length===0){
1306+
// If we didn't receive any candidates, no configuration is needed.
13241307
onFinished();
13251308
returnPromise.resolve();
13261309
}
13271310

1328-
lettuUri:vscode.Uri=vscode.Uri.parse(response.uri);
1329-
letconfigName:string=this.configuration.CurrentConfiguration.name;
13301311
constnotReadyMessage:string=`${providerName} is not ready`;
1331-
letprovideConfigurationAsync:()=>Thenable<SourceFileConfigurationItem[]>=async()=>{
1332-
// The config requests that we use a provider, try to get IntelliSense configuration info from that provider.
1333-
try{
1334-
letprovider:CustomConfigurationProvider1|null=providers.get(providerId);
1335-
if(provider){
1336-
if(!provider.isReady){
1337-
returnPromise.reject(notReadyMessage);
1338-
}
1312+
letprovider:CustomConfigurationProvider1|null=providers.get(providerId);
1313+
if(provider){
1314+
if(!provider.isReady){
1315+
returnPromise.reject(notReadyMessage);
1316+
}
1317+
providerName=provider.name;
1318+
}
13391319

1340-
providerName=provider.name;
1341-
if(awaitprovider.canProvideConfiguration(tuUri,tokenSource.token)){
1342-
returnprovider.provideConfigurations([tuUri],tokenSource.token);
1320+
// Need to loop through candidates, to see if we can get a custom configuration from any of them.
1321+
// Wrap all lookups in a single task, so we can apply a timeout to the entire duration.
1322+
letprovideConfigurationAsync:()=>Thenable<SourceFileConfigurationItem[]>=async()=>{
1323+
if(provider){
1324+
for(leti:number=0;i<response.candidates.length;++i){
1325+
try{
1326+
letcandidate:string=response.candidates[i];
1327+
lettuUri:vscode.Uri=vscode.Uri.parse(candidate);
1328+
if(awaitprovider.canProvideConfiguration(tuUri,tokenSource.token)){
1329+
letconfigs:SourceFileConfigurationItem[]=awaitprovider.provideConfigurations([tuUri],tokenSource.token);
1330+
if(configs&&configs.length>0&&configs[0]){
1331+
returnconfigs;
1332+
}
1333+
}
1334+
if(tokenSource.token.isCancellationRequested){
1335+
returnnull;
1336+
}
1337+
}catch(err){
1338+
console.warn("Caught exception request configuration");
13431339
}
13441340
}
1345-
}catch(err){
13461341
}
1347-
console.warn("failed to provide configuration");
1348-
returnPromise.reject("");
13491342
};
1350-
13511343
returnthis.callTaskWithTimeout(provideConfigurationAsync,configProviderTimeout,tokenSource).then(
13521344
(configs:SourceFileConfigurationItem[])=>{
13531345
if(configs&&configs.length>0){
13541346
this.sendCustomConfigurations(configs,false);
1355-
if(response.configDisposition===QueryTranslationUnitSourceConfigDisposition.AncestorConfigNeeded){
1356-
// replacing uri with original uri
1357-
letnewConfig:SourceFileConfigurationItem={uri:docUri,configuration:configs[0].configuration};
1358-
this.sendCustomConfigurations([newConfig],false);
1359-
}
13601347
}
13611348
onFinished();
13621349
},
@@ -1372,6 +1359,7 @@ export class DefaultClient implements Client {
13721359
if(settings.configurationWarnings==="Enabled"&&!this.isExternalHeader(docUri)&&!vscode.debug.activeDebugSession){
13731360
constdismiss:string=localize("dismiss.button","Dismiss");
13741361
constdisable:string=localize("diable.warnings.button","Disable Warnings");
1362+
letconfigName:string=this.configuration.CurrentConfiguration.name;
13751363
letmessage:string=localize("unable.to.provide.configuraiton",
13761364
"{0} is unable to provide IntelliSense configuration information for '{1}'. Settings from the '{2}' configuration will be used instead.",
13771365
providerName,docUri.fsPath,configName);
@@ -1981,9 +1969,6 @@ export class DefaultClient implements Client {
19811969
}).then(()=>{
19821970
letnewProvider:string=this.configuration.CurrentConfigurationProvider;
19831971
if(this.configurationProvider!==newProvider){
1984-
if(this.configurationProvider){
1985-
this.clearCustomConfigurations();
1986-
}
19871972
this.configurationProvider=newProvider;
19881973
this.updateCustomConfigurations();
19891974
this.updateCustomBrowseConfiguration();

‎Extension/src/LanguageServer/configurations.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ export class CppProperties {
157157
publicgetCurrentConfiguration():Configuration{returnthis.Configurations ?this.Configurations[this.CurrentConfigurationIndex] :null;}
158158
publicgetKnownCompiler():KnownCompiler[]{returnthis.knownCompilers;}
159159

160-
publicgetCurrentConfigurationProvider():string|null{
160+
publicgetCurrentConfigurationProvider():string|null{
161161
if(this.CurrentConfiguration.configurationProvider){
162162
returnthis.CurrentConfiguration.configurationProvider;
163163
}
@@ -1022,7 +1022,7 @@ export class CppProperties {
10221022
returnerrors;
10231023
}
10241024

1025-
privatevalidatePath(input:string|string[],isDirectory:boolean=true):string{
1025+
privatevalidatePath(input:string|string[],isDirectory:boolean=true):string{
10261026
if(!input){
10271027
returnundefined;
10281028
}

‎Extension/src/LanguageServer/customProviders.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export class CustomConfigurationProviderCollection {
136136
console.error(`CustomConfigurationProvider was not registered. The following properties are missing from the implementation:${missing.join(", ")}.`);
137137
}
138138

139-
privategetId(provider:string|CustomConfigurationProvider):string{
139+
privategetId(provider:string|CustomConfigurationProvider):string{
140140
if(typeofprovider==="string"){
141141
returnprovider;
142142
}elseif(provider.extensionId){
@@ -179,7 +179,7 @@ export class CustomConfigurationProviderCollection {
179179
return!exists;
180180
}
181181

182-
publicget(provider:string|CustomConfigurationProvider):CustomConfigurationProvider1|null{
182+
publicget(provider:string|CustomConfigurationProvider):CustomConfigurationProvider1|null{
183183
letid:string=this.getId(provider);
184184

185185
if(this.providers.has(id)){

‎Extension/src/LanguageServer/settingsPanel.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export class SettingsPanel {
153153
returnthis.configValues;
154154
}
155155

156-
publicupdateConfigUI(configSelection:string[],configuration:config.Configuration,errors:config.ConfigurationErrors|null):void{
156+
publicupdateConfigUI(configSelection:string[],configuration:config.Configuration,errors:config.ConfigurationErrors|null):void{
157157
if(this.panel){
158158
this.updateWebview(configSelection,configuration,errors);
159159
}
@@ -208,7 +208,7 @@ export class SettingsPanel {
208208
}
209209
}
210210

211-
privateupdateWebview(configSelection:string[],configuration:config.Configuration,errors:config.ConfigurationErrors|null):void{
211+
privateupdateWebview(configSelection:string[],configuration:config.Configuration,errors:config.ConfigurationErrors|null):void{
212212
this.configValues={...configuration};// Copy configuration values
213213
this.isIntelliSenseModeDefined=(this.configValues.intelliSenseMode!==undefined);
214214
if(this.panel){

‎Extension/src/LanguageServer/ui.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export class UI {
187187
.then(selection=>(selection) ?selection.index :-1);
188188
}
189189

190-
publicshowConfigurationProviders(currentProvider:string|null):Thenable<string|undefined>{
190+
publicshowConfigurationProviders(currentProvider:string|null):Thenable<string|undefined>{
191191
letoptions:vscode.QuickPickOptions={};
192192
options.placeHolder=localize("select.configuration.provider","Select a Configuration Provider...");
193193
letproviders:CustomConfigurationProviderCollection=getCustomConfigProviders();

‎Extension/src/common.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,15 +277,15 @@ export function isArray(input: any): input is any[] {
277277
returninputinstanceofArray;
278278
}
279279

280-
exportfunctionisOptionalString(input:any):input isstring|undefined{
280+
exportfunctionisOptionalString(input:any):input isstring|undefined{
281281
returninput===undefined||isString(input);
282282
}
283283

284284
exportfunctionisArrayOfString(input:any):input isstring[]{
285285
returnisArray(input)&&input.every(isString);
286286
}
287287

288-
exportfunctionisOptionalArrayOfString(input:any):input isstring[]|undefined{
288+
exportfunctionisOptionalArrayOfString(input:any):input isstring[]|undefined{
289289
returninput===undefined||isArrayOfString(input);
290290
}
291291

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp