diff --git a/.scripts/samples.js b/.scripts/samples.js new file mode 100644 index 00000000..1e5d7758 --- /dev/null +++ b/.scripts/samples.js @@ -0,0 +1,56 @@ +//@ts-check + +/** + * @typedef {Object} Sample + * @property {string} description - A readable name for the sample + * @property {string} path - Path to the sample's root + * @property {string | null} guide - Link to the guide on https://code.visualstudio.com + * @property {string[]} apis - Listing of VS Code API that is being illustrated. For example, "TextDocumentContentProvider" + * @property {string[]} contributions - Listing of Contribution Points that are being used. For example, + */ + +/** @type {Sample[]} */ +const samples = [ + { + description: 'Multi Root Sample', + path: 'basic-multi-root-sample', + guide: null, + apis: ['workspace.getWorkspaceFolder', 'workspace.onDidChangeWorkspaceFolders'], + contributions: [] + }, + { description: 'Webview Sample', path: 'webview-sample', guide: '/api/extension-guides/webview', apis: [], contributions: [] }, + { + description: 'Status Bar', + path: 'statusbar-sample', + guide: '/api/extension-guides/status-bar', + apis: ['StatusBarItem'], + contributions: [] + }, + { description: 'File System Provider', path: 'fsprovider-sample', guide: null, apis: ['workspace.registerFileSystemProvider'], contributions: [] }, + // TODO: Fix your sample and move it to above + { description: 'completions-sample', path: 'completions-sample', guide: null, apis: [], contributions: [] }, + { description: 'configuration-sample', path: 'configuration-sample', guide: null, apis: [], contributions: [] }, + { description: 'contentprovider-sample', path: 'contentprovider-sample', guide: null, apis: [], contributions: [] }, + { description: 'decorator-sample', path: 'decorator-sample', guide: null, apis: [], contributions: [] }, + { description: 'extension-deps-sample', path: 'extension-deps-sample', guide: null, apis: [], contributions: [] }, + { description: 'hellocode-minimal-sample', path: 'hellocode-minimal-sample', guide: null, apis: [], contributions: [] }, + { description: 'hellocode-sample', path: 'hellocode-sample', guide: null, apis: [], contributions: [] }, + { description: 'i18n-sample', path: 'i18n-sample', guide: null, apis: [], contributions: [] }, + { description: 'legacy-samples', path: 'legacy-samples', guide: null, apis: [], contributions: [] }, + { description: 'lsp-log-streaming-sample', path: 'lsp-log-streaming-sample', guide: null, apis: [], contributions: [] }, + { description: 'lsp-multi-server-sample', path: 'lsp-multi-server-sample', guide: null, apis: [], contributions: [] }, + { description: 'lsp-sample', path: 'lsp-sample', guide: null, apis: [], contributions: [] }, + { description: 'multi-diagnostics-sample', path: 'multi-diagnostics-sample', guide: null, apis: [], contributions: [] }, + { description: 'nodefs-provider-sample', path: 'nodefs-provider-sample', guide: null, apis: [], contributions: [] }, + { description: 'progress-sample', path: 'progress-sample', guide: null, apis: [], contributions: [] }, + { description: 'quickinput-sample', path: 'quickinput-sample', guide: null, apis: [], contributions: [] }, + { description: 'smart-template-strings-sample', path: 'smart-template-strings-sample', guide: null, apis: [], contributions: [] }, + { description: 'task-provider-sample', path: 'task-provider-sample', guide: null, apis: [], contributions: [] }, + { description: 'terminal-sample', path: 'terminal-sample', guide: null, apis: [], contributions: [] }, + { description: 'theme-sample', path: 'theme-sample', guide: null, apis: [], contributions: [] }, + { description: 'tree-view-sample', path: 'tree-view-sample', guide: null, apis: [], contributions: [] }, + { description: 'vim-sample', path: 'vim-sample', guide: null, apis: [], contributions: [] }, + { description: 'webpack-sample', path: 'webpack-sample', guide: null, apis: [], contributions: [] }, +]; + +module.exports = samples; diff --git a/.scripts/update-readme.js b/.scripts/update-readme.js new file mode 100644 index 00000000..62e3a7d6 --- /dev/null +++ b/.scripts/update-readme.js @@ -0,0 +1,46 @@ +const fs = require('fs') + +const SAMPLES = require('./samples') + +const TABLE_HEAD = ` + +| Sample | Guide on VS Code Website | API & Contribution | +| ------ | ----- | --- | +` + +const TABLE_END = ` + +` + +const getTableRow = (sample) => { + const descriptionCell = `[${sample.description}](${sample.path})` + const guideCell = sample.guide ? `[${sample.guide}](https://vscode-ext-docs.azurewebsites.net${sample.guide})` : 'N/A' + + const apis = sample.apis.map(api => { + return `[${api}](https://vscode-ext-docs.azurewebsites.net/api/references/vscode-api#${api})` + }) + const contributions = sample.contributions.map(c => { + return `[${c}](https://vscode-ext-docs.azurewebsites.net/api/references/contribution-points#${c})` + }) + const apiAndContributionCell = apis.concat(contributions).join('
') + + return `| ${descriptionCell} | ${guideCell} | ${apiAndContributionCell} |` +} + +const getSamplesTable = (samples) => { + const samplesMd = samples + .map(s => getTableRow(s)) + .join('\n') + + return ` +${TABLE_HEAD.trim()} +${samplesMd} +${TABLE_END.trim()} +` + +} + +const readme = fs.readFileSync('README.md', 'utf-8') +const newReadme = readme.replace(/(.|\n)*/gm, getSamplesTable(SAMPLES)) + +fs.writeFileSync('README.md', newReadme) \ No newline at end of file diff --git a/README.md b/README.md index 5b1f696c..1e2c0114 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,41 @@ You can expect from each sample: ## Samples + + + | Sample | Guide on VS Code Website | API & Contribution | | ------ | ----- | --- | -| [Virtual Documents](/contentprovider-sample/README.md) | [/api/extension-guides/virtual-documents](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/virtual-documents) | [`TextDocumentContentProvider`](https://code.visualstudio.com/docs/extensionAPI/vscode-api#TextDocumentContentProvider)| -| [Editor Decoration](/decorator-sample/README.md) | [/api/extension-guides/editor-decoration](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/editor-decoration) | [`window.createTextEditorDecorationType`](https://code.visualstudio.com/docs/extensionAPI/vscode-api#window.createTextEditorDecorationType) | -| [Status Bar](/statusbar-sample/README.md) | [/api/extension-guides/status-bar](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/status-bar) | [`StatusBarItem`](https://code.visualstudio.com/docs/extensionAPI/vscode-api#StatusBarItem) | -| [Color Theme](/theme-sample/README.md) | [/api/extension-guides/color-theme](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/color-theme) | [`contributes.themes`](https://code.visualstudio.com/docs/extensionAPI/extension-points#_contributesthemes) | -| [File System Provider](/fsprovider-sample/README.md) | N/A | [`vscode.workspace.registerFileSystemProvider`](https://code.visualstudio.com/docs/extensionAPI/vscode-api#workspace.registerFileSystemProvider) | -| Extension Dependencies:
- [Sample 1](/extension-deps-sample/test-extension-pack-1)
- [Sample 2](/extension-deps-sample/test-extension-pack-2)
- [Sample 3](/extension-deps-sample/test-extension-pack-3) | N/A | [extensionPack]() | +| [Multi Root Sample](basic-multi-root-sample) | N/A | [workspace.getWorkspaceFolder](https://vscode-ext-docs.azurewebsites.net/api/references/vscode-api#workspace.getWorkspaceFolder)
[workspace.onDidChangeWorkspaceFolders](https://vscode-ext-docs.azurewebsites.net/api/references/vscode-api#workspace.onDidChangeWorkspaceFolders) | +| [Webview Sample](webview-sample) | [/api/extension-guides/webview](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/webview) | | +| [Status Bar](statusbar-sample) | [/api/extension-guides/status-bar](https://vscode-ext-docs.azurewebsites.net/api/extension-guides/status-bar) | [StatusBarItem](https://vscode-ext-docs.azurewebsites.net/api/references/vscode-api#StatusBarItem) | +| [File System Provider](fsprovider-sample) | N/A | [workspace.registerFileSystemProvider](https://vscode-ext-docs.azurewebsites.net/api/references/vscode-api#workspace.registerFileSystemProvider) | +| [completions-sample](completions-sample) | N/A | | +| [configuration-sample](configuration-sample) | N/A | | +| [contentprovider-sample](contentprovider-sample) | N/A | | +| [decorator-sample](decorator-sample) | N/A | | +| [extension-deps-sample](extension-deps-sample) | N/A | | +| [hellocode-minimal-sample](hellocode-minimal-sample) | N/A | | +| [hellocode-sample](hellocode-sample) | N/A | | +| [i18n-sample](i18n-sample) | N/A | | +| [legacy-samples](legacy-samples) | N/A | | +| [lsp-log-streaming-sample](lsp-log-streaming-sample) | N/A | | +| [lsp-multi-server-sample](lsp-multi-server-sample) | N/A | | +| [lsp-sample](lsp-sample) | N/A | | +| [multi-diagnostics-sample](multi-diagnostics-sample) | N/A | | +| [nodefs-provider-sample](nodefs-provider-sample) | N/A | | +| [progress-sample](progress-sample) | N/A | | +| [quickinput-sample](quickinput-sample) | N/A | | +| [smart-template-strings-sample](smart-template-strings-sample) | N/A | | +| [task-provider-sample](task-provider-sample) | N/A | | +| [terminal-sample](terminal-sample) | N/A | | +| [theme-sample](theme-sample) | N/A | | +| [tree-view-sample](tree-view-sample) | N/A | | +| [vim-sample](vim-sample) | N/A | | +| [webpack-sample](webpack-sample) | N/A | | + + + ## :warning: Legacy Samples :warning: diff --git a/package.json b/package.json index 4dda9190..c0bf3f59 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,8 @@ { "name": "vsc-extension-samples", "publisher": "Microsoft", - "version": "0.0.1" + "version": "0.0.1", + "scripts": { + "update-readme": "node .scripts/update-readme.js" + } } diff --git a/samples.js b/samples.js deleted file mode 100644 index 4b024089..00000000 --- a/samples.js +++ /dev/null @@ -1,40 +0,0 @@ -//@ts-check - -/** - * @typedef {Object} Sample - * @property {string} description - A readable name for the sample - * @property {string} path - Path to the sample's root - * @property {string | null} guide - Link to the guide on https://code.visualstudio.com - * @property {string[]} api - Listing of VS Code API that is being illustrated. For example, "TextDocumentContentProvider" - */ - -/** @type {Sample[]} */ -const samples = [ - { description: '', path: 'basic-multi-root-sample', guide: '', api: [] }, - { description: '', path: 'completions-sample', guide: '', api: [] }, - { description: '', path: 'configuration-sample', guide: '', api: [] }, - { description: '', path: 'contentprovider-sample', guide: '', api: [] }, - { description: '', path: 'decorator-sample', guide: '', api: [] }, - { description: '', path: 'extension-deps-sample', guide: '', api: [] }, - { description: '', path: 'fsprovider-sample', guide: '', api: [] }, - { description: '', path: 'hellocode-minimal-sample', guide: '', api: [] }, - { description: '', path: 'hellocode-sample', guide: '', api: [] }, - { description: '', path: 'i18n-sample', guide: '', api: [] }, - { description: '', path: 'legacy-samples', guide: '', api: [] }, - { description: '', path: 'lsp-log-streaming-sample', guide: '', api: [] }, - { description: '', path: 'lsp-multi-server-sample', guide: '', api: [] }, - { description: '', path: 'lsp-sample', guide: '', api: [] }, - { description: '', path: 'multi-diagnostics-sample', guide: '', api: [] }, - { description: '', path: 'nodefs-provider-sample', guide: '', api: [] }, - { description: '', path: 'progress-sample', guide: '', api: [] }, - { description: '', path: 'quickinput-sample', guide: '', api: [] }, - { description: '', path: 'smart-template-strings-sample', guide: '', api: [] }, - { description: '', path: 'statusbar-sample', guide: '', api: [] }, - { description: '', path: 'task-provider-sample', guide: '', api: [] }, - { description: '', path: 'terminal-sample', guide: '', api: [] }, - { description: '', path: 'theme-sample', guide: '', api: [] }, - { description: '', path: 'tree-view-sample', guide: '', api: [] }, - { description: '', path: 'vim-sample', guide: '', api: [] }, - { description: '', path: 'webpack-sample', guide: '', api: [] }, - { description: '', path: 'webview-sample', guide: '', api: [] } -];