Skip to content

Commit

Permalink
add user defined snippets loading (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
RandomFractals committed Apr 2, 2021
1 parent ed8b4d9 commit b5d6053
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 8 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "snippets-viewer",
"displayName": "Snippets Viewer",
"description": "VSCode Snippets Viewer",
"version": "1.5.0",
"version": "1.6.0",
"categories": [
"Snippets"
],
Expand Down
2 changes: 1 addition & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {SnippetTreeDataProvider} from './snippets/snippetTreeDataProvider';

export function activate(context: ExtensionContext) {
// create snippets tree view
const snippetLoader: SnippetLoader = new SnippetLoader();
const snippetLoader: SnippetLoader = new SnippetLoader(context);
const snippetProvider: SnippetTreeDataProvider = new SnippetTreeDataProvider(snippetLoader);
const snippetView = window.createTreeView('snippets.view', {
treeDataProvider: snippetProvider,
Expand Down
50 changes: 45 additions & 5 deletions src/snippets/snippetLoader.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import {
ExtensionContext,
TreeItemCollapsibleState,
window,
extensions
} from 'vscode';
extensions,
window
}
from 'vscode';
import {
SnippetLanguage,
SnippetFile,
Snippet
} from './snippets'
}
from './snippets'
import * as config from '../config';
import * as jsonc from 'jsonc-parser';
import * as fs from 'fs';
Expand All @@ -17,7 +20,7 @@ export class SnippetLoader {

public snippetLanguages: Map<string, SnippetLanguage> = new Map<string, SnippetLanguage>();

constructor() {
constructor(private context: ExtensionContext) {
}

async getSnippetLanguages(): Promise<SnippetLanguage[]> {
Expand Down Expand Up @@ -56,9 +59,46 @@ export class SnippetLoader {
}
}
});

// get user defined snippet languages
const userSnippetsDirectoryPath: string = path.join(
this.context.globalStorageUri.fsPath, '..', '..', '..', 'User', 'snippets');
const userSnippetFiles: SnippetFile[] =
await this.getDirectoryFileSnippets(userSnippetsDirectoryPath, 'User Snippets');

return Promise.resolve(snippetLanguages.sort((a, b) => a.language.localeCompare(b.language)));
}

async getDirectoryFileSnippets(directoryPath: string, snippetFileLabel: string): Promise<SnippetFile[]> {
return new Promise((resolve, reject) => {
fs.readdir(directoryPath, (err, fileNames) => {
if (err) {
window.showErrorMessage(`Error reading directory ${directoryPath} \n ${err.message}`);
return reject([]);
}
const snippetFiles: SnippetFile[] = [];
const skipLanguages: string[] = config.skipLanguages();
fileNames.forEach(fileName => {
const filePath: string = path.join(directoryPath, fileName);
const language: string = path.parse(fileName).name.toLowerCase();
if (fileName.endsWith('.json') && skipLanguages.indexOf(language) < 0) {
const snippetFile: SnippetFile =
new SnippetFile(snippetFileLabel, filePath, language, this.getSnippetFileCollapsibleState());
if (!this.snippetLanguages.has(language)) {
// create snippets language
const snippetLanguage: SnippetLanguage = new SnippetLanguage(language);
this.snippetLanguages.set(language, snippetLanguage);
}
// add snippet file to language snippets
this.snippetLanguages.get(language)?.snippetFiles.push(snippetFile);
snippetFiles.push(snippetFile);
}
});
return resolve(snippetFiles);
});
});
}

getSnippetFileCollapsibleState(): TreeItemCollapsibleState {
if (config.expendSnippetFiles()) {
return TreeItemCollapsibleState.Expanded;
Expand Down
2 changes: 1 addition & 1 deletion test/.vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"editor.tabSize": 2,
"snippets.viewer.skipLanguageSnippets": "bat, c, csharp, cpp, coffeescript, fsharp, javascriptreact, swift, typescriptreact, vb, wat",
"snippets.viewer.combineLanguageSnippets": true
}
}

0 comments on commit b5d6053

Please sign in to comment.