Skip to content

Commit 8ffdc5a

Browse files
authored
Add build flags into extension settings (#156)
* Add build flags into extension settings * Small fix by Lint Check * Small fix by Lint Check2 * Small fix by Copilot * Refine description and variables * Refine description and change flag order * Change flag order2
1 parent ee4b43e commit 8ffdc5a

7 files changed

Lines changed: 89 additions & 11 deletions

package.json

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,11 @@
374374
"default": true,
375375
"description": "Validate project input file(s) against schema"
376376
},
377-
"debug": {
378-
"type": "boolean",
379-
"default": false,
380-
"description": "Enable debug messages"
377+
"buildOutputVerbosity": {
378+
"type": "string",
379+
"default": "normal",
380+
"enum": [ "quiet", "normal", "verbose", "debug" ],
381+
"description": "Controls the verbosity of the output generated by cbuild."
381382
},
382383
"intermediateDirectory": {
383384
"type": "string",
@@ -1366,6 +1367,18 @@
13661367
},
13671368
"default": {},
13681369
"markdownDescription": "Specify additional environment variables to be set for build, run, and terminals."
1370+
},
1371+
"cmsis-csolution.buildOutputVerbosity": {
1372+
"type": "string",
1373+
"default": "normal",
1374+
"enum": [ "quiet", "normal", "verbose", "debug"],
1375+
"enumDescriptions": [
1376+
"Only errors",
1377+
"Standard output",
1378+
"Detailed steps",
1379+
"Internal/debug info"
1380+
],
1381+
"markdownDescription": "Controls the verbosity of output generated by the `cbuild` and `cbuild setup` processes."
13691382
}
13701383
}
13711384
},

src/manifest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export const UV2CSOLUTION_PATH_ENV_VAR = 'UV2CSOLUTION_PATH';
4242
export const CONFIG_DOWNLOAD_MISSING_PACKS = 'downloadPacks';
4343
export const OUTPUT_DIRECTORY = 'outputDirectory';
4444
export const CONFIG_AUTO_DEBUG_LAUNCH = 'autoDebugLaunch';
45+
export const CONFIG_BUILD_OUTPUT_VERBOSITY = 'buildOutputVerbosity';
4546

4647
export const MIN_TOOLBOX_VERSION = '2.12.0';
4748

src/tasks/build/build-runner.test.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import 'jest';
1818
import { cancellationTokenFactory } from '../../vscode-api/with-progress-provider.factories';
1919
import { MockProcessManager, processManagerFactory } from '../../vscode-api/runner/process-manager.factories';
20-
import { BuildTaskDefinition } from './build-task-definition';
20+
import { BuildTaskDefinition, BuildOutputVerbosity } from './build-task-definition';
2121
import { BuildRunner, cbuildArgsFromTaskDefinition } from './build-runner';
2222
import { HandleBuildEnoent } from './handle-enoent';
2323
import { CmsisToolboxManager, CmsisToolboxManagerImpl } from '../../solutions/cmsis-toolbox';
@@ -65,7 +65,7 @@ describe('BuildRunner', () => {
6565
type: 'some-task',
6666
solution: 'some-solution',
6767
clean: true,
68-
debug: true,
68+
buildOutputVerbosity: 'debug',
6969
intermediateDirectory: 'some-int-dir',
7070
outputDirectory: 'some-output-dir',
7171
cmakeTarget: 'cmake-target',
@@ -148,6 +148,30 @@ describe('BuildRunner', () => {
148148
});
149149
});
150150

