@@ -49,66 +49,81 @@ function createSnippet(
49
49
} ;
50
50
}
51
51
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
+ }
61
58
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
+ }
69
66
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
+ ) ;
83
74
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
+ }
99
80
100
- Object . assign ( snippetFileContent , snippet ) ;
81
+ const snippetFilePath = path . join (
82
+ workspaceFolder . uri . fsPath ,
83
+ ".vscode" ,
84
+ "workspace.code-snippets"
85
+ ) ;
101
86
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.` ,
110
102
}
103
+ ) ;
104
+ if ( update === "Change name" ) {
105
+ createWorkspaceCodeSnippet ( ) ;
106
+ return ;
111
107
}
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
112
127
) ;
113
128
114
129
context . subscriptions . push ( disposable ) ;
0 commit comments