Skip to content

Commit 09423d7

Browse files
committed
Add link to open CubeMX generator
1 parent 9f97549 commit 09423d7

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/solutions/problem-diagnostic-action-resolver.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@ describe('ProblemDiagnosticActionResolver', () => {
176176

177177
expect((result?.code as { value: string } | undefined)?.value).toBe('Run Generator');
178178
});
179+
180+
it('matches generator messages with irregular whitespace', () => {
181+
const { command, args } = decodeCodeTarget(resolver, makeContext({
182+
message: "cgen file was not found,\n run generator 'CubeMX'\nfor context 'App.Debug+STM32'",
183+
}));
184+
185+
expect(command).toBe(`command:${RUN_GENERATOR_COMMAND_ID}`);
186+
expect(args).toEqual([{ generator: 'CubeMX', context: 'App.Debug+STM32' }]);
187+
});
179188
});
180189

181190
describe('manage-components action', () => {

src/solutions/problem-diagnostic-action-resolver.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const mergeMessagePatterns = [
5959

6060
const mergeComponentRegex = /(?:for|from)\s+component\s+'([^']+)'/i;
6161
const generatorMissingPatterns: readonly RegExp[] = [
62+
/run\s+generator\s+'([^']+)'\s+for\s+context\s+'([^']+)'/i,
6263
/cgen file was not found,\s*run generator '([^']+)' for context '([^']+)'/i,
6364
/(?:cgen\s+file\s+.*\s+)?run generator '([^']+)' for context '([^']+)'/i,
6465
];
@@ -192,8 +193,10 @@ export class ProblemDiagnosticActionResolver {
192193
}
193194

194195
private parseGeneratorRequest(message: string): { generator: string; context: string } | undefined {
196+
const normalizedMessage = this.normalizeMessageForPatternMatching(message);
197+
195198
for (const pattern of generatorMissingPatterns) {
196-
const match = message.match(pattern);
199+
const match = normalizedMessage.match(pattern);
197200
if (!match) {
198201
continue;
199202
}
@@ -205,6 +208,10 @@ export class ProblemDiagnosticActionResolver {
205208
return undefined;
206209
}
207210

211+
private normalizeMessageForPatternMatching(message: string): string {
212+
return message.replace(/\s+/g, ' ').trim();
213+
}
214+
208215
private parseMergeMessage(message: string): MergeMessageMatch | undefined {
209216
for (const item of mergeMessagePatterns) {
210217
const match = item.pattern.exec(message);

src/vscode-api/runner/process-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export class ProcessManagerImpl implements ProcessManager {
107107
reject({ code: childProcess.exitCode, error: error });
108108
});
109109

110-
childProcess.on('exit', code => {
110+
childProcess.on('close', code => {
111111
if (code === 0) {
112112
resolve({ code: 0 });
113113
} else {

0 commit comments

Comments
 (0)