Skip to content

Commit

Permalink
add combine snippets by language feature (#33)
Browse files Browse the repository at this point in the history
  • Loading branch information
RandomFractals committed Mar 29, 2021
1 parent 3e24552 commit e36062d
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
13 changes: 11 additions & 2 deletions src/snippets/snippetLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,22 @@ export class SnippetLoader {
);
snippetFiles.push(snippetFile);
});
await Promise.all(snippetFiles.map((file: SnippetFile) => this.getSnippets(file, extensionId)));
await Promise.all(snippetFiles.map((file: SnippetFile) => this.getFileSnippets(file)));
}
}
return Promise.resolve(snippetFiles);
}

async getSnippets(snippetFile: SnippetFile, extensionId?: string): Promise<Snippet[]> {
async getSnippets(snippetLanguage: SnippetLanguage): Promise<Snippet[]> {
const fileSnippets: Snippet[][] = await Promise.all(
snippetLanguage.snippetFiles.map((file: SnippetFile) => this.getFileSnippets(file))
);
const snippets: Snippet[] = [];
fileSnippets.forEach(file => file.map(snippet => snippets.push(snippet)));
return Promise.resolve(snippets);
}

async getFileSnippets(snippetFile: SnippetFile): Promise<Snippet[]> {
return new Promise((resolve, reject) => {
fs.readFile(snippetFile.filePath, 'utf8', (error, snippetsConfig) => {
if (error) {
Expand Down
15 changes: 14 additions & 1 deletion src/snippets/snippetTreeDataProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,26 @@ export class SnippetTreeDataProvider implements TreeDataProvider<SnippetLanguage

async getChildren(element?: SnippetLanguage | SnippetFile): Promise<SnippetLanguage[] | SnippetFile[] | Snippet[]> {
if (!element) {
// get languages from built-in extensions and snippets extensions
return await this.snippetLoader.getSnippetLanguages();
}
else if (element instanceof SnippetLanguage) {
const combineLanguageSnippets: boolean =
<boolean>workspace.getConfiguration('snippets.viewer').get('combineLanguageSnippets');
if (combineLanguageSnippets) {
const sortSnippetsByName: boolean =
<boolean>workspace.getConfiguration('snippets.viewer').get('sortSnippetsByName');
let snippets = await this.snippetLoader.getSnippets(element);
if (sortSnippetsByName) {
snippets = snippets.sort((a, b) => a.name.localeCompare(b.name));
}
return snippets;
}
return element.snippetFiles.sort((a, b) => a.label.localeCompare(b.label));
}
else if (element instanceof SnippetFile) {
let snippets = await this.snippetLoader.getSnippets(element);
// get snippets for a snippet file
let snippets = await this.snippetLoader.getFileSnippets(element);
const sortSnippetsByName: boolean =
<boolean>workspace.getConfiguration('snippets.viewer').get('sortSnippetsByName');
if (sortSnippetsByName) {
Expand Down
4 changes: 3 additions & 1 deletion test/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{
"editor.tabSize": 2,
"snippets.viewer.skipLanguageSnippets": "bat, c, csharp, cpp, coffeescript, fsharp, javascriptreact, typescriptreact, swift, vb, wat"
"snippets.viewer.skipLanguageSnippets": "bat, c, csharp, cpp, coffeescript, fsharp, javascriptreact, typescriptreact, swift, vb, wat",
"snippets.viewer.sortSnippetsByName": true,
"snippets.viewer.combineLanguageSnippets": true
}

0 comments on commit e36062d

Please sign in to comment.