Skip to content

Commit a1434c7

Browse files
committed
optimize calculating severity
1 parent e4ebaba commit a1434c7

3 files changed

Lines changed: 19 additions & 19 deletions

File tree

src/solutions/solution-converter.test.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { expect, it, describe } from '@jest/globals';
1818
import * as path from 'path';
1919
import * as manifest from '../manifest';
2020
import { ExtensionContext } from 'vscode';
21-
import * as vscode from 'vscode';
2221
import { SolutionConverterImpl } from './solution-converter';
2322
import { MockOutputChannelProvider, outputChannelProviderFactory } from '../vscode-api/output-channel-provider.factories';
2423
import { MockConfigurationProvider, configurationProviderFactory } from '../vscode-api/configuration-provider.factories';
@@ -339,6 +338,7 @@ describe('SolutionConverter', () => {
339338
expect(completedListener).toHaveBeenCalledTimes(1);
340339
expect(completedListener).toHaveBeenLastCalledWith(
341340
expect.objectContaining({
341+
severity: 'error',
342342
toolsOutputMessages: expect.arrayContaining([
343343
'warning cbuild: missing ZEPHYR_BASE environment variable',
344344
'error cbuild: exec: "west": executable file not found in $PATH',
@@ -429,11 +429,7 @@ describe('SolutionConverter', () => {
429429
});
430430
});
431431

432-
it('creates diagnostic when cpackget fails to download a pack', async () => {
433-
const diagnosticCollection = vscode.languages.createDiagnosticCollection();
434-
const mockDiagnosticsCollectionSet = jest.spyOn(diagnosticCollection, 'set') as unknown as jest.MockedFunction<
435-
(uri: vscode.Uri, diagnostics: readonly vscode.Diagnostic[] | undefined) => void
436-
>;
432+
it('reports error severity when cpackget fails to download a pack', async () => {
437433
jest.spyOn(cmsisToolboxManager, 'runCmsisTool').mockImplementation(async (_t, _a, onOutput) => {
438434
onOutput('W: retry failed');
439435
onOutput('E: network timeout');
@@ -444,10 +440,16 @@ describe('SolutionConverter', () => {
444440

445441
await fireAndWaitForConversion();
446442

447-
expect(mockDiagnosticsCollectionSet).toHaveBeenCalledTimes(1);
448-
const [[, diagnostics]] = mockDiagnosticsCollectionSet.mock.calls;
449-
expect(diagnostics?.[0]?.message).toContain('network timeout');
450-
expect(diagnostics?.[0]?.message).toContain('retry failed');
443+
expect(completedListener).toHaveBeenCalledWith(
444+
expect.objectContaining({
445+
severity: 'error',
446+
toolsOutputMessages: expect.arrayContaining([
447+
expect.stringContaining("error cpackget: downloading pack 'VendorA::PackA@1.0.0' failed"),
448+
expect.stringContaining('network timeout'),
449+
expect.stringContaining('retry failed'),
450+
]),
451+
})
452+
);
451453
});
452454

453455
});

src/solutions/solution-converter.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { Mutex } from 'async-mutex';
2525
import * as rpc from '../json-rpc/csolution-rpc-client';
2626
import { ConvertRequestData, SolutionEventHub } from './solution-event-hub';
2727
import { Severity } from './constants';
28-
import { enrichLogMessagesFromToolOutput } from './solution-problems';
28+
import { toolsPrefixPatterns } from './solution-problems';
2929

3030

3131
export interface SolutionConverter {
@@ -188,8 +188,7 @@ export class SolutionConverterImpl implements SolutionConverter {
188188
return;
189189
}
190190
logResult = { errors: [], warnings: [], info: [], ...logResult, success: convertResult.success };
191-
await enrichLogMessagesFromToolOutput(logResult, toolsOutputMessages);
192-
const severity = this.getSeverity(logResult);
191+
const severity = this.getSeverity(logResult, toolsOutputMessages);
193192

194193
// print result to output channel
195194
outputChannel.append('\n' + (
@@ -261,15 +260,14 @@ export class SolutionConverterImpl implements SolutionConverter {
261260
return result.success;
262261
}
263262

264-
private getSeverity(messages: rpc.LogMessages): Severity {
265-
if (!messages.success || (messages.errors && messages.errors.length > 0)) {
263+
private getSeverity(messages: rpc.LogMessages, lines?: string[]): Severity {
264+
if (!messages.success || (messages.errors && messages.errors.length > 0) || lines?.find(line => toolsPrefixPatterns.error.test(line))) {
266265
return 'error';
267-
} else if (messages.warnings && messages.warnings.length > 0) {
266+
} else if ((messages.warnings && messages.warnings.length > 0) || lines?.find(line => toolsPrefixPatterns.warning.test(line))) {
268267
return 'warning';
269268
} else if (messages.info && messages.info.length > 0) {
270269
return 'info';
271270
}
272271
return 'success';
273272
}
274-
275273
}

src/solutions/solution-problems.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ import { getWorkspaceFolder } from '../utils/vscode-utils';
2525
import { SolutionManager } from './solution-manager';
2626
import { ConvertResultData, SolutionEventHub } from './solution-event-hub';
2727

28-
const toolsPrefixPatterns = {
28+
export const toolsPrefixPatterns = {
2929
error: /^.*error (?:cbuild|cbuild2cmake|csolution|cpackget):\s*/,
3030
warning: /^.*warning (?:cbuild|cbuild2cmake|csolution|cpackget):\s*/,
3131
};
3232

33-
const envVarWestPatterns = [
33+
export const envVarWestPatterns = [
3434
/^missing ([A-Za-z_][A-Za-z0-9_]*) environment variable$/,
3535
/^([A-Za-z_][A-Za-z0-9_]*) environment variable specifies non-existent directory: .+$/,
3636
/^exec: "west": executable file not found in .+$/,

0 commit comments

Comments
 (0)