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

Commit2629397

Browse files
jaggederestclaude
andcommitted
feat: integrate Logger into extension.ts with initialization
- Add Logger initialization in extension.ts after Storage creation- Configure Logger with verbose setting from workspace configuration- Set Logger on Storage instance for structured logging- Add test verifying Logger is created and set on Storage- Increase extension.ts coverage from 38.68% to 39.71%This continues the Logger integration effort, now coveringextension.ts initialization with proper configuration support.🤖 Generated with Claude CodeCo-Authored-By: Claude <noreply@anthropic.com>
1 parentb624614 commit2629397

File tree

3 files changed

+96
-2
lines changed

3 files changed

+96
-2
lines changed

‎TODO.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121

2222
1.**Replace writeToCoderOutputChannel calls** (43 instances across 10 files)
2323
- ✅ remote.ts (18) - Completed with Logger integration test
24-
- Priority: extension.ts (8), headers.ts (4)
24+
- ✅ extension.ts (8) - Completed with Logger initialization and test
25+
- Priority: headers.ts (4)
2526
- Use TDD approach: write test → implement → verify
2627
2.**Add structured logging to high-value areas**
2728
- API calls and responses
@@ -57,7 +58,7 @@
5758
| ------------------------| ------| -------| -----------|
5859
| Unit test coverage| 80%+| 74.38%| 🔄 Progress|
5960
| Integration tests| 60+| 69| ✅ Complete|
60-
| Logger adoption| 100%|10%| 🔄 Progress|
61+
| Logger adoption| 100%|20%| 🔄 Progress|
6162
| Files with <50% coverage| 0| 3| 🔄 Progress|
6263

6364
##Immediate Next Steps

‎src/extension.test.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ vi.mock("./storage", () => ({
4646
Storage:vi.fn(),
4747
}));
4848
vi.mock("./util");
49+
vi.mock("./logger",()=>({
50+
Logger:vi.fn().mockImplementation(()=>({
51+
info:vi.fn(),
52+
error:vi.fn(),
53+
warn:vi.fn(),
54+
debug:vi.fn(),
55+
})),
56+
}));
4957
vi.mock("./workspacesProvider",()=>({
5058
WorkspaceProvider:vi.fn(()=>({
5159
setVisibility:vi.fn(),
@@ -130,6 +138,7 @@ const createMockStorage = (overrides = {}) => ({
130138
getUrl:vi.fn().mockReturnValue(""),
131139
getSessionToken:vi.fn().mockResolvedValue(""),
132140
writeToCoderOutputChannel:vi.fn(),
141+
setLogger:vi.fn(),
133142
...overrides,
134143
});
135144

@@ -428,4 +437,81 @@ describe("extension", () => {
428437
});
429438

430439
// Note: deactivate function is not exported from extension.ts
440+
441+
describe("Logger integration",()=>{
442+
it("should create Logger and set it on Storage",async()=>{
443+
constvscode=awaitimport("vscode");
444+
445+
// Track output channel creation
446+
constmockOutputChannel={
447+
appendLine:vi.fn(),
448+
};
449+
vi.mocked(vscode.window.createOutputChannel).mockReturnValue(
450+
mockOutputChannelasnever,
451+
);
452+
453+
// Mock extension context
454+
constmockContext={
455+
globalState:{
456+
get:vi.fn(),
457+
update:vi.fn(),
458+
},
459+
secrets:{
460+
get:vi.fn(),
461+
store:vi.fn(),
462+
delete:vi.fn(),
463+
},
464+
globalStorageUri:{
465+
fsPath:"/mock/global/storage",
466+
},
467+
logUri:{
468+
fsPath:"/mock/log/path",
469+
},
470+
extensionMode:1,// Normal mode
471+
};
472+
473+
// Track Storage instance and setLogger call
474+
letsetLoggerCalled=false;
475+
letstorageInstance=createMockStorage();
476+
constStorage=(awaitimport("./storage")).Storage;
477+
vi.mocked(Storage).mockImplementation(()=>{
478+
storageInstance=createMockStorage({
479+
setLogger:vi.fn(()=>{
480+
setLoggerCalled=true;
481+
}),
482+
getUrl:vi.fn().mockReturnValue(""),
483+
getSessionToken:vi.fn().mockResolvedValue(""),
484+
});
485+
returnstorageInstanceasnever;
486+
});
487+
488+
// Logger is already mocked at the top level
489+
490+
// Mock Commands
491+
constCommands=(awaitimport("./commands")).Commands;
492+
constmockCommandsInstance=createMockCommands();
493+
vi.mocked(Commands).mockImplementation(
494+
()=>mockCommandsInstanceasnever,
495+
);
496+
497+
// Mock makeCoderSdk
498+
const{ makeCoderSdk}=awaitimport("./api");
499+
vi.mocked(makeCoderSdk).mockResolvedValue({
500+
getAxiosInstance:vi.fn(()=>({
501+
defaults:{baseURL:""},
502+
})),
503+
}asnever);
504+
505+
awaitextension.activate(
506+
mockContextasunknownasvscode.ExtensionContext,
507+
);
508+
509+
// Verify Storage was created
510+
expect(Storage).toHaveBeenCalled();
511+
512+
// Verify setLogger was called on Storage
513+
expect(setLoggerCalled).toBe(true);
514+
expect(storageInstance.setLogger).toHaveBeenCalled();
515+
});
516+
});
431517
});

‎src/extension.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ export async function activate(ctx: vscode.ExtensionContext): Promise<void> {
5656
ctx.logUri,
5757
);
5858

59+
// Create and set Logger for structured logging
60+
const{ Logger}=awaitimport("./logger");
61+
constverbose=
62+
vscode.workspace.getConfiguration().get<boolean>("coder.verbose")??false;
63+
constlogger=newLogger(output,{ verbose});
64+
storage.setLogger(logger);
65+
5966
// This client tracks the current login and will be used through the life of
6067
// the plugin to poll workspaces for the current login, as well as being used
6168
// in commands that operate on the current login.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp