11import * as vscode from "vscode" ;
2- import { getUserFolderUri } from "../share" ;
2+ import {
3+ getProfilesFolderUri ,
4+ getStorageJsonUri ,
5+ getUserFolderUri ,
6+ } from "../share" ;
7+ import logger from "../utils/logger" ;
38
4- export default async ( ) => {
9+ interface IUserDataProfile {
10+ location : string ;
11+ name : string ;
12+ }
13+
14+ interface IsnippetsFileInfo {
15+ fileName : string ;
16+ uri : vscode . Uri ;
17+ }
18+
19+ async function getProfileUserSnippetsFilesInfo ( ) {
20+ try {
21+ const storageJsonUri = getStorageJsonUri ( ) ;
22+ const snippetsTextDoc =
23+ await vscode . workspace . openTextDocument ( storageJsonUri ) ;
24+ const storageJsonContent = snippetsTextDoc . getText ( ) ;
25+ const storageJson = JSON . parse ( storageJsonContent ) ;
26+ const userDataProfiles : IUserDataProfile [ ] =
27+ storageJson ?. userDataProfiles || [ ] ;
28+ const userSnippetsFolders = userDataProfiles
29+ . filter ( ( profile ) => profile . location )
30+ . map ( ( profile ) => {
31+ return {
32+ name : profile . name ,
33+ uri : vscode . Uri . joinPath (
34+ getProfilesFolderUri ( ) ,
35+ profile . location ,
36+ "snippets" ,
37+ ) ,
38+ } ;
39+ } ) ;
40+
41+ return userSnippetsFolders ;
42+ } catch ( error : any ) {
43+ logger . error ( error ?. message ) ;
44+ return [ ] ;
45+ }
46+ }
47+
48+ async function getUserSnippetsFilesInfoByFolderUri ( uri : vscode . Uri ) {
549 const userSnippetsFileUris = [ ] ;
650
7- const userFolderUri = getUserFolderUri ( ) ;
851 let userSnippetFiles : [ string , vscode . FileType ] [ ] = [ ] ;
952 try {
10- userSnippetFiles = await vscode . workspace . fs . readDirectory ( userFolderUri ) ;
53+ userSnippetFiles = await vscode . workspace . fs . readDirectory ( uri ) ;
1154 } catch ( error ) {
12- // havn no .vscode folder, do noting
55+ // havn no folder, do noting
1356 }
1457
1558 for ( const [ fileName , fileType ] of userSnippetFiles ) {
@@ -18,11 +61,45 @@ export default async () => {
1861 fileType & vscode . FileType . File &&
1962 ( fileName . endsWith ( ".code-snippets" ) || fileName . endsWith ( ".json" ) )
2063 ) {
21- const snippetUri = vscode . Uri . joinPath ( userFolderUri , fileName ) ;
64+ const snippetUri = vscode . Uri . joinPath ( uri , fileName ) ;
2265
2366 userSnippetsFileUris . push ( { fileName, uri : snippetUri } ) ;
2467 }
2568 }
2669
2770 return userSnippetsFileUris ;
71+ }
72+
73+ export default async ( ) => {
74+ const userFolderUri = getUserFolderUri ( ) ;
75+ const profileUserSnippetsFolders = await getProfileUserSnippetsFilesInfo ( ) ;
76+
77+ if ( ! profileUserSnippetsFolders ?. length ) {
78+ const userSnippetsFileInfos =
79+ await getUserSnippetsFilesInfoByFolderUri ( userFolderUri ) ;
80+
81+ return userSnippetsFileInfos ;
82+ }
83+
84+ const userSnippetsFolders = [
85+ {
86+ name : "default" ,
87+ uri : userFolderUri ,
88+ } ,
89+ ...profileUserSnippetsFolders ,
90+ ] ;
91+
92+ const userSnippetsFileInfos : IsnippetsFileInfo [ ] = [ ] ;
93+ for ( const { uri, name } of userSnippetsFolders ) {
94+ const rawFileInfos = await getUserSnippetsFilesInfoByFolderUri ( uri ) ;
95+
96+ const fileInfos = rawFileInfos . map ( ( { fileName, uri } ) => ( {
97+ fileName : `${ fileName } (${ name } )` ,
98+ uri,
99+ } ) ) ;
100+
101+ userSnippetsFileInfos . push ( ...fileInfos ) ;
102+ }
103+
104+ return userSnippetsFileInfos ;
28105} ;
0 commit comments