@@ -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