Skip to content

Commit 4f0fe9c

Browse files
committed
Issue 14,16 Feature added v1.3.7
1 parent 17f79e8 commit 4f0fe9c

4 files changed

Lines changed: 105 additions & 26 deletions

File tree

CHANGELOG.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Change Log
22

3+
## [1.3.7] - 2025-07-26
4+
5+
### Feature Added
6+
7+
- [Issue #14](https://github.com/dltkdgns00/BOJ-extension/issues/14) - Bug Issue
8+
- 테스트 케이스 제출 후 시간초과일 경우 시간 초과 출력이 안되는 문제.
9+
→ 실제 백준 문제의 시간제한을 가져와서 시간 초과일 경우 시간 초과 출력이 되도록 수정
10+
11+
- [Issue #16](https://github.com/dltkdgns00/BOJ-extension/issues/16) - Request
12+
- 동일한 문제를 다른 언어로도 풀 수 있도록 기능 추가
13+
314
## [1.3.6] - 2025-06-04
415

516
### Bug Fixed
@@ -47,7 +58,7 @@
4758

4859
### Feature Added
4960

50-
- [Issue #9](https://github.com/dltkdgns00/BOJ-extension/issues/9) - Request: Add a feature to move to submit page on boj
61+
- [Issue #9](https://github.com/dltkdgns00/BOJ-extension/issues/9) - Request
5162
- 문제 보기 페이지에서 제출 페이지로 이동하는 버튼 추가
5263
- BOJ-EX 사이드 바 추가
5364
- 기존에 존재하던 커맨드들을 사이드 바에서 버튼을 클릭하여 실행할 수 있도록 변경

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"author": "dltkdgns00 <dltkdgns00.dev@gmail.com>",
88
"license": "MIT",
99
"publisher": "dltkdgns00",
10-
"version": "1.3.6",
10+
"version": "1.3.7",
1111
"engines": {
1212
"vscode": "^1.80.0"
1313
},

src/commands/createProblem.ts

Lines changed: 90 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,17 @@ export function createProblem(context: vscode.ExtensionContext) {
8282
vscode.workspace.workspaceFolders![0].uri.fsPath,
8383
folderName
8484
);
85-
fs.mkdirSync(folderPath);
85+
86+
// 1. 폴더 생성 (이미 존재해도 계속 진행)
87+
try {
88+
fs.mkdirSync(folderPath);
89+
} catch (error) {
90+
if (error instanceof Error && (error as any).code !== "EEXIST") {
91+
// EEXIST가 아닌 다른 에러는 처리
92+
throw error;
93+
}
94+
// 폴더가 이미 존재하는 경우는 무시하고 계속 진행
95+
}
8696

8797
// 파일명 생성
8898
let fileName = "";
@@ -106,24 +116,82 @@ export function createProblem(context: vscode.ExtensionContext) {
106116
readme
107117
);
108118

109-
// README.md 파일 내용
110-
const readmeContent = `# ${problemNumber}번: ${problemName} - <img src="${
111-
tier.svg
112-
}" style="height:20px" /> ${
113-
tier.name
114-
}\n\n<!-- performance -->\n\n<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->\n\n<!-- end -->\n\n## 문제\n\n[문제 링크](https://boj.kr/${problemNumber})\n\n${cleanHtmlContent(
115-
sp.description
116-
)}\n\n## 입력\n\n${cleanHtmlContent(
117-
sp.input
118-
)}\n\n## 출력\n\n${cleanHtmlContent(
119-
sp.output
120-
)}\n\n## 소스코드\n\n[소스코드 보기](${fileName.replace(/ /g, "%20")})`;
121-
const encoder = new TextEncoder();
122-
const readmeData = encoder.encode(readmeContent);
123-
124-
// 파일 생성
125-
await vscode.workspace.fs.writeFile(fnUri, new Uint8Array());
126-
await vscode.workspace.fs.writeFile(readmeUri, readmeData);
119+
// 2. 코드 파일 생성
120+
try {
121+
// 파일이 이미 존재하는지 확인
122+
let fileExists = false;
123+
try {
124+
await vscode.workspace.fs.stat(fnUri);
125+
fileExists = true;
126+
} catch {
127+
// 파일이 존재하지 않으면 계속 진행
128+
}
129+
130+
if (fileExists) {
131+
// 파일이 이미 존재하는 경우
132+
const action = await vscode.window.showWarningMessage(
133+
`'${fileName}' 파일이 이미 존재합니다.`,
134+
"기존 파일로 이동",
135+
"덮어쓰기",
136+
"취소"
137+
);
138+
139+
if (action === "기존 파일로 이동") {
140+
// 기존 파일을 열고 문제 보기만 실행
141+
const document = await vscode.workspace.openTextDocument(fnUri);
142+
await vscode.window.showTextDocument(document, {
143+
viewColumn: vscode.ViewColumn.One,
144+
});
145+
146+
vscode.window.showInformationMessage(
147+
`기존 '${fileName}' 파일로 이동했습니다.`
148+
);
149+
150+
showProblem(problemNumber, context);
151+
return;
152+
} else if (action === "덮어쓰기") {
153+
// 덮어쓰기 진행
154+
await vscode.workspace.fs.writeFile(fnUri, new Uint8Array());
155+
} else {
156+
// 취소
157+
return;
158+
}
159+
} else {
160+
// 새 파일 생성
161+
await vscode.workspace.fs.writeFile(fnUri, new Uint8Array());
162+
}
163+
} catch (error) {
164+
vscode.window.showErrorMessage(`'${fileName}' 파일 생성 중 오류가 발생했습니다.`);
165+
console.log(error);
166+
return;
167+
}
168+
169+
// 3. README 파일 생성 (이미 존재하면 덮어쓰지 않음)
170+
try {
171+
try {
172+
await vscode.workspace.fs.stat(readmeUri);
173+
// README 파일이 이미 존재하는 경우는 덮어쓰지 않음
174+
} catch {
175+
// README 파일이 존재하지 않으면 생성
176+
const readmeContent = `# ${problemNumber}번: ${problemName} - <img src="${
177+
tier.svg
178+
}" style="height:20px" /> ${
179+
tier.name
180+
}\n\n<!-- performance -->\n\n<!-- 문제 제출 후 깃허브에 푸시를 했을 때 제출한 코드의 성능이 입력될 공간입니다.-->\n\n<!-- end -->\n\n## 문제\n\n[문제 링크](https://boj.kr/${problemNumber})\n\n${cleanHtmlContent(
181+
sp.description
182+
)}\n\n## 입력\n\n${cleanHtmlContent(
183+
sp.input
184+
)}\n\n## 출력\n\n${cleanHtmlContent(
185+
sp.output
186+
)}\n\n## 소스코드\n\n[소스코드 보기](${fileName.replace(/ /g, "%20")})`;
187+
const encoder = new TextEncoder();
188+
const readmeData = encoder.encode(readmeContent);
189+
await vscode.workspace.fs.writeFile(readmeUri, readmeData);
190+
}
191+
} catch (error) {
192+
// README 파일 생성 실패는 경고만 표시하고 계속 진행
193+
console.log("README 파일 생성 실패:", error);
194+
}
127195

128196
// 왼쪽 분할 화면에 텍스트 에디터를 열기
129197
const document = await vscode.workspace.openTextDocument(fnUri);
@@ -139,13 +207,13 @@ export function createProblem(context: vscode.ExtensionContext) {
139207
showProblem(problemNumber, context);
140208
headerComment(problemNumber);
141209
} catch (error) {
142-
if (error instanceof Error && (error as any).code === "EEXIST") {
143-
vscode.window.showErrorMessage("이미 해당 문제의 폴더가 존재합니다.");
144-
} else if (
210+
if (
145211
error instanceof Error &&
146212
(error as any).code === "ERR_BAD_REQUEST"
147213
) {
148214
vscode.window.showErrorMessage("문제를 찾을 수 없습니다.");
215+
} else {
216+
vscode.window.showErrorMessage("파일 생성 중 오류가 발생했습니다.");
149217
}
150218
console.log(error);
151219
return;

0 commit comments

Comments
 (0)