Skip to content

Commit 86be874

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
ATL-66: Added compiler warnings.
Signed-off-by: Akos Kitta <[email protected]>
1 parent 057904d commit 86be874

File tree

6 files changed

+57
-25
lines changed

6 files changed

+57
-25
lines changed

Diff for: arduino-ide-extension/src/browser/arduino-preferences.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import { interfaces } from 'inversify';
2-
import {
3-
createPreferenceProxy,
4-
PreferenceProxy,
5-
PreferenceService,
6-
PreferenceContribution,
7-
PreferenceSchema
8-
} from '@theia/core/lib/browser/preferences';
2+
import { createPreferenceProxy, PreferenceProxy, PreferenceService, PreferenceContribution, PreferenceSchema } from '@theia/core/lib/browser/preferences';
3+
import { CompilerWarningLiterals, CompilerWarnings } from '../common/protocol';
94

105
export const ArduinoConfigSchema: PreferenceSchema = {
116
'type': 'object',
@@ -20,6 +15,11 @@ export const ArduinoConfigSchema: PreferenceSchema = {
2015
'description': 'True for verbose compile output. False by default',
2116
'default': false
2217
},
18+
'arduino.compile.warnings': {
19+
'enum': [...CompilerWarningLiterals],
20+
'description': "Tells gcc which warning level to use. It's 'None' by default",
21+
'default': 'None'
22+
},
2323
'arduino.upload.verbose': {
2424
'type': 'boolean',
2525
'description': 'True for verbose upload output. False by default.',
@@ -50,6 +50,7 @@ export const ArduinoConfigSchema: PreferenceSchema = {
5050
export interface ArduinoConfiguration {
5151
'arduino.language.log': boolean;
5252
'arduino.compile.verbose': boolean;
53+
'arduino.compile.warnings': CompilerWarnings;
5354
'arduino.upload.verbose': boolean;
5455
'arduino.upload.verify': boolean;
5556
'arduino.window.autoScale': boolean;

Diff for: arduino-ide-extension/src/browser/contributions/verify-sketch.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,16 @@ export class VerifySketch extends SketchContribution {
8080
this.sourceOverride()
8181
]);
8282
const verbose = this.preferences.get('arduino.compile.verbose');
83+
const compilerWarnings = this.preferences.get('arduino.compile.warnings');
8384
this.outputChannelManager.getChannel('Arduino').clear();
8485
await this.coreService.compile({
8586
sketchUri: sketch.uri,
8687
fqbn,
8788
optimizeForDebug: this.editorMode.compileForDebug,
8889
verbose,
8990
exportBinaries,
90-
sourceOverride
91+
sourceOverride,
92+
compilerWarnings
9193
});
9294
this.messageService.info('Done compiling.', { timeout: 1000 });
9395
} catch (e) {

Diff for: arduino-ide-extension/src/browser/settings.tsx

+24-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { DisposableCollection } from '@theia/core/lib/common/disposable';
1818
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
1919
import { AbstractDialog, DialogProps, PreferenceService, PreferenceScope, DialogError, ReactWidget } from '@theia/core/lib/browser';
2020
import { Index } from '../common/types';
21-
import { ConfigService, FileSystemExt, Network, ProxySettings } from '../common/protocol';
21+
import { CompilerWarnings, CompilerWarningLiterals, ConfigService, FileSystemExt, Network, ProxySettings } from '../common/protocol';
2222

2323
export interface Settings extends Index {
2424
editorFontSize: number; // `editor.fontSize`
@@ -29,6 +29,7 @@ export interface Settings extends Index {
2929
interfaceScale: number; // `arduino.window.zoomLevel` https://github.com/eclipse-theia/theia/issues/8751
3030
checkForUpdates?: boolean; // `arduino.ide.autoUpdate`
3131
verboseOnCompile: boolean; // `arduino.compile.verbose`
32+
compilerWarnings: CompilerWarnings; // `arduino.compile.warnings`
3233
verboseOnUpload: boolean; // `arduino.upload.verbose`
3334
verifyAfterUpload: boolean; // `arduino.upload.verify`
3435
enableLsLogs: boolean; // `arduino.language.log`
@@ -87,6 +88,7 @@ export class SettingsService {
8788
interfaceScale,
8889
// checkForUpdates,
8990
verboseOnCompile,
91+
compilerWarnings,
9092
verboseOnUpload,
9193
verifyAfterUpload,
9294
enableLsLogs,
@@ -99,6 +101,7 @@ export class SettingsService {
99101
this.preferenceService.get<number>('arduino.window.zoomLevel', 0),
100102
// this.preferenceService.get<string>('arduino.ide.autoUpdate', true),
101103
this.preferenceService.get<boolean>('arduino.compile.verbose', true),
104+
this.preferenceService.get<any>('arduino.compile.warnings', 'None'),
102105
this.preferenceService.get<boolean>('arduino.upload.verbose', true),
103106
this.preferenceService.get<boolean>('arduino.upload.verify', true),
104107
this.preferenceService.get<boolean>('arduino.language.log', true),
@@ -114,6 +117,7 @@ export class SettingsService {
114117
interfaceScale,
115118
// checkForUpdates,
116119
verboseOnCompile,
120+
compilerWarnings,
117121
verboseOnUpload,
118122
verifyAfterUpload,
119123
enableLsLogs,
@@ -175,6 +179,7 @@ export class SettingsService {
175179
interfaceScale,
176180
// checkForUpdates,
177181
verboseOnCompile,
182+
compilerWarnings,
178183
verboseOnUpload,
179184
verifyAfterUpload,
180185
enableLsLogs,
@@ -198,6 +203,7 @@ export class SettingsService {
198203
this.preferenceService.set('arduino.window.zoomLevel', interfaceScale, PreferenceScope.User),
199204
// this.preferenceService.set('arduino.ide.autoUpdate', checkForUpdates, PreferenceScope.User),
200205
this.preferenceService.set('arduino.compile.verbose', verboseOnCompile, PreferenceScope.User),
206+
this.preferenceService.set('arduino.compile.warnings', compilerWarnings, PreferenceScope.User),
201207
this.preferenceService.set('arduino.upload.verbose', verboseOnUpload, PreferenceScope.User),
202208
this.preferenceService.set('arduino.upload.verify', verifyAfterUpload, PreferenceScope.User),
203209
this.preferenceService.set('arduino.language.log', enableLsLogs, PreferenceScope.User),
@@ -267,6 +273,7 @@ export class SettingsComponent extends React.Component<SettingsComponent.Props,
267273
<div className='flex-line'>Interface scale:</div>
268274
<div className='flex-line'>Theme:</div>
269275
<div className='flex-line'>Show verbose output during:</div>
276+
<div className='flex-line'>Compiler warnings:</div>
270277
</div>
271278
<div className='column'>
272279
<div className='flex-line'>
@@ -321,6 +328,14 @@ export class SettingsComponent extends React.Component<SettingsComponent.Props,
321328
upload
322329
</label>
323330
</div>
331+
<div className='flex-line'>
332+
<select
333+
className='theia-select'
334+
value={this.state.compilerWarnings}
335+
onChange={this.compilerWarningsDidChange}>
336+
{CompilerWarningLiterals.map(value => <option key={value} value={value}>{value}</option>)}
337+
</select>
338+
</div>
324339
</div>
325340
</div>
326341
<label className='flex-line'>
@@ -544,6 +559,14 @@ export class SettingsComponent extends React.Component<SettingsComponent.Props,
544559
}
545560
};
546561

562+
protected compilerWarningsDidChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
563+
const { selectedIndex } = event.target.options;
564+
const compilerWarnings = CompilerWarningLiterals[selectedIndex];
565+
if (compilerWarnings) {
566+
this.setState({ compilerWarnings });
567+
}
568+
};
569+
547570
protected verboseOnCompileDidChange = (event: React.ChangeEvent<HTMLInputElement>) => {
548571
this.setState({ verboseOnCompile: event.target.checked });
549572
};

Diff for: arduino-ide-extension/src/browser/style/settings-dialog.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
.arduino-settings-dialog .content {
66
padding: 5px;
7-
height: 250px;
7+
height: 270px;
88
}
99

1010
.arduino-settings-dialog .flex-line {

Diff for: arduino-ide-extension/src/common/protocol/core-service.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import { Programmer } from './boards-service';
22

3+
export const CompilerWarningLiterals = ['None', 'Default', 'More', 'All'] as const;
4+
export type CompilerWarnings = typeof CompilerWarningLiterals[number];
5+
36
export const CoreServicePath = '/services/core-service';
47
export const CoreService = Symbol('CoreService');
58
export interface CoreService {
6-
compile(options: CoreService.Compile.Options & Readonly<{ exportBinaries?: boolean }>): Promise<void>;
9+
compile(options: CoreService.Compile.Options & Readonly<{ exportBinaries?: boolean, compilerWarnings?: CompilerWarnings }>): Promise<void>;
710
upload(options: CoreService.Upload.Options): Promise<void>;
811
uploadUsingProgrammer(options: CoreService.Upload.Options): Promise<void>;
912
burnBootloader(options: CoreService.Bootloader.Options): Promise<void>;

Diff for: arduino-ide-extension/src/node/core-service-impl.ts

+17-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { FileUri } from '@theia/core/lib/node/file-uri';
22
import { inject, injectable } from 'inversify';
33
import { relative } from 'path';
44
import * as jspb from 'google-protobuf';
5-
import { CoreService } from '../common/protocol/core-service';
5+
import { CompilerWarnings, CoreService } from '../common/protocol/core-service';
66
import { CompileReq, CompileResp } from './cli-protocol/commands/compile_pb';
77
import { CoreClientAware } from './core-client-provider';
88
import { UploadReq, UploadResp, BurnBootloaderReq, BurnBootloaderResp, UploadUsingProgrammerReq, UploadUsingProgrammerResp } from './cli-protocol/commands/upload_pb';
@@ -22,31 +22,34 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
2222
@inject(NotificationServiceServer)
2323
protected readonly notificationService: NotificationServiceServer;
2424

25-
async compile(options: CoreService.Compile.Options & { exportBinaries?: boolean }): Promise<void> {
26-
const { sketchUri, fqbn } = options;
25+
async compile(options: CoreService.Compile.Options & { exportBinaries?: boolean, compilerWarnings?: CompilerWarnings }): Promise<void> {
26+
const { sketchUri, fqbn, compilerWarnings } = options;
2727
const sketchPath = FileUri.fsPath(sketchUri);
2828

2929
const coreClient = await this.coreClient();
3030
const { client, instance } = coreClient;
3131

32-
const compilerReq = new CompileReq();
33-
compilerReq.setInstance(instance);
34-
compilerReq.setSketchpath(sketchPath);
32+
const compileReq = new CompileReq();
33+
compileReq.setInstance(instance);
34+
compileReq.setSketchpath(sketchPath);
3535
if (fqbn) {
36-
compilerReq.setFqbn(fqbn);
36+
compileReq.setFqbn(fqbn);
3737
}
38-
compilerReq.setOptimizefordebug(options.optimizeForDebug);
39-
compilerReq.setPreprocess(false);
40-
compilerReq.setVerbose(options.verbose);
41-
compilerReq.setQuiet(false);
38+
if (compilerWarnings) {
39+
compileReq.setWarnings(compilerWarnings.toLowerCase());
40+
}
41+
compileReq.setOptimizefordebug(options.optimizeForDebug);
42+
compileReq.setPreprocess(false);
43+
compileReq.setVerbose(options.verbose);
44+
compileReq.setQuiet(false);
4245
if (typeof options.exportBinaries === 'boolean') {
4346
const exportBinaries = new BoolValue();
4447
exportBinaries.setValue(options.exportBinaries);
45-
compilerReq.setExportBinaries(exportBinaries);
48+
compileReq.setExportBinaries(exportBinaries);
4649
}
47-
this.mergeSourceOverrides(compilerReq, options);
50+
this.mergeSourceOverrides(compileReq, options);
4851

49-
const result = client.compile(compilerReq);
52+
const result = client.compile(compileReq);
5053
try {
5154
await new Promise<void>((resolve, reject) => {
5255
result.on('data', (cr: CompileResp) => {

0 commit comments

Comments
 (0)