From fa0236a34cfd0f98a0f2ac5fd4e4ec5fed67da2f Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 12 Jul 2018 10:16:06 +0200 Subject: [PATCH] Fix #54139 --- .../parts/extensions/common/extensions.ts | 2 ++ .../electron-browser/extensionEditor.ts | 28 +++++++++++++------ .../node/extensionsWorkbenchService.ts | 25 +++++++++++++++++ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/parts/extensions/common/extensions.ts b/src/vs/workbench/parts/extensions/common/extensions.ts index 59b3f5e8590..bf50d9d44ae 100644 --- a/src/vs/workbench/parts/extensions/common/extensions.ts +++ b/src/vs/workbench/parts/extensions/common/extensions.ts @@ -54,7 +54,9 @@ export interface IExtension { preview: boolean; getManifest(): TPromise; getReadme(): TPromise; + hasReadme(): boolean; getChangelog(): TPromise; + hasChangelog(): boolean; local?: ILocalExtension; locals?: ILocalExtension[]; gallery?: IGalleryExtension; diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts index 401fb1b2314..d1df1d8a8a9 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts @@ -423,17 +423,27 @@ export class ExtensionEditor extends BaseEditor { this.navbar.clear(); this.navbar.onChange(this.onNavbarChange.bind(this, extension), this, this.transientDisposables); - this.navbar.push(NavbarSection.Readme, localize('details', "Details"), localize('detailstooltip', "Extension details, rendered from the extension's 'README.md' file")); - if (extension.extensionPack.length) { - this.navbar.push(NavbarSection.ExtensionPack, localize('extensionPack', "Extension Pack"), localize('extensionsPack', "Set of extensions that can be installed together")); - } - this.navbar.push(NavbarSection.Contributions, localize('contributions', "Contributions"), localize('contributionstooltip', "Lists contributions to VS Code by this extension")); - this.navbar.push(NavbarSection.Changelog, localize('changelog', "Changelog"), localize('changelogtooltip', "Extension update history, rendered from the extension's 'CHANGELOG.md' file")); - if (extension.dependencies.length) { - this.navbar.push(NavbarSection.Dependencies, localize('dependencies', "Dependencies"), localize('dependenciestooltip', "Lists extensions this extension depends on")); + + if (extension.hasReadme()) { + this.navbar.push(NavbarSection.Readme, localize('details', "Details"), localize('detailstooltip', "Extension details, rendered from the extension's 'README.md' file")); } + this.extensionManifest.get() + .then(manifest => { + if (extension.extensionPack.length) { + this.navbar.push(NavbarSection.ExtensionPack, localize('extensionPack', "Extension Pack"), localize('extensionsPack', "Set of extensions that can be installed together")); + } + if (manifest.contributes) { + this.navbar.push(NavbarSection.Contributions, localize('contributions', "Contributions"), localize('contributionstooltip', "Lists contributions to VS Code by this extension")); + } + if (extension.hasChangelog()) { + this.navbar.push(NavbarSection.Changelog, localize('changelog', "Changelog"), localize('changelogtooltip', "Extension update history, rendered from the extension's 'CHANGELOG.md' file")); + } + if (extension.dependencies.length) { + this.navbar.push(NavbarSection.Dependencies, localize('dependencies', "Dependencies"), localize('dependenciestooltip', "Lists extensions this extension depends on")); + } + this.editorLoadComplete = true; + }); - this.editorLoadComplete = true; return super.setInput(input, options, token); } diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 2e1ca35977c..01ae0465430 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -218,6 +218,18 @@ class Extension implements IExtension { return TPromise.as(this.local.manifest); } + hasReadme(): boolean { + if (this.gallery && !this.isGalleryOutdated() && this.gallery.assets.readme) { + return true; + } + + if (this.local && this.local.readmeUrl) { + return true; + } + + return this.type === LocalExtensionType.System; + } + getReadme(): TPromise { if (this.gallery && !this.isGalleryOutdated()) { if (this.gallery.assets.readme) { @@ -242,6 +254,19 @@ ${this.description} return TPromise.wrapError(new Error('not available')); } + hasChangelog(): boolean { + if (this.gallery && this.gallery.assets.changelog && !this.isGalleryOutdated()) { + return true; + } + + if (this.local && this.local.changelogUrl) { + const uri = URI.parse(this.local.changelogUrl); + return uri.scheme === 'file'; + } + + return false; + } + getChangelog(): TPromise { if (this.gallery && this.gallery.assets.changelog && !this.isGalleryOutdated()) { return this.galleryService.getChangelog(this.gallery); -- GitLab