151+
describe('log level flags', () => {
152+
it.each([
153+
['quiet', '--quiet'],
154+
['normal', undefined],
155+
['verbose', '--verbose'],
156+
['debug', '--debug'],
157+
])('maps build output verbosity %s to flag %s', (outputVerbosity, expectedFlag) => {
158+
const buildTaskDefinition: BuildTaskDefinition = {
159+
type: 'some-task',
160+
solution: 'some-solution',
161+
buildOutputVerbosity: outputVerbosity as BuildOutputVerbosity,
162+
};
163+
164+
const args = cbuildArgsFromTaskDefinition(buildTaskDefinition);
165+
if (expectedFlag) {
166+
expect(args).toContain(expectedFlag);
167+
} else {
168+
expect(args).not.toContain('--quiet');
169+
expect(args).not.toContain('--verbose');
170+
expect(args).not.toContain('--debug');
171+
}
172+
});
173+
});
174+
151175
describe('run', () => {
152176
it('spawns a process with the params from the given build task definition', async () => {
153177
const buildTaskDefinition: BuildTaskDefinition = {

src/tasks/build/build-runner.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import { CmsisToolboxManager } from '../../solutions/cmsis-toolbox';
1818
import { getOutputDirectory } from '../../util';
1919
import { CancellationToken, Runner } from '../../vscode-api/runner/runner';
20-
import { BuildTaskDefinition } from './build-task-definition';
20+
import { BuildTaskDefinition, BuildOutputVerbosity } from './build-task-definition';
2121
import type { TerminalDimensions } from 'vscode';
2222

2323
export const cbuildArgsFromTaskDefinition = (definition: BuildTaskDefinition): string[] => {
@@ -35,8 +35,9 @@ export const cbuildArgsFromTaskDefinition = (definition: BuildTaskDefinition): s
3535
executionArgs.push('--clean');
3636
}
3737

38-
if (definition.debug) {
39-
executionArgs.push('--debug');
38+
const buildOutputFlag = VERBOSITY_TO_FLAG[definition.buildOutputVerbosity ?? 'normal'];
39+
if (buildOutputFlag) {
40+
executionArgs.push(buildOutputFlag);
4041
}
4142

4243
if (definition.generator) {
@@ -95,6 +96,13 @@ export const cbuildArgsFromTaskDefinition = (definition: BuildTaskDefinition): s
9596
return executionArgs;
9697
};
9798

99+
const VERBOSITY_TO_FLAG: Record<BuildOutputVerbosity, string | undefined> = {
100+
quiet: '--quiet',
101+
normal: undefined,
102+
verbose: '--verbose',
103+
debug: '--debug',
104+
};
105+
98106
export class BuildRunner implements Runner {
99107
public constructor(
100108
private readonly cmsisToolboxManager: CmsisToolboxManager,

src/tasks/build/build-task-definition-builder.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
3838
setup: false,
3939
clean: false,
4040
rebuild: false,
41+
buildOutputVerbosity: 'normal',
4142
downloadPacks: true,
4243
active: undefined,
4344
cmakeTarget: 'all',
@@ -64,6 +65,7 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
6465
setup: false,
6566
clean: false,
6667
rebuild: false,
68+
buildOutputVerbosity: 'normal',
6769
downloadPacks: false,
6870
active: undefined,
6971
cmakeTarget: 'all',
@@ -89,6 +91,7 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
8991
setup: false,
9092
clean: false,
9193
rebuild: true,
94+
buildOutputVerbosity: 'normal',
9295
downloadPacks: true,
9396
active: undefined,
9497
cmakeTarget: 'all',
@@ -113,6 +116,7 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
113116
setup: false,
114117
clean: true,
115118
rebuild: false,
119+
buildOutputVerbosity: 'normal',
116120
downloadPacks: true,
117121
active: undefined,
118122
cmakeTarget: 'all',
@@ -137,6 +141,7 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
137141
setup: true,
138142
clean: false,
139143
rebuild: false,
144+
buildOutputVerbosity: 'normal',
140145
downloadPacks: true,
141146
active: undefined,
142147
cmakeTarget: 'database',
@@ -157,5 +162,21 @@ describe('BuildTaskDefinitionBuilderImpl', () => {
157162

158163
expect(createDefinition).rejects.toThrow('No active solution set');
159164
});
165+
166+
it('reads buildOutputVerbosity from configuration if non-default value is set', async () => {
167+
const solutionManager = solutionManagerFactory();
168+
const configProvider = configurationProviderFactory();
169+
configProvider.getConfigVariable.mockImplementation((name: string) => {
170+
return (name === manifest.CONFIG_BUILD_OUTPUT_VERBOSITY) ? 'verbose' : undefined;
171+
});
172+
const buildTaskDefinitionBuilder = new BuildTaskDefinitionBuilderImpl(
173+
solutionManager,
174+
configProvider,
175+
);
176+
177+
const taskDefinition = await buildTaskDefinitionBuilder.createDefinitionFromUriOrSolutionNode('build');
178+
179+
expect(taskDefinition.buildOutputVerbosity).toBe('verbose');
180+
});
160181
});
161182
});

src/tasks/build/build-task-definition-builder.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import * as vscode from 'vscode';
1818
import { SolutionManager } from '../../solutions/solution-manager';
19-
import { BuildTaskDefinition, createLocalDefinitionFromUriOrSolutionNode } from './build-task-definition';
19+
import { BuildTaskDefinition, createLocalDefinitionFromUriOrSolutionNode, BuildOutputVerbosity } from './build-task-definition';
2020
import * as manifest from '../../manifest';
2121
import { ConfigurationProvider } from '../../vscode-api/configuration-provider';
2222
import { COutlineItem } from '../../views/solution-outline/tree-structure/solution-outline-item';
@@ -44,6 +44,14 @@ export class BuildTaskDefinitionBuilderImpl implements BuildTaskDefinitionBuilde
4444
return solutionPath;
4545
}
4646

47+
private getBuildOutputVerbosity(): BuildOutputVerbosity {
48+
const verbosity = this.configProvider.getConfigVariable<BuildOutputVerbosity>(manifest.CONFIG_BUILD_OUTPUT_VERBOSITY);
49+
if (typeof verbosity !== 'string') {
50+
return 'normal';
51+
}
52+
return verbosity;
53+
}
54+
4755
private isDownloadPacksEnabled(): boolean {
4856
return this.configProvider.getConfigVariable<boolean>(manifest.CONFIG_DOWNLOAD_MISSING_PACKS) ?? true;
4957
}
@@ -55,6 +63,7 @@ export class BuildTaskDefinitionBuilderImpl implements BuildTaskDefinitionBuilde
5563
clean: action === 'clean',
5664
rebuild: action === 'rebuild',
5765
setup: action === 'setup',
66+
buildOutputVerbosity: this.getBuildOutputVerbosity(),
5867
downloadPacks: this.isDownloadPacksEnabled(),
5968
cmakeTarget: action === 'setup' ? 'database' : 'all',
6069
west: this.solutionManager.getCsolution()?.getCproject()?.projectType === 'West'

src/tasks/build/build-task-definition.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export type BuildTaskDefinition = {
2323
readonly type: string;
2424
solution?: string;
2525
clean?: boolean;
26-
debug?: boolean;
26+
buildOutputVerbosity?: BuildOutputVerbosity;
2727
intermediateDirectory?: string;
2828
outputDirectory?: string;
2929
cmakeTarget?: string;
@@ -39,6 +39,8 @@ export type BuildTaskDefinition = {
3939
west?: boolean;
4040
};
4141

42+
export type BuildOutputVerbosity = 'quiet' | 'normal' | 'verbose' | 'debug';
43+
4244
type UriOrSolutionNode = vscode.Uri | COutlineItem;
4345

4446
const LOCAL_BUILD_TASK_TYPE = `${PACKAGE_NAME}.build`;

0 commit comments

Comments
 (0)