Skip to content

Commit 3245049

Browse files
committed
check if snippet already exists
1 parent ed72f8e commit 3245049

File tree

1 file changed

+68
-53
lines changed

1 file changed

+68
-53
lines changed

src/extension.ts

Lines changed: 68 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -49,66 +49,81 @@ function createSnippet(
4949
};
5050
}
5151

52-
export function activate(context: vscode.ExtensionContext) {
53-
const disposable = vscode.commands.registerCommand(
54-
"extension.createWorkspaceCodeSnippet",
55-
async () => {
56-
const editor = vscode.window.activeTextEditor;
57-
if (!editor) {
58-
vscode.window.showErrorMessage("No active text editor found.");
59-
return;
60-
}
52+
async function createWorkspaceCodeSnippet() {
53+
const editor = vscode.window.activeTextEditor;
54+
if (!editor) {
55+
vscode.window.showErrorMessage("No active text editor found.");
56+
return;
57+
}
6158

62-
const selection = editor.document.getText(editor.selection);
63-
const name = await vscode.window.showInputBox({
64-
prompt: "Enter the name of the snippet",
65-
});
66-
if (!name) {
67-
return;
68-
}
59+
const selection = editor.document.getText(editor.selection);
60+
const name = await vscode.window.showInputBox({
61+
prompt: "Enter the name of the snippet",
62+
});
63+
if (!name) {
64+
return;
65+
}
6966

70-
const prefixName = sanitizeName(name);
71-
const snippet = createSnippet(
72-
name,
73-
prefixName,
74-
editor.document.languageId,
75-
selection
76-
);
77-
78-
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
79-
if (!workspaceFolder) {
80-
vscode.window.showErrorMessage("No workspace folder found.");
81-
return;
82-
}
67+
const prefixName = sanitizeName(name);
68+
const snippet = createSnippet(
69+
name,
70+
prefixName,
71+
editor.document.languageId,
72+
selection
73+
);
8374

84-
const snippetFilePath = path.join(
85-
workspaceFolder.uri.fsPath,
86-
".vscode",
87-
"workspace.code-snippets"
88-
);
89-
90-
let snippetFileContent: Snippet = {};
91-
try {
92-
snippetFileContent = await readSnippetFile(snippetFilePath);
93-
} catch (error) {
94-
vscode.window.showErrorMessage(
95-
`Error reading snippet file: ${(error as Error).message}`
96-
);
97-
return;
98-
}
75+
const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
76+
if (!workspaceFolder) {
77+
vscode.window.showErrorMessage("No workspace folder found.");
78+
return;
79+
}
9980

100-
Object.assign(snippetFileContent, snippet);
81+
const snippetFilePath = path.join(
82+
workspaceFolder.uri.fsPath,
83+
".vscode",
84+
"workspace.code-snippets"
85+
);
10186

102-
try {
103-
await writeSnippetFile(snippetFilePath, snippetFileContent);
104-
const successMessage = `Snippet "${name}" created successfully. You can now use it by typing "/${prefixName}" in a ${editor.document.languageId} file.`;
105-
vscode.window.setStatusBarMessage(successMessage, 30000);
106-
} catch (error) {
107-
vscode.window.showErrorMessage(
108-
`Error creating snippet "${name}": ${(error as Error).message}`
109-
);
87+
let snippetFileContent: Snippet = {};
88+
try {
89+
snippetFileContent = await readSnippetFile(snippetFilePath);
90+
} catch (error) {
91+
vscode.window.showErrorMessage(
92+
`Error reading snippet file: ${(error as Error).message}`
93+
);
94+
return;
95+
}
96+
97+
if (snippetFileContent[name]) {
98+
const update = await vscode.window.showQuickPick(
99+
["Change name", "Update snippet"],
100+
{
101+
placeHolder: `Snippet "${name}" already exists.`,
110102
}
103+
);
104+
if (update === "Change name") {
105+
createWorkspaceCodeSnippet();
106+
return;
111107
}
108+
}
109+
110+
Object.assign(snippetFileContent, snippet);
111+
112+
try {
113+
await writeSnippetFile(snippetFilePath, snippetFileContent);
114+
const successMessage = `Snippet "${name}" created successfully. You can now use it by typing "/${prefixName}" in a ${editor.document.languageId} file.`;
115+
vscode.window.setStatusBarMessage(successMessage, 30000);
116+
} catch (error) {
117+
vscode.window.showErrorMessage(
118+
`Error creating snippet "${name}": ${(error as Error).message}`
119+
);
120+
}
121+
}
122+
123+
export function activate(context: vscode.ExtensionContext) {
124+
const disposable = vscode.commands.registerCommand(
125+
"extension.createWorkspaceCodeSnippet",
126+
createWorkspaceCodeSnippet
112127
);
113128

114129
context.subscriptions.push(disposable);

0 commit comments

Comments
 (0)