From 1628bf01304e9a63bbd8a34fea74a68e37788be1 Mon Sep 17 00:00:00 2001
From: "lucas.lra@gmail.com" <1uc45@GITH>
Date: Fri, 20 Nov 2015 20:23:54 -0200
Subject: [PATCH 001/588] - Included some Clojure Extensions - Included one
Powershell Extension - Included some Csharp Keywords - Reorganization of the
language.main.js define call (To match the folders order)
---
extensions/clojure/syntaxes/Clojure.tmLanguage | 3 +++
extensions/powershell/syntaxes/PowershellSyntax.tmLanguage | 1 +
src/vs/editor/standalone-languages/csharp.ts | 2 +-
src/vs/languages/languages.main.js | 6 +++---
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/extensions/clojure/syntaxes/Clojure.tmLanguage b/extensions/clojure/syntaxes/Clojure.tmLanguage
index bf864640fd1..a94b2dcd1fb 100644
--- a/extensions/clojure/syntaxes/Clojure.tmLanguage
+++ b/extensions/clojure/syntaxes/Clojure.tmLanguage
@@ -7,6 +7,9 @@
clj
cljs
clojure
+ cljc
+ cljx
+ edn
foldingStartMarker
\(\s*$
diff --git a/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage b/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
index d9e7c46b125..fb213a2f3df 100644
--- a/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
+++ b/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
@@ -7,6 +7,7 @@
ps1
psm1
psd1
+ ps1xml
name
PowerShell
diff --git a/src/vs/editor/standalone-languages/csharp.ts b/src/vs/editor/standalone-languages/csharp.ts
index 4e8d11d72bd..d145275864a 100644
--- a/src/vs/editor/standalone-languages/csharp.ts
+++ b/src/vs/editor/standalone-languages/csharp.ts
@@ -51,7 +51,7 @@ export var language = {
'internal', 'private', 'abstract', 'sealed', 'static', 'struct', 'readonly',
'volatile', 'virtual', 'override', 'params', 'get', 'set', 'add', 'remove',
'operator', 'true', 'false', 'implicit', 'explicit', 'interface', 'enum',
- 'null', 'async', 'await'
+ 'null', 'async', 'await','fixed','sizeof','stackalloc','unsafe'
],
namespaceFollows: [
diff --git a/src/vs/languages/languages.main.js b/src/vs/languages/languages.main.js
index 761d6a32517..dd015518489 100644
--- a/src/vs/languages/languages.main.js
+++ b/src/vs/languages/languages.main.js
@@ -8,13 +8,13 @@ define([
"vs/languages/html/common/html.contribution",
"vs/languages/javascript/common/javascript.contribution",
"vs/languages/json/common/json.contribution",
+ "vs/languages/less/common/less.contribution",
"vs/languages/markdown/common/markdown.contribution",
"vs/languages/php/common/php.contribution",
"vs/languages/plaintext/common/plaintext.contribution",
"vs/languages/razor/common/razor.contribution",
- "vs/languages/typescript/common/typescript.contribution",
- "vs/languages/less/common/less.contribution",
- "vs/languages/sass/common/sass.contribution"
+ "vs/languages/sass/common/sass.contribution",
+ "vs/languages/typescript/common/typescript.contribution"
], function() {
"use strict";
});
\ No newline at end of file
From a25963846cebec475b8552191a97a82327111724 Mon Sep 17 00:00:00 2001
From: "lucas.lra@gmail.com" <1uc45@GITH>
Date: Fri, 20 Nov 2015 20:46:26 -0200
Subject: [PATCH 002/588] Included Edge UserAgent
---
src/vs/base/browser/browser.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts
index 31038fa56dc..f7d735d9916 100644
--- a/src/vs/base/browser/browser.ts
+++ b/src/vs/base/browser/browser.ts
@@ -48,6 +48,7 @@ var globals = (typeof self === 'object' ? self : global);
// IE: "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3; Zune 4.7)"
// Opera: "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.52"
// FF: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0"
+// Edge: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"
// LINUX:
// chrome: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
From 1733650c6b249be9af6fe2e407c03ca4f5cbea8e Mon Sep 17 00:00:00 2001
From: Arkady Shapkin
Date: Sat, 21 Nov 2015 23:53:11 +0300
Subject: [PATCH 003/588] .editorconfig added
---
.editorconfig | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 .editorconfig
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000000..361c815c1a7
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Tab indentation (no size specified)
+[*]
+indent_style = tab
+
+[{.travis.yml,npm-shrinkwrap.json}]
+indent_style = space
+indent_size = 2
From 464487d90b921a6a67279aa3a3907a583a641e4d Mon Sep 17 00:00:00 2001
From: "lucas.lra@gmail.com" <1uc45@GITH>
Date: Sun, 22 Nov 2015 17:11:53 -0200
Subject: [PATCH 004/588] Changes based in @aeschli comments
---
extensions/clojure/package.json | 40 ++++++++++++------
.../clojure/syntaxes/Clojure.tmLanguage | 3 --
extensions/powershell/package.json | 42 +++++++++++++------
.../syntaxes/PowershellSyntax.tmLanguage | 1 -
4 files changed, 58 insertions(+), 28 deletions(-)
diff --git a/extensions/clojure/package.json b/extensions/clojure/package.json
index 3a67d006621..4ade95c084e 100644
--- a/extensions/clojure/package.json
+++ b/extensions/clojure/package.json
@@ -2,18 +2,34 @@
"name": "clojure",
"version": "0.1.0",
"publisher": "vscode",
- "engines": { "vscode": "*" },
+ "engines": {
+ "vscode": "*"
+ },
"contributes": {
- "languages": [{
- "id": "clojure",
- "aliases": ["Clojure", "clojure"],
- "extensions": [".clj", ".cljs", ".cljx", ".clojure", ".edn"],
- "configuration": "./clojure.configuration.json"
- }],
- "grammars": [{
- "language": "clojure",
- "scopeName": "source.clojure",
- "path": "./syntaxes/Clojure.tmLanguage"
- }]
+ "languages": [
+ {
+ "id": "clojure",
+ "aliases": [
+ "Clojure",
+ "clojure"
+ ],
+ "extensions": [
+ ".clj",
+ ".cljs",
+ ".cljc",
+ ".cljx",
+ ".clojure",
+ ".edn"
+ ],
+ "configuration": "./clojure.configuration.json"
+ }
+ ],
+ "grammars": [
+ {
+ "language": "clojure",
+ "scopeName": "source.clojure",
+ "path": "./syntaxes/Clojure.tmLanguage"
+ }
+ ]
}
}
\ No newline at end of file
diff --git a/extensions/clojure/syntaxes/Clojure.tmLanguage b/extensions/clojure/syntaxes/Clojure.tmLanguage
index a94b2dcd1fb..bf864640fd1 100644
--- a/extensions/clojure/syntaxes/Clojure.tmLanguage
+++ b/extensions/clojure/syntaxes/Clojure.tmLanguage
@@ -7,9 +7,6 @@
clj
cljs
clojure
- cljc
- cljx
- edn
foldingStartMarker
\(\s*$
diff --git a/extensions/powershell/package.json b/extensions/powershell/package.json
index 7fee9af3e24..febba83d727 100644
--- a/extensions/powershell/package.json
+++ b/extensions/powershell/package.json
@@ -2,18 +2,36 @@
"name": "powershell",
"version": "0.1.0",
"publisher": "vscode",
- "engines": { "vscode": "*" },
+ "engines": {
+ "vscode": "*"
+ },
"contributes": {
- "languages": [{
- "id": "powershell",
- "extensions": [ ".ps1", ".psm1", ".psd1", ".pssc", ".psrc" ],
- "aliases": [ "PowerShell", "powershell", "ps", "ps1" ],
- "configuration": "./powershell.configuration.json"
- }],
- "grammars": [{
- "language": "powershell",
- "scopeName": "source.powershell",
- "path": "./syntaxes/PowershellSyntax.tmLanguage"
- }]
+ "languages": [
+ {
+ "id": "powershell",
+ "extensions": [
+ ".ps1",
+ ".psm1",
+ ".psd1",
+ ".pssc",
+ ".psrc",
+ ".ps1xml"
+ ],
+ "aliases": [
+ "PowerShell",
+ "powershell",
+ "ps",
+ "ps1"
+ ],
+ "configuration": "./powershell.configuration.json"
+ }
+ ],
+ "grammars": [
+ {
+ "language": "powershell",
+ "scopeName": "source.powershell",
+ "path": "./syntaxes/PowershellSyntax.tmLanguage"
+ }
+ ]
}
}
\ No newline at end of file
diff --git a/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage b/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
index fb213a2f3df..d9e7c46b125 100644
--- a/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
+++ b/extensions/powershell/syntaxes/PowershellSyntax.tmLanguage
@@ -7,7 +7,6 @@
ps1
psm1
psd1
- ps1xml
name
PowerShell
From 98cc590065cbccb4ba68e56b4d7f64770df602af Mon Sep 17 00:00:00 2001
From: Lucas Araujo
Date: Mon, 23 Nov 2015 07:59:03 -0200
Subject: [PATCH 005/588] Undoing some changes
---
extensions/clojure/package.json | 40 +++++++++-------------------
extensions/powershell/package.json | 42 +++++++++---------------------
src/vs/base/browser/browser.ts | 1 -
src/vs/languages/languages.main.js | 6 ++---
4 files changed, 27 insertions(+), 62 deletions(-)
diff --git a/extensions/clojure/package.json b/extensions/clojure/package.json
index 4ade95c084e..3a67d006621 100644
--- a/extensions/clojure/package.json
+++ b/extensions/clojure/package.json
@@ -2,34 +2,18 @@
"name": "clojure",
"version": "0.1.0",
"publisher": "vscode",
- "engines": {
- "vscode": "*"
- },
+ "engines": { "vscode": "*" },
"contributes": {
- "languages": [
- {
- "id": "clojure",
- "aliases": [
- "Clojure",
- "clojure"
- ],
- "extensions": [
- ".clj",
- ".cljs",
- ".cljc",
- ".cljx",
- ".clojure",
- ".edn"
- ],
- "configuration": "./clojure.configuration.json"
- }
- ],
- "grammars": [
- {
- "language": "clojure",
- "scopeName": "source.clojure",
- "path": "./syntaxes/Clojure.tmLanguage"
- }
- ]
+ "languages": [{
+ "id": "clojure",
+ "aliases": ["Clojure", "clojure"],
+ "extensions": [".clj", ".cljs", ".cljx", ".clojure", ".edn"],
+ "configuration": "./clojure.configuration.json"
+ }],
+ "grammars": [{
+ "language": "clojure",
+ "scopeName": "source.clojure",
+ "path": "./syntaxes/Clojure.tmLanguage"
+ }]
}
}
\ No newline at end of file
diff --git a/extensions/powershell/package.json b/extensions/powershell/package.json
index febba83d727..7fee9af3e24 100644
--- a/extensions/powershell/package.json
+++ b/extensions/powershell/package.json
@@ -2,36 +2,18 @@
"name": "powershell",
"version": "0.1.0",
"publisher": "vscode",
- "engines": {
- "vscode": "*"
- },
+ "engines": { "vscode": "*" },
"contributes": {
- "languages": [
- {
- "id": "powershell",
- "extensions": [
- ".ps1",
- ".psm1",
- ".psd1",
- ".pssc",
- ".psrc",
- ".ps1xml"
- ],
- "aliases": [
- "PowerShell",
- "powershell",
- "ps",
- "ps1"
- ],
- "configuration": "./powershell.configuration.json"
- }
- ],
- "grammars": [
- {
- "language": "powershell",
- "scopeName": "source.powershell",
- "path": "./syntaxes/PowershellSyntax.tmLanguage"
- }
- ]
+ "languages": [{
+ "id": "powershell",
+ "extensions": [ ".ps1", ".psm1", ".psd1", ".pssc", ".psrc" ],
+ "aliases": [ "PowerShell", "powershell", "ps", "ps1" ],
+ "configuration": "./powershell.configuration.json"
+ }],
+ "grammars": [{
+ "language": "powershell",
+ "scopeName": "source.powershell",
+ "path": "./syntaxes/PowershellSyntax.tmLanguage"
+ }]
}
}
\ No newline at end of file
diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts
index f7d735d9916..31038fa56dc 100644
--- a/src/vs/base/browser/browser.ts
+++ b/src/vs/base/browser/browser.ts
@@ -48,7 +48,6 @@ var globals = (typeof self === 'object' ? self : global);
// IE: "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3; Zune 4.7)"
// Opera: "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.52"
// FF: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0"
-// Edge: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"
// LINUX:
// chrome: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
diff --git a/src/vs/languages/languages.main.js b/src/vs/languages/languages.main.js
index dd015518489..761d6a32517 100644
--- a/src/vs/languages/languages.main.js
+++ b/src/vs/languages/languages.main.js
@@ -8,13 +8,13 @@ define([
"vs/languages/html/common/html.contribution",
"vs/languages/javascript/common/javascript.contribution",
"vs/languages/json/common/json.contribution",
- "vs/languages/less/common/less.contribution",
"vs/languages/markdown/common/markdown.contribution",
"vs/languages/php/common/php.contribution",
"vs/languages/plaintext/common/plaintext.contribution",
"vs/languages/razor/common/razor.contribution",
- "vs/languages/sass/common/sass.contribution",
- "vs/languages/typescript/common/typescript.contribution"
+ "vs/languages/typescript/common/typescript.contribution",
+ "vs/languages/less/common/less.contribution",
+ "vs/languages/sass/common/sass.contribution"
], function() {
"use strict";
});
\ No newline at end of file
From 092944b7df72255ae9a4f4688e32813ff1df0da5 Mon Sep 17 00:00:00 2001
From: Kewin Dousse
Date: Mon, 23 Nov 2015 15:20:20 +0100
Subject: [PATCH 006/588] Implementing configurable cursor blinking
---
.../browser/viewParts/viewCursors/viewCursors.ts | 11 ++++++++++-
src/vs/editor/common/config/commonEditorConfig.ts | 8 ++++++++
src/vs/editor/common/config/defaultConfig.ts | 1 +
src/vs/editor/common/editorCommon.ts | 7 +++++++
4 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
index d9ab47b0be4..9bdc63d49f9 100644
--- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
+++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
@@ -172,7 +172,16 @@ export class ViewCursors extends ViewPart {
private _getRenderType(): RenderType {
if (this._editorHasFocus) {
if (this._primaryCursor.getIsInEditableRange() && !this._context.configuration.editor.readOnly) {
- return RenderType.Blink;
+ switch (this._context.configuration.editor.cursorBlinking) {
+ case ("blink"):
+ return RenderType.Blink;
+ case ("visible"):
+ return RenderType.Visible;
+ case ("hidden"):
+ return RenderType.Hidden;
+ default:
+ return RenderType.Blink;
+ }
}
return RenderType.Visible;
}
diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts
index bed0d3b74f5..b36b57d5ce6 100644
--- a/src/vs/editor/common/config/commonEditorConfig.ts
+++ b/src/vs/editor/common/config/commonEditorConfig.ts
@@ -141,6 +141,7 @@ class InternalEditorOptionsHelper {
readOnly: toBoolean(opts.readOnly),
scrollbar: scrollbar,
overviewRulerLanes: toInteger(opts.overviewRulerLanes, 0, 3),
+ cursorBlinking: opts.cursorBlinking,
hideCursorInOverviewRuler: toBoolean(opts.hideCursorInOverviewRuler),
scrollBeyondLastLine: toBoolean(opts.scrollBeyondLastLine),
wrappingIndent: opts.wrappingIndent,
@@ -236,6 +237,7 @@ class InternalEditorOptionsHelper {
readOnly: (prevOpts.readOnly !== newOpts.readOnly),
scrollbar: (!this._scrollbarOptsEqual(prevOpts.scrollbar, newOpts.scrollbar)),
overviewRulerLanes: (prevOpts.overviewRulerLanes !== newOpts.overviewRulerLanes),
+ cursorBlinking: (prevOpts.cursorBlinking !== newOpts.cursorBlinking),
hideCursorInOverviewRuler: (prevOpts.hideCursorInOverviewRuler !== newOpts.hideCursorInOverviewRuler),
scrollBeyondLastLine: (prevOpts.scrollBeyondLastLine !== newOpts.scrollBeyondLastLine),
wrappingIndent: (prevOpts.wrappingIndent !== newOpts.wrappingIndent),
@@ -794,6 +796,12 @@ configurationRegistry.registerConfiguration({
'default': 3,
'description': nls.localize('overviewRulerLanes', "Controls the number of decorations that can show up at the same position in the overview ruler")
},
+ 'editor.cursorBlinking' : {
+ 'type': 'string',
+ 'enum': ['blink', 'visible', 'hidden'],
+ 'default': DefaultConfig.editor.cursorBlinking,
+ 'description': nls.localize('cursorBlinking', "Controls the cursor blinking animation.")
+ },
'editor.hideCursorInOverviewRuler' : {
'type': 'boolean',
'default': DefaultConfig.editor.hideCursorInOverviewRuler,
diff --git a/src/vs/editor/common/config/defaultConfig.ts b/src/vs/editor/common/config/defaultConfig.ts
index 0cdadde9ddf..28748ec4868 100644
--- a/src/vs/editor/common/config/defaultConfig.ts
+++ b/src/vs/editor/common/config/defaultConfig.ts
@@ -33,6 +33,7 @@ class ConfigClass implements IConfiguration {
horizontalHasArrows: false
},
overviewRulerLanes: 2,
+ cursorBlinking: 'blink',
hideCursorInOverviewRuler: false,
scrollBeyondLastLine: true,
automaticLayout: false,
diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts
index b204985b86c..cfb4334e15d 100644
--- a/src/vs/editor/common/editorCommon.ts
+++ b/src/vs/editor/common/editorCommon.ts
@@ -333,6 +333,11 @@ export interface ICommonEditorOptions {
* Defaults to 2.
*/
overviewRulerLanes?:number;
+ /**
+ * Control the cursor blinking animation.
+ * Defaults to 'blink'.
+ */
+ cursorBlinking?:string;
/**
* Should the cursor be hidden in the overview ruler.
* Defaults to false.
@@ -577,6 +582,7 @@ export interface IInternalEditorOptions {
readOnly:boolean;
scrollbar:IInternalEditorScrollbarOptions;
overviewRulerLanes:number;
+ cursorBlinking:string;
hideCursorInOverviewRuler:boolean;
scrollBeyondLastLine:boolean;
wrappingIndent: string;
@@ -667,6 +673,7 @@ export interface IConfigurationChangedEvent {
readOnly:boolean;
scrollbar:boolean;
overviewRulerLanes:boolean;
+ cursorBlinking:boolean;
hideCursorInOverviewRuler:boolean;
scrollBeyondLastLine:boolean;
wrappingIndent:boolean;
From 5568b5625aef1ee8e069d759333b1185ded229e6 Mon Sep 17 00:00:00 2001
From: Kewin Dousse
Date: Mon, 23 Nov 2015 15:47:58 +0100
Subject: [PATCH 007/588] Updating cursor blink on config change
---
src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
index 9bdc63d49f9..92efce34b39 100644
--- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
+++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts
@@ -136,6 +136,7 @@ export class ViewCursors extends ViewPart {
}
public onConfigurationChanged(e:EditorCommon.IConfigurationChangedEvent): boolean {
this._primaryCursor.onConfigurationChanged(e);
+ this._updateBlinking();
for (var i = 0, len = this._secondaryCursors.length; i < len; i++) {
this._secondaryCursors[i].onConfigurationChanged(e);
}
From d66f6f47efd501f380fb49effd0b89eb570b53f2 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Mon, 23 Nov 2015 17:42:39 +0100
Subject: [PATCH 008/588] add the "Sync" command to the command palette as
global command
---
.../parts/git/browser/gitActions.contribution.ts | 8 +++++---
src/vs/workbench/parts/git/browser/gitActions.ts | 5 +++--
.../parts/git/browser/views/changes/changesView.ts | 2 +-
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/vs/workbench/parts/git/browser/gitActions.contribution.ts b/src/vs/workbench/parts/git/browser/gitActions.contribution.ts
index 96d6de21c00..6442cf9abf5 100644
--- a/src/vs/workbench/parts/git/browser/gitActions.contribution.ts
+++ b/src/vs/workbench/parts/git/browser/gitActions.contribution.ts
@@ -31,7 +31,7 @@ import {IFileService, IFileStat} from 'vs/platform/files/common/files';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import wbar = require('vs/workbench/browser/actionRegistry');
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
-import { OpenChangeAction } from './gitActions';
+import { OpenChangeAction, SyncAction } from './gitActions';
import Severity from 'vs/base/common/severity';
function getStatus(gitService: IGitService, contextService: IWorkspaceContextService, input: WorkbenchEditorCommon.IFileEditorInput): IFileStatus {
@@ -432,5 +432,7 @@ actionBarRegistry.registerActionBarContributor(abr.Scope.EDITOR, GitWorkingTreeD
let workbenchActionRegistry = ( platform.Registry.as(wbar.Extensions.WorkbenchActions));
-// Register Action to Open Viewlet
-workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(GlobalOpenChangeAction, GlobalOpenChangeAction.ID, GlobalOpenChangeAction.LABEL), nls.localize('git', "Git"));
+// Register Actions
+const category = nls.localize('git', "Git");
+workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(GlobalOpenChangeAction, GlobalOpenChangeAction.ID, GlobalOpenChangeAction.LABEL), category);
+workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(SyncAction, SyncAction.ID, SyncAction.LABEL), category);
diff --git a/src/vs/workbench/parts/git/browser/gitActions.ts b/src/vs/workbench/parts/git/browser/gitActions.ts
index 4f633bb51c3..7d1bb989a76 100644
--- a/src/vs/workbench/parts/git/browser/gitActions.ts
+++ b/src/vs/workbench/parts/git/browser/gitActions.ts
@@ -941,9 +941,10 @@ export abstract class BaseSyncAction extends GitAction {
export class SyncAction extends BaseSyncAction {
static ID = 'workbench.action.sync';
+ static LABEL = nls.localize('sync', "Sync");
- constructor(@IGitService gitService: IGitService) {
- super(SyncAction.ID, nls.localize('sync', "Sync"), 'git-action sync', gitService);
+ constructor(id: string, label: string, @IGitService gitService: IGitService) {
+ super(id, label, 'git-action sync', gitService);
}
}
diff --git a/src/vs/workbench/parts/git/browser/views/changes/changesView.ts b/src/vs/workbench/parts/git/browser/views/changes/changesView.ts
index bcb9a31521c..f454db50a1b 100644
--- a/src/vs/workbench/parts/git/browser/views/changes/changesView.ts
+++ b/src/vs/workbench/parts/git/browser/views/changes/changesView.ts
@@ -246,7 +246,7 @@ export class ChangesView extends EventEmitter.EventEmitter implements GitView.IV
public getSecondaryActions(): Actions.IAction[] {
if (!this.secondaryActions) {
this.secondaryActions = [
- this.instantiationService.createInstance(GitActions.SyncAction),
+ this.instantiationService.createInstance(GitActions.SyncAction, GitActions.SyncAction.ID, GitActions.SyncAction.LABEL),
this.instantiationService.createInstance(GitActions.PullAction),
this.instantiationService.createInstance(GitActions.PushAction),
new ActionBar.Separator(),
From 418a76fa1600f6ff0556b409858dc4a1c0dfea16 Mon Sep 17 00:00:00 2001
From: Mahmoud Ali
Date: Mon, 23 Nov 2015 21:15:00 -0300
Subject: [PATCH 009/588] Add "Show Extensions Updates" command
Shows all installed extensions that have updates available. Can also be accessed by "ext update"
---
.../electron-browser/extensionsActions.ts | 23 ++++++
.../electron-browser/extensionsQuickOpen.ts | 74 +++++++++++++++++++
.../extensionsWorkbenchExtension.ts | 14 +++-
3 files changed, 110 insertions(+), 1 deletion(-)
diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
index debc3b13e36..8b039896ab8 100644
--- a/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
+++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts
@@ -54,3 +54,26 @@ export class InstallExtensionAction extends Action {
return true;
}
}
+
+export class ListExtensionsUpdatesAction extends Action {
+
+ static ID = 'workbench.extensions.action.listExtensionsUpdates';
+ static LABEL = nls.localize('showExtensionsUpdates', "Show Extensions Updates");
+
+ constructor(
+ id: string,
+ label: string,
+ @IExtensionsService private extensionsService: IExtensionsService,
+ @IQuickOpenService private quickOpenService: IQuickOpenService
+ ) {
+ super(id, label, null, true);
+ }
+
+ public run(): Promise {
+ return this.quickOpenService.show('ext update ');
+ }
+
+ protected isEnabled(): boolean {
+ return true;
+ }
+}
diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen.ts
index 8001df22395..5743ad36582 100644
--- a/src/vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen.ts
+++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen.ts
@@ -469,6 +469,80 @@ export class GalleryExtensionsHandler extends QuickOpenHandler {
return nls.localize('noExtensionsToInstall', "No extensions found");
}
+ getAutoFocus(searchValue: string): IAutoFocus {
+ return { autoFocusFirstEntry: true };
+ }
+}
+
+class ExtensionsUpdateModel implements IModel {
+
+ public dataSource = new DataSource();
+ public renderer: IRenderer;
+ public runner: IRunner;
+ public entries: IExtensionEntry[];
+
+ constructor(
+ private galleryExtensions: IExtension[],
+ private localExtensions: IExtension[],
+ @IInstantiationService instantiationService: IInstantiationService
+ ) {
+ this.renderer = instantiationService.createInstance(Renderer);
+ this.runner = instantiationService.createInstance(InstallRunner);
+ this.entries = [];
+ }
+
+ public set input(input: string) {
+ this.entries = this.galleryExtensions
+ .map(extension => ({ extension, highlights: getHighlights(input, extension) }))
+ .filter(({ extension, highlights }) => {
+ const local = this.localExtensions.filter(local => extensionEquals(local, extension))[0];
+ return local && local.version < extension.version && !!highlights;
+ })
+ .map(({ extension, highlights }: { extension: IExtension, highlights: IHighlights }) => {
+ return {
+ extension,
+ highlights,
+ state: ExtensionState.Outdated
+ };
+ })
+ .sort((a, b) => a.extension.name.localeCompare(b.extension.name));
+ }
+}
+
+export class ExtensionsUpdateHandler extends QuickOpenHandler {
+
+ private modelPromise: TPromise;
+
+ constructor(
+ @IInstantiationService private instantiationService: IInstantiationService,
+ @IExtensionsService private extensionsService: IExtensionsService,
+ @IGalleryService private galleryService: IGalleryService,
+ @ITelemetryService private telemetryService: ITelemetryService
+ ) {
+ super();
+ }
+
+ getResults(input: string): TPromise> {
+ if (!this.modelPromise) {
+ this.telemetryService.publicLog('extensionGallery:open');
+ this.modelPromise = TPromise.join([this.galleryService.query(), this.extensionsService.getInstalled()])
+ .then(result => this.instantiationService.createInstance(ExtensionsUpdateModel, result[0], result[1]));
+ }
+
+ return this.modelPromise.then(model => {
+ model.input = input;
+ return model;
+ });
+ }
+
+ onClose(canceled: boolean): void {
+ this.modelPromise = null;
+ }
+
+ getEmptyLabel(input: string): string {
+ return nls.localize('noOutdatedExtensions', "No outdated extensions found");
+ }
+
getAutoFocus(searchValue: string): IAutoFocus {
return { autoFocusFirstEntry: true };
}
diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchExtension.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchExtension.ts
index 38cd43e9351..44326bc574b 100644
--- a/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchExtension.ts
+++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsWorkbenchExtension.ts
@@ -16,7 +16,7 @@ import { IWorkspaceContextService } from 'vs/workbench/services/workspace/common
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
import wbaregistry = require('vs/workbench/browser/actionRegistry');
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
-import { ListExtensionsAction, InstallExtensionAction } from './extensionsActions';
+import { ListExtensionsAction, InstallExtensionAction, ListExtensionsUpdatesAction } from './extensionsActions';
import { IQuickOpenRegistry, Extensions, QuickOpenHandlerDescriptor } from 'vs/workbench/browser/quickopen';
import ipc = require('ipc');
@@ -67,6 +67,18 @@ export class ExtensionsWorkbenchExtension implements IWorkbenchContribution {
true
)
);
+
+ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ListExtensionsUpdatesAction, ListExtensionsUpdatesAction.ID, ListExtensionsUpdatesAction.LABEL), extensionsCategory);
+
+ (platform.Registry.as(Extensions.Quickopen)).registerQuickOpenHandler(
+ new QuickOpenHandlerDescriptor(
+ 'vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen',
+ 'ExtensionsUpdateHandler',
+ 'ext update ',
+ nls.localize('extensionsUpdateCommands', "Extensions Update Commands"),
+ true
+ )
+ );
}
}
From 2a04b4713670556ff33d403ea49bee75a14a33c6 Mon Sep 17 00:00:00 2001
From: Bruce Mitchener
Date: Tue, 24 Nov 2015 07:49:44 +0700
Subject: [PATCH 010/588] Fix typo in comment in sample tasks.json.
---
src/vs/workbench/parts/tasks/common/taskSampleConfig.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/vs/workbench/parts/tasks/common/taskSampleConfig.json b/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
index d232911d534..1f312158d75 100644
--- a/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
+++ b/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
@@ -156,7 +156,7 @@
}
*/
// A task runner example that defines a problemMatcher inline instead of using
-// a predfined one.
+// a predefined one.
/*
{
"version": "0.1.0",
From 2ad838560b79c275a24ad8974af6b3fca0fb955f Mon Sep 17 00:00:00 2001
From: Bruce Mitchener
Date: Tue, 24 Nov 2015 07:52:21 +0700
Subject: [PATCH 011/588] Fix typos in LineCommentCommand comments.
---
src/vs/editor/contrib/comment/common/lineCommentCommand.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/vs/editor/contrib/comment/common/lineCommentCommand.ts b/src/vs/editor/contrib/comment/common/lineCommentCommand.ts
index 3b591d5a045..714eecbacd2 100644
--- a/src/vs/editor/contrib/comment/common/lineCommentCommand.ts
+++ b/src/vs/editor/contrib/comment/common/lineCommentCommand.ts
@@ -104,7 +104,7 @@ export class LineCommentCommand implements EditorCommon.ICommand {
/**
* Analyze lines and decide which lines are relevant and what the toggle should do.
- * Also, build up several offsets and lengths usefull in the generation of editor operations.
+ * Also, build up several offsets and lengths useful in the generation of editor operations.
*/
public static _analyzeLines(type:Type, model:ISimpleModel, lines:ILinePreflightData[], startLineNumber:number): IPreflightData {
var lineData: ILinePreflightData,
@@ -206,7 +206,7 @@ export class LineCommentCommand implements EditorCommon.ICommand {
}
/**
- * Given a succesfull analysis, execute either insert line comments, either remove line comments
+ * Given a successful analysis, execute either insert line comments, either remove line comments
*/
private _executeLineComments(model:ISimpleModel, builder:EditorCommon.IEditOperationBuilder, data:IPreflightData, s:EditorCommon.IEditorSelection): void {
@@ -267,7 +267,7 @@ export class LineCommentCommand implements EditorCommon.ICommand {
}
/**
- * Given an unsuccesfull analysis, delegate to the block comment command
+ * Given an unsuccessful analysis, delegate to the block comment command
*/
private _executeBlockComment(model:EditorCommon.ITokenizedModel, builder:EditorCommon.IEditOperationBuilder, s:EditorCommon.IEditorSelection): void {
var commentsSupport = model.getModeAtPosition(s.startLineNumber, s.startColumn).commentsSupport;
From c1abaae2493cd63d1001bc16fa5fcff044a62a8c Mon Sep 17 00:00:00 2001
From: Bruce Mitchener
Date: Tue, 24 Nov 2015 07:53:09 +0700
Subject: [PATCH 012/588] Fix typo: return value of AbstractProcess::terminate.
---
src/vs/base/node/processes.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/vs/base/node/processes.ts b/src/vs/base/node/processes.ts
index 10dcefcea83..7bda74d0eed 100644
--- a/src/vs/base/node/processes.ts
+++ b/src/vs/base/node/processes.ts
@@ -329,7 +329,7 @@ export abstract class AbstractProcess {
}
return result;
}, (err) => {
- return { sucess: true };
+ return { success: true };
});
}
From 3f2b4ba9a686ef537eafb865efdfe0062d7bd89d Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:00:06 +0100
Subject: [PATCH 013/588] npm install vscode-api-tests and some polish
---
extensions/vscode-api-tests/.vscodeignore | 3 ---
extensions/vscode-api-tests/README.md | 14 --------------
extensions/vscode-api-tests/package.json | 7 ++-----
package.json | 2 +-
4 files changed, 3 insertions(+), 23 deletions(-)
delete mode 100644 extensions/vscode-api-tests/README.md
diff --git a/extensions/vscode-api-tests/.vscodeignore b/extensions/vscode-api-tests/.vscodeignore
index bf8da5ca33e..d9d9698a317 100644
--- a/extensions/vscode-api-tests/.vscodeignore
+++ b/extensions/vscode-api-tests/.vscodeignore
@@ -1,9 +1,6 @@
.vscode/**
typings/**
-out/test/**
-test/**
**/*.ts
**/*.map
.gitignore
tsconfig.json
-vsc-extension-quickstart.md
diff --git a/extensions/vscode-api-tests/README.md b/extensions/vscode-api-tests/README.md
deleted file mode 100644
index 7263e355bc6..00000000000
--- a/extensions/vscode-api-tests/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# README
-## This is the README for your extension "vscode-api-tests"
--------------------
-You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
-
-* Split the editor (`Cmd+\` on OSX or `Ctrl+\` on Windows and Linux)
-* Toggle preview (`Shift+CMD+V` on OSX or `Shift+Ctrl+V` on Windows and Linux)
-* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (OSX) to see a list of Markdown snippets
-
-### For more information
-* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
-* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
-
-** Enjoy!**
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
index 0b1021c72d3..e69be343c0e 100644
--- a/extensions/vscode-api-tests/package.json
+++ b/extensions/vscode-api-tests/package.json
@@ -1,14 +1,11 @@
{
"name": "vscode-api-tests",
- "description": "",
+ "description": "API tests for VS Code",
"version": "0.0.1",
- "publisher": "vscode",
+ "private": true,
"engines": {
"vscode": "*"
},
- "scripts": {
- "vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../gulpfile.plugins.js compile-plugin:vscode-api-tests ./tsconfig.json"
- },
"devDependencies": {
"vscode": "next"
}
diff --git a/package.json b/package.json
index 8d66870c809..f546c788b1e 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
},
"scripts": {
"test": "node node_modules/mocha/bin/_mocha",
- "postinstall": "npm --prefix extensions/csharp-o/ install extensions/csharp-o/"
+ "postinstall": "npm --prefix extensions/csharp-o/ install extensions/csharp-o/ && npm --prefix extensions/vscode-api-tests/ install extensions/vscode-api-tests/"
},
"dependencies": {
"applicationinsights": "0.15.6",
From 222b089f8ae011946b83e254ba29cf00ce2980dc Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:01:53 +0100
Subject: [PATCH 014/588] vscode api tests: add back publisher
---
extensions/vscode-api-tests/package.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
index e69be343c0e..0407ee75e73 100644
--- a/extensions/vscode-api-tests/package.json
+++ b/extensions/vscode-api-tests/package.json
@@ -2,6 +2,7 @@
"name": "vscode-api-tests",
"description": "API tests for VS Code",
"version": "0.0.1",
+ "publisher": "vscode",
"private": true,
"engines": {
"vscode": "*"
From 303b02eeac5b35947155181cea668e2be2e7ccb3 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:18:27 +0100
Subject: [PATCH 015/588] restore vscode:prepublish to compile tests properly
---
extensions/vscode-api-tests/package.json | 3 +++
1 file changed, 3 insertions(+)
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
index 0407ee75e73..20e6ba7de8d 100644
--- a/extensions/vscode-api-tests/package.json
+++ b/extensions/vscode-api-tests/package.json
@@ -7,6 +7,9 @@
"engines": {
"vscode": "*"
},
+ "scripts": {
+ "vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../gulpfile.plugins.js compile-plugin:vscode-api-tests ./tsconfig.json"
+ },
"devDependencies": {
"vscode": "next"
}
From debe0292dd463f632224c8c43e21de978aa93d1c Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:42:41 +0100
Subject: [PATCH 016/588] allow to run plugin tests through the command line
---
src/vs/workbench/electron-main/env.ts | 3 +++
src/vs/workbench/electron-main/lifecycle.ts | 3 ++-
src/vs/workbench/electron-main/windows.ts | 21 +++++++++++++++++--
.../thread/electron-browser/threadService.ts | 14 ++++++++++---
4 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/src/vs/workbench/electron-main/env.ts b/src/vs/workbench/electron-main/env.ts
index 2fe6dd85146..25fe30ea7f3 100644
--- a/src/vs/workbench/electron-main/env.ts
+++ b/src/vs/workbench/electron-main/env.ts
@@ -106,6 +106,9 @@ if (!fs.existsSync(userPluginsHome)) {
fs.mkdirSync(userPluginsHome);
}
+// Helper to identify if we have plugin tests to run from the command line without debugger
+export const isTestingFromCli = cliArgs.pluginTestsPath && !cliArgs.debugBrkPluginHost;
+
export function log(...a: any[]): void {
if (cliArgs.verboseLogging) {
console.log.apply(null, a);
diff --git a/src/vs/workbench/electron-main/lifecycle.ts b/src/vs/workbench/electron-main/lifecycle.ts
index b25bdc9678a..831415103a5 100644
--- a/src/vs/workbench/electron-main/lifecycle.ts
+++ b/src/vs/workbench/electron-main/lifecycle.ts
@@ -67,7 +67,8 @@ export class Lifecycle {
// Windows/Linux: we quit when all windows have closed
// Mac: we only quit when quit was requested
- if (this.quitRequested || process.platform !== 'darwin') {
+ // Tests: we always quit
+ if (this.quitRequested || process.platform !== 'darwin' || env.isTestingFromCli) {
app.quit();
}
});
diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts
index 5a829094fc7..81dd55b071c 100644
--- a/src/vs/workbench/electron-main/windows.ts
+++ b/src/vs/workbench/electron-main/windows.ts
@@ -85,6 +85,11 @@ export interface IOpenedPathsList {
files: string[];
}
+interface ILogEntry {
+ severity: string;
+ arguments: any;
+}
+
export class WindowsManager {
public static autoSaveDelayStorageKey = 'autoSaveDelay';
@@ -121,7 +126,7 @@ export class WindowsManager {
}
private registerListeners(): void {
- app.on('activate', (event:Event, hasVisibleWindows:boolean) => {
+ app.on('activate', (event: Event, hasVisibleWindows: boolean) => {
env.log('App#activate');
// Mac only event: reopen last window when we get activated
@@ -247,7 +252,19 @@ export class WindowsManager {
if (broadcast.channel && broadcast.payload) {
this.sendToAll('vscode:broadcast', broadcast, [windowId]);
}
- })
+ });
+
+ ipc.on('vscode:log', (event: Event, logEntry: ILogEntry) => {
+ let args = [];
+ try {
+ let parsed = JSON.parse(logEntry.arguments);
+ args.push(...Object.getOwnPropertyNames(parsed).map(o => parsed[o]));
+ } catch (error) {
+ args.push(logEntry.arguments);
+ }
+
+ console[logEntry.severity].apply(console, args);
+ });
UpdateManager.on('update-downloaded', (update: IUpdate) => {
this.sendToFocused('vscode:telemetry', { eventName: 'update:downloaded', data: { version: update.version } });
diff --git a/src/vs/workbench/services/thread/electron-browser/threadService.ts b/src/vs/workbench/services/thread/electron-browser/threadService.ts
index ae62bf25074..fe946ab0837 100644
--- a/src/vs/workbench/services/thread/electron-browser/threadService.ts
+++ b/src/vs/workbench/services/thread/electron-browser/threadService.ts
@@ -107,6 +107,7 @@ class PluginHostProcessManager {
public startPluginHostProcess(onPluginHostMessage: (msg: any) => void): void {
let config = this.contextService.getConfiguration();
let isDev = !config.env.isBuilt || !!config.env.pluginDevelopmentPath;
+ let isTestingFromCli = !!config.env.pluginTestsPath && !config.env.debugBrkPluginHost;
let opts: any = {
env: objects.mixin(objects.clone(process.env), { AMD_ENTRYPOINT: 'vs/workbench/node/pluginHostProcess', PIPE_LOGGING: 'true', VERBOSE_LOGGING: true })
@@ -184,11 +185,18 @@ class PluginHostProcessManager {
consoleArgs = ['%c[Plugin Host]', 'color: blue', ...args];
}
- // Send to local console
- console[logEntry.severity].apply(console, consoleArgs);
+ // Send to local console unless we run tests from cli
+ if (!isTestingFromCli) {
+ console[logEntry.severity].apply(console, consoleArgs);
+ }
+
+ // Log on main side if running tests from cli
+ if (isTestingFromCli) {
+ ipc.send('vscode:log', logEntry);
+ }
// Broadcast to other windows if we are in development mode
- if (isDev) {
+ else if (isDev) {
this.windowService.broadcast({
channel: PLUGIN_LOG_BROADCAST_CHANNEL,
payload: logEntry
From f043b26dc213ae31bbe94aa594846f5ca567ef8d Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:43:13 +0100
Subject: [PATCH 017/588] run integration tests as part of build
---
test/run.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/test/run.sh b/test/run.sh
index 7a8a3924426..93ac3073d55 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -7,6 +7,7 @@ else
ROOT=$(dirname $(dirname $(readlink -f $0)))
fi
+# Unit Tests
if [[ "$OSTYPE" == "darwin"* ]]; then
cd $ROOT ; ulimit -n 4096 ; ATOM_SHELL_INTERNAL_RUN_AS_NODE=1 \
../Electron-Build/Electron.app/Contents/MacOS/Electron \
@@ -16,3 +17,6 @@ else
../Electron-Build/electron \
node_modules/mocha/bin/_mocha $*
fi
+
+# Integration Tests
+./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
\ No newline at end of file
From 31f876f6c433fbaa84a03376a0c31b3e7653dffe Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 07:53:05 +0100
Subject: [PATCH 018/588] try to enable display for linux
---
test/run.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/test/run.sh b/test/run.sh
index 93ac3073d55..c33c03ac96c 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -19,4 +19,9 @@ else
fi
# Integration Tests
+if [[ "$OSTYPE" == "linux" ]]; then
+ export DISPLAY=:99.0
+ sh -e /etc/init.d/xvfb start
+ sleep 3
+fi
./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
\ No newline at end of file
From 6505ab448bde46d72f9b8565035e6f56cc0ae55d Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 08:20:58 +0100
Subject: [PATCH 019/588] tests: make sure to set proper exit codes
---
src/vs/workbench/electron-main/lifecycle.ts | 2 +-
src/vs/workbench/electron-main/windows.ts | 4 ++++
src/vs/workbench/node/pluginHostMain.ts | 12 ++++++------
.../thread/electron-browser/threadService.ts | 7 ++++++-
test/run.sh | 16 +++++++++-------
5 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/src/vs/workbench/electron-main/lifecycle.ts b/src/vs/workbench/electron-main/lifecycle.ts
index 831415103a5..4d0cbc3f5f6 100644
--- a/src/vs/workbench/electron-main/lifecycle.ts
+++ b/src/vs/workbench/electron-main/lifecycle.ts
@@ -68,7 +68,7 @@ export class Lifecycle {
// Windows/Linux: we quit when all windows have closed
// Mac: we only quit when quit was requested
// Tests: we always quit
- if (this.quitRequested || process.platform !== 'darwin' || env.isTestingFromCli) {
+ if (this.quitRequested || process.platform !== 'darwin') {
app.quit();
}
});
diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts
index 81dd55b071c..0d1d2ab0f0f 100644
--- a/src/vs/workbench/electron-main/windows.ts
+++ b/src/vs/workbench/electron-main/windows.ts
@@ -266,6 +266,10 @@ export class WindowsManager {
console[logEntry.severity].apply(console, args);
});
+ ipc.on('vscode:exit', (event: Event, code: number) => {
+ process.exit(code);
+ });
+
UpdateManager.on('update-downloaded', (update: IUpdate) => {
this.sendToFocused('vscode:telemetry', { eventName: 'update:downloaded', data: { version: update.version } });
diff --git a/src/vs/workbench/node/pluginHostMain.ts b/src/vs/workbench/node/pluginHostMain.ts
index cdd8c531459..6364e96aa43 100644
--- a/src/vs/workbench/node/pluginHostMain.ts
+++ b/src/vs/workbench/node/pluginHostMain.ts
@@ -99,7 +99,7 @@ export function createServices(remoteCom: IPluginsIPC, initData: IInitData, shar
}
interface ITestRunner {
- run(testsRoot:string, clb: (error:Error) => void): void;
+ run(testsRoot:string, clb: (error:Error, failures?: number) => void): void;
}
export class PluginHostMain {
@@ -235,7 +235,7 @@ export class PluginHostMain {
// Execute the runner if it follows our spec
if (testRunner && typeof testRunner.run === 'function') {
return new TPromise((c, e) => {
- testRunner.run(env.pluginTestsPath, (error) => {
+ testRunner.run(env.pluginTestsPath, (error, failures) => {
if (error) {
e(error.toString());
} else {
@@ -243,22 +243,22 @@ export class PluginHostMain {
}
// after tests have run, we shutdown the host
- this.gracefulExit();
+ this.gracefulExit(failures && failures > 0 ? 1 /* ERROR */ : 0 /* OK */);
});
});
}
// Otherwise make sure to shutdown anyway even in case of an error
else {
- this.gracefulExit();
+ this.gracefulExit(1 /* ERROR */);
}
return TPromise.wrapError(requireError ? requireError.toString() : nls.localize('pluginTestError', "Path {0} does not point to a valid extension test runner.", env.pluginTestsPath));
}
- private gracefulExit(): void {
+ private gracefulExit(code: number): void {
// to give the PH process a chance to flush any outstanding console
// messages to the main process, we delay the exit() by some time
- setTimeout(() => exit(), 500);
+ setTimeout(() => exit(code), 500);
}
}
\ No newline at end of file
diff --git a/src/vs/workbench/services/thread/electron-browser/threadService.ts b/src/vs/workbench/services/thread/electron-browser/threadService.ts
index fe946ab0837..6c365c26e68 100644
--- a/src/vs/workbench/services/thread/electron-browser/threadService.ts
+++ b/src/vs/workbench/services/thread/electron-browser/threadService.ts
@@ -237,9 +237,14 @@ class PluginHostProcessManager {
}
// Expected development plugin termination: When the plugin host goes down we also shutdown the window
- else {
+ else if (!isTestingFromCli) {
this.windowService.getWindow().close();
}
+
+ // When CLI testing make sure to exit with proper exit code
+ else {
+ ipc.send('vscode:exit', code);
+ }
}
});
});
diff --git a/test/run.sh b/test/run.sh
index c33c03ac96c..8a94edda3a1 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -18,10 +18,12 @@ else
node_modules/mocha/bin/_mocha $*
fi
-# Integration Tests
-if [[ "$OSTYPE" == "linux" ]]; then
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 3
-fi
-./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
\ No newline at end of file
+# Integration Tests (currently not enabled for linux because of missing display)
+# if [[ "$OSTYPE" == "linux" ]]; then
+# export DISPLAY=:99.0
+# sh -e /etc/init.d/xvfb start
+# sleep 3
+# fi
+if [[ "$OSTYPE" == "darwin"* ]]; then
+./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
+fi
\ No newline at end of file
From 807f38ea806f73b4b76866c90f07dfac796ead4b Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 08:30:31 +0100
Subject: [PATCH 020/588] try to enable integration tests for linux
---
.travis.yml | 4 +++-
test/run.sh | 9 +--------
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 7588dfb3d1d..a18fdb63af4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -26,7 +26,9 @@ before_install:
- npm config set python `which python`
- npm install -g gulp
- if [ $TRAVIS_OS_NAME == "linux" ]; then
- export CXX="g++-4.9" CC="gcc-4.9";
+ export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0;
+ sh -e /etc/init.d/xvfb start;
+ sleep 3;
fi
install:
diff --git a/test/run.sh b/test/run.sh
index 8a94edda3a1..24147939853 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -19,11 +19,4 @@ else
fi
# Integration Tests (currently not enabled for linux because of missing display)
-# if [[ "$OSTYPE" == "linux" ]]; then
-# export DISPLAY=:99.0
-# sh -e /etc/init.d/xvfb start
-# sleep 3
-# fi
-if [[ "$OSTYPE" == "darwin"* ]]; then
-./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
-fi
\ No newline at end of file
+./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
\ No newline at end of file
From 60c987e871aefad782be1a35639e11d0ec8b5194 Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Tue, 24 Nov 2015 10:07:53 +0100
Subject: [PATCH 021/588] fix broken style, one file, one style
---
.../api/browser/extHostOutputService.ts | 20 ++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/vs/workbench/api/browser/extHostOutputService.ts b/src/vs/workbench/api/browser/extHostOutputService.ts
index 2fed91fe4a1..3e7f2cfcb18 100644
--- a/src/vs/workbench/api/browser/extHostOutputService.ts
+++ b/src/vs/workbench/api/browser/extHostOutputService.ts
@@ -77,32 +77,34 @@ export class ExtHostOutputService {
@Remotable.MainContext('MainThreadOutputService')
export class MainThreadOutputService {
- constructor(
- @IOutputService private outputService: IOutputService,
- @IWorkbenchEditorService private editorService: IWorkbenchEditorService
- ) {
+ private _outputService: IOutputService;
+ private _editorService: IWorkbenchEditorService;
+
+ constructor( @IOutputService outputService: IOutputService, @IWorkbenchEditorService editorService: IWorkbenchEditorService) {
+ this._outputService = outputService;
+ this._editorService = editorService;
}
public append(channel: string, value: string): TPromise {
- this.outputService.append(channel, value);
+ this._outputService.append(channel, value);
return undefined;
}
public clear(channel: string): TPromise {
- this.outputService.clearOutput(channel);
+ this._outputService.clearOutput(channel);
return undefined;
}
public reveal(channel: string, position: Position): TPromise {
- this.outputService.showOutput(channel, position);
+ this._outputService.showOutput(channel, position);
return undefined;
}
public close(channel: string): TPromise {
- let editors = this.editorService.getVisibleEditors();
+ let editors = this._editorService.getVisibleEditors();
for (let editor of editors) {
if (editor.input.getId() === OUTPUT_EDITOR_INPUT_ID) {
- this.editorService.closeEditor(editor).done(null, onUnexpectedError);
+ this._editorService.closeEditor(editor).done(null, onUnexpectedError);
return undefined;
}
}
From 36783391a72c87a774a71c38ae0d04c3a18215b2 Mon Sep 17 00:00:00 2001
From: isidor
Date: Tue, 24 Nov 2015 11:03:17 +0100
Subject: [PATCH 022/588] debug: show debug environment picker in more
situations.
fixes #458
---
.../parts/debug/electron-browser/debugService.ts | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts
index 44c0b90bbb2..a1b9f8b4c95 100644
--- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts
+++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts
@@ -337,10 +337,14 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
public openConfigFile(sideBySide: boolean): Promise {
const resource = uri.file(paths.join(this.contextService.getWorkspace().resource.fsPath, '/.vscode/launch.json'));
- return this.fileService.resolveContent(resource).then(content => content, err =>
- this.getInitialConfigFileContent().then(content =>
- this.fileService.updateContent(resource, content))
- ).then(() => {
+ return this.fileService.resolveContent(resource).then(content => {
+ const globalConfig = JSON.parse(content.value);
+ if (!globalConfig || !globalConfig.configurations || globalConfig.configurations.length === 0) {
+ return this.createInitialConfigFile(resource);
+ }
+ }, err => this.createInitialConfigFile(resource))
+
+ .then(() => {
this.telemetryService.publicLog('debugConfigure');
return this.editorService.openEditor({
resource: resource,
@@ -391,7 +395,7 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
});
}
- private getInitialConfigFileContent(): TPromise {
+ private createInitialConfigFile(resource: uri): Promise {
return this.quickOpenService.pick(this.adapters, { placeHolder: nls.localize('selectDebug', "Select Debug Environment") })
.then(adapter =>
this.massageInitialConfigurations(adapter).then(() =>
@@ -400,7 +404,7 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
configurations: adapter && adapter.initialConfigurations ? adapter.initialConfigurations : []
}, null, '\t')
)
- );
+ ).then(content => this.fileService.updateContent(resource, content));
}
private massageInitialConfigurations(adapter: Adapter): Promise {
From c5d0d0d78686d5fbb8378cc89ce12499b7a031b1 Mon Sep 17 00:00:00 2001
From: isidor
Date: Tue, 24 Nov 2015 11:19:48 +0100
Subject: [PATCH 023/588] debug: polish initial launch.json generation.
---
.../debug/electron-browser/debugService.ts | 22 +++++++++++++------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts
index a1b9f8b4c95..509e35f76ac 100644
--- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts
+++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts
@@ -338,11 +338,15 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
const resource = uri.file(paths.join(this.contextService.getWorkspace().resource.fsPath, '/.vscode/launch.json'));
return this.fileService.resolveContent(resource).then(content => {
- const globalConfig = JSON.parse(content.value);
+ let globalConfig = null;
+ try {
+ globalConfig = JSON.parse(content.value);
+ } catch (e) { }
+
if (!globalConfig || !globalConfig.configurations || globalConfig.configurations.length === 0) {
- return this.createInitialConfigFile(resource);
+ return this.createInitialConfigFile(resource, content.value);
}
- }, err => this.createInitialConfigFile(resource))
+ }, err => this.createInitialConfigFile(resource, null))
.then(() => {
this.telemetryService.publicLog('debugConfigure');
@@ -395,15 +399,19 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
});
}
- private createInitialConfigFile(resource: uri): Promise {
+ private createInitialConfigFile(resource: uri, previousContent: string): Promise {
return this.quickOpenService.pick(this.adapters, { placeHolder: nls.localize('selectDebug', "Select Debug Environment") })
.then(adapter =>
- this.massageInitialConfigurations(adapter).then(() =>
- JSON.stringify({
+ this.massageInitialConfigurations(adapter).then(() => {
+ if (previousContent && !adapter) {
+ return previousContent;
+ }
+
+ return JSON.stringify({
version: '0.2.0',
configurations: adapter && adapter.initialConfigurations ? adapter.initialConfigurations : []
}, null, '\t')
- )
+ })
).then(content => this.fileService.updateContent(resource, content));
}
From ff6c7a2306a0ccf9f3263e5661e5f7c27e77f011 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 10:20:58 +0100
Subject: [PATCH 024/588] validate BUILD_SOURCEVERSION
---
build/gulpfile.editor.js | 2 +-
build/gulpfile.vscode.js | 2 +-
build/lib/util.js | 11 +++++++++++
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js
index 6c6798c5a0a..f1bd8355b35 100644
--- a/build/gulpfile.editor.js
+++ b/build/gulpfile.editor.js
@@ -14,7 +14,7 @@ var util = require('./lib/util');
var common = require('./gulpfile.common');
var root = path.dirname(__dirname);
-var commit = process.env['BUILD_SOURCEVERSION'] || require('./lib/git').getVersion(root);
+var commit = util.getVersion(root);
// Build
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index b3a0cb057d7..50eb15484d3 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -25,7 +25,7 @@ var util = require('./lib/util');
var buildfile = require('../src/buildfile');
var common = require('./gulpfile.common');
var root = path.dirname(__dirname);
-var commit = process.env['BUILD_SOURCEVERSION'] || require('./lib/git').getVersion(root);
+var commit = util.getVersion(root);
var baseModules = [
'app', 'applicationinsights', 'assert', 'auto-updater', 'browser-window',
diff --git a/build/lib/util.js b/build/lib/util.js
index 5bb82a71055..7424e8e6876 100644
--- a/build/lib/util.js
+++ b/build/lib/util.js
@@ -10,6 +10,7 @@ var _ = require('underscore');
var path = require('path');
var fs = require('fs');
var rimraf = require('rimraf');
+var git = require('./git');
var NoCancellationToken = {
isCancellationRequested: function () {
@@ -275,4 +276,14 @@ exports.downloadExtensions = function(extensions) {
});
return es.merge(streams);
+};
+
+exports.getVersion = function (root) {
+ var version = process.env['BUILD_SOURCEVERSION'];
+
+ if (!version || !/^[0-9a-f]{40}$/i.test(version)) {
+ version = git.getVersion(root);
+ }
+
+ return version;
};
\ No newline at end of file
From 0d4396531e25d9f8489be5b106c09c06f49647b3 Mon Sep 17 00:00:00 2001
From: unknown
Date: Tue, 24 Nov 2015 12:09:59 +0100
Subject: [PATCH 025/588] Webdav network drive not work (fixes #218)
---
src/vs/base/node/extfs.ts | 22 +++++++++++++++----
.../electron-browser/snippetsTracker.ts | 3 ++-
.../common/configurationService.ts | 9 ++++----
.../services/files/node/fileService.ts | 2 +-
4 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/src/vs/base/node/extfs.ts b/src/vs/base/node/extfs.ts
index 4fc46053e96..1c9ca2a1b19 100644
--- a/src/vs/base/node/extfs.ts
+++ b/src/vs/base/node/extfs.ts
@@ -27,7 +27,7 @@ export function readdir(path: string, callback: (error: Error, files: string[])
// Mac: uses NFD unicode form on disk, but we want NFC
// See also https://github.com/nodejs/node/issues/2165
if (platform.isMacintosh) {
- return fs.readdir(path, (error, children) => {
+ return readdirNormalize(path, (error, children) => {
if (error) {
return callback(error, null);
}
@@ -36,9 +36,23 @@ export function readdir(path: string, callback: (error: Error, files: string[])
});
}
- return fs.readdir(path, callback);
+ return readdirNormalize(path, callback);
};
+function readdirNormalize(path: string, callback: (error: Error, files: string[]) => void): void {
+ fs.readdir(path, (error, children) => {
+ if (error) {
+ return callback(error, null);
+ }
+
+ // In some environments we get "." and ".." as entries from the call to readdir().
+ // For example Sharepoint via WebDav on Windows includes them. We never want those
+ // entries in the result set though because they are not valid children of the folder
+ // for our concerns.
+ return callback(null, children.filter((c) => c !== '.' && c !== '..'));
+ })
+}
+
export function mkdirp(path: string, mode: number, callback: (error: Error) => void): void {
fs.exists(path, (exists) => {
if (exists) {
@@ -91,7 +105,7 @@ export function copy(source: string, target: string, callback: (error: Error) =>
}
mkdirp(target, stat.mode & 511, (err) => {
- fs.readdir(source, (err, files) => {
+ readdir(source, (err, files) => {
loop(files, (file: string, clb: (error: Error) => void) => {
copy(paths.join(source, file), paths.join(target, file), clb, copiedSources);
}, callback);
@@ -204,7 +218,7 @@ function rmRecursive(path: string, callback: (error: Error) => void): void {
fs.unlink(path, callback);
}
} else {
- fs.readdir(path, (err, children) => {
+ readdir(path, (err, children) => {
if (err || !children) {
callback(err);
} else if (children.length === 0) {
diff --git a/src/vs/workbench/parts/snippets/electron-browser/snippetsTracker.ts b/src/vs/workbench/parts/snippets/electron-browser/snippetsTracker.ts
index 730a715b1f5..61faf573bf3 100644
--- a/src/vs/workbench/parts/snippets/electron-browser/snippetsTracker.ts
+++ b/src/vs/workbench/parts/snippets/electron-browser/snippetsTracker.ts
@@ -12,6 +12,7 @@ import async = require('vs/base/common/async');
import Errors = require('vs/base/common/errors');
import URI from 'vs/base/common/uri';
import winjs = require('vs/base/common/winjs.base');
+import extfs = require('vs/base/node/extfs');
import lifecycle = require('vs/base/common/lifecycle');
import tmsnippets = require('vs/editor/node/textMate/TMSnippets');
import {IFileService} from 'vs/platform/files/common/files';
@@ -100,7 +101,7 @@ export class SnippetsTracker implements workbenchExt.IWorkbenchContribution {
function readDir(path: string): winjs.TPromise {
return new winjs.TPromise((c, e, p) => {
- fs.readdir(path,(err, files) => {
+ extfs.readdir(path,(err, files) => {
if (err) {
return e(err);
}
diff --git a/src/vs/workbench/services/configuration/common/configurationService.ts b/src/vs/workbench/services/configuration/common/configurationService.ts
index d15ada7e882..e30b091b837 100644
--- a/src/vs/workbench/services/configuration/common/configurationService.ts
+++ b/src/vs/workbench/services/configuration/common/configurationService.ts
@@ -11,6 +11,7 @@ import uri from 'vs/base/common/uri';
import strings = require('vs/base/common/strings');
import platform = require('vs/base/common/platform');
import paths = require('vs/base/common/paths');
+import extfs = require('vs/base/node/extfs');
import {IConfigFile} from 'vs/platform/configuration/common/model';
import objects = require('vs/base/common/objects');
import {IStat, IContent, ConfigurationService as CommonConfigurationService} from 'vs/platform/configuration/common/configurationService';
@@ -62,9 +63,9 @@ export class ConfigurationService extends CommonConfigurationService {
protected resolveStat(resource: uri): TPromise {
return new TPromise((c, e) => {
- fs.readdir(resource.fsPath, (error, childs) => {
+ extfs.readdir(resource.fsPath, (error, childs) => {
if (error) {
- if (error.code === 'ENOTDIR') {
+ if ((error).code === 'ENOTDIR') {
c({
resource: resource,
isDirectory: false
@@ -158,7 +159,7 @@ export class MigrationConfigurationService extends ConfigurationService {
return c(null); // we never migrate more than once
}
- return fs.readdir(oldSettingsFolder, (error, children) => {
+ return extfs.readdir(oldSettingsFolder, (error, children) => {
if (error) {
return c(null); // old .settings folder does not exist or is a file
}
@@ -187,7 +188,7 @@ export class MigrationConfigurationService extends ConfigurationService {
}, () => {
this.messageService.show(severity.Info, nls.localize('settingsMigrated', "VSCode is now using a top level '.vscode' folder to store settings. We moved your existing settings files from the '.settings' folder."));
- return fs.readdir(oldSettingsFolder, (error, children) => {
+ return extfs.readdir(oldSettingsFolder, (error, children) => {
if (error || children.length > 0) {
return c(null); // done
}
diff --git a/src/vs/workbench/services/files/node/fileService.ts b/src/vs/workbench/services/files/node/fileService.ts
index ef3be5934bc..8b041546825 100644
--- a/src/vs/workbench/services/files/node/fileService.ts
+++ b/src/vs/workbench/services/files/node/fileService.ts
@@ -678,7 +678,7 @@ export class StatResolver {
fileStat = fsstat;
if (fileStat.isDirectory()) {
- fs.readdir(fileResource.fsPath, (error, result) => {
+ extfs.readdir(fileResource.fsPath, (error, result) => {
this(null, result ? result.length : 0);
});
} else {
From 4aff6e8fda837a8fb0e7f06859ab09e23962ce8c Mon Sep 17 00:00:00 2001
From: unknown
Date: Tue, 24 Nov 2015 12:26:04 +0100
Subject: [PATCH 026/588] fix issue with getting path label from root drive
---
src/vs/base/common/labels.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/vs/base/common/labels.ts b/src/vs/base/common/labels.ts
index 80e8005d04f..fd30fb6ac1a 100644
--- a/src/vs/base/common/labels.ts
+++ b/src/vs/base/common/labels.ts
@@ -41,14 +41,14 @@ export function getPathLabel(arg1: uri|string, arg2?: uri|string|IWorkspaceProvi
var absolutePath = getPath(arg1);
if (basepath && paths.isEqualOrParent(absolutePath, basepath)) {
- return paths.normalize(absolutePath.substr(basepath.length + 1 /* no leading slash/backslash */), platform.isNative);
+ return paths.normalize(strings.ltrim(absolutePath.substr(basepath.length), paths.nativeSep), true);
}
if (platform.isWindows && absolutePath[1] === ':') {
- return paths.normalize(absolutePath.charAt(0).toUpperCase() + absolutePath.slice(1), platform.isNative);
+ return paths.normalize(absolutePath.charAt(0).toUpperCase() + absolutePath.slice(1), true);
}
- return paths.normalize(absolutePath, platform.isNative);
+ return paths.normalize(absolutePath, true);
}
function getPath(arg1: uri|string|IWorkspaceProvider): string {
From b367216b91732eb4545adbc243f9406be544a8ae Mon Sep 17 00:00:00 2001
From: unknown
Date: Tue, 24 Nov 2015 12:31:58 +0100
Subject: [PATCH 027/588] improve initial progress reporting for slow loading
file shares
---
src/vs/workbench/browser/parts/editor/editorPart.ts | 4 ++--
.../workbench/browser/parts/sidebar/sidebarPart.ts | 12 +++++-------
.../parts/files/browser/views/explorerView.ts | 4 +---
.../parts/files/browser/views/explorerViewer.ts | 4 +---
4 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts
index eb6c62098d0..c2adde705cc 100644
--- a/src/vs/workbench/browser/parts/editor/editorPart.ts
+++ b/src/vs/workbench/browser/parts/editor/editorPart.ts
@@ -254,8 +254,8 @@ export class EditorPart extends Part implements IEditorPart {
assert.ok(editorDescriptor, strings.format('Can not find a registered editor for the input {0}', input));
// Progress Indication
- let loadingPromise: TPromise = TPromise.timeout(800).then(() => {
- if (editorOpenToken === this.editorOpenToken[position] && this.partService.isCreated()) {
+ let loadingPromise: TPromise = TPromise.timeout(this.partService.isCreated() ? 800 : 3200 /* less ugly initial startup */).then(() => {
+ if (editorOpenToken === this.editorOpenToken[position]) {
this.sideBySideControl.getProgressBar(position).infinite().getContainer().show();
this.sideBySideControl.setLoading(position, input);
}
diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts
index e9e0c43feff..3bd38e70224 100644
--- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts
+++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts
@@ -216,10 +216,8 @@ export class SidebarPart extends Part implements IViewletService {
return viewlet;
});
- // Report progress for slow loading promises if workbench is already created and thus this is user initiated
- if (this.partService.isCreated()) {
- progressService.showWhile(loaderPromise, 800);
- }
+ // Report progress for slow loading viewlets
+ progressService.showWhile(loaderPromise, this.partService.isCreated() ? 800 : 3200 /* less ugly initial startup */);
// Add to Promise Cache until Loaded
this.viewletLoaderPromises[id] = loaderPromise;
@@ -265,10 +263,10 @@ export class SidebarPart extends Part implements IViewletService {
createViewletPromise = TPromise.as(null);
}
- // Report progress for slow loading promises (but only if we did not create the viewlet before already and only if this is user initiated)
+ // Report progress for slow loading viewlets (but only if we did not create the viewlet before already)
let progressService = this.mapProgressServiceToViewlet[viewlet.getId()];
- if (progressService && !viewletContainer && this.partService.isCreated()) {
- this.mapProgressServiceToViewlet[viewlet.getId()].showWhile(createViewletPromise, 800);
+ if (progressService && !viewletContainer) {
+ this.mapProgressServiceToViewlet[viewlet.getId()].showWhile(createViewletPromise, this.partService.isCreated() ? 800 : 3200 /* less ugly initial startup */);
}
// Fill Content and Actions
diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts
index 50f7d27c02c..48430dc8461 100644
--- a/src/vs/workbench/parts/files/browser/views/explorerView.ts
+++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts
@@ -682,9 +682,7 @@ export class ExplorerView extends CollapsibleViewletView {
});
}, (e: any) => Promise.wrapError(e));
- if (this.partService.isCreated()) {
- this.progressService.showWhile(promise, instantProgress ? 0 : 800);
- }
+ this.progressService.showWhile(promise, instantProgress ? 0 : this.partService.isCreated() ? 800 : 3200 /* less ugly initial startup */);
return promise;
}
diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
index 7011ebed01a..cdc4ec22f3e 100644
--- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
+++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
@@ -98,9 +98,7 @@ export class FileDataSource implements Tree.IDataSource {
return []; // we could not resolve any children because of an error
});
- if (this.partService.isCreated()) {
- this.progressService.showWhile(promise, 800);
- }
+ this.progressService.showWhile(promise, this.partService.isCreated() ? 800 : 3200 /* less ugly initial startup */);
return promise;
}
From 616b9ad9d8f24792a804c94187ae5805a68f16b6 Mon Sep 17 00:00:00 2001
From: Alex Dima
Date: Tue, 24 Nov 2015 15:24:56 +0100
Subject: [PATCH 028/588] fixes #144
---
.../contrib/format/common/formatCommand.ts | 62 ++--
.../format/test/common/formatCommand.test.ts | 295 ++++++++++++++++++
.../common/model/editableTextModel.test.ts | 35 +++
3 files changed, 363 insertions(+), 29 deletions(-)
create mode 100644 src/vs/editor/contrib/format/test/common/formatCommand.test.ts
diff --git a/src/vs/editor/contrib/format/common/formatCommand.ts b/src/vs/editor/contrib/format/common/formatCommand.ts
index 65b1df24a17..37f0edce92c 100644
--- a/src/vs/editor/contrib/format/common/formatCommand.ts
+++ b/src/vs/editor/contrib/format/common/formatCommand.ts
@@ -23,8 +23,7 @@ export class EditOperationsCommand implements EditorCommon.ICommand {
public getEditOperations(model: EditorCommon.ITokenizedModel, builder: EditorCommon.IEditOperationBuilder): void {
this._edits
// We know that this edit.range comes from the mirror model, so it should only contain \n and no \r's
- .map((edit) => this.fixLineTerminators(edit, model) )
- .map((edit) => this.trimEdit(edit, model))
+ .map((edit) => EditOperationsCommand.trimEdit(edit, model))
.filter((edit) => edit !== null) // produced above in case the edit.text is identical to the existing text
.forEach((edit) => builder.addEditOperation(Range.lift(edit.range), edit.text));
@@ -50,9 +49,8 @@ export class EditOperationsCommand implements EditorCommon.ICommand {
return helper.getTrackedSelection(this._selectionId);
}
- private fixLineTerminators(edit: EditorCommon.ISingleEditOperation, model: EditorCommon.ITokenizedModel) : EditorCommon.ISingleEditOperation {
+ static fixLineTerminators(edit: EditorCommon.ISingleEditOperation, model: EditorCommon.ITokenizedModel): void {
edit.text = edit.text.replace(/\r\n|\r|\n/g, model.getEOL());
- return edit;
}
/**
@@ -63,42 +61,48 @@ export class EditOperationsCommand implements EditorCommon.ICommand {
* bug #15108. There the cursor was jumping since the tracked selection was in the middle of the range edit
* and was lost.
*/
- private trimEdit(edit:EditorCommon.ISingleEditOperation, model: EditorCommon.ITokenizedModel): EditorCommon.ISingleEditOperation {
+ static trimEdit(edit:EditorCommon.ISingleEditOperation, model: EditorCommon.ITokenizedModel): EditorCommon.ISingleEditOperation {
- var currentText = model.getValueInRange(edit.range);
+ this.fixLineTerminators(edit, model);
+
+ return this._trimEdit(model.validateRange(edit.range), edit.text, edit.forceMoveMarkers, model);
+ }
+
+ static _trimEdit(editRange:Range, editText:string, editForceMoveMarkers:boolean, model: EditorCommon.ITokenizedModel): EditorCommon.ISingleEditOperation {
+
+ let currentText = model.getValueInRange(editRange);
// Find the equal characters in the front
- var commonPrefixLength = Strings.commonPrefixLength(edit.text, currentText);
+ let commonPrefixLength = Strings.commonPrefixLength(editText, currentText);
- // If the two strings are identical, return no edit
- if (commonPrefixLength === currentText.length && commonPrefixLength === edit.text.length) {
+ // If the two strings are identical, return no edit (no-op)
+ if (commonPrefixLength === currentText.length && commonPrefixLength === editText.length) {
return null;
}
- // Only compute a common suffix if none of the strings is already fully contained in the prefix
- var commonSuffixLength = 0;
- if (commonPrefixLength !== currentText.length && commonPrefixLength !== edit.text.length) {
- commonSuffixLength = Strings.commonSuffixLength(edit.text, currentText);
+ if (commonPrefixLength > 0) {
+ // Apply front trimming
+ let newStartPosition = model.modifyPosition(editRange.getStartPosition(), commonPrefixLength);
+ editRange = new Range(newStartPosition.lineNumber, newStartPosition.column, editRange.endLineNumber, editRange.endColumn);
+ editText = editText.substring(commonPrefixLength);
+ currentText = currentText.substr(commonPrefixLength);
}
- // Adjust start position
- var newStartPosition = new Position(edit.range.startLineNumber, edit.range.startColumn);
- newStartPosition = model.modifyPosition(newStartPosition, commonPrefixLength);
+ // Find the equal characters in the rear
+ let commonSuffixLength = Strings.commonSuffixLength(editText, currentText);
- // Adjust end position
- var newEndPosition = new Position(edit.range.endLineNumber, edit.range.endColumn);
- newEndPosition = model.modifyPosition(newEndPosition, -commonSuffixLength);
-
- //Trim the text
- var newText = edit.text.slice(commonPrefixLength, edit.text.length - commonSuffixLength);
+ if (commonSuffixLength > 0) {
+ // Apply rear trimming
+ let newEndPosition = model.modifyPosition(editRange.getEndPosition(), -commonSuffixLength);
+ editRange = new Range(editRange.startLineNumber, editRange.startColumn, newEndPosition.lineNumber, newEndPosition.column);
+ editText = editText.substring(0, editText.length - commonSuffixLength);
+ currentText = currentText.substring(0, currentText.length - commonSuffixLength);
+ }
return {
- text: newText,
- range: {
- startLineNumber:newStartPosition.lineNumber,
- startColumn:newStartPosition.column,
- endLineNumber:newEndPosition.lineNumber,
- endColumn: newEndPosition.column
- }};
+ text: editText,
+ range: editRange,
+ forceMoveMarkers: editForceMoveMarkers
+ };
}
}
diff --git a/src/vs/editor/contrib/format/test/common/formatCommand.test.ts b/src/vs/editor/contrib/format/test/common/formatCommand.test.ts
new file mode 100644
index 00000000000..897863c949c
--- /dev/null
+++ b/src/vs/editor/contrib/format/test/common/formatCommand.test.ts
@@ -0,0 +1,295 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+import assert = require('assert');
+import {Range} from 'vs/editor/common/core/range';
+import TU = require('vs/editor/test/common/commands/commandTestUtils');
+import {EditOperationsCommand} from 'vs/editor/contrib/format/common/formatCommand';
+import {Selection} from 'vs/editor/common/core/selection';
+import {Model} from 'vs/editor/common/model/model';
+import EditorCommon = require('vs/editor/common/editorCommon');
+
+function editOp(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number, text:string[]): EditorCommon.ISingleEditOperation {
+ return {
+ range: new Range(startLineNumber, startColumn, endLineNumber, endColumn),
+ text: text.join('\n'),
+ forceMoveMarkers: false
+ };
+}
+
+suite('FormatCommand.trimEdit', () => {
+ function testTrimEdit(lines: string[], edit:EditorCommon.ISingleEditOperation, expected:EditorCommon.ISingleEditOperation): void {
+ let model = new Model(lines.join('\n'), null);
+ let actual = EditOperationsCommand.trimEdit(edit, model);
+ assert.deepEqual(actual, expected);
+ model.dispose();
+ }
+
+ test('single-line no-op', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,1,10, [
+ 'some text'
+ ]),
+ null
+ )
+ });
+
+ test('multi-line no-op 1', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,2,16, [
+ 'some text',
+ 'some other text'
+ ]),
+ null
+ )
+ });
+
+ test('multi-line no-op 2', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,2,1, [
+ 'some text',
+ ''
+ ]),
+ null
+ )
+ });
+
+ test('simple prefix, no suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,1,10, [
+ 'some interesting thing'
+ ]),
+ editOp(1,6,1,10, [
+ 'interesting thing'
+ ])
+ )
+ });
+
+ test('whole line prefix, no suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,1,10, [
+ 'some text',
+ 'interesting thing'
+ ]),
+ editOp(1,10,1,10, [
+ '',
+ 'interesting thing'
+ ])
+ )
+ });
+
+ test('multi-line prefix, no suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,2,16, [
+ 'some text',
+ 'some other interesting thing'
+ ]),
+ editOp(2,12,2,16, [
+ 'interesting thing'
+ ])
+ )
+ });
+
+ test('no prefix, simple suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,1,10, [
+ 'interesting text'
+ ]),
+ editOp(1,1,1,5, [
+ 'interesting'
+ ])
+ )
+ });
+
+ test('no prefix, whole line suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,1,10, [
+ 'interesting thing',
+ 'some text'
+ ]),
+ editOp(1,1,1,1, [
+ 'interesting thing',
+ ''
+ ])
+ )
+ });
+
+ test('no prefix, multi-line suffix', () => {
+ testTrimEdit(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ editOp(1,1,2,16, [
+ 'interesting thing text',
+ 'some other text'
+ ]),
+ editOp(1,1,1,5, [
+ 'interesting thing'
+ ])
+ )
+ });
+
+ test('no overlapping prefix & suffix', () => {
+ testTrimEdit(
+ [
+ 'some cool text'
+ ],
+ editOp(1,1,1,15, [
+ 'some interesting text'
+ ]),
+ editOp(1,6,1,10, [
+ 'interesting'
+ ])
+ )
+ });
+
+ test('overlapping prefix & suffix 1', () => {
+ testTrimEdit(
+ [
+ 'some cool text'
+ ],
+ editOp(1,1,1,15, [
+ 'some cool cool text'
+ ]),
+ editOp(1,11,1,11, [
+ 'cool '
+ ])
+ )
+ });
+
+ test('overlapping prefix & suffix 2', () => {
+ testTrimEdit(
+ [
+ 'some cool cool text'
+ ],
+ editOp(1,1,1,29, [
+ 'some cool text'
+ ]),
+ editOp(1,11,1,16, [
+ ''
+ ])
+ )
+ });
+});
+
+suite('FormatCommand', () => {
+ function testFormatCommand(lines: string[], selection: Selection, edits:EditorCommon.ISingleEditOperation[], expectedLines: string[], expectedSelection: Selection): void {
+ TU.testCommand(lines, null, selection, (sel) => new EditOperationsCommand(edits, sel), expectedLines, expectedSelection);
+ }
+
+ test('no-op', () => {
+ testFormatCommand(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ new Selection(2,1,2,5),
+ [
+ editOp(1, 1, 2, 16, [
+ 'some text',
+ 'some other text'
+ ])
+ ],
+ [
+ 'some text',
+ 'some other text'
+ ],
+ new Selection(2,1,2,5)
+ );
+ });
+
+ test('trim beginning', () => {
+ testFormatCommand(
+ [
+ 'some text',
+ 'some other text'
+ ],
+ new Selection(2,1,2,5),
+ [
+ editOp(1, 1, 2, 16, [
+ 'some text',
+ 'some new other text'
+ ])
+ ],
+ [
+ 'some text',
+ 'some new other text'
+ ],
+ new Selection(2,1,2,5)
+ );
+ });
+
+ test('issue #144', () => {
+ testFormatCommand(
+ [
+ 'package caddy',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ],
+ new Selection(1,1,1,1),
+ [
+ editOp(1, 1, 6, 1, [
+ 'package caddy',
+ '',
+ 'import "fmt"',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ])
+ ],
+ [
+ 'package caddy',
+ '',
+ 'import "fmt"',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ],
+ new Selection(1,1,1,1)
+ );
+ });
+
+});
\ No newline at end of file
diff --git a/src/vs/editor/test/common/model/editableTextModel.test.ts b/src/vs/editor/test/common/model/editableTextModel.test.ts
index eeae4109e0f..75c6088e86f 100644
--- a/src/vs/editor/test/common/model/editableTextModel.test.ts
+++ b/src/vs/editor/test/common/model/editableTextModel.test.ts
@@ -1139,6 +1139,41 @@ suite('EditorModel - EditableTextModel.applyEdits', () => {
);
});
+ test('issue #144', () => {
+ testApplyEdits(
+ [
+ 'package caddy',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ],
+ [
+ editOp(1, 1, 6, 1, [
+ 'package caddy',
+ '',
+ 'import "fmt"',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ])
+ ],
+ [
+ 'package caddy',
+ '',
+ 'import "fmt"',
+ '',
+ 'func main() {',
+ '\tfmt.Println("Hello World! :)")',
+ '}',
+ ''
+ ]
+ );
+ });
+
function assertSyncedModels(text:string, callback:(model:EditableTextModel, assertMirrorModels:()=>void)=>void, setup:(model:EditableTextModel)=>void = null): void {
var model = new EditableTextModel([], TextModel.toRawText(text), null);
model.setEOL(EditorCommon.EndOfLineSequence.LF);
From 3f7972116aac76ecf511a553ff6a675a7bb797da Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Tue, 24 Nov 2015 16:19:14 +0100
Subject: [PATCH 029/588] Fix #47, add support for comments and brackets for
JSX
---
extensions/javascript/javascript.configuration.json | 11 +++++++++++
extensions/javascript/package.json | 3 ++-
2 files changed, 13 insertions(+), 1 deletion(-)
create mode 100644 extensions/javascript/javascript.configuration.json
diff --git a/extensions/javascript/javascript.configuration.json b/extensions/javascript/javascript.configuration.json
new file mode 100644
index 00000000000..da6ed547150
--- /dev/null
+++ b/extensions/javascript/javascript.configuration.json
@@ -0,0 +1,11 @@
+{
+ "comments": {
+ "lineComment": "//",
+ "blockComment": [ "/*", "*/" ]
+ },
+ "brackets": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"]
+ ]
+}
\ No newline at end of file
diff --git a/extensions/javascript/package.json b/extensions/javascript/package.json
index e9c2ed6a9a1..0b60a23412b 100644
--- a/extensions/javascript/package.json
+++ b/extensions/javascript/package.json
@@ -7,7 +7,8 @@
"languages": [{
"id": "javascriptreact",
"aliases": ["JavaScript React","jsx"],
- "extensions": [".jsx"]
+ "extensions": [".jsx"],
+ "configuration": "./javascript.configuration.json"
},
{
"id": "javascript",
From c34f50f8049351708956c0ca36849bea58b94b7b Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Tue, 24 Nov 2015 16:39:45 +0100
Subject: [PATCH 030/588] Let shouldAutotriggerSuggestImpl always return true,
fixes #179
---
src/vs/editor/common/modes/abstractMode.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/vs/editor/common/modes/abstractMode.ts b/src/vs/editor/common/modes/abstractMode.ts
index ab68df67cc6..211c8460392 100644
--- a/src/vs/editor/common/modes/abstractMode.ts
+++ b/src/vs/editor/common/modes/abstractMode.ts
@@ -178,7 +178,7 @@ export class AbstractMode implements Modes.IMode {
}
public shouldAutotriggerSuggestImpl(context:Modes.ILineContext, offset:number, triggeredByCharacter:string):boolean {
- return false;
+ return true;
}
public shouldShowEmptySuggestionList():boolean {
From f84a9013f35989dea57dbd76564aa0be00dac45f Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 16:55:01 +0100
Subject: [PATCH 031/588] fix comment
---
test/run.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/run.sh b/test/run.sh
index 24147939853..93ac3073d55 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -18,5 +18,5 @@ else
node_modules/mocha/bin/_mocha $*
fi
-# Integration Tests (currently not enabled for linux because of missing display)
+# Integration Tests
./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out
\ No newline at end of file
From 4163a8dcd553494ff78ac4991036b978e087cab3 Mon Sep 17 00:00:00 2001
From: Martin Aeschlimann
Date: Tue, 24 Nov 2015 16:56:40 +0100
Subject: [PATCH 032/588] [json] add tm grammer, not yet enabled
---
extensions/json/OSSREADME.json | 22 ++
extensions/json/package.json | 19 ++
extensions/json/syntaxes/JSON.tmLanguage | 264 +++++++++++++++++++++++
3 files changed, 305 insertions(+)
create mode 100644 extensions/json/OSSREADME.json
create mode 100644 extensions/json/package.json
create mode 100644 extensions/json/syntaxes/JSON.tmLanguage
diff --git a/extensions/json/OSSREADME.json b/extensions/json/OSSREADME.json
new file mode 100644
index 00000000000..2d12a69da84
--- /dev/null
+++ b/extensions/json/OSSREADME.json
@@ -0,0 +1,22 @@
+// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
+[{
+ "name": "textmate/json.tmbundle",
+ "version": "0.0.0",
+ "license": "TextMate Bundle License",
+ "repositoryURL": "https://github.com/textmate/json.tmbundle",
+ "licenseDetail": [
+ "Copyright (c) textmate-json.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ]
+}]
diff --git a/extensions/json/package.json b/extensions/json/package.json
new file mode 100644
index 00000000000..b68380b554f
--- /dev/null
+++ b/extensions/json/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "json",
+ "version": "0.1.0",
+ "publisher": "vscode",
+ "engines": { "vscode": "*" },
+ "contributes": {
+ "languages": [{
+ "id": "json",
+ "aliases": ["JSON", "json"],
+ "extensions": [".json", ".bowerrc", ".jshintrc", ".jscsrc", ".eslintrc"],
+ "mimetypes": ["application/json"]
+ }],
+ "grammars": [{
+ // "language": "json" : commented out for now, will add once we have rule for comments
+ "scopeName": "source.json",
+ "path": "./syntaxes/JSON.tmLanguage"
+ }]
+ }
+}
\ No newline at end of file
diff --git a/extensions/json/syntaxes/JSON.tmLanguage b/extensions/json/syntaxes/JSON.tmLanguage
new file mode 100644
index 00000000000..b158162b2a7
--- /dev/null
+++ b/extensions/json/syntaxes/JSON.tmLanguage
@@ -0,0 +1,264 @@
+
+
+
+
+ fileTypes
+
+ json
+
+ keyEquivalent
+ ^~J
+ name
+ JSON
+ patterns
+
+
+ include
+ #value
+
+
+ repository
+
+ array
+
+ begin
+ \[
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.array.begin.json
+
+
+ end
+ \]
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.array.end.json
+
+
+ name
+ meta.structure.array.json
+ patterns
+
+
+ include
+ #value
+
+
+ match
+ ,
+ name
+ punctuation.separator.array.json
+
+
+ match
+ [^\s\]]
+ name
+ invalid.illegal.expected-array-separator.json
+
+
+
+ constant
+
+ match
+ \b(?:true|false|null)\b
+ name
+ constant.language.json
+
+ number
+
+ comment
+ handles integer and decimal numbers
+ match
+ (?x: # turn on extended mode
+ -? # an optional minus
+ (?:
+ 0 # a zero
+ | # ...or...
+ [1-9] # a 1-9 character
+ \d* # followed by zero or more digits
+ )
+ (?:
+ (?:
+ \. # a period
+ \d+ # followed by one or more digits
+ )?
+ (?:
+ [eE] # an e character
+ [+-]? # followed by an option +/-
+ \d+ # followed by one or more digits
+ )? # make exponent optional
+ )? # make decimal portion optional
+ )
+ name
+ constant.numeric.json
+
+ object
+
+ begin
+ \{
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.dictionary.begin.json
+
+
+ comment
+ a JSON object
+ end
+ \}
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.dictionary.end.json
+
+
+ name
+ meta.structure.dictionary.json
+ patterns
+
+
+ comment
+ the JSON object key
+ include
+ #string
+
+
+ begin
+ :
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.separator.dictionary.key-value.json
+
+
+ end
+ (,)|(?=\})
+ endCaptures
+
+ 1
+
+ name
+ punctuation.separator.dictionary.pair.json
+
+
+ name
+ meta.structure.dictionary.value.json
+ patterns
+
+
+ comment
+ the JSON object value
+ include
+ #value
+
+
+ match
+ [^\s,]
+ name
+ invalid.illegal.expected-dictionary-separator.json
+
+
+
+
+ match
+ [^\s\}]
+ name
+ invalid.illegal.expected-dictionary-separator.json
+
+
+
+ string
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.begin.json
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.string.end.json
+
+
+ name
+ string.quoted.double.json
+ patterns
+
+
+ match
+ (?x: # turn on extended mode
+ \\ # a literal backslash
+ (?: # ...followed by...
+ ["\\/bfnrt] # one of these characters
+ | # ...or...
+ u # a u
+ [0-9a-fA-F]{4} # and four hex digits
+ )
+ )
+ name
+ constant.character.escape.json
+
+
+ match
+ \\.
+ name
+ invalid.illegal.unrecognized-string-escape.json
+
+
+
+ value
+
+ comment
+ the 'value' diagram at http://json.org
+ patterns
+
+
+ include
+ #constant
+
+
+ include
+ #number
+
+
+ include
+ #string
+
+
+ include
+ #array
+
+
+ include
+ #object
+
+
+
+
+ scopeName
+ source.json
+ uuid
+ 0C3868E4-F96B-4E55-B204-1DCB5A20748B
+
+
\ No newline at end of file
From 62960334ae0cfe1d0cb3fbd69704496b75e6ab12 Mon Sep 17 00:00:00 2001
From: Francois Valdy
Date: Tue, 24 Nov 2015 17:12:59 +0100
Subject: [PATCH 033/588] Typo fixes for src/vs/workbench/services
---
.../parts/tasks/electron-browser/task.contribution.ts | 2 +-
src/vs/workbench/parts/tasks/node/processRunnerSystem.ts | 4 ++--
.../services/configuration/common/configurationService.ts | 8 ++++----
src/vs/workbench/services/editor/common/editorService.ts | 4 ++--
.../services/files/electron-browser/fileService.ts | 2 +-
src/vs/workbench/services/files/node/fileService.ts | 6 +++---
src/vs/workbench/services/files/node/watcher/common.ts | 2 +-
.../workbench/services/message/browser/messageService.ts | 2 +-
.../services/quickopen/browser/quickOpenService.ts | 2 +-
src/vs/workbench/services/search/node/searchService.ts | 4 ++--
.../workbench/services/workspace/common/contextService.ts | 2 +-
11 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
index 818660543da..be0c9d2dcab 100644
--- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
+++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
@@ -861,7 +861,7 @@ if (Env.enableTasks) {
},
'location': {
'type': 'integer',
- 'description': nls.localize('JsonSchema.pattern.location', 'The match group index of the problem\'s location. Valid location patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn). If omitted line and colum is assumed.')
+ 'description': nls.localize('JsonSchema.pattern.location', 'The match group index of the problem\'s location. Valid location patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn). If omitted line and column is assumed.')
},
'line': {
'type': 'integer',
diff --git a/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts b/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
index 168d832d9d1..4e42eb7845d 100644
--- a/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
+++ b/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
@@ -50,7 +50,7 @@ export class ProcessRunnerSystem extends EventEmitter implements ITaskSystem {
private childProcess: LineProcess;
private activeTaskIdentifier: string;
- constructor(fileConfig:FileConfig.ExternalTaskRunnerConfiguration, variables:SystemVariables, markerService:IMarkerService, modelService: IModelService, telemetryService: ITelemetryService, outputService:IOutputService, outputChannel:string, clearOuput: boolean = true) {
+ constructor(fileConfig:FileConfig.ExternalTaskRunnerConfiguration, variables:SystemVariables, markerService:IMarkerService, modelService: IModelService, telemetryService: ITelemetryService, outputService:IOutputService, outputChannel:string, clearOutput: boolean = true) {
super();
this.fileConfig = fileConfig;
this.variables = variables;
@@ -65,7 +65,7 @@ export class ProcessRunnerSystem extends EventEmitter implements ITaskSystem {
this.childProcess = null;
this.activeTaskIdentifier = null;
- if (clearOuput) {
+ if (clearOutput) {
this.clearOutput();
}
this.errorsShown = false;
diff --git a/src/vs/workbench/services/configuration/common/configurationService.ts b/src/vs/workbench/services/configuration/common/configurationService.ts
index e30b091b837..cac3b858ca0 100644
--- a/src/vs/workbench/services/configuration/common/configurationService.ts
+++ b/src/vs/workbench/services/configuration/common/configurationService.ts
@@ -63,7 +63,7 @@ export class ConfigurationService extends CommonConfigurationService {
protected resolveStat(resource: uri): TPromise {
return new TPromise((c, e) => {
- extfs.readdir(resource.fsPath, (error, childs) => {
+ extfs.readdir(resource.fsPath, (error, children) => {
if (error) {
if ((error).code === 'ENOTDIR') {
c({
@@ -77,7 +77,7 @@ export class ConfigurationService extends CommonConfigurationService {
c({
resource: resource,
isDirectory: true,
- children: childs.map((child) => {
+ children: children.map((child) => {
if (platform.isMacintosh) {
child = strings.normalizeNFC(child); // Mac: uses NFD unicode form on disk, but we want NFC
}
@@ -109,7 +109,7 @@ export class ConfigurationService extends CommonConfigurationService {
protected loadWorkspaceConfiguration(section?: string): TPromise<{ [relativeWorkspacePath: string]: IConfigFile }> {
- // Return early if we dont have a workspace
+ // Return early if we don't have a workspace
if (!this.contextService.getWorkspace()) {
return Promise.as({});
}
@@ -123,7 +123,7 @@ export class ConfigurationService extends CommonConfigurationService {
let globalSettings = this.contextService.getOptions().globalSettings;
return {
contents: objects.mixin(
- objects.clone(defaults.contents), // target: default values (but dont modify!)
+ objects.clone(defaults.contents), // target: default values (but don't modify!)
globalSettings.settings, // source: global configured values
true // overwrite
),
diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts
index 4c065b61e26..27181d733dc 100644
--- a/src/vs/workbench/services/editor/common/editorService.ts
+++ b/src/vs/workbench/services/editor/common/editorService.ts
@@ -55,7 +55,7 @@ export interface IWorkbenchEditorService extends IEditorService {
isVisible(input: IEditorInput, includeDiff: boolean): boolean;
/**
- * Opens an Editor on the given input with the provided options at the given position. If the input paramater
+ * Opens an Editor on the given input with the provided options at the given position. If the input parameter
* is null, will cause the currently opened editor at the position to close. If sideBySide parameter is provided,
* causes the editor service to decide in what position to open the input.
*/
@@ -94,7 +94,7 @@ export interface IWorkbenchEditorService extends IEditorService {
closeEditors(othersOnly?: boolean): TPromise;
/**
- * Focus the editor at the provided position. If position is not provided, the current active editor is focussed.
+ * Focus the editor at the provided position. If position is not provided, the current active editor is focused.
*/
focusEditor(editor?: IEditor): TPromise;
focusEditor(position?: Position): TPromise;
diff --git a/src/vs/workbench/services/files/electron-browser/fileService.ts b/src/vs/workbench/services/files/electron-browser/fileService.ts
index 956d93e40f4..e092a3313ce 100644
--- a/src/vs/workbench/services/files/electron-browser/fileService.ts
+++ b/src/vs/workbench/services/files/electron-browser/fileService.ts
@@ -48,7 +48,7 @@ export class FileService implements files.IFileService {
encodingOverride.push({ resource: uri.file(paths.join(this.contextService.getWorkspace().resource.fsPath, '.vscode')), encoding: encoding.UTF8 });
}
- let doNotWatch = ['**/.git/objects/**']; // this folder does the heavy duty for git and we dont need to watch it
+ let doNotWatch = ['**/.git/objects/**']; // this folder does the heavy duty for git and we don't need to watch it
if (platform.isLinux) {
doNotWatch.push('**/node_modules/**'); // Linux does not have a good watching implementation, so we exclude more
}
diff --git a/src/vs/workbench/services/files/node/fileService.ts b/src/vs/workbench/services/files/node/fileService.ts
index 8b041546825..4df7d85922d 100644
--- a/src/vs/workbench/services/files/node/fileService.ts
+++ b/src/vs/workbench/services/files/node/fileService.ts
@@ -540,7 +540,7 @@ export class FileService implements files.IFileService {
path: fsPath
});
- // handle emit through delayer to accomodate for bulk changes
+ // handle emit through delayer to accommodate for bulk changes
this.fileChangesWatchDelayer.trigger(() => {
let buffer = this.undeliveredRawFileChangesEvents;
this.undeliveredRawFileChangesEvents = [];
@@ -639,7 +639,7 @@ export class StatResolver {
// Load children
this.resolveChildren(this.resource.fsPath, absoluteTargetPaths, options && options.resolveSingleChildDescendants, (children) => {
- children = arrays.coalesce(children); // we dont want those null childs (could be permission denied when reading a child)
+ children = arrays.coalesce(children); // we don't want those null children (could be permission denied when reading a child)
fileStat.hasChildren = children && children.length > 0;
fileStat.children = children || [];
@@ -714,7 +714,7 @@ export class StatResolver {
// Continue resolving children based on condition
if (resolveFolderChildren) {
$this.resolveChildren(fileResource.fsPath, absoluteTargetPaths, resolveSingleChildDescendants, (children) => {
- children = arrays.coalesce(children); // we dont want those null childs
+ children = arrays.coalesce(children); // we don't want those null children
childStat.hasChildren = children && children.length > 0;
childStat.children = children || [];
diff --git a/src/vs/workbench/services/files/node/watcher/common.ts b/src/vs/workbench/services/files/node/watcher/common.ts
index 7bc7e630c54..fb64223f00a 100644
--- a/src/vs/workbench/services/files/node/watcher/common.ts
+++ b/src/vs/workbench/services/files/node/watcher/common.ts
@@ -28,7 +28,7 @@ export function toFileChangesEvent(changes: IRawFileChange[]): FileChangesEvent
}
/**
- * Given events that occured, applies some rules to normalize the events
+ * Given events that occurred, applies some rules to normalize the events
*/
export function normalize(changes: IRawFileChange[]): IRawFileChange[] {
diff --git a/src/vs/workbench/services/message/browser/messageService.ts b/src/vs/workbench/services/message/browser/messageService.ts
index 9d836c5abb1..9577c0b5788 100644
--- a/src/vs/workbench/services/message/browser/messageService.ts
+++ b/src/vs/workbench/services/message/browser/messageService.ts
@@ -74,7 +74,7 @@ export class WorkbenchMessageService implements IMessageService {
}
private onQuickOpenShowing(): void {
- this.canShowMessages = false; // when quick open is open, dont show messages behind
+ this.canShowMessages = false; // when quick open is open, don't show messages behind
this.handler.hide(); // hide messages when quick open is visible
}
diff --git a/src/vs/workbench/services/quickopen/browser/quickOpenService.ts b/src/vs/workbench/services/quickopen/browser/quickOpenService.ts
index 9ac89b70d1c..ece782330ab 100644
--- a/src/vs/workbench/services/quickopen/browser/quickOpenService.ts
+++ b/src/vs/workbench/services/quickopen/browser/quickOpenService.ts
@@ -95,7 +95,7 @@ export interface IQuickOpenService {
removeEditorHistoryEntry(input: IEditorInput): void;
/**
- * A convinient way to bring up quick open as a picker with custom elements. This bypasses the quick open handler
+ * A convenient way to bring up quick open as a picker with custom elements. This bypasses the quick open handler
* registry and just leverages the quick open widget to select any kind of entries.
*
* Passing in a promise will allow you to resolve the elements in the background while quick open will show a
diff --git a/src/vs/workbench/services/search/node/searchService.ts b/src/vs/workbench/services/search/node/searchService.ts
index fbc9b7715b2..b235858242d 100644
--- a/src/vs/workbench/services/search/node/searchService.ts
+++ b/src/vs/workbench/services/search/node/searchService.ts
@@ -86,7 +86,7 @@ export class SearchService implements ISearchService {
// Match
if (progress.resource) {
- if (typeof localResults[progress.resource.toString()] === 'undefined') { // dont override local results
+ if (typeof localResults[progress.resource.toString()] === 'undefined') { // don't override local results
onProgress(progress);
}
}
@@ -118,7 +118,7 @@ export class SearchService implements ISearchService {
}
}
- // Dont support other resource schemes than files for now
+ // Don't support other resource schemes than files for now
else if (resource.scheme !== 'file') {
return;
}
diff --git a/src/vs/workbench/services/workspace/common/contextService.ts b/src/vs/workbench/services/workspace/common/contextService.ts
index 2b6cda39fd8..738867aff1b 100644
--- a/src/vs/workbench/services/workspace/common/contextService.ts
+++ b/src/vs/workbench/services/workspace/common/contextService.ts
@@ -28,7 +28,7 @@ export interface IWorkspaceContextService extends IBaseWorkspaceContextService {
updateOptions(key: string, value: any): void;
/**
- * Convinient way to check if auto save is enabled or not.
+ * Convenient way to check if auto save is enabled or not.
*/
isAutoSaveEnabled(): boolean;
}
From fea1ef3bfc8622c4d3556327e79593b1ef86254b Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 17:33:35 +0100
Subject: [PATCH 034/588] polish
---
src/vs/base/node/extfs.ts | 2 +-
src/vs/workbench/node/pluginHostMain.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/vs/base/node/extfs.ts b/src/vs/base/node/extfs.ts
index 1c9ca2a1b19..d3393340d2d 100644
--- a/src/vs/base/node/extfs.ts
+++ b/src/vs/base/node/extfs.ts
@@ -49,7 +49,7 @@ function readdirNormalize(path: string, callback: (error: Error, files: string[]
// For example Sharepoint via WebDav on Windows includes them. We never want those
// entries in the result set though because they are not valid children of the folder
// for our concerns.
- return callback(null, children.filter((c) => c !== '.' && c !== '..'));
+ return callback(null, children.filter(c => c !== '.' && c !== '..'));
})
}
diff --git a/src/vs/workbench/node/pluginHostMain.ts b/src/vs/workbench/node/pluginHostMain.ts
index 6364e96aa43..e1c1206ebb6 100644
--- a/src/vs/workbench/node/pluginHostMain.ts
+++ b/src/vs/workbench/node/pluginHostMain.ts
@@ -55,7 +55,7 @@ export interface IInitData {
};
}
-const nativeExit = process.exit;
+const nativeExit = process.exit.bin(process);
process.exit = function() {
const err = new Error('An extension called process.exit() and this was prevented.');
console.warn((err).stack);
From f21fd8f468ae76e99bda5ee8492da01bfd3a1b3c Mon Sep 17 00:00:00 2001
From: Francois Valdy
Date: Tue, 24 Nov 2015 17:35:15 +0100
Subject: [PATCH 035/588] Typo fixes for src/vs/workbench/parts
---
.../debug/browser/debugEditorModelManager.ts | 2 +-
.../parts/debug/browser/debugHoverWidget.ts | 6 +++---
.../parts/debug/common/debugModel.ts | 2 +-
.../parts/debug/common/debugProtocol.d.ts | 2 +-
.../parts/emmet/node/editorAccessor.ts | 2 +-
src/vs/workbench/parts/emmet/node/emmet.d.ts | 4 ++--
.../browser/editors/textFileEditorModel.ts | 2 +-
.../parts/files/browser/fileActions.ts | 2 +-
.../parts/files/browser/fileTracker.ts | 4 ++--
.../parts/files/browser/files.contribution.ts | 4 ++--
.../parts/files/browser/views/explorerView.ts | 10 +++++-----
.../files/browser/views/explorerViewer.ts | 2 +-
.../files/browser/views/workingFilesView.ts | 2 +-
.../files/browser/views/workingFilesViewer.ts | 2 +-
.../parts/files/browser/workingFilesModel.ts | 2 +-
src/vs/workbench/parts/files/common/files.ts | 4 ++--
.../electron-browser/electronFileTracker.ts | 2 +-
.../electron-browser/textFileServices.ts | 2 +-
.../workbench/parts/git/browser/gitActions.ts | 2 +-
.../workbench/parts/git/common/stageRanges.ts | 2 +-
.../parts/git/test/common/stageRanges.test.ts | 6 +++---
.../lib/test/node/systemVariables.test.ts | 4 ++--
.../parts/output/browser/outputActions.ts | 4 ++--
.../search/browser/openAnythingHandler.ts | 2 +-
.../parts/search/browser/openFileHandler.ts | 2 +-
.../parts/search/browser/openSymbolHandler.ts | 2 +-
.../parts/search/browser/searchViewlet.ts | 2 +-
.../parts/tasks/common/problemCollectors.ts | 20 +++++++++----------
.../electron-browser/task.contribution.ts | 6 +++---
29 files changed, 54 insertions(+), 54 deletions(-)
diff --git a/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts b/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
index ecfcac5c456..7a55ae49eef 100644
--- a/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
+++ b/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
@@ -294,7 +294,7 @@ export class DebugEditorModelManager implements wbext.IWorkbenchContribution {
stickiness: editorcommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges
};
- // We need a seperate decoration for glyph margin, since we do not want it on each line of a multi line statement.
+ // We need a separate decoration for glyph margin, since we do not want it on each line of a multi line statement.
private static TOP_STACK_FRAME_MARGIN: editorcommon.IModelDecorationOptions = {
glyphMarginClassName: 'debug-top-stack-frame-glyph',
stickiness: editorcommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges
diff --git a/src/vs/workbench/parts/debug/browser/debugHoverWidget.ts b/src/vs/workbench/parts/debug/browser/debugHoverWidget.ts
index d97cb32757b..27b841e9da6 100644
--- a/src/vs/workbench/parts/debug/browser/debugHoverWidget.ts
+++ b/src/vs/workbench/parts/debug/browser/debugHoverWidget.ts
@@ -47,8 +47,8 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
const pos = range.getStartPosition();
const wordAtPosition = this.editor.getModel().getWordAtPosition(pos);
const hoveringOver = wordAtPosition ? wordAtPosition.word : null;
- const focussedStackFrame = this.debugService.getViewModel().getFocusedStackFrame();
- if (!hoveringOver || !focussedStackFrame || (this.isVisible && hoveringOver === this.lastHoveringOver)) {
+ const focusedStackFrame = this.debugService.getViewModel().getFocusedStackFrame();
+ if (!hoveringOver || !focusedStackFrame || (this.isVisible && hoveringOver === this.lastHoveringOver)) {
return;
}
@@ -60,7 +60,7 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
namesToFind[0] = namesToFind[0].substring(namesToFind[0].lastIndexOf(' ') + 1);
const variables: debug.IExpression[] = [];
- focussedStackFrame.getScopes(this.debugService).done(scopes => {
+ focusedStackFrame.getScopes(this.debugService).done(scopes => {
// flatten out scopes lists
return scopes.reduce((accum, scopes) => { return accum.concat(scopes); }, [])
diff --git a/src/vs/workbench/parts/debug/common/debugModel.ts b/src/vs/workbench/parts/debug/common/debugModel.ts
index 002a98d3e3c..61f57fc6b2c 100644
--- a/src/vs/workbench/parts/debug/common/debugModel.ts
+++ b/src/vs/workbench/parts/debug/common/debugModel.ts
@@ -555,7 +555,7 @@ export class Model extends ee.EventEmitter implements debug.IModel {
this.threads[data.threadId].callStack = data.callStack.map(
(rsf, level) => {
if (!rsf) {
- return new StackFrame(data.threadId, 0, debug.Source.fromUri(uri.parse('unknown')), nls.localize('unkownStack', "Unknown stack location"), undefined, undefined);
+ return new StackFrame(data.threadId, 0, debug.Source.fromUri(uri.parse('unknown')), nls.localize('unknownStack', "Unknown stack location"), undefined, undefined);
}
return new StackFrame(data.threadId, rsf.id, rsf.source ? debug.Source.fromRawSource(rsf.source) : debug.Source.fromUri(uri.parse('unknown')), rsf.name, rsf.line, rsf.column);
diff --git a/src/vs/workbench/parts/debug/common/debugProtocol.d.ts b/src/vs/workbench/parts/debug/common/debugProtocol.d.ts
index c3ec89074f0..9ae5973e25b 100644
--- a/src/vs/workbench/parts/debug/common/debugProtocol.d.ts
+++ b/src/vs/workbench/parts/debug/common/debugProtocol.d.ts
@@ -65,7 +65,7 @@ declare module DebugProtocol {
reason: string;
/** The thread which was stopped. */
threadId?: number;
- /** Additonal information. E.g. if reason is 'exception', text contains the exception name. */
+ /** Additional information. E.g. if reason is 'exception', text contains the exception name. */
text?: string;
};
}
diff --git a/src/vs/workbench/parts/emmet/node/editorAccessor.ts b/src/vs/workbench/parts/emmet/node/editorAccessor.ts
index 01a37311fa7..fc97c72cb8d 100644
--- a/src/vs/workbench/parts/emmet/node/editorAccessor.ts
+++ b/src/vs/workbench/parts/emmet/node/editorAccessor.ts
@@ -83,7 +83,7 @@ export class EditorAccessor implements emmet.Editor {
}
}
- // shift colum by +1 since they are 1 based
+ // shift column by +1 since they are 1 based
let range = new Range(startPosition.lineNumber, startPosition.column + 1, endPosition.lineNumber, endPosition.column + 1);
let deletePreviousChars = 0;
diff --git a/src/vs/workbench/parts/emmet/node/emmet.d.ts b/src/vs/workbench/parts/emmet/node/emmet.d.ts
index 71cf3eb906e..5a5380d64b3 100644
--- a/src/vs/workbench/parts/emmet/node/emmet.d.ts
+++ b/src/vs/workbench/parts/emmet/node/emmet.d.ts
@@ -25,7 +25,7 @@ declare module 'emmet' {
/**
* Creates selection from start to end character
- * indexes. If end is ommited, this method should place caret
+ * indexes. If end is omitted, this method should place caret
* and start index
* @param {Number} start
* @param {Number} [end]
@@ -133,4 +133,4 @@ declare module 'emmet' {
*/
export function run(action: string, editor: Editor): boolean;
-}
\ No newline at end of file
+}
diff --git a/src/vs/workbench/parts/files/browser/editors/textFileEditorModel.ts b/src/vs/workbench/parts/files/browser/editors/textFileEditorModel.ts
index 76558cad4a4..c6abef3c064 100644
--- a/src/vs/workbench/parts/files/browser/editors/textFileEditorModel.ts
+++ b/src/vs/workbench/parts/files/browser/editors/textFileEditorModel.ts
@@ -703,7 +703,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements IEncodin
}
if (!this.preferredEncoding && this.contentEncoding === encoding) {
- return false; // also return if we dont have a preferred encoding but the content encoding is already the same
+ return false; // also return if we don't have a preferred encoding but the content encoding is already the same
}
return true;
diff --git a/src/vs/workbench/parts/files/browser/fileActions.ts b/src/vs/workbench/parts/files/browser/fileActions.ts
index d518ba270e4..ef61435ce44 100644
--- a/src/vs/workbench/parts/files/browser/fileActions.ts
+++ b/src/vs/workbench/parts/files/browser/fileActions.ts
@@ -288,7 +288,7 @@ export abstract class BaseRenameAction extends BaseFileAction {
name = getWellFormedFileName(name);
let existingName = getWellFormedFileName(this.element.name);
- // Return early if name is invalid or didnt change
+ // Return early if name is invalid or didn't change
if (name === existingName || this.validateFileName(this.element.parent, name)) {
return Promise.as(null);
}
diff --git a/src/vs/workbench/parts/files/browser/fileTracker.ts b/src/vs/workbench/parts/files/browser/fileTracker.ts
index bbfa8325961..7b5a95fada3 100644
--- a/src/vs/workbench/parts/files/browser/fileTracker.ts
+++ b/src/vs/workbench/parts/files/browser/fileTracker.ts
@@ -87,7 +87,7 @@ export class FileTracker implements IWorkbenchContribution {
this.emitInputStateChangeEvent(e.getAfter().resource);
if (!this.contextService.isAutoSaveEnabled()) {
- this.updateActivityBadge(); // no indication needed when auto save is turned off and we didnt show dirty
+ this.updateActivityBadge(); // no indication needed when auto save is turned off and we didn't show dirty
}
}
@@ -182,7 +182,7 @@ export class FileTracker implements IWorkbenchContribution {
this.handleMovedFileInVisibleEditors(before ? before.resource : null, after ? after.resource : null, after ? after.mime : null);
}
- // Dispose all known inputs pased on resource
+ // Dispose all known inputs passed on resource
let oldFile = e.getBefore();
if ((e.gotMoved() || e.gotDeleted())) {
this.disposeAll(oldFile.resource, this.quickOpenService.getEditorHistory());
diff --git a/src/vs/workbench/parts/files/browser/files.contribution.ts b/src/vs/workbench/parts/files/browser/files.contribution.ts
index b0f4da1a033..6d6d295e59d 100644
--- a/src/vs/workbench/parts/files/browser/files.contribution.ts
+++ b/src/vs/workbench/parts/files/browser/files.contribution.ts
@@ -75,7 +75,7 @@ let openViewletKb: IKeybindings = {
// Register file editors
(Registry.as(EditorExtensions.Editors)).registerEditor(
new FileEditorDescriptor(
- TextFileEditor.ID, // explicit dependency because we dont want these editors lazy loaded
+ TextFileEditor.ID, // explicit dependency because we don't want these editors lazy loaded
nls.localize('textFileEditor', "Text File Editor"),
'vs/workbench/parts/files/browser/editors/textFileEditor',
'TextFileEditor',
@@ -95,7 +95,7 @@ let openViewletKb: IKeybindings = {
(Registry.as(EditorExtensions.Editors)).registerEditor(
new FileEditorDescriptor(
- BinaryFileEditor.ID, // explicit dependency because we dont want these editors lazy loaded
+ BinaryFileEditor.ID, // explicit dependency because we don't want these editors lazy loaded
nls.localize('binaryFileEditor', "Binary File Editor"),
'vs/workbench/parts/files/browser/editors/binaryFileEditor',
'BinaryFileEditor',
diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts
index 48430dc8461..50d1b00c12c 100644
--- a/src/vs/workbench/parts/files/browser/views/explorerView.ts
+++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts
@@ -150,7 +150,7 @@ export class ExplorerView extends CollapsibleViewletView {
// During workbench startup, the editor area might restore more than one editor from a previous
// session. When this happens there might be editor input changing events for side editors that
- // dont have focus. In these cases we do not adjust explorer selection for non-focussed editors
+ // don't have focus. In these cases we do not adjust explorer selection for non-focused editors
// because we only want to react for the editor that has focus.
if (!this.partService.isCreated() && e.editorOptions && e.editorOptions.preserveFocus) {
return;
@@ -198,10 +198,10 @@ export class ExplorerView extends CollapsibleViewletView {
public focus(): void {
super.focus();
- // Open the focussed element in the editor if there is currently no file opened
+ // Open the focused element in the editor if there is currently no file opened
let input = this.editorService.getActiveEditorInput();
if (!input || !(input instanceof FileEditorInput)) {
- this.openFocussedElement();
+ this.openFocusedElement();
}
}
@@ -247,13 +247,13 @@ export class ExplorerView extends CollapsibleViewletView {
// Otherwise restore last used file: By Explorer selection
return refreshPromise.then(() => {
- this.openFocussedElement();
+ this.openFocusedElement();
});
}
});
}
- private openFocussedElement(): boolean {
+ private openFocusedElement(): boolean {
let stat: FileStat = this.explorerViewer.getFocus();
if (stat && !stat.isDirectory) {
let editorInput = this.instantiationService.createInstance(FileEditorInput, stat.resource, stat.mime, void 0);
diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
index cdc4ec22f3e..0753d3dc286 100644
--- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
+++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts
@@ -84,7 +84,7 @@ export class FileDataSource implements Tree.IDataSource {
// Convert to view model
let modelDirStat = FileStat.create(dirStat);
- // Add childs to folder
+ // Add children to folder
for (let i = 0; i < modelDirStat.children.length; i++) {
stat.addChild(modelDirStat.children[i]);
}
diff --git a/src/vs/workbench/parts/files/browser/views/workingFilesView.ts b/src/vs/workbench/parts/files/browser/views/workingFilesView.ts
index d7fe22657fe..2945647ab47 100644
--- a/src/vs/workbench/parts/files/browser/views/workingFilesView.ts
+++ b/src/vs/workbench/parts/files/browser/views/workingFilesView.ts
@@ -150,7 +150,7 @@ export class WorkingFilesView extends AdaptiveCollapsibleViewletView {
private onTextFileDirty(e: LocalFileChangeEvent): void {
if (!this.contextService.isAutoSaveEnabled()) {
- this.updateDirtyIndicator(); // no indication needed when auto save is turned off and we didnt show dirty
+ this.updateDirtyIndicator(); // no indication needed when auto save is turned off and we didn't show dirty
}
}
diff --git a/src/vs/workbench/parts/files/browser/views/workingFilesViewer.ts b/src/vs/workbench/parts/files/browser/views/workingFilesViewer.ts
index 4d6d820b592..9cac592301f 100644
--- a/src/vs/workbench/parts/files/browser/views/workingFilesViewer.ts
+++ b/src/vs/workbench/parts/files/browser/views/workingFilesViewer.ts
@@ -134,7 +134,7 @@ export class WorkingFilesActionProvider extends ContributableActionProvider {
return element instanceof WorkingFileEntry || super.hasActions(tree, element);
}
- // we dont call into super here because we put only one primary action to the left (Remove/Dirty Indicator)
+ // we don't call into super here because we put only one primary action to the left (Remove/Dirty Indicator)
public getActions(tree: tree.ITree, element: WorkingFileEntry): TPromise {
let actions: actions.IAction[] = [];
diff --git a/src/vs/workbench/parts/files/browser/workingFilesModel.ts b/src/vs/workbench/parts/files/browser/workingFilesModel.ts
index a3401d6b595..48bc1360730 100644
--- a/src/vs/workbench/parts/files/browser/workingFilesModel.ts
+++ b/src/vs/workbench/parts/files/browser/workingFilesModel.ts
@@ -87,7 +87,7 @@ export class WorkingFilesModel implements filesCommon.IWorkingFilesModel {
private onTextFileDirty(e: filesCommon.LocalFileChangeEvent): void {
if (!this.contextService.isAutoSaveEnabled()) {
- this.updateDirtyState(e.getAfter().resource, true); // no indication needed when auto save is turned off and we didnt show dirty
+ this.updateDirtyState(e.getAfter().resource, true); // no indication needed when auto save is turned off and we didn't show dirty
} else {
this.addEntry(e.getAfter().resource);
}
diff --git a/src/vs/workbench/parts/files/common/files.ts b/src/vs/workbench/parts/files/common/files.ts
index 5ccff56b211..9060c91d3e7 100644
--- a/src/vs/workbench/parts/files/common/files.ts
+++ b/src/vs/workbench/parts/files/common/files.ts
@@ -294,7 +294,7 @@ export interface ITextFileService extends IDisposable {
isDirty(resource?: URI): boolean;
/**
- * Returs all resources that are currently dirty matching the provided resource or all dirty resources.
+ * Returns all resources that are currently dirty matching the provided resource or all dirty resources.
*
* @param resource the resource to check for being dirty. If it is not specified, will check for
* all dirty resources.
@@ -342,7 +342,7 @@ export interface ITextFileService extends IDisposable {
revertAll(resources?: URI[], force?: boolean): TPromise;
/**
- * Brings up the confirm dialog to either save, dont save or cancel.
+ * Brings up the confirm dialog to either save, don't save or cancel.
*
* @param resource the resource of the file to ask for confirmation.
*/
diff --git a/src/vs/workbench/parts/files/electron-browser/electronFileTracker.ts b/src/vs/workbench/parts/files/electron-browser/electronFileTracker.ts
index f7460d2fd33..4fc1ba4f9a6 100644
--- a/src/vs/workbench/parts/files/electron-browser/electronFileTracker.ts
+++ b/src/vs/workbench/parts/files/electron-browser/electronFileTracker.ts
@@ -161,7 +161,7 @@ export class FileTracker implements IWorkbenchContribution {
private onTextFileDirty(e: LocalFileChangeEvent): void {
if (!this.contextService.isAutoSaveEnabled() && !this.isDocumentedEdited) {
- this.updateDocumentEdited(); // no indication needed when auto save is turned off and we didnt show dirty
+ this.updateDocumentEdited(); // no indication needed when auto save is turned off and we didn't show dirty
}
}
diff --git a/src/vs/workbench/parts/files/electron-browser/textFileServices.ts b/src/vs/workbench/parts/files/electron-browser/textFileServices.ts
index 7179263c8d4..823ebb6e3c4 100644
--- a/src/vs/workbench/parts/files/electron-browser/textFileServices.ts
+++ b/src/vs/workbench/parts/files/electron-browser/textFileServices.ts
@@ -233,7 +233,7 @@ export class TextFileService extends BrowserTextFileService {
if (untitled) {
let targetPath: string;
- // Untitled with associated file path dont need to prompt
+ // Untitled with associated file path don't need to prompt
if (this.untitledEditorService.hasAssociatedFilePath(untitled.getResource())) {
targetPath = untitled.getResource().fsPath;
}
diff --git a/src/vs/workbench/parts/git/browser/gitActions.ts b/src/vs/workbench/parts/git/browser/gitActions.ts
index 4f633bb51c3..640854afd15 100644
--- a/src/vs/workbench/parts/git/browser/gitActions.ts
+++ b/src/vs/workbench/parts/git/browser/gitActions.ts
@@ -406,7 +406,7 @@ export abstract class BaseUndoAction extends GitAction {
});
});
}).then(null, (errors: any[]): Promise => {
- console.error('One or more errors occured', errors);
+ console.error('One or more errors occurred', errors);
return Promise.wrapError(errors[0]);
});
}
diff --git a/src/vs/workbench/parts/git/common/stageRanges.ts b/src/vs/workbench/parts/git/common/stageRanges.ts
index 50720021c56..e34752e4a90 100644
--- a/src/vs/workbench/parts/git/common/stageRanges.ts
+++ b/src/vs/workbench/parts/git/common/stageRanges.ts
@@ -69,7 +69,7 @@ export function intersectChangeAndSelection(change:editorcommon.IChange, selecti
}
/**
- * Returns all selected changes (there can be mulitple selections due to mulitple cursors).
+ * Returns all selected changes (there can be multiple selections due to multiple cursors).
* If a change is partially selected, the selected part of the change will be returned.
*/
export function getSelectedChanges(changes:editorcommon.IChange[], selections:editorcommon.IEditorSelection[]):editorcommon.IChange[] {
diff --git a/src/vs/workbench/parts/git/test/common/stageRanges.test.ts b/src/vs/workbench/parts/git/test/common/stageRanges.test.ts
index bbaccf8a59c..0220b1c9666 100644
--- a/src/vs/workbench/parts/git/test/common/stageRanges.test.ts
+++ b/src/vs/workbench/parts/git/test/common/stageRanges.test.ts
@@ -87,7 +87,7 @@ suite('Git - Stage ranges', () => {
changesEqual(result, expected);
});
- test('Get selected changes test - mulitple changes selected with one selection', () => {
+ test('Get selected changes test - multiple changes selected with one selection', () => {
var selections: IEditorSelection[] = [];
selections.push(Selection.createSelection(2, 7, 7, 1));
var changes: IChange[] = [];
@@ -119,7 +119,7 @@ suite('Git - Stage ranges', () => {
changesEqual(result, expected);
});
- test('Get selected changes test - mulitple changes partially selected with multiple selections', () => {
+ test('Get selected changes test - multiple changes partially selected with multiple selections', () => {
var selections: IEditorSelection[] = [];
selections.push(Selection.createSelection(3, 1, 9, 5), Selection.createSelection(115, 2, 129, 1));
var changes: IChange[] = [];
@@ -130,7 +130,7 @@ suite('Git - Stage ranges', () => {
changesEqual(result, expected);
});
- test('Get selected changes test - mulitple changes selected with multiple selections. Multiple changes not selected', () => {
+ test('Get selected changes test - multiple changes selected with multiple selections. Multiple changes not selected', () => {
var selections: IEditorSelection[] = [];
selections.push(Selection.createSelection(33, 11, 79, 15), Selection.createSelection(155, 21, 189, 11));
var changes: IChange[] = [];
diff --git a/src/vs/workbench/parts/lib/test/node/systemVariables.test.ts b/src/vs/workbench/parts/lib/test/node/systemVariables.test.ts
index 8cb9b181347..debae512745 100644
--- a/src/vs/workbench/parts/lib/test/node/systemVariables.test.ts
+++ b/src/vs/workbench/parts/lib/test/node/systemVariables.test.ts
@@ -11,7 +11,7 @@ import * as Platform from 'vs/base/common/platform';
import { SystemVariables } from 'vs/workbench/parts/lib/node/systemVariables';
suite('SystemVariables tests', () => {
- test('SytemVariables: subsitute one', () => {
+ test('SystemVariables: substitute one', () => {
let systemVariables: SystemVariables = new SystemVariables(null, null, URI.parse('file:///VSCode/workspaceLocation'));
if (Platform.isWindows) {
assert.strictEqual(systemVariables.resolve('abc ${workspaceRoot} xyz'), 'abc \\VSCode\\workspaceLocation xyz');
@@ -20,7 +20,7 @@ suite('SystemVariables tests', () => {
}
});
- test('SytemVariables: subsitute many', () => {
+ test('SystemVariables: substitute many', () => {
let systemVariables: SystemVariables = new SystemVariables(null, null, URI.parse('file:///VSCode/workspaceLocation'));
if (Platform.isWindows) {
assert.strictEqual(systemVariables.resolve('${workspaceRoot} - ${workspaceRoot}'), '\\VSCode\\workspaceLocation - \\VSCode\\workspaceLocation');
diff --git a/src/vs/workbench/parts/output/browser/outputActions.ts b/src/vs/workbench/parts/output/browser/outputActions.ts
index 2e9b316845f..b07c6695955 100644
--- a/src/vs/workbench/parts/output/browser/outputActions.ts
+++ b/src/vs/workbench/parts/output/browser/outputActions.ts
@@ -63,7 +63,7 @@ export class GlobalShowOutputAction extends Action {
channelToOpen = channels[0].getChannel();
}
- // Fallback to any contributed channel otherwise if we dont have history
+ // Fallback to any contributed channel otherwise if we don't have history
else {
channelToOpen = (Registry.as(Extensions.OutputChannels)).getChannels()[0];
}
@@ -191,7 +191,7 @@ export class SwitchOutputActionItem extends SelectActionItem {
super(null, action, SwitchOutputActionItem.getChannels(outputService, input), SwitchOutputActionItem.getChannels(outputService, input).indexOf(input.getChannel()));
this.input = input;
-
+
this.outputService.onOutputChannel.add(this.onOutputChannel, this);
}
diff --git a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts
index 13fe0319a9c..8b04c1fcc1c 100644
--- a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts
+++ b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts
@@ -29,7 +29,7 @@ export class OpenAnythingHandler extends QuickOpenHandler {
private static SYMBOL_SEARCH_INITIAL_TIMEOUT = 500; // Ignore symbol search after a timeout to not block search results
private static SYMBOL_SEARCH_SUBSEQUENT_TIMEOUT = 100;
- private static SEARCH_DELAY = 100; // This delay acommodates for the user typing a word and then stops typing to start searching
+ private static SEARCH_DELAY = 100; // This delay accommodates for the user typing a word and then stops typing to start searching
private openSymbolHandler: _OpenSymbolHandler;
private openFileHandler: OpenFileHandler;
diff --git a/src/vs/workbench/parts/search/browser/openFileHandler.ts b/src/vs/workbench/parts/search/browser/openFileHandler.ts
index 042b49c4573..9c3287e7477 100644
--- a/src/vs/workbench/parts/search/browser/openFileHandler.ts
+++ b/src/vs/workbench/parts/search/browser/openFileHandler.ts
@@ -84,7 +84,7 @@ export class FileEntry extends EditorQuickOpenEntry {
export class OpenFileHandler extends QuickOpenHandler {
- private static SEARCH_DELAY = 500; // This delay acommodates for the user typing a word and then stops typing to start searching
+ private static SEARCH_DELAY = 500; // This delay accommodates for the user typing a word and then stops typing to start searching
private queryBuilder: QueryBuilder;
private delayer: ThrottledDelayer;
diff --git a/src/vs/workbench/parts/search/browser/openSymbolHandler.ts b/src/vs/workbench/parts/search/browser/openSymbolHandler.ts
index da7a4ec68f7..9ba6d686ae4 100644
--- a/src/vs/workbench/parts/search/browser/openSymbolHandler.ts
+++ b/src/vs/workbench/parts/search/browser/openSymbolHandler.ts
@@ -90,7 +90,7 @@ class SymbolEntry extends EditorQuickOpenEntry {
export class OpenSymbolHandler extends QuickOpenHandler {
private static SUPPORTED_OPEN_TYPES = ['class', 'interface', 'enum', 'function', 'method'];
- private static SEARCH_DELAY = 500; // This delay acommodates for the user typing a word and then stops typing to start searching
+ private static SEARCH_DELAY = 500; // This delay accommodates for the user typing a word and then stops typing to start searching
private delayer: ThrottledDelayer;
private isStandalone: boolean;
diff --git a/src/vs/workbench/parts/search/browser/searchViewlet.ts b/src/vs/workbench/parts/search/browser/searchViewlet.ts
index 27d68d45479..5cdd1f5f4ef 100644
--- a/src/vs/workbench/parts/search/browser/searchViewlet.ts
+++ b/src/vs/workbench/parts/search/browser/searchViewlet.ts
@@ -929,7 +929,7 @@ export class SearchViewlet extends Viewlet {
this.viewModel.toggleHighlights(visible);
}
- // Open focussed element from results in case the editor area is otherwise empty
+ // Open focused element from results in case the editor area is otherwise empty
if (visible && !this.editorService.getActiveEditorInput()) {
let focus = this.tree.getFocus();
if (focus) {
diff --git a/src/vs/workbench/parts/tasks/common/problemCollectors.ts b/src/vs/workbench/parts/tasks/common/problemCollectors.ts
index 95c7e86b725..bc2db5ae711 100644
--- a/src/vs/workbench/parts/tasks/common/problemCollectors.ts
+++ b/src/vs/workbench/parts/tasks/common/problemCollectors.ts
@@ -204,12 +204,12 @@ export class StartStopProblemCollector extends AbstractProblemCollector implemen
this.currentResource = resource;
this.currentResourceAsString = resourceAsString;
}
- let markerDatas = this.markers[owner];
- if (!markerDatas) {
- markerDatas = [];
- this.markers[owner] = markerDatas;
+ let markerData = this.markers[owner];
+ if (!markerData) {
+ markerData = [];
+ this.markers[owner] = markerData;
}
- markerDatas.push(markerMatch.marker);
+ markerData.push(markerMatch.marker);
} else {
this.reportedResourcesWithMarkers[owner][resourceAsString] = resource;
}
@@ -316,12 +316,12 @@ export class WatchingProblemCollector extends AbstractProblemCollector implement
this.currentResource = resource;
this.currentResourceAsString = resourceAsString;
}
- let markerDatas = this.markers[owner];
- if (!markerDatas) {
- markerDatas = [];
- this.markers[owner] = markerDatas;
+ let markerData = this.markers[owner];
+ if (!markerData) {
+ markerData = [];
+ this.markers[owner] = markerData;
}
- markerDatas.push(markerMatch.marker);
+ markerData.push(markerMatch.marker);
} else {
this.removeResourceToClean(owner, resourceAsString);
}
diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
index 818660543da..83c0dd24ae4 100644
--- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
+++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
@@ -1025,7 +1025,7 @@ if (Env.enableTasks) {
'isShellCommand': {
'type': 'boolean',
'default': true,
- 'description': nls.localize('JsonSchema.shell', 'Specifies whether the command is a shell command or an external programm. Defaults to false if omitted.')
+ 'description': nls.localize('JsonSchema.shell', 'Specifies whether the command is a shell command or an external program. Defaults to false if omitted.')
},
'args': {
'type': 'array',
@@ -1053,7 +1053,7 @@ if (Env.enableTasks) {
},
'showOutput': {
'$ref': '#/definitions/showOutputType',
- 'description': nls.localize('JsonSchema.showOuput', 'Controls whether the output of the running task is shown or not. If omitted \'always\' is used.')
+ 'description': nls.localize('JsonSchema.showOutput', 'Controls whether the output of the running task is shown or not. If omitted \'always\' is used.')
},
'isWatching': {
'type': 'boolean',
@@ -1111,7 +1111,7 @@ if (Env.enableTasks) {
},
'showOutput': {
'$ref': '#/definitions/showOutputType',
- 'description': nls.localize('JsonSchema.tasks.showOuput', 'Controls whether the output of the running task is shown or not. If omitted the globally defined value is used.')
+ 'description': nls.localize('JsonSchema.tasks.showOutput', 'Controls whether the output of the running task is shown or not. If omitted the globally defined value is used.')
},
'echoCommand': {
'type': 'boolean',
From 5d9a4f343494ae8969014a3224443b6d7ce5caf5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Tue, 24 Nov 2015 17:46:28 +0100
Subject: [PATCH 036/588] remove reference to atom-shell-installer-assets
---
package.json | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/package.json b/package.json
index f546c788b1e..006319d9dd1 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,6 @@
},
"devDependencies": {
"async": "^1.4.0",
- "atom-shell-installer-assets": "^0.2.0",
"azure-storage": "^0.3.1",
"clone": "^1.0.2",
"debounce": "^1.0.0",
@@ -84,4 +83,4 @@
"bugs": {
"url": "https://github.com/Microsoft/vscode/issues"
}
-}
\ No newline at end of file
+}
From 1ef99fc7022652f48f2edcb53dd800cb390a102c Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 18:00:33 +0100
Subject: [PATCH 037/588] bin => bind
---
src/vs/workbench/node/pluginHostMain.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/vs/workbench/node/pluginHostMain.ts b/src/vs/workbench/node/pluginHostMain.ts
index e1c1206ebb6..5e7125e8e02 100644
--- a/src/vs/workbench/node/pluginHostMain.ts
+++ b/src/vs/workbench/node/pluginHostMain.ts
@@ -55,7 +55,7 @@ export interface IInitData {
};
}
-const nativeExit = process.exit.bin(process);
+const nativeExit = process.exit.bind(process);
process.exit = function() {
const err = new Error('An extension called process.exit() and this was prevented.');
console.warn((err).stack);
From 1419be89ab49a028b9e8ef5ed5705e109adadac5 Mon Sep 17 00:00:00 2001
From: Francois Valdy
Date: Tue, 24 Nov 2015 18:04:53 +0100
Subject: [PATCH 038/588] Missed them typos
---
.../parts/debug/browser/debugEditorModelManager.ts | 2 +-
src/vs/workbench/parts/debug/browser/debugViewer.ts | 6 +++---
.../parts/tasks/electron-browser/task.contribution.ts | 2 +-
src/vs/workbench/parts/tasks/node/processRunnerSystem.ts | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts b/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
index 7a55ae49eef..1e348e74514 100644
--- a/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
+++ b/src/vs/workbench/parts/debug/browser/debugEditorModelManager.ts
@@ -325,7 +325,7 @@ export class DebugEditorModelManager implements wbext.IWorkbenchContribution {
private static FOCUSED_STACK_FRAME_DECORATION: editorcommon.IModelDecorationOptions = {
isWholeLine: true,
- className: 'debug-focussed-stack-frame-line',
+ className: 'debug-focused-stack-frame-line',
stickiness: editorcommon.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges
};
}
diff --git a/src/vs/workbench/parts/debug/browser/debugViewer.ts b/src/vs/workbench/parts/debug/browser/debugViewer.ts
index e4166fab241..c911ced374f 100644
--- a/src/vs/workbench/parts/debug/browser/debugViewer.ts
+++ b/src/vs/workbench/parts/debug/browser/debugViewer.ts
@@ -857,15 +857,15 @@ export class BreakpointsController extends BaseDebugController {
return this.doNotFocusExceptionBreakpoint(tree, super.onPageUp(tree, event));
}
- private doNotFocusExceptionBreakpoint(tree: tree.ITree, upSucceded: boolean) : boolean {
- if (upSucceded) {
+ private doNotFocusExceptionBreakpoint(tree: tree.ITree, upSucceeded: boolean) : boolean {
+ if (upSucceeded) {
var focus = tree.getFocus();
if (focus instanceof model.ExceptionBreakpoint) {
tree.focusNth(2);
}
}
- return upSucceded;
+ return upSucceeded;
}
protected onDelete(tree: tree.ITree, event: keyboard.StandardKeyboardEvent): boolean {
diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
index 83c0dd24ae4..1e7426e830f 100644
--- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
+++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
@@ -861,7 +861,7 @@ if (Env.enableTasks) {
},
'location': {
'type': 'integer',
- 'description': nls.localize('JsonSchema.pattern.location', 'The match group index of the problem\'s location. Valid location patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn). If omitted line and colum is assumed.')
+ 'description': nls.localize('JsonSchema.pattern.location', 'The match group index of the problem\'s location. Valid location patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn). If omitted line and column is assumed.')
},
'line': {
'type': 'integer',
diff --git a/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts b/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
index 168d832d9d1..4e42eb7845d 100644
--- a/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
+++ b/src/vs/workbench/parts/tasks/node/processRunnerSystem.ts
@@ -50,7 +50,7 @@ export class ProcessRunnerSystem extends EventEmitter implements ITaskSystem {
private childProcess: LineProcess;
private activeTaskIdentifier: string;
- constructor(fileConfig:FileConfig.ExternalTaskRunnerConfiguration, variables:SystemVariables, markerService:IMarkerService, modelService: IModelService, telemetryService: ITelemetryService, outputService:IOutputService, outputChannel:string, clearOuput: boolean = true) {
+ constructor(fileConfig:FileConfig.ExternalTaskRunnerConfiguration, variables:SystemVariables, markerService:IMarkerService, modelService: IModelService, telemetryService: ITelemetryService, outputService:IOutputService, outputChannel:string, clearOutput: boolean = true) {
super();
this.fileConfig = fileConfig;
this.variables = variables;
@@ -65,7 +65,7 @@ export class ProcessRunnerSystem extends EventEmitter implements ITaskSystem {
this.childProcess = null;
this.activeTaskIdentifier = null;
- if (clearOuput) {
+ if (clearOutput) {
this.clearOutput();
}
this.errorsShown = false;
From 7542b9a6afc5c1e243ce1eceec84703d9db3c50e Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 18:06:50 +0100
Subject: [PATCH 039/588] move configuration service into correct execution
environment
---
src/vs/workbench/electron-browser/shell.ts | 2 +-
src/vs/workbench/electron-main/sharedProcessMain.ts | 2 +-
.../configuration/{common => node}/configurationService.ts | 0
3 files changed, 2 insertions(+), 2 deletions(-)
rename src/vs/workbench/services/configuration/{common => node}/configurationService.ts (100%)
diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts
index cd3566cd7d5..bab8a2828e9 100644
--- a/src/vs/workbench/electron-browser/shell.ts
+++ b/src/vs/workbench/electron-browser/shell.ts
@@ -36,7 +36,7 @@ import {IWindowService, WindowService} from 'vs/workbench/services/window/electr
import {MessageService} from 'vs/workbench/services/message/electron-browser/messageService';
import {RequestService} from 'vs/workbench/services/request/node/requestService';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
-import {MigrationConfigurationService} from 'vs/workbench/services/configuration/common/configurationService';
+import {MigrationConfigurationService} from 'vs/workbench/services/configuration/node/configurationService';
import {FileService} from 'vs/workbench/services/files/electron-browser/fileService';
import {SearchService} from 'vs/workbench/services/search/node/searchService';
import {LifecycleService} from 'vs/workbench/services/lifecycle/electron-browser/lifecycleService';
diff --git a/src/vs/workbench/electron-main/sharedProcessMain.ts b/src/vs/workbench/electron-main/sharedProcessMain.ts
index 285d0b2f1ce..269d0e06d11 100644
--- a/src/vs/workbench/electron-main/sharedProcessMain.ts
+++ b/src/vs/workbench/electron-main/sharedProcessMain.ts
@@ -19,7 +19,7 @@ import { WorkspaceContextService } from 'vs/workbench/services/workspace/common/
import { IEventService } from 'vs/platform/event/common/event';
import { EventService } from 'vs/platform/event/common/eventService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
-import { ConfigurationService } from 'vs/workbench/services/configuration/common/configurationService';
+import { ConfigurationService } from 'vs/workbench/services/configuration/node/configurationService';
// Extra services
import { IExtensionsService } from 'vs/workbench/parts/extensions/common/extensions';
diff --git a/src/vs/workbench/services/configuration/common/configurationService.ts b/src/vs/workbench/services/configuration/node/configurationService.ts
similarity index 100%
rename from src/vs/workbench/services/configuration/common/configurationService.ts
rename to src/vs/workbench/services/configuration/node/configurationService.ts
From a34c71df93baa3f5f081e8ba883805b1ccea7594 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 18:11:42 +0100
Subject: [PATCH 040/588] remove some older migration code
---
src/vs/workbench/electron-browser/shell.ts | 7 +-
src/vs/workbench/electron-main/windows.ts | 13 ----
.../node/configurationService.ts | 78 +------------------
3 files changed, 4 insertions(+), 94 deletions(-)
diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts
index bab8a2828e9..c157c54a422 100644
--- a/src/vs/workbench/electron-browser/shell.ts
+++ b/src/vs/workbench/electron-browser/shell.ts
@@ -36,7 +36,7 @@ import {IWindowService, WindowService} from 'vs/workbench/services/window/electr
import {MessageService} from 'vs/workbench/services/message/electron-browser/messageService';
import {RequestService} from 'vs/workbench/services/request/node/requestService';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
-import {MigrationConfigurationService} from 'vs/workbench/services/configuration/node/configurationService';
+import {ConfigurationService} from 'vs/workbench/services/configuration/node/configurationService';
import {FileService} from 'vs/workbench/services/files/electron-browser/fileService';
import {SearchService} from 'vs/workbench/services/search/node/searchService';
import {LifecycleService} from 'vs/workbench/services/lifecycle/electron-browser/lifecycleService';
@@ -249,10 +249,9 @@ export class WorkbenchShell {
this.messageServiceInstance = new MessageService(contextServiceInstance, this.windowServiceInstance, telemetryServiceInstance, keybindingServiceInstance);
keybindingServiceInstance.setMessageService(this.messageServiceInstance);
- let configServiceInstance = new MigrationConfigurationService(
+ let configServiceInstance = new ConfigurationService(
contextServiceInstance,
- eventServiceInstance,
- this.messageServiceInstance
+ eventServiceInstance
);
let fileServiceInstance = new FileService(
diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts
index 0d1d2ab0f0f..936dda2ab76 100644
--- a/src/vs/workbench/electron-main/windows.ts
+++ b/src/vs/workbench/electron-main/windows.ts
@@ -100,9 +100,6 @@ export class WindowsManager {
private static windowsStateStorageKey = 'windowsState';
private static themeStorageKey = 'theme'; // TODO@Ben this key is only used to find out if a window can be shown instantly because of light theme, remove once we have support for bg color
- private static legacyLastActiveOpenedFolderStorageKey = 'lastActiveOpenedPath';
- private static legacyLastActiveWindowStateStorageKey = 'windowUIState';
-
private static WINDOWS: window.VSCodeWindow[] = [];
private userEnv: IEnv;
@@ -113,16 +110,6 @@ export class WindowsManager {
this.userEnv = userEnv;
this.windowsState = storage.getItem(WindowsManager.windowsStateStorageKey) || { openedFolders: [] };
-
- // TODO@Ben migration: remove me in a couple of versions
- if (!this.windowsState.lastActiveWindow) {
- let lastActiveOpenedFolder = storage.getItem(WindowsManager.legacyLastActiveOpenedFolderStorageKey);
- let lastActiveWindowState = storage.getItem(WindowsManager.legacyLastActiveWindowStateStorageKey);
-
- if (lastActiveOpenedFolder || lastActiveWindowState) {
- this.windowsState.lastActiveWindow = { workspacePath: lastActiveOpenedFolder, uiState: lastActiveWindowState || window.defaultWindowState() };
- }
- }
}
private registerListeners(): void {
diff --git a/src/vs/workbench/services/configuration/node/configurationService.ts b/src/vs/workbench/services/configuration/node/configurationService.ts
index cac3b858ca0..a6f29ebadc6 100644
--- a/src/vs/workbench/services/configuration/node/configurationService.ts
+++ b/src/vs/workbench/services/configuration/node/configurationService.ts
@@ -92,11 +92,6 @@ export class ConfigurationService extends CommonConfigurationService {
});
}
- // TODO@Ben migration: remove this code after some versions
- protected migrateSettingsOnce(): TPromise {
- return TPromise.as(null);
- }
-
private registerListeners(): void {
this.toDispose = this.eventService.addListener(EventType.WORKBENCH_OPTIONS_CHANGED, (e) => this.onOptionsChanged(e));
}
@@ -115,7 +110,7 @@ export class ConfigurationService extends CommonConfigurationService {
}
// Migrate as needed (.settings => .vscode)
- return this.migrateSettingsOnce().then(() => super.loadWorkspaceConfiguration(section));
+ return super.loadWorkspaceConfiguration(section);
}
protected loadGlobalConfiguration(): TPromise<{ contents: any; parseErrors?: string[]; }> {
@@ -135,75 +130,4 @@ export class ConfigurationService extends CommonConfigurationService {
public dispose(): void {
this.toDispose();
}
-}
-
-export class MigrationConfigurationService extends ConfigurationService {
-
- protected messageService: IMessageService;
- private settingsMigrationPromise: TPromise;
-
- constructor(contextService: IWorkspaceContextService, eventService: IEventService, messageService: IMessageService) {
- super(contextService, eventService);
- this.messageService = messageService;
- }
-
- // TODO@Ben migration: remove this code after some versions
- protected migrateSettingsOnce(): TPromise {
- if (!this.settingsMigrationPromise) {
- this.settingsMigrationPromise = new TPromise((c, e) => {
- let newSettingsFolder = this.contextService.toResource(this.workspaceSettingsRootFolder).fsPath;
- let oldSettingsFolder = this.contextService.toResource('.settings').fsPath;
-
- return fs.exists(newSettingsFolder, (exists) => {
- if (exists) {
- return c(null); // we never migrate more than once
- }
-
- return extfs.readdir(oldSettingsFolder, (error, children) => {
- if (error) {
- return c(null); // old .settings folder does not exist or is a file
- }
-
- let knownSettingsFiles = ['team.settings.json', 'settings.json', 'tasks.json', 'launch.json', 'team.tasks.json', 'team.launch.json'];
- let filesToMove: string[] = [];
- children.forEach(child => {
- if (knownSettingsFiles.some(f => child === f)) {
- filesToMove.push(child);
- }
- });
-
- if (filesToMove.length === 0) {
- return c(null); // .settings folder does not contain files we expect
- }
-
- return fs.mkdir(newSettingsFolder, (error) => {
- if (error) {
- return c(null); // abort if we cannot create the new settings folder
- }
-
- return flow.loop(filesToMove, (fileToMove, callback) => {
- return fs.rename(paths.join(oldSettingsFolder, fileToMove), paths.join(newSettingsFolder, fileToMove), (error) => {
- callback(null, null); // ignore any errors
- });
- }, () => {
- this.messageService.show(severity.Info, nls.localize('settingsMigrated', "VSCode is now using a top level '.vscode' folder to store settings. We moved your existing settings files from the '.settings' folder."));
-
- return extfs.readdir(oldSettingsFolder, (error, children) => {
- if (error || children.length > 0) {
- return c(null); // done
- }
-
- return fs.rmdir(oldSettingsFolder, () => {
- return c(null);
- });
- });
- })
- });
- });
- });
- });
- }
-
- return this.settingsMigrationPromise;
- }
}
\ No newline at end of file
From b232ee55606a3c8d44de66a6dc7450295e861e12 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Tue, 24 Nov 2015 18:36:02 +0100
Subject: [PATCH 041/588] Goto definition acts too early in some cases (fixes
#189)
---
.../browser/goToDeclaration.ts | 22 ++++++++++++++-----
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts
index c468b874875..8b6b9370b5f 100644
--- a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts
+++ b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts
@@ -239,7 +239,8 @@ class GotoDefinitionWithMouseEditorContribution implements EditorCommon.IEditorC
private decorations:string[];
private currentWordUnderMouse:EditorCommon.IWordAtPosition;
private throttler:Async.Throttler;
- private lastMouseEvent:EditorBrowser.IMouseEvent;
+ private lastMouseMoveEvent:EditorBrowser.IMouseEvent;
+ private hasTriggerKeyOnMouseDown:boolean;
constructor(editor: EditorBrowser.ICodeEditor, @IRequestService requestService: IRequestService, @IMessageService messageService: IMessageService, @IEditorService editorService: IEditorService) {
this.editorService = editorService;
@@ -252,6 +253,7 @@ class GotoDefinitionWithMouseEditorContribution implements EditorCommon.IEditorC
this.editor = editor;
this.throttler = new Async.Throttler();
+ this.toUnhook.push(this.editor.addListener(EditorCommon.EventType.MouseDown, (e:EditorBrowser.IMouseEvent) => this.onEditorMouseDown(e)));
this.toUnhook.push(this.editor.addListener(EditorCommon.EventType.MouseUp, (e:EditorBrowser.IMouseEvent) => this.onEditorMouseUp(e)));
this.toUnhook.push(this.editor.addListener(EditorCommon.EventType.MouseMove, (e:EditorBrowser.IMouseEvent) => this.onEditorMouseMove(e)));
this.toUnhook.push(this.editor.addListener(EditorCommon.EventType.KeyDown, (e:Keyboard.StandardKeyboardEvent) => this.onEditorKeyDown(e)));
@@ -263,7 +265,7 @@ class GotoDefinitionWithMouseEditorContribution implements EditorCommon.IEditorC
}
private onEditorMouseMove(mouseEvent: EditorBrowser.IMouseEvent, withKey?:Keyboard.StandardKeyboardEvent):void {
- this.lastMouseEvent = mouseEvent;
+ this.lastMouseMoveEvent = mouseEvent;
this.startFindDefinition(mouseEvent, withKey);
}
@@ -410,20 +412,28 @@ class GotoDefinitionWithMouseEditorContribution implements EditorCommon.IEditorC
}
private onEditorKeyDown(e:Keyboard.StandardKeyboardEvent):void {
- if (e.keyCode === GotoDefinitionWithMouseEditorContribution.TRIGGER_KEY_VALUE && this.lastMouseEvent) {
- this.startFindDefinition(this.lastMouseEvent, e);
+ if (e.keyCode === GotoDefinitionWithMouseEditorContribution.TRIGGER_KEY_VALUE && this.lastMouseMoveEvent) {
+ this.startFindDefinition(this.lastMouseMoveEvent, e);
} else if (e[GotoDefinitionWithMouseEditorContribution.TRIGGER_MODIFIER]) {
this.removeDecorations(); // remove decorations if user holds another key with ctrl/cmd to prevent accident goto declaration
}
}
private resetHandler():void {
- this.lastMouseEvent = null;
+ this.lastMouseMoveEvent = null;
this.removeDecorations();
}
+ private onEditorMouseDown(mouseEvent: EditorBrowser.IMouseEvent):void {
+ // We need to record if we had the trigger key on mouse down because someone might select something in the editor
+ // holding the mouse down and then while mouse is down start to press Ctrl/Cmd to start a copy operation and then
+ // release the mouse button without wanting to do the navigation.
+ // With this flag we prevent goto definition if the mouse was down before the trigger key was pressed.
+ this.hasTriggerKeyOnMouseDown = !!mouseEvent.event[GotoDefinitionWithMouseEditorContribution.TRIGGER_MODIFIER];
+ }
+
private onEditorMouseUp(mouseEvent: EditorBrowser.IMouseEvent):void {
- if (this.isEnabled(mouseEvent)) {
+ if (this.isEnabled(mouseEvent) && this.hasTriggerKeyOnMouseDown) {
this.gotoDefinition(mouseEvent.target, mouseEvent.event.altKey).done(()=>{
this.removeDecorations();
}, (error:Error)=>{
From f6e57602af185ed359da985ef6efcd6bca0d6c51 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 18:24:37 +0100
Subject: [PATCH 042/588] fix whitespace
---
src/vs/base/browser/globalMouseMoveMonitor.ts | 20 +++---
src/vs/base/browser/idleMonitor.ts | 50 +++++++-------
src/vs/base/browser/iframe.ts | 20 +++---
src/vs/base/common/collections.ts | 20 +++---
src/vs/base/common/graph.ts | 26 +++----
src/vs/base/common/injector.ts | 38 +++++------
src/vs/base/common/remote.ts | 24 +++----
src/vs/base/common/worker/workerProtocol.ts | 12 ++--
.../editor/common/services/modeServiceImpl.ts | 2 +-
.../common/viewModel/prefixSumComputer.ts | 42 ++++++------
src/vs/editor/contrib/hover/browser/hover.css | 4 +-
.../languages/css/common/parser/cssErrors.ts | 2 +-
.../languages/css/common/parser/cssSymbols.ts | 68 +++++++++----------
.../languages/css/common/services/browsers.js | 2 +-
.../languages/typescript/common/typescript.ts | 4 +-
.../platform/plugins/common/ipcRemoteCom.ts | 24 +++----
.../parts/output/browser/outputActions.ts | 2 +-
.../node/appInsightsTelemetryAppender.test.ts | 2 +-
.../files/test/node/fileService.test.ts | 2 +-
19 files changed, 182 insertions(+), 182 deletions(-)
diff --git a/src/vs/base/browser/globalMouseMoveMonitor.ts b/src/vs/base/browser/globalMouseMoveMonitor.ts
index bf6f02d77e4..de03d86bc42 100644
--- a/src/vs/base/browser/globalMouseMoveMonitor.ts
+++ b/src/vs/base/browser/globalMouseMoveMonitor.ts
@@ -38,45 +38,45 @@ export function standardMouseMoveMerger(lastEvent:IStandardMouseMoveEventData, c
}
export class GlobalMouseMoveMonitor implements Lifecycle.IDisposable {
-
+
private hooks:Lifecycle.IDisposable[];
private mouseMoveEventMerger:IEventMerger;
private mouseMoveCallback:IMouseMoveCallback;
private onStopCallback:IOnStopCallback;
-
+
constructor() {
this.hooks = [];
this.mouseMoveEventMerger = null;
this.mouseMoveCallback = null;
this.onStopCallback = null;
}
-
+
public dispose(): void {
this.stopMonitoring(false);
}
-
+
public stopMonitoring(invokeStopCallback:boolean): void {
if (!this.isMonitoring()) {
// Not monitoring
return;
}
-
+
// Unhook
this.hooks = Lifecycle.disposeAll(this.hooks);
this.mouseMoveEventMerger = null;
this.mouseMoveCallback = null;
var onStopCallback = this.onStopCallback;
this.onStopCallback = null;
-
+
if (invokeStopCallback) {
onStopCallback();
}
}
-
+
public isMonitoring() {
return this.hooks.length > 0;
}
-
+
public startMonitoring(
mouseMoveEventMerger:IEventMerger,
mouseMoveCallback:IMouseMoveCallback,
@@ -89,7 +89,7 @@ export class GlobalMouseMoveMonitor implements Lifecycle.IDisposable {
this.mouseMoveEventMerger = mouseMoveEventMerger;
this.mouseMoveCallback = mouseMoveCallback;
this.onStopCallback = onStopCallback;
-
+
var windowChain = IframeUtils.getSameOriginWindowChain();
for (var i = 0; i < windowChain.length; i++) {
this.hooks.push(DomUtils.addDisposableThrottledListener(windowChain[i].window.document, 'mousemove',
@@ -98,7 +98,7 @@ export class GlobalMouseMoveMonitor implements Lifecycle.IDisposable {
));
this.hooks.push(DomUtils.addDisposableListener(windowChain[i].window.document, 'mouseup', (e:MouseEvent) => this.stopMonitoring(true)));
}
-
+
if (IframeUtils.hasDifferentOriginAncestor()) {
var lastSameOriginAncestor = windowChain[windowChain.length - 1];
// We might miss a mouse up if it happens outside the iframe
diff --git a/src/vs/base/browser/idleMonitor.ts b/src/vs/base/browser/idleMonitor.ts
index 5524eae01f7..f5637be62a8 100644
--- a/src/vs/base/browser/idleMonitor.ts
+++ b/src/vs/base/browser/idleMonitor.ts
@@ -17,7 +17,7 @@ export enum UserStatus {
export var DEFAULT_IDLE_TIME = 60 * 60 * 1000; // 60 minutes
export class IdleMonitor {
-
+
private toDispose:Lifecycle.IDisposable[];
private lastActiveTime:number;
private idleCheckTimeout:number;
@@ -25,41 +25,41 @@ export class IdleMonitor {
private eventEmitter:EventEmitter.EventEmitter;
private instance:ReferenceCountedIdleMonitor;
private idleTime:number;
-
+
constructor(idleTime:number = DEFAULT_IDLE_TIME) {
this.instance = ReferenceCountedIdleMonitor.INSTANCE;
this.instance.increment();
-
+
this.status = null;
this.idleCheckTimeout = -1;
this.lastActiveTime = -1;
this.idleTime = idleTime;
-
+
this.toDispose = [];
this.eventEmitter = new EventEmitter.EventEmitter();
this.toDispose.push(this.eventEmitter);
this.toDispose.push({dispose: this.instance.addListener(() => this.onUserActive())});
this.onUserActive();
}
-
+
public addOneTimeActiveListener(callback:()=>void): Lifecycle.IDisposable {
return this.eventEmitter.addOneTimeDisposableListener('onActive', callback);
}
-
+
public addOneTimeIdleListener(callback:()=>void): Lifecycle.IDisposable {
return this.eventEmitter.addOneTimeDisposableListener('onIdle', callback);
}
-
+
public getStatus(): UserStatus {
return this.status;
}
-
+
public dispose(): void {
this.cancelIdleCheck();
this.toDispose = Lifecycle.disposeAll(this.toDispose);
this.instance.decrement();
}
-
+
private onUserActive(): void {
this.lastActiveTime = (new Date()).getTime();
if (this.status !== UserStatus.Active) {
@@ -68,14 +68,14 @@ export class IdleMonitor {
this.eventEmitter.emit('onActive');
}
}
-
+
private onUserIdle(): void {
if (this.status !== UserStatus.Idle) {
this.status = UserStatus.Idle;
this.eventEmitter.emit('onIdle');
}
}
-
+
private scheduleIdleCheck(): void {
if (this.idleCheckTimeout === -1) {
var minimumTimeWhenUserCanBecomeIdle = this.lastActiveTime + this.idleTime;
@@ -85,14 +85,14 @@ export class IdleMonitor {
}, minimumTimeWhenUserCanBecomeIdle - (new Date()).getTime());
}
}
-
+
private cancelIdleCheck(): void {
if (this.idleCheckTimeout !== -1) {
clearTimeout(this.idleCheckTimeout);
this.idleCheckTimeout = -1;
}
}
-
+
private checkIfUserIsIdle(): void {
var actualIdleTime = (new Date()).getTime() - this.lastActiveTime;
if (actualIdleTime >= this.idleTime) {
@@ -104,20 +104,20 @@ export class IdleMonitor {
}
class ReferenceCountedObject {
-
+
private referenceCount:number;
-
+
constructor() {
this.referenceCount = 0;
}
-
+
public increment(): void {
if (this.referenceCount === 0) {
this.construct();
}
this.referenceCount++;
}
-
+
public decrement(): void {
if (this.referenceCount > 0) {
this.referenceCount--;
@@ -126,23 +126,23 @@ class ReferenceCountedObject {
}
}
}
-
+
public construct(): void {
throw new Error('Implement me');
}
-
+
public dispose(): void {
throw new Error('Implement me');
}
}
class ReferenceCountedIdleMonitor extends ReferenceCountedObject {
-
+
public static INSTANCE:ReferenceCountedIdleMonitor = new ReferenceCountedIdleMonitor();
-
+
private toDispose:Lifecycle.IDisposable[];
private eventEmitter:EventEmitter.EventEmitter;
-
+
public construct(): void {
this.toDispose = [];
this.eventEmitter = new EventEmitter.EventEmitter();
@@ -151,15 +151,15 @@ class ReferenceCountedIdleMonitor extends ReferenceCountedObject {
this.toDispose.push(DomUtils.addDisposableListener(BrowserService.getService().document, 'keydown', () => this.onUserActive()));
this.onUserActive();
}
-
+
public dispose(): void {
this.toDispose = Lifecycle.disposeAll(this.toDispose);
}
-
+
private onUserActive(): void {
this.eventEmitter.emit('onActive');
}
-
+
public addListener(callback:()=>void):EventEmitter.ListenerUnbind {
return this.eventEmitter.addListener('onActive', callback);
}
diff --git a/src/vs/base/browser/iframe.ts b/src/vs/base/browser/iframe.ts
index 91a075e8861..d080ea4aeeb 100644
--- a/src/vs/base/browser/iframe.ts
+++ b/src/vs/base/browser/iframe.ts
@@ -25,7 +25,7 @@ function getParentWindowIfSameOrigin(w:Window): Window {
if (!w.parent || w.parent === w) {
return null;
}
-
+
// Cannot really tell if we have access to the parent window unless we try to access something in it
try {
var location = w.location;
@@ -38,7 +38,7 @@ function getParentWindowIfSameOrigin(w:Window): Window {
hasDifferentOriginAncestorFlag = true;
return null;
}
-
+
return w.parent;
}
@@ -97,34 +97,34 @@ export function hasDifferentOriginAncestor(): boolean {
* Returns the position of `childWindow` relative to `ancestorWindow`
*/
export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow:Window, ancestorWindow:any) {
-
+
if (!ancestorWindow || childWindow === ancestorWindow) {
return {
top: 0,
left: 0
};
}
-
+
var top = 0, left = 0;
-
+
var windowChain = getSameOriginWindowChain();
-
+
for (var i = 0; i < windowChain.length; i++) {
var windowChainEl = windowChain[i];
-
+
if (windowChainEl.window === ancestorWindow) {
break;
}
-
+
if (!windowChainEl.iframeElement) {
break;
}
-
+
var boundingRect = windowChainEl.iframeElement.getBoundingClientRect();
top += boundingRect.top;
left += boundingRect.left;
}
-
+
return {
top: top,
left: left
diff --git a/src/vs/base/common/collections.ts b/src/vs/base/common/collections.ts
index dba6af36976..0fd34ece7f5 100644
--- a/src/vs/base/common/collections.ts
+++ b/src/vs/base/common/collections.ts
@@ -94,7 +94,7 @@ export function contains(from:any, what:any):boolean {
export function keys(from:IStringDictionary):IIterable;
export function keys(from:INumberDictionary):IIterable;
export function keys(from:any):IIterable {
-
+
return {
every: function(callback:(element:any)=>boolean):boolean {
for (var key in from) {
@@ -174,7 +174,7 @@ export function groupBy(data: T[], groupFn: (element: T) => string): IStringD
* compatible with the JavaScript array.
*/
export interface IIterable {
-
+
/**
* Iterates over every element in the array
* as long as the callback does not return some
@@ -273,33 +273,33 @@ interface ICacheRow {
* removes the older elements as new ones are inserted.
*/
export class LimitedSizeCache {
-
+
private cache: { [id: string]: ICacheRow };
private order: string[];
-
+
constructor(private size: number) {
this.cache = Object.create(null);
this.order = [];
}
-
+
public get(id: string): T {
var result = this.cache[id];
return result && result.element;
}
-
+
public put(id: string, element: T, onRemove: ()=>void): void {
var existing = this.cache[id];
var row: ICacheRow = { element: element, onRemove: onRemove };
-
+
this.cache[id] = row;
-
+
if (!existing) {
this.order.push(id);
}
-
+
this.swipe();
}
-
+
private swipe(): void {
while (this.order.length > this.size) {
var id = this.order.shift();
diff --git a/src/vs/base/common/graph.ts b/src/vs/base/common/graph.ts
index 2272ff58a62..d091ce92dca 100644
--- a/src/vs/base/common/graph.ts
+++ b/src/vs/base/common/graph.ts
@@ -22,13 +22,13 @@ export function newNode(data:T):Node {
}
export class Graph {
-
+
private _nodes:{[key:string]:Node} = Object.create(null);
-
+
constructor(private _hashFn:(element:T)=>string) {
// empty
}
-
+
public roots():Node[] {
var ret:Node[] = [];
collections.forEach(this._nodes, entry => {
@@ -38,7 +38,7 @@ export class Graph {
});
return ret;
}
-
+
public traverse(start:T, inwards:boolean, callback:(data:T)=>void):void {
var startNode = this.lookup(start);
if(!startNode) {
@@ -46,7 +46,7 @@ export class Graph {
}
this._traverse(startNode, inwards, {}, callback);
}
-
+
private _traverse(node:Node, inwards:boolean, seen:{[key:string]:boolean}, callback:(data:T)=>void):void {
var key = this._hashFn(node.data);
if(collections.contains(seen, key)) {
@@ -57,15 +57,15 @@ export class Graph {
var nodes = inwards ? node.outgoing : node.incoming;
collections.forEach(nodes, (entry) => this._traverse(entry.value, inwards, seen, callback));
}
-
+
public insertEdge(from:T, to:T):void {
var fromNode = this.lookupOrInsertNode(from),
toNode = this.lookupOrInsertNode(to);
-
+
fromNode.outgoing[this._hashFn(to)] = toNode;
toNode.incoming[this._hashFn(from)] = fromNode;
}
-
+
public removeNode(data:T):void {
var key = this._hashFn(data);
delete this._nodes[key];
@@ -74,23 +74,23 @@ export class Graph {
delete entry.value.incoming[key];
});
}
-
+
public lookupOrInsertNode(data:T):Node {
var key = this._hashFn(data),
node = collections.lookup(this._nodes, key);
-
+
if(!node) {
node = newNode(data);
this._nodes[key] = node;
}
-
+
return node;
}
-
+
public lookup(data:T):Node {
return collections.lookup(this._nodes, this._hashFn(data));
}
-
+
public get length():number {
return Object.keys(this._nodes).length;
}
diff --git a/src/vs/base/common/injector.ts b/src/vs/base/common/injector.ts
index fb5f113ae95..0a180e9f97f 100644
--- a/src/vs/base/common/injector.ts
+++ b/src/vs/base/common/injector.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
-
+
import Assert = require('vs/base/common/assert');
import Types = require('vs/base/common/types');
@@ -11,32 +11,32 @@ var inject = 'inject';
var injectLen = inject.length;
export class Container {
-
+
private map:{[name:string]:any;};
private parent:Container;
-
+
constructor() {
this.map = {};
this.parent = null;
}
-
+
public setParent(parent:Container):void {
this.parent = parent;
}
-
+
public registerService(target:string, service:any):any {
Assert.ok(!Types.isUndefinedOrNull(target));
Assert.ok(!Types.isUndefinedOrNull(service));
-
+
this.map[target.toLowerCase()] = service;
-
+
return service;
}
-
+
// injects the denoted services to the target
public injectTo(target:any):boolean {
Assert.ok(!Types.isUndefinedOrNull(target));
-
+
// Support arrays
var didInjectAtLeastOnce = false;
if (Types.isArray(target)) {
@@ -45,48 +45,48 @@ export class Container {
});
return didInjectAtLeastOnce;
}
-
+
// inject services one by one
for (var key in target) {
if(key.indexOf(inject) !== 0) {
continue;
}
-
+
var element = target[key];
if(!Types.isFunction(element)) {
continue;
}
-
+
key = key.substring(injectLen).toLowerCase();
var service = this.findService(key, target);
if(Types.isUndefinedOrNull(service)) {
continue;
}
-
+
// call inject function
element.apply(target, [service]);
didInjectAtLeastOnce = true;
}
-
+
return didInjectAtLeastOnce;
}
-
+
public createChild():Container {
var childContainer = new Container();
childContainer.setParent(this);
-
+
return childContainer;
}
-
+
public findService(key:string, target:any=null):any {
var result = this.map[key];
if((Types.isUndefinedOrNull(result) || target === result) && this.parent !== null) {
result = this.parent.findService(key, target);
}
-
+
return result;
}
-
+
public dispose():void {
this.map = null;
this.parent = null;
diff --git a/src/vs/base/common/remote.ts b/src/vs/base/common/remote.ts
index 5e90967b1fd..75e06166e22 100644
--- a/src/vs/base/common/remote.ts
+++ b/src/vs/base/common/remote.ts
@@ -51,63 +51,63 @@ export interface ISerializedProxy {
}
export class ProxiesMarshallingContribution implements marshalling.IMarshallingContribution {
-
+
private _remoteCom:IProxyHelper;
-
+
constructor(remoteCom:IProxyHelper) {
this._remoteCom = remoteCom;
}
-
+
public canSerialize(obj:any): boolean {
return (typeof obj.$__CREATE__PROXY__REQUEST === 'string');
}
-
+
public serialize(obj:any, serialize:(obj:any)=>any): ISerializedProxy {
var desc: IObjDescriptor = {
methods: [],
props: {}
};
-
+
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
-
+
if (typeof obj[key] === 'function') {
desc.methods.push(key);
} else {
desc.props[key] = serialize(obj[key]);
}
}
-
+
return {
$isProxyDescriptor: true,
proxyId: obj.$__CREATE__PROXY__REQUEST,
desc: desc
};
}
-
+
public canDeserialize(obj:ISerializedProxy): boolean {
return obj.$isProxyDescriptor === true;
}
-
+
public deserialize(obj:ISerializedProxy, deserialize:(obj:any)=>any): any {
// this is an object
var result: any = {
$__IS_REMOTE_OBJ: true
};
-
+
var methods = obj.desc.methods;
for (var i = 0; i < methods.length; i++) {
result[methods[i]] = createMethodProxy(this._remoteCom, obj.proxyId, methods[i]);
}
-
+
var props = obj.desc.props;
for (var prop in props) {
if (hasOwnProperty.call(props, prop)) {
result[prop] = deserialize(props[prop]);
}
}
-
+
return result;
}
}
\ No newline at end of file
diff --git a/src/vs/base/common/worker/workerProtocol.ts b/src/vs/base/common/worker/workerProtocol.ts
index 07e2a846b49..dafaf7d0578 100644
--- a/src/vs/base/common/worker/workerProtocol.ts
+++ b/src/vs/base/common/worker/workerProtocol.ts
@@ -77,15 +77,15 @@ export interface IRequester {
}
export class RemoteCom implements remote.IRemoteCom {
-
+
private _requester: IRequester;
private _bigHandler: remote.IManyHandler;
-
+
constructor(requester:IRequester) {
this._requester = requester;
this._bigHandler = null;
}
-
+
public callOnRemote(proxyId: string, path: string, args:any[]): winjs.Promise {
return this._requester.request('_proxyObj', {
proxyId: proxyId,
@@ -93,18 +93,18 @@ export class RemoteCom implements remote.IRemoteCom {
args: args
});
}
-
+
public registerBigHandler(handler:remote.IManyHandler): void {
this._bigHandler = handler;
}
-
+
public handleMessage(msg: { proxyId: string; path: string; args: any[]; }): winjs.Promise {
if (!this._bigHandler) {
throw new Error('got message before big handler attached!');
}
return this._invokeHandler(msg.proxyId, msg.path, msg.args);
}
-
+
private _invokeHandler(rpcId:string, method:string, args:any[]): winjs.Promise {
try {
return winjs.TPromise.as(this._bigHandler.handle(rpcId, method, args));
diff --git a/src/vs/editor/common/services/modeServiceImpl.ts b/src/vs/editor/common/services/modeServiceImpl.ts
index afbd2763e6d..6de4ab3cb1d 100644
--- a/src/vs/editor/common/services/modeServiceImpl.ts
+++ b/src/vs/editor/common/services/modeServiceImpl.ts
@@ -190,7 +190,7 @@ export class ModeServiceImpl implements IModeService {
var c, e;
var promise = new TPromise((cc,ee,pp) => { c = cc; e = ee; });
this._activationPromises[modeId] = promise;
-
+
this._createMode(modeId).then((mode) => {
this._instantiatedModes[modeId] = mode;
delete this._activationPromises[modeId];
diff --git a/src/vs/editor/common/viewModel/prefixSumComputer.ts b/src/vs/editor/common/viewModel/prefixSumComputer.ts
index 986e35fcd9d..a43856fae48 100644
--- a/src/vs/editor/common/viewModel/prefixSumComputer.ts
+++ b/src/vs/editor/common/viewModel/prefixSumComputer.ts
@@ -10,22 +10,22 @@ export interface IPrefixSumIndexOfResult {
}
export class PrefixSumComputer {
-
+
/**
* values[i] is the value at index i
*/
private values:number[];
-
+
/**
* prefixSum[i] = SUM(heights[j]), 0 <= j <= i
*/
private prefixSum:number[];
-
+
/**
* prefixSum[i], 0 <= i <= prefixSumValidIndex can be trusted
*/
private prefixSumValidIndex:number;
-
+
constructor(values:number[]) {
this.values = values;
this.prefixSum = [];
@@ -34,11 +34,11 @@ export class PrefixSumComputer {
}
this.prefixSumValidIndex = -1;
}
-
+
public getCount(): number {
return this.values.length;
}
-
+
public insertValue(insertIndex:number, value:number): void {
this.values.splice(insertIndex, 0, value);
this.prefixSum.splice(insertIndex, 0, 0);
@@ -46,20 +46,20 @@ export class PrefixSumComputer {
this.prefixSumValidIndex = insertIndex - 1;
}
}
-
+
public insertValues(insertIndex: number, values: number[]): void {
if (values.length === 0) {
return;
}
-
+
this.values = this.values.slice(0, insertIndex).concat(values).concat(this.values.slice(insertIndex));
this.prefixSum = this.prefixSum.slice(0, insertIndex).concat(PrefixSumComputer._zeroArray(values.length)).concat(this.prefixSum.slice(insertIndex));
-
+
if (insertIndex - 1 < this.prefixSumValidIndex) {
this.prefixSumValidIndex = insertIndex - 1;
}
}
-
+
private static _zeroArray(count: number): number[] {
var r: number[] = new Array(count);
for (var i = 0; i < count; i++) {
@@ -67,7 +67,7 @@ export class PrefixSumComputer {
}
return r;
}
-
+
public changeValue(index:number, value:number): void {
if (this.values[index] === value) {
return;
@@ -77,7 +77,7 @@ export class PrefixSumComputer {
this.prefixSumValidIndex = index - 1;
}
}
-
+
public removeValues(startIndex:number, cnt:number): void {
this.values.splice(startIndex, cnt);
this.prefixSum.splice(startIndex, cnt);
@@ -85,14 +85,14 @@ export class PrefixSumComputer {
this.prefixSumValidIndex = startIndex - 1;
}
}
-
+
public getTotalValue(): number {
if (this.values.length === 0) {
return 0;
}
return this.getAccumulatedValue(this.values.length - 1);
}
-
+
public getAccumulatedValue(index:number): number {
if (index < 0) {
return 0;
@@ -100,37 +100,37 @@ export class PrefixSumComputer {
if (index <= this.prefixSumValidIndex) {
return this.prefixSum[index];
}
-
+
var startIndex = this.prefixSumValidIndex + 1;
if (startIndex === 0) {
this.prefixSum[0] = this.values[0];
startIndex++;
}
-
+
if (index >= this.values.length) {
index = this.values.length - 1;
}
-
+
for (var i = startIndex; i <= index; i++) {
this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];
}
this.prefixSumValidIndex = Math.max(this.prefixSumValidIndex, index);
return this.prefixSum[index];
}
-
+
public getIndexOf(accumulatedValue:number, result:IPrefixSumIndexOfResult): void {
var low = 0,
high = this.values.length - 1,
mid:number,
midStart:number,
midStop:number;
-
+
while (low <= high) {
mid = low + ( (high-low)/2 ) | 0;
-
+
midStop = this.getAccumulatedValue(mid);
midStart = midStop - this.values[mid];
-
+
if (accumulatedValue < midStart) {
high = mid - 1;
} else if (accumulatedValue >= midStop) {
diff --git a/src/vs/editor/contrib/hover/browser/hover.css b/src/vs/editor/contrib/hover/browser/hover.css
index a0091b4a6d4..abab1994f41 100644
--- a/src/vs/editor/contrib/hover/browser/hover.css
+++ b/src/vs/editor/contrib/hover/browser/hover.css
@@ -18,14 +18,14 @@
-ms-animation-name: fadeIn;
animation-duration: 0.15s;
animation-name: fadeIn;
-
+
-webkit-user-select: text;
-ms-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-o-user-select: text;
user-select: text;
-
+
overflow: hidden;
}
diff --git a/src/vs/languages/css/common/parser/cssErrors.ts b/src/vs/languages/css/common/parser/cssErrors.ts
index 111f1bc809e..c185d6ee869 100644
--- a/src/vs/languages/css/common/parser/cssErrors.ts
+++ b/src/vs/languages/css/common/parser/cssErrors.ts
@@ -10,7 +10,7 @@ import nodes = require('./cssNodes');
export class CSSIssueType implements nodes.IRule {
id: string;
message: string;
-
+
public constructor(id:string, message: string) {
this.id = id;
this.message = message;
diff --git a/src/vs/languages/css/common/parser/cssSymbols.ts b/src/vs/languages/css/common/parser/cssSymbols.ts
index 391a9f4428a..61af2712a45 100644
--- a/src/vs/languages/css/common/parser/cssSymbols.ts
+++ b/src/vs/languages/css/common/parser/cssSymbols.ts
@@ -8,40 +8,40 @@ import nodes = require('./cssNodes');
import arrays = require('vs/base/common/arrays');
export class Scope {
-
+
public parent:Scope;
public children:Scope[];
-
+
public offset:number;
public length:number;
-
+
private symbols:Symbol[];
-
+
constructor(offset:number, length:number) {
this.offset = offset;
this.length = length;
this.symbols = [];
-
+
this.parent = null;
this.children = [];
}
-
+
public addChild(scope:Scope):void {
this.children.push(scope);
scope.setParent(this);
}
-
+
public setParent(scope:Scope):void {
this.parent = scope;
}
-
+
public findScope(offset:number, length:number=0):Scope {
if (this.offset <= offset && this.offset + this.length > offset + length || this.offset === offset && this.length === length) {
return this.findInScope(offset, length);
}
return null;
}
-
+
private findInScope(offset: number, length: number = 0): Scope {
// find the first scope child that has an offset larger than offset + length
var end = offset + length;
@@ -50,18 +50,18 @@ export class Scope {
// all scopes have offsets larger than our end
return this;
}
-
+
var res = this.children[idx-1];
if (res.offset <= offset && res.offset + res.length >= offset + length) {
return res.findInScope(offset, length);
}
return this;
}
-
+
public addSymbol(symbol:Symbol):void {
this.symbols.push(symbol);
}
-
+
public getSymbol(name:string, type: nodes.ReferenceType):Symbol {
for (var index = 0; index < this.symbols.length; index++) {
var symbol = this.symbols[index];
@@ -71,14 +71,14 @@ export class Scope {
}
return null;
}
-
+
public getSymbols():Symbol[] {
return this.symbols;
}
}
export class GlobalScope extends Scope {
-
+
constructor() {
super(0, Number.MAX_VALUE);
}
@@ -87,11 +87,11 @@ export class GlobalScope extends Scope {
export class Symbol {
-
+
public name:string;
public type:nodes.ReferenceType;
public node:nodes.Node;
-
+
constructor(name:string, node:nodes.Node, type: nodes.ReferenceType) {
this.name = name;
this.node = node;
@@ -102,18 +102,18 @@ export class Symbol {
export class ScopeBuilder implements nodes.IVisitor {
public scope:Scope;
-
+
constructor(scope:Scope) {
this.scope = scope;
}
-
+
private addSymbol(node:nodes.Node, name:string, type: nodes.ReferenceType) : void {
if (node.offset !== -1) {
var current = this.scope.findScope(node.offset, node.length);
current.addSymbol(new Symbol(name, node, type));
}
}
-
+
private addScope(node:nodes.Node) : Scope {
if (node.offset !== -1) {
var current = this.scope.findScope(node.offset, node.length);
@@ -126,14 +126,14 @@ export class ScopeBuilder implements nodes.IVisitor {
}
return null;
}
-
+
private addSymbolToChildScope(scopeNode:nodes.Node, node:nodes.Node, name:string, type: nodes.ReferenceType): void {
if (scopeNode && scopeNode.offset !== -1 ) {
var current = this.addScope(scopeNode); // create the scope or gets the existing one
current.addSymbol(new Symbol(name, node, type));
}
}
-
+
public visitNode(node:nodes.Node):boolean {
switch (node.type) {
case nodes.NodeType.Keyframe:
@@ -171,7 +171,7 @@ export class ScopeBuilder implements nodes.IVisitor {
}
return true;
}
-
+
public visitRuleSet(node:nodes.RuleSet):boolean {
var current = this.scope.findScope(node.offset, node.length);
node.getSelectors().getChildren().forEach((node) => {
@@ -187,14 +187,14 @@ export class ScopeBuilder implements nodes.IVisitor {
export class Symbols {
-
+
private global:Scope;
-
+
constructor(node:nodes.Node) {
this.global = new GlobalScope();
node.accept(new ScopeBuilder(this.global));
}
-
+
public findSymbolsAtOffset(offset:number, referenceType: nodes.ReferenceType) : Symbol[] {
var scope = this.global.findScope(offset, 0);
var result : Symbol[] = [];
@@ -212,7 +212,7 @@ export class Symbols {
}
return result;
}
-
+
private internalFindSymbol(node:nodes.Node, referenceTypes:nodes.ReferenceType[]): Symbol {
var scopeNode = node;
if (node.parent instanceof nodes.FunctionParameter && node.parent.getParent() instanceof nodes.BodyDeclaration) {
@@ -244,7 +244,7 @@ export class Symbols {
}
return null;
}
-
+
private evaluateReferenceTypes(node: nodes.Node) : nodes.ReferenceType[] {
if (node instanceof nodes.Identifier) {
var referenceTypes = ( node).referenceTypes;
@@ -274,7 +274,7 @@ export class Symbols {
}
return null;
}
-
+
public findSymbolFromNode(node: nodes.Node):Symbol {
if (!node) {
return null;
@@ -282,14 +282,14 @@ export class Symbols {
while (node.type === nodes.NodeType.Interpolation) {
node = node.getParent();
}
-
+
var referenceTypes = this.evaluateReferenceTypes(node);
if (referenceTypes) {
return this.internalFindSymbol(node, referenceTypes);
}
return null;
}
-
+
public matchesSymbol(node: nodes.Node, symbol: Symbol):boolean {
if (!node) {
return null;
@@ -300,17 +300,17 @@ export class Symbols {
if (symbol.name.length !== node.length || symbol.name !== node.getText()) {
return false;
}
-
+
var referenceTypes = this.evaluateReferenceTypes(node);
if (!referenceTypes || referenceTypes.indexOf(symbol.type) === -1) {
return false;
}
-
+
var nodeSymbol = this.internalFindSymbol(node, referenceTypes);
return nodeSymbol === symbol;
}
-
-
+
+
public findSymbol(name:string, type: nodes.ReferenceType, offset:number):Symbol {
var scope = this.global.findScope(offset);
while(scope) {
diff --git a/src/vs/languages/css/common/services/browsers.js b/src/vs/languages/css/common/services/browsers.js
index db363c7f33e..3742fce0850 100644
--- a/src/vs/languages/css/common/services/browsers.js
+++ b/src/vs/languages/css/common/services/browsers.js
@@ -2,7 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-
+
// file generated from css-schema.xml using css-exclude_generate_browserjs.js
define(["require", "exports"], function(require, exports) {
diff --git a/src/vs/languages/typescript/common/typescript.ts b/src/vs/languages/typescript/common/typescript.ts
index ee48668f239..a7cef06f12c 100644
--- a/src/vs/languages/typescript/common/typescript.ts
+++ b/src/vs/languages/typescript/common/typescript.ts
@@ -64,7 +64,7 @@ export class DefaultProjectResolver implements IProjectResolver2 {
files: [],
options: undefined
};
-
+
setConsumer(consumer: IProjectConsumer) {
this._consumer = consumer;
}
@@ -91,7 +91,7 @@ export class DefaultProjectResolver implements IProjectResolver2 {
let resource = filePath
? URI.file(filePath)
: URI.create('extralib', undefined, Date.now().toString());
-
+
this._needsProjectUpdate = true;
this._projectChange.files.push(resource);
this._fileChanges.push({ kind: ChangeKind.Added, resource, content });
diff --git a/src/vs/platform/plugins/common/ipcRemoteCom.ts b/src/vs/platform/plugins/common/ipcRemoteCom.ts
index 37e8069bd1a..4f4cb636265 100644
--- a/src/vs/platform/plugins/common/ipcRemoteCom.ts
+++ b/src/vs/platform/plugins/common/ipcRemoteCom.ts
@@ -23,7 +23,7 @@ var pendingRPCReplies: { [msgId: string]: IRPCReply; } = {};
function createRPC(serializeAndSend:(obj:any)=>void): IRPCFunc {
var lastMessageId = 0;
-
+
return function rpc(rpcId: string, method: string, args: any[]): winjs.TPromise {
var req = String(++lastMessageId);
var reply: IRPCReply = {
@@ -61,7 +61,7 @@ export function create(send:(obj:string)=>void): IPluginsIPC {
var rpc = createRPC(serializeAndSend);
var bigHandler: remote.IManyHandler = null;
var invokedHandlers: { [req: string]: winjs.TPromise; } = Object.create(null);
-
+
var r: IPluginsIPC = {
callOnRemote: rpc,
registerBigHandler: (_bigHandler: remote.IManyHandler): void => {
@@ -69,7 +69,7 @@ export function create(send:(obj:string)=>void): IPluginsIPC {
},
handle: (rawmsg) => {
var msg = marshalling.demarshallObject(rawmsg, proxiesMarshalling);
-
+
if (msg.seq) {
if (!pendingRPCReplies.hasOwnProperty(msg.seq)) {
console.warn('Got reply to unknown seq');
@@ -93,22 +93,22 @@ export function create(send:(obj:string)=>void): IPluginsIPC {
}
return;
}
-
+
if (msg.err) {
console.error(msg.err);
return;
}
var rpcId = msg.rpcId;
-
+
if (!bigHandler) {
throw new Error('got message before big handler attached!');
}
-
+
var req = msg.req;
-
+
invokedHandlers[req] = invokeHandler(rpcId, msg.method, msg.args);
-
+
invokedHandlers[req].then((r) => {
delete invokedHandlers[req];
serializeAndSend({
@@ -124,13 +124,13 @@ export function create(send:(obj:string)=>void): IPluginsIPC {
});
}
};
-
+
var proxiesMarshalling = new remote.ProxiesMarshallingContribution(r);
-
+
function serializeAndSend(msg:any): void {
send(marshalling.marshallObject(msg, proxiesMarshalling));
}
-
+
function invokeHandler(rpcId:string, method:string, args:any[]): winjs.TPromise {
try {
return winjs.TPromise.as(bigHandler.handle(rpcId, method, args));
@@ -138,7 +138,7 @@ export function create(send:(obj:string)=>void): IPluginsIPC {
return winjs.TPromise.wrapError(err);
}
}
-
+
return r;
};
diff --git a/src/vs/workbench/parts/output/browser/outputActions.ts b/src/vs/workbench/parts/output/browser/outputActions.ts
index 2e9b316845f..5f96cb8ef08 100644
--- a/src/vs/workbench/parts/output/browser/outputActions.ts
+++ b/src/vs/workbench/parts/output/browser/outputActions.ts
@@ -191,7 +191,7 @@ export class SwitchOutputActionItem extends SelectActionItem {
super(null, action, SwitchOutputActionItem.getChannels(outputService, input), SwitchOutputActionItem.getChannels(outputService, input).indexOf(input.getChannel()));
this.input = input;
-
+
this.outputService.onOutputChannel.add(this.onOutputChannel, this);
}
diff --git a/src/vs/workbench/parts/telemetry/test/node/appInsightsTelemetryAppender.test.ts b/src/vs/workbench/parts/telemetry/test/node/appInsightsTelemetryAppender.test.ts
index 69d19b70842..099bd31823d 100644
--- a/src/vs/workbench/parts/telemetry/test/node/appInsightsTelemetryAppender.test.ts
+++ b/src/vs/workbench/parts/telemetry/test/node/appInsightsTelemetryAppender.test.ts
@@ -159,7 +159,7 @@ suite('Telemetry - AppInsightsTelemetryAppender', () => {
assert.equal(appInsightsMock.events.length, 2);
assert.equal(appInsightsMock.events[0].eventName, NodeAppInsightsTelemetryAppender.EVENT_NAME_PREFIX+'testEvent');
-
+
// test vortex
assert.equal(appInsightsMock.events[1].eventName, NodeAppInsightsTelemetryAppender.EVENT_NAME_PREFIX+'testEvent');
});
diff --git a/src/vs/workbench/services/files/test/node/fileService.test.ts b/src/vs/workbench/services/files/test/node/fileService.test.ts
index db96506f327..e715e98c9f2 100644
--- a/src/vs/workbench/services/files/test/node/fileService.test.ts
+++ b/src/vs/workbench/services/files/test/node/fileService.test.ts
@@ -58,7 +58,7 @@ suite('FileService', () => {
test('createFile', function(done: () => void) {
this.timeout(10000); // test tends to need longer?
-
+
let contents = 'Hello World';
service.createFile(uri.file(path.join(testDir, 'test.txt')), contents).done(s => {
assert.equal(s.name, 'test.txt');
From 9b5899187d007aaa4c760ecbd3269cb93440d1e3 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 19:09:31 +0100
Subject: [PATCH 043/588] gulp hygiene
---
build/gulpfile.hygiene.js | 120 ++++++++++++++++++++++++++++++++++++++
build/lib/copyrights.js | 36 ------------
build/lib/style.js | 60 -------------------
gulpfile.js | 68 +--------------------
4 files changed, 121 insertions(+), 163 deletions(-)
create mode 100644 build/gulpfile.hygiene.js
delete mode 100644 build/lib/copyrights.js
delete mode 100644 build/lib/style.js
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
new file mode 100644
index 00000000000..27c3c4fc891
--- /dev/null
+++ b/build/gulpfile.hygiene.js
@@ -0,0 +1,120 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+var gulp = require('gulp');
+var filter = require('gulp-filter');
+var es = require('event-stream');
+var path = require('path');
+
+var eolFilter = [
+ 'build/**/*',
+ 'extensions/**/*',
+ 'scripts/**/*',
+ 'src/**/*',
+ 'test/**/*',
+ '!extensions/csharp-o/bin/**',
+ '!extensions/**/out/**',
+ '!**/node_modules/**',
+ '!**/fixtures/**',
+ '!**/*.{svg,exe,png,scpt,bat,cur,ttf,woff,eot}',
+];
+
+var indentationFilter = [
+ '**',
+ '!**/lib/**',
+ '!**/*.d.ts',
+ '!extensions/typescript/server/**',
+ '!test/assert.js',
+ '!**/package.json',
+ '!**/octicons/**',
+ '!**/vs/languages/sass/test/common/example.scss',
+ '!**/vs/languages/less/common/parser/less.grammar.txt',
+ '!**/vs/languages/css/common/buildscripts/css-schema.xml',
+ '!**/vs/languages/markdown/common/raw.marked.js',
+ '!**/vs/base/common/winjs.base.raw.js',
+ '!**/vs/base/node/terminateProcess.sh',
+ '!extensions/csharp-o/gulpfile.js',
+ '!**/vs/base/node/terminateProcess.sh',
+ '!**/vs/text.js',
+ '!**/vs/nls.js',
+ '!**/vs/css.js',
+ '!**/vs/loader.js',
+ '!extensions/**/snippets/**',
+ '!extensions/**/syntaxes/**',
+ '!extensions/**/themes/**',
+];
+
+var copyrightFilterList = [
+ '**',
+ '!**/*.json',
+ '!**/*.html',
+ '!**/test/**',
+ '!**/*.md',
+ '!**/*.sh',
+ '!**/*.txt',
+ '!src/vs/editor/standalone-languages/swift.ts',
+];
+
+var copyrightHeader = [
+ '/*---------------------------------------------------------------------------------------------',
+ ' * Copyright (c) Microsoft Corporation. All rights reserved.',
+ ' * Licensed under the MIT License. See License.txt in the project root for license information.',
+ ' *--------------------------------------------------------------------------------------------*/'
+].join('\n');
+
+gulp.task('hygiene', function() {
+ var errorCount = 0;
+
+ var eol = es.through(function (file) {
+ if (/\r\n?/g.test(file.contents.toString('utf8'))) {
+ console.error(file.path + ': Bad EOL found');
+ errorCount++;
+ }
+
+ this.emit('data', file);
+ });
+
+ var indentation = es.through(function (file) {
+ file.contents
+ .toString('utf8')
+ .split(/\r\n|\r|\n/)
+ .forEach(function(line, i) {
+ if (line.length === 0) {
+ // empty lines are OK
+ } else if (/^[\t]*[^\s]/.test(line)) {
+ // good indent
+ } else if (/^[\t]* \*/.test(line)) {
+ // block comment using an extra space
+ } else {
+ console.error(file.path + '(' + (i + 1) + ',1): Bad whitespace indentation');
+ errorCount++;
+ }
+ });
+
+ this.emit('data', file);
+ });
+
+ var copyrights = es.through(function (file) {
+ if (file.contents.toString('utf8').indexOf(copyrightHeader) !== 0) {
+ console.error(file.path + ': Missing or bad copyright statement');
+ errorCount++;
+ }
+ });
+
+ return gulp.src(eolFilter, { base: '.' })
+ .pipe(filter(function (f) { return !f.stat.isDirectory(); }))
+ .pipe(eol)
+ .pipe(filter(indentationFilter))
+ .pipe(indentation)
+ .pipe(filter(copyrightFilterList))
+ .pipe(copyrights)
+ .pipe(es.through(null, function () {
+ if (errorCount > 0) {
+ this.emit('error', 'Hygiene failed with ' + errorCount + ' errors.\nCheck build/gulpfile.hygiene.js for the hygiene rules.');
+ } else {
+ this.emit('end');
+ }
+ }));
+});
diff --git a/build/lib/copyrights.js b/build/lib/copyrights.js
deleted file mode 100644
index b468398bc60..00000000000
--- a/build/lib/copyrights.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var es = require('event-stream');
-var fs = require('fs');
-var path = require('path');
-
-var copyright = [
- '/*---------------------------------------------------------------------------------------------',
- ' * Copyright (c) Microsoft Corporation. All rights reserved.',
- ' * Licensed under the MIT License. See License.txt in the project root for license information.',
- ' *--------------------------------------------------------------------------------------------*/'
-].join('\n');
-
-
-exports.copyrights = function () {
- return es.mapSync(function (file) {
- if (file.contents) {
- var contents = file.contents.toString('utf8');
-
- if (contents.indexOf(copyright) !== 0) {
- throw new Error('File ' + file.path + ' does not contain copyright statement.');
- }
- }
- });
-};
-
-exports.insertCopyrights = function() {
- return es.mapSync(function (file) {
- if (file.contents) {
- var contents = file.contents.toString('utf8');
-
- if (contents.indexOf(copyright) !== 0) {
- contents = copyright + '\n\n' + contents;
- fs.writeFileSync(file.path, contents, 'utf8');
- }
- }
- });
-}
diff --git a/build/lib/style.js b/build/lib/style.js
deleted file mode 100644
index d9d890d37ce..00000000000
--- a/build/lib/style.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var es = require('event-stream');
-var path = require('path');
-
-module.exports = function (opts) {
- return es.mapSync(function (file) {
- if (file.stat.isDirectory()) {
- return file;
- }
- var contents = file.contents.toString('utf8');
-
- if (opts.complain) {
- if (contents.indexOf('\r\n') >= 0) {
- console.log(file.path + ' uses \\r\\n');
- }
-
- if (opts.whitespace) {
- var lines = contents.split(/\r\n|\r|\n/);
- for (var i = 0, len = lines.length; i < len; i++) {
- var line = lines[i];
- if (line.length === 0) {
- // empty lines are OK
- continue;
- }
-
- if (/^[\t]*[^\s]/.test(line)) {
- // good indent
- continue;
- } else if (/^[\t]* \*/.test(line)) {
- // block comment using an extra space
- continue;
- } else if (/^[\t]+$/.test(line)) {
- // empty line
- continue;
- } else {
- console.log(file.path + '(' + (i + 1) + ',1): Mixed whitespace indentation');
- }
- }
- }
- } else {
- var lines = contents.split(/\r\n|\r|\n/);
-
- if (opts.whitespace) {
- for (var i = 0, len = lines.length; i < len; i++) {
- var line = lines[i];
- line = line.replace(/^\ {28}/, '\t\t\t\t\t\t\t');
- line = line.replace(/^\ {24}/, '\t\t\t\t\t\t');
- line = line.replace(/^\ {20}/, '\t\t\t\t\t');
- line = line.replace(/^\ {16}/, '\t\t\t\t');
- line = line.replace(/^\ {12}/, '\t\t\t');
- line = line.replace(/^\ {8}/, '\t\t');
- line = line.replace(/^\ {4}/, '\t');
- lines[i] = line;
- }
- }
-
- file.contents = new Buffer(lines.join('\n'), 'utf8');
- }
- return file;
- });
-};
diff --git a/gulpfile.js b/gulpfile.js
index 429761cdbd8..2be8f89a9e2 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -13,8 +13,6 @@ var mocha = require('gulp-mocha');
var es = require('event-stream');
var watch = require('./build/lib/watch');
var nls = require('./build/lib/nls');
-var style = require('./build/lib/style');
-var copyrights = require('./build/lib/copyrights');
var util = require('./build/lib/util');
var reporter = require('./build/lib/reporter')();
var remote = require('gulp-remote-src');
@@ -115,71 +113,6 @@ gulp.task('clean', ['clean-client', 'clean-plugins']);
gulp.task('compile', ['compile-client', 'compile-plugins']);
gulp.task('watch', ['watch-client', 'watch-plugins']);
-var LINE_FEED_FILES = [
- 'build/**/*',
- 'extensions/**/*',
- 'scripts/**/*',
- 'src/**/*',
- 'test/**/*',
- '!extensions/csharp-o/bin/**',
- '!extensions/**/out/**',
- '!**/node_modules/**',
- '!**/fixtures/**',
- '!**/*.{svg,exe,png,scpt,bat,cur,ttf,woff,eot}',
-];
-
-gulp.task('eol-style', function() {
- return gulp.src(LINE_FEED_FILES).pipe(style({complain:true}));
-});
-gulp.task('fix-eol-style', function() {
- return gulp.src(LINE_FEED_FILES, { base: '.' }).pipe(style({})).pipe(gulp.dest('.'));
-});
-var WHITESPACE_FILES = LINE_FEED_FILES.concat([
- '!**/lib/**',
- '!**/*.d.ts',
- '!extensions/typescript/server/**',
- '!test/assert.js',
- '!**/octicons/**',
- '!**/vs/languages/sass/test/common/example.scss',
- '!**/vs/languages/less/common/parser/less.grammar.txt',
- '!**/vs/languages/css/common/buildscripts/css-schema.xml',
- '!**/vs/languages/markdown/common/raw.marked.js',
- '!**/vs/base/common/winjs.base.raw.js',
- '!**/vs/base/node/terminateProcess.sh',
- '!extensions/csharp-o/gulpfile.js',
- '!**/vs/base/node/terminateProcess.sh',
- '!**/vs/text.js',
- '!**/vs/nls.js',
- '!**/vs/css.js',
- '!**/vs/loader.js',
- '!extensions/**/snippets/**',
- '!extensions/**/syntaxes/**',
- '!extensions/**/themes/**',
-]);
-gulp.task('whitespace-style', function() {
- return gulp.src(WHITESPACE_FILES).pipe(style({complain:true, whitespace:true}));
-});
-gulp.task('fix-whitespace-style', function() {
- return gulp.src(WHITESPACE_FILES, { base: '.' }).pipe(style({whitespace:true})).pipe(gulp.dest('.'));
-});
-
-var COPYRIGHTS_FILES = WHITESPACE_FILES.concat([
- '!**/*.json',
- '!**/*.html',
- '!**/test/**',
- '!**/*.md',
- '!**/*.sh',
- '!**/*.txt',
- '!src/vs/editor/standalone-languages/swift.ts',
-]);
-gulp.task('copyrights', function() {
- return gulp.src(COPYRIGHTS_FILES, { base: '.' }).pipe(copyrights.copyrights());
-});
-
-gulp.task('insert-copyrights', function() {
- return gulp.src(COPYRIGHTS_FILES, { base: '.' }).pipe(copyrights.insertCopyrights());
-});
-
gulp.task('test', function () {
return gulp.src('test/all.js')
.pipe(mocha({ ui: 'tdd', delay: true }))
@@ -215,6 +148,7 @@ gulp.task('mixin', function () {
.pipe(gulp.dest('.'));
});
+require('./build/gulpfile.hygiene');
require('./build/gulpfile.vscode');
require('./build/gulpfile.editor');
require('./build/gulpfile.plugins');
From 81d560b7cefc4b3034a78ea26e38aa09c58cf91a Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 19:10:33 +0100
Subject: [PATCH 044/588] run gulp hygiene in travis
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index a18fdb63af4..4c5fbc362c2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,6 +33,7 @@ before_install:
install:
- ./scripts/npm.sh install
+ - gulp hygiene
- gulp electron compile
script:
From 62db5d86d0392660df955314c42b90e24267b42c Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 19:37:47 +0100
Subject: [PATCH 045/588] damn these tabs
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 4c5fbc362c2..27490784144 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,7 +33,7 @@ before_install:
install:
- ./scripts/npm.sh install
- - gulp hygiene
+ - gulp hygiene
- gulp electron compile
script:
From cb259e1c4f1c1a3c9f746b471814baca8eb51a64 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Tue, 24 Nov 2015 19:43:35 +0100
Subject: [PATCH 046/588] use appveyor
---
appveyor.yml | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 appveyor.yml
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 00000000000..f53b3ab2fd1
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,12 @@
+environment:
+ ATOM_SHELL_INTERNAL_RUN_AS_NODE: 1
+
+install:
+ - npm install -g gulp mocha
+
+build_script:
+ - .\scripts\npm.bat install
+ - gulp electron compile
+
+test_script:
+ - mocha
From 66051fc5f8d78f806d7f6a303ebe00ddb1440efe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Tue, 24 Nov 2015 19:51:03 +0100
Subject: [PATCH 047/588] Update README.md
---
README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 5f405d9a8c2..a89dce5a1ec 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# Visual Studio Code - Open Source
-[](https://travis-ci.org/Microsoft/vscode)
+[](https://travis-ci.org/Microsoft/vscode) [](https://ci.appveyor.com/project/joaomoreno/vscode-6kam5)
+
[VS Code](http://code.visualstudio.com) is a new type of tool that combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle. Code provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.
@@ -28,4 +29,4 @@ Many of the core components and extensions to Code live in their own repositorie
For a complete list, please see the [Related Projects](https://github.com/Microsoft/vscode/wiki/Related-Projects) page on our wiki.
## License
-[MIT](LICENSE.txt)
\ No newline at end of file
+[MIT](LICENSE.txt)
From f63c7a01d4cf8cc3cf073704579201fc72b8fc27 Mon Sep 17 00:00:00 2001
From: Andre Weinand
Date: Tue, 24 Nov 2015 22:45:47 +0100
Subject: [PATCH 048/588] update debug adapters
---
extensions/mono-debug/mono-debug.azure.json | 2 +-
extensions/node-debug/node-debug.azure.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/extensions/mono-debug/mono-debug.azure.json b/extensions/mono-debug/mono-debug.azure.json
index 15c1cf4bfb6..087b6ff6123 100644
--- a/extensions/mono-debug/mono-debug.azure.json
+++ b/extensions/mono-debug/mono-debug.azure.json
@@ -1,6 +1,6 @@
{
"account": "monacobuild",
"container": "debuggers",
- "zip": "757615d/mono-debug.zip",
+ "zip": "4d200e7/mono-debug.zip",
"output": ""
}
diff --git a/extensions/node-debug/node-debug.azure.json b/extensions/node-debug/node-debug.azure.json
index b0853e58a78..a19aae8176a 100644
--- a/extensions/node-debug/node-debug.azure.json
+++ b/extensions/node-debug/node-debug.azure.json
@@ -1,6 +1,6 @@
{
"account": "monacobuild",
"container": "debuggers",
- "zip": "a7f6203/node-debug.zip",
+ "zip": "01cab6f/node-debug.zip",
"output": ""
}
From 8a0f53baa4323a74314b046086d115aeda76e611 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Tue, 24 Nov 2015 22:47:41 +0100
Subject: [PATCH 049/588] Update README.md
---
README.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/README.md b/README.md
index a89dce5a1ec..24095f6f5c8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# Visual Studio Code - Open Source
-[](https://travis-ci.org/Microsoft/vscode) [](https://ci.appveyor.com/project/joaomoreno/vscode-6kam5)
-
+[](https://travis-ci.org/Microsoft/vscode) [](https://ci.appveyor.com/project/joaomoreno/vscode)
[VS Code](http://code.visualstudio.com) is a new type of tool that combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle. Code provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.
From 4ea2714df890a538b5ecf226aafb044ae1d16582 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Wed, 25 Nov 2015 08:44:13 +0100
Subject: [PATCH 050/588] add more meaningful api tests
---
.../vscode-api-tests/src/editor.test.ts | 39 +++++++++++
extensions/vscode-api-tests/src/index.ts | 3 +-
extensions/vscode-api-tests/src/utils.ts | 40 +++++++++++
.../vscode-api-tests/src/window.test.ts | 18 +++--
.../vscode-api-tests/src/workspace.test.ts | 66 +++++++++++++++----
src/vs/workbench/electron-main/main.ts | 9 +++
6 files changed, 156 insertions(+), 19 deletions(-)
create mode 100644 extensions/vscode-api-tests/src/editor.test.ts
create mode 100644 extensions/vscode-api-tests/src/utils.ts
diff --git a/extensions/vscode-api-tests/src/editor.test.ts b/extensions/vscode-api-tests/src/editor.test.ts
new file mode 100644
index 00000000000..0e7bfaf05a0
--- /dev/null
+++ b/extensions/vscode-api-tests/src/editor.test.ts
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as assert from 'assert';
+import * as fs from 'fs';
+import * as os from 'os';
+import {workspace, window, Position} from 'vscode';
+import {createRandomFile, deleteFile} from './utils';
+import {join} from 'path';
+
+suite("editor tests", () => {
+
+ test('make edit', (done) => {
+ createRandomFile().then(file => {
+ return workspace.openTextDocument(file).then(doc => {
+ return window.showTextDocument(doc).then((editor) => {
+ return editor.edit((builder) => {
+ builder.insert(new Position(0, 0), 'Hello World');
+ }).then(applied => {
+ assert.ok(applied);
+ assert.equal(doc.getText(), 'Hello World');
+ assert.ok(doc.isDirty);
+
+ return doc.save().then(saved => {
+ assert.ok(saved);
+ assert.ok(!doc.isDirty);
+
+ return deleteFile(file);
+ });
+ });
+ });
+ });
+ }).then(() => done(), (error) => done(error));
+ });
+});
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/index.ts b/extensions/vscode-api-tests/src/index.ts
index 84f3fc542f3..512c2794dd6 100644
--- a/extensions/vscode-api-tests/src/index.ts
+++ b/extensions/vscode-api-tests/src/index.ts
@@ -21,7 +21,8 @@ const testRunner = require('vscode/lib/testrunner');
// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
testRunner.configure({
ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.)
- useColors: true // colored output from test results
+ useColors: true, // colored output from test results
+ timeout: 10000
});
export= testRunner;
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/utils.ts b/extensions/vscode-api-tests/src/utils.ts
new file mode 100644
index 00000000000..23e36c59b6b
--- /dev/null
+++ b/extensions/vscode-api-tests/src/utils.ts
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as vscode from 'vscode';
+import * as fs from 'fs';
+import * as os from 'os';
+import {join} from 'path';
+
+function rndName() {
+ return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10);
+}
+
+export function createRandomFile(contents = ''): Thenable {
+ return new Promise((resolve, reject) => {
+ const tmpFile = join(os.tmpdir(), rndName());
+ fs.writeFile(tmpFile, contents, (error) => {
+ if (error) {
+ return reject(error);
+ }
+
+ resolve(vscode.Uri.file(tmpFile));
+ });
+ });
+}
+
+export function deleteFile(file: vscode.Uri): Thenable {
+ return new Promise((resolve, reject) => {
+ fs.unlink(file.fsPath, (err) => {
+ if (err) {
+ reject(err);
+ } else {
+ resolve(true);
+ }
+ });
+ });
+}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/window.test.ts b/extensions/vscode-api-tests/src/window.test.ts
index 7b0a5142702..2de42113ce3 100644
--- a/extensions/vscode-api-tests/src/window.test.ts
+++ b/extensions/vscode-api-tests/src/window.test.ts
@@ -6,12 +6,18 @@
'use strict';
import * as assert from 'assert';
-import {window, workspace} from 'vscode';
+import {workspace, window} from 'vscode';
+import {join} from 'path';
-suite("window namespace texts", () => {
-
- // test('open document fires event', (done) => {
-
- // });
+suite("window namespace tests", () => {
+ test('active text editor', (done) => {
+ workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
+ return window.showTextDocument(doc).then((editor) => {
+ const active = window.activeTextEditor;
+ assert.ok(active);
+ assert.equal(active.document.uri.fsPath, doc.uri.fsPath);
+ });
+ }).then(() => done(), (error) => done(error));
+ });
});
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/workspace.test.ts
index 4a89e6b278a..8b2a17b2af4 100644
--- a/extensions/vscode-api-tests/src/workspace.test.ts
+++ b/extensions/vscode-api-tests/src/workspace.test.ts
@@ -6,8 +6,15 @@
'use strict';
import * as assert from 'assert';
-import {workspace, TextDocument} from 'vscode';
+import {workspace, TextDocument, window, Position} from 'vscode';
+import {createRandomFile, deleteFile} from './utils';
import {join} from 'path';
+import * as fs from 'fs';
+import * as os from 'os';
+
+function rndName() {
+ return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10);
+}
suite('workspace-namespace', () => {
@@ -38,17 +45,52 @@ suite('workspace-namespace', () => {
});
});
- // test('createTextDocument', done => {
+ test('events: onDidOpenTextDocument, onDidChangeTextDocument, onDidSaveTextDocument', (done) => {
+ createRandomFile().then(file => {
+ let onDidOpenTextDocument = false;
+ workspace.onDidOpenTextDocument(e => {
+ assert.equal(e.uri.fsPath, file.fsPath);
+ onDidOpenTextDocument = true;
+ });
- // let text = 'Das Pferd isst keinen Reis.'
+ let onDidChangeTextDocument = false;
+ workspace.onDidChangeTextDocument(e => {
+ assert.equal(e.document.uri.fsPath, file.fsPath);
+ onDidChangeTextDocument = true;
+ });
- // workspace.createTextDocument(text).then(doc => {
- // assert.equal(doc.getText(), text);
- // assert.equal(doc.uri.scheme, 'untitled');
- // assert.equal(doc.languageId, 'plaintext');
- // done();
- // }, err => {
- // done(err);
- // });
- // });
+ let onDidSaveTextDocument = false;
+ workspace.onDidSaveTextDocument(e => {
+ assert.equal(e.uri.fsPath, file.fsPath);
+ onDidSaveTextDocument = true;
+ });
+
+ return workspace.openTextDocument(file).then(doc => {
+ return window.showTextDocument(doc).then((editor) => {
+ return editor.edit((builder) => {
+ builder.insert(new Position(0, 0), 'Hello World');
+ }).then(applied => {
+ return doc.save().then(saved => {
+ assert.ok(onDidOpenTextDocument);
+ assert.ok(onDidChangeTextDocument);
+ assert.ok(onDidSaveTextDocument);
+
+ return deleteFile(file);
+ });
+ });
+ });
+ });
+ }).then(() => done(), (error) => done(error));
+ });
+
+ test('findFiles', done => {
+ workspace.findFiles('*.js', null).then((res) => {
+ assert.equal(res.length, 1);
+ assert.equal(workspace.asRelativePath(res[0]), '/far.js');
+
+ done();
+ }, err => {
+ done(err);
+ });
+ });
});
\ No newline at end of file
diff --git a/src/vs/workbench/electron-main/main.ts b/src/vs/workbench/electron-main/main.ts
index e1f5ca381c5..cbea266a3ed 100644
--- a/src/vs/workbench/electron-main/main.ts
+++ b/src/vs/workbench/electron-main/main.ts
@@ -190,6 +190,15 @@ function setupIPC(): TPromise {
// there's a running instance, let's connect to it
return connect(env.mainIPCHandle).then(
client => {
+
+ // Tests from CLI require to be the only instance currently (TODO@Ben support multiple instances and output)
+ if (env.isTestingFromCli) {
+ const errorMsg = 'Running tests from the command line is currently only supported if no other instance of Code is running.';
+ console.error(errorMsg);
+
+ return Promise.wrapError(errorMsg);
+ }
+
env.log('Sending env to running instance...');
const service = client.getService('LaunchService', LaunchService);
From 1736f67195e7bf4a5276e9a8d0c0d4b74447c4ec Mon Sep 17 00:00:00 2001
From: Alex Dima
Date: Wed, 25 Nov 2015 09:17:58 +0100
Subject: [PATCH 051/588] Adopt latest loader
---
src/vs/css.js | 18 ++++++++++++++----
src/vs/loader.js | 23 +++++++++++++++++------
src/vs/nls.js | 11 +++++++++++
src/vs/text.js | 15 +++++++++++++--
4 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/src/vs/css.js b/src/vs/css.js
index 7a02c971fee..d3650a5db86 100644
--- a/src/vs/css.js
+++ b/src/vs/css.js
@@ -2,14 +2,24 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ * Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *--------------------------------------------------------------------------------------------*/
///
///
'use strict';
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
- __.prototype = b.prototype;
- d.prototype = new __();
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var _cssPluginGlobal = this;
var CSSLoaderPlugin;
@@ -405,8 +415,8 @@ var CSSLoaderPlugin;
CSSLoaderPlugin.Utilities = Utilities;
(function () {
var cssLoader = null;
- var isAtomShell = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined');
- if (typeof process !== 'undefined' && process.versions && !!process.versions.node && !isAtomShell) {
+ var isElectron = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined');
+ if (typeof process !== 'undefined' && process.versions && !!process.versions.node && !isElectron) {
cssLoader = new NodeCSSLoader();
}
else if (typeof navigator !== 'undefined' && navigator.userAgent.indexOf('MSIE 9') >= 0) {
diff --git a/src/vs/loader.js b/src/vs/loader.js
index 75b0afb92fb..5c3e03a7496 100644
--- a/src/vs/loader.js
+++ b/src/vs/loader.js
@@ -2,6 +2,17 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ * Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *--------------------------------------------------------------------------------------------*/
///
'use strict';
// Limitation: To load jquery through the loader, always require 'jquery' and add a path for it in the loader configuration
@@ -1717,7 +1728,7 @@ var AMDLoader;
recorder.record(LoaderEventType.NodeBeginEvaluatingScript, scriptSrc);
var vmScriptSrc = _this._path.normalize(scriptSrc);
// Make the script src friendly towards electron
- if (isAtomRenderer) {
+ if (isElectronRenderer) {
var driveLetterMatch = vmScriptSrc.match(/^([a-z])\:(.*)/);
if (driveLetterMatch) {
vmScriptSrc = driveLetterMatch[1].toUpperCase() + ':' + driveLetterMatch[2];
@@ -1825,11 +1836,11 @@ var AMDLoader;
};
return RequireFunc;
})();
- var global = _amdLoaderGlobal, hasPerformanceNow = (global.performance && typeof global.performance.now === 'function'), isWebWorker, isAtomRenderer, isAtomMain, isNode, scriptLoader, moduleManager, loaderAvailableTimestamp;
+ var global = _amdLoaderGlobal, hasPerformanceNow = (global.performance && typeof global.performance.now === 'function'), isWebWorker, isElectronRenderer, isElectronMain, isNode, scriptLoader, moduleManager, loaderAvailableTimestamp;
function initVars() {
isWebWorker = (typeof global.importScripts === 'function');
- isAtomRenderer = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined' && process.type === 'renderer');
- isAtomMain = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined' && process.type === 'browser');
+ isElectronRenderer = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined' && process.type === 'renderer');
+ isElectronMain = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined' && process.type === 'browser');
isNode = (typeof module !== 'undefined' && !!module.exports);
if (isWebWorker) {
scriptLoader = new OnlyOnceScriptLoader(new WorkerScriptLoader());
@@ -1893,7 +1904,7 @@ var AMDLoader;
global.nodeRequire = nodeRequire;
RequireFunc.nodeRequire = nodeRequire;
}
- if (isNode && !isAtomRenderer) {
+ if (isNode && !isElectronRenderer) {
module.exports = RequireFunc;
// These two defs are fore the local closure defined in node in the case that the loader is concatenated
define = function () {
@@ -1906,7 +1917,7 @@ var AMDLoader;
if (typeof global.require !== 'undefined' && typeof global.require !== 'function') {
RequireFunc.config(global.require);
}
- if (!isAtomRenderer) {
+ if (!isElectronRenderer) {
global.define = DefineFunc;
}
else {
diff --git a/src/vs/nls.js b/src/vs/nls.js
index d42263bc425..90214658a15 100644
--- a/src/vs/nls.js
+++ b/src/vs/nls.js
@@ -2,6 +2,17 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ * Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *--------------------------------------------------------------------------------------------*/
///
///
'use strict';
diff --git a/src/vs/text.js b/src/vs/text.js
index b363b799e4c..041a4615736 100644
--- a/src/vs/text.js
+++ b/src/vs/text.js
@@ -2,6 +2,17 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ * Please make sure to make edits in the .ts file at https://github.com/Microsoft/vscode-loader/
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *---------------------------------------------------------------------------------------------
+ *--------------------------------------------------------------------------------------------*/
///
///
'use strict';
@@ -164,8 +175,8 @@ var TextLoaderPlugin;
TextLoaderPlugin.Utilities = Utilities;
(function () {
var textLoader = null;
- var isAtomShell = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined');
- if (typeof process !== 'undefined' && process.versions && !!process.versions.node && !isAtomShell) {
+ var isElectron = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions['electron'] !== 'undefined');
+ if (typeof process !== 'undefined' && process.versions && !!process.versions.node && !isElectron) {
textLoader = new NodeTextLoader();
}
else {
From a1c4fd9bfe214252c9e52901bebb13ff4b6a8bcb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Wed, 25 Nov 2015 09:25:03 +0100
Subject: [PATCH 052/588] appveyor: split electron and compile tasks
---
appveyor.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/appveyor.yml b/appveyor.yml
index f53b3ab2fd1..b8fd60c0062 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -6,7 +6,8 @@ install:
build_script:
- .\scripts\npm.bat install
- - gulp electron compile
+ - gulp electron
+ - gulp compile
test_script:
- mocha
From 916c5245595faba0c0e79f58df5d92b5392f47f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Wed, 25 Nov 2015 09:27:02 +0100
Subject: [PATCH 053/588] travis: split electron and compile tasks
---
.travis.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 27490784144..0f2564979cf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,7 +34,8 @@ before_install:
install:
- ./scripts/npm.sh install
- gulp hygiene
- - gulp electron compile
+ - gulp electron
+ - gulp compile
script:
- ./test/run.sh
From 52c9c102f8dd1319fe4b27c00d020769dfbcb6c5 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Wed, 25 Nov 2015 09:29:48 +0100
Subject: [PATCH 054/588] hygiene: emit file at end
---
build/gulpfile.hygiene.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
index 27c3c4fc891..841e139b0ca 100644
--- a/build/gulpfile.hygiene.js
+++ b/build/gulpfile.hygiene.js
@@ -101,6 +101,8 @@ gulp.task('hygiene', function() {
console.error(file.path + ': Missing or bad copyright statement');
errorCount++;
}
+
+ this.emit('data', file);
});
return gulp.src(eolFilter, { base: '.' })
From 4e0b0b359f08c0acbe55aa9bcf3895672bba7f0d Mon Sep 17 00:00:00 2001
From: Francois Valdy
Date: Wed, 25 Nov 2015 09:43:38 +0100
Subject: [PATCH 055/588] Make sure css is fixed as well
---
.../parts/debug/browser/media/debug.contribution.css | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/vs/workbench/parts/debug/browser/media/debug.contribution.css b/src/vs/workbench/parts/debug/browser/media/debug.contribution.css
index 8df0146cd9e..5f304c48e84 100644
--- a/src/vs/workbench/parts/debug/browser/media/debug.contribution.css
+++ b/src/vs/workbench/parts/debug/browser/media/debug.contribution.css
@@ -21,7 +21,7 @@
background: rgba(255, 255, 0, 0.7);
}
-.monaco-editor .debug-focussed-stack-frame-line {
+.monaco-editor .debug-focused-stack-frame-line {
background: rgba(206, 231, 206, 0.45);
}
@@ -247,7 +247,7 @@
color: #C586C0;
}
-.monaco-editor.vs-dark .debug-focussed-stack-frame-line {
+.monaco-editor.vs-dark .debug-focused-stack-frame-line {
background: rgba(122, 189, 122, 0.3);
}
From d113d85fd4556522602b4f3b0170c6879a471339 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Wed, 25 Nov 2015 09:47:15 +0100
Subject: [PATCH 056/588] fix hygiene
---
build/gulpfile.hygiene.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
index 841e139b0ca..3427f3240d2 100644
--- a/build/gulpfile.hygiene.js
+++ b/build/gulpfile.hygiene.js
@@ -81,8 +81,8 @@ gulp.task('hygiene', function() {
.toString('utf8')
.split(/\r\n|\r|\n/)
.forEach(function(line, i) {
- if (line.length === 0) {
- // empty lines are OK
+ if (/^\s*$/.test(line)) {
+ // empty or whitespace lines are OK
} else if (/^[\t]*[^\s]/.test(line)) {
// good indent
} else if (/^[\t]* \*/.test(line)) {
@@ -101,7 +101,7 @@ gulp.task('hygiene', function() {
console.error(file.path + ': Missing or bad copyright statement');
errorCount++;
}
-
+
this.emit('data', file);
});
From b7b97fd8ee625d5157dce808cc62044cad47e5da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Wed, 25 Nov 2015 09:49:27 +0100
Subject: [PATCH 057/588] Update .travis.yml
---
.travis.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 0f2564979cf..d03a3b77e7b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,9 +33,9 @@ before_install:
install:
- ./scripts/npm.sh install
+
+script:
- gulp hygiene
- gulp electron
- gulp compile
-
-script:
- ./test/run.sh
From e5d7c7a919c9dd174a4cfd225107880961ae2c60 Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Wed, 25 Nov 2015 10:28:53 +0100
Subject: [PATCH 058/588] api tests: cleanup after test run
---
.../vscode-api-tests/src/editor.test.ts | 6 +++-
extensions/vscode-api-tests/src/utils.ts | 6 ++++
.../vscode-api-tests/src/window.test.ts | 5 ++++
.../vscode-api-tests/src/workspace.test.ts | 28 +++++++++++--------
4 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/extensions/vscode-api-tests/src/editor.test.ts b/extensions/vscode-api-tests/src/editor.test.ts
index 0e7bfaf05a0..38a9b1558ef 100644
--- a/extensions/vscode-api-tests/src/editor.test.ts
+++ b/extensions/vscode-api-tests/src/editor.test.ts
@@ -9,11 +9,15 @@ import * as assert from 'assert';
import * as fs from 'fs';
import * as os from 'os';
import {workspace, window, Position} from 'vscode';
-import {createRandomFile, deleteFile} from './utils';
+import {createRandomFile, deleteFile, cleanUp} from './utils';
import {join} from 'path';
suite("editor tests", () => {
+ teardown((done) => {
+ cleanUp().then(() => done(), (error) => done(error));
+ });
+
test('make edit', (done) => {
createRandomFile().then(file => {
return workspace.openTextDocument(file).then(doc => {
diff --git a/extensions/vscode-api-tests/src/utils.ts b/extensions/vscode-api-tests/src/utils.ts
index 23e36c59b6b..060c79d5580 100644
--- a/extensions/vscode-api-tests/src/utils.ts
+++ b/extensions/vscode-api-tests/src/utils.ts
@@ -37,4 +37,10 @@ export function deleteFile(file: vscode.Uri): Thenable {
}
});
});
+}
+
+export function cleanUp(): Thenable {
+ return vscode.commands.executeCommand('workbench.action.closeAllEditors').then(() => {
+ return vscode.commands.executeCommand('workbench.files.action.closeAllFiles');
+ });
}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/window.test.ts b/extensions/vscode-api-tests/src/window.test.ts
index 2de42113ce3..0f3ba712cd3 100644
--- a/extensions/vscode-api-tests/src/window.test.ts
+++ b/extensions/vscode-api-tests/src/window.test.ts
@@ -8,9 +8,14 @@
import * as assert from 'assert';
import {workspace, window} from 'vscode';
import {join} from 'path';
+import {cleanUp} from './utils';
suite("window namespace tests", () => {
+ teardown((done) => {
+ cleanUp().then(() => done(), (error) => done(error));
+ });
+
test('active text editor', (done) => {
workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
return window.showTextDocument(doc).then((editor) => {
diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/workspace.test.ts
index 8b2a17b2af4..5925e579fbc 100644
--- a/extensions/vscode-api-tests/src/workspace.test.ts
+++ b/extensions/vscode-api-tests/src/workspace.test.ts
@@ -7,17 +7,17 @@
import * as assert from 'assert';
import {workspace, TextDocument, window, Position} from 'vscode';
-import {createRandomFile, deleteFile} from './utils';
+import {createRandomFile, deleteFile, cleanUp} from './utils';
import {join} from 'path';
import * as fs from 'fs';
import * as os from 'os';
-function rndName() {
- return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10);
-}
-
suite('workspace-namespace', () => {
+ teardown((done) => {
+ cleanUp().then(() => done(), (error) => done(error));
+ });
+
test('textDocuments', () => {
assert.ok(Array.isArray(workspace.textDocuments));
assert.throws(() => workspace.textDocuments = null);
@@ -47,23 +47,25 @@ suite('workspace-namespace', () => {
test('events: onDidOpenTextDocument, onDidChangeTextDocument, onDidSaveTextDocument', (done) => {
createRandomFile().then(file => {
+ let disposables = [];
+
let onDidOpenTextDocument = false;
- workspace.onDidOpenTextDocument(e => {
+ disposables.push(workspace.onDidOpenTextDocument(e => {
assert.equal(e.uri.fsPath, file.fsPath);
onDidOpenTextDocument = true;
- });
+ }));
let onDidChangeTextDocument = false;
- workspace.onDidChangeTextDocument(e => {
+ disposables.push(workspace.onDidChangeTextDocument(e => {
assert.equal(e.document.uri.fsPath, file.fsPath);
onDidChangeTextDocument = true;
- });
+ }));
let onDidSaveTextDocument = false;
- workspace.onDidSaveTextDocument(e => {
+ disposables.push(workspace.onDidSaveTextDocument(e => {
assert.equal(e.uri.fsPath, file.fsPath);
onDidSaveTextDocument = true;
- });
+ }));
return workspace.openTextDocument(file).then(doc => {
return window.showTextDocument(doc).then((editor) => {
@@ -75,6 +77,10 @@ suite('workspace-namespace', () => {
assert.ok(onDidChangeTextDocument);
assert.ok(onDidSaveTextDocument);
+ while (disposables.length) {
+ disposables.pop().dispose();
+ }
+
return deleteFile(file);
});
});
From 90ace5d47906974e16d82bcd5d471a89f37bb2ec Mon Sep 17 00:00:00 2001
From: Alex Dima
Date: Wed, 25 Nov 2015 10:41:46 +0100
Subject: [PATCH 059/588] fixes #115
---
src/vs/editor/common/modes/lineStream.ts | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/vs/editor/common/modes/lineStream.ts b/src/vs/editor/common/modes/lineStream.ts
index 608b5aad7ff..b340ab62cb5 100644
--- a/src/vs/editor/common/modes/lineStream.ts
+++ b/src/vs/editor/common/modes/lineStream.ts
@@ -40,15 +40,15 @@ export class LineStream implements IStream {
}
private actualStringToArray(str:string):boolean[] {
- var maxCharCode = 0;
- for (var i = 0; i < str.length; i++) {
- maxCharCode = str.charCodeAt(i);
+ let maxCharCode = 0;
+ for (let i = 0; i < str.length; i++) {
+ maxCharCode = Math.max(maxCharCode, str.charCodeAt(i));
}
- var r = [];
- for (i = 0; i < maxCharCode; i++) {
+ let r:boolean[] = [];
+ for (let i = 0; i <= maxCharCode; i++) {
r[i] = false;
}
- for (i = 0; i < str.length; i++) {
+ for (let i = 0; i < str.length; i++) {
r[str.charCodeAt(i)] = true;
}
return r;
From 53644525befb95f094c17681dcd4ce90a48b524f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Moreno?=
Date: Wed, 25 Nov 2015 10:45:28 +0100
Subject: [PATCH 060/588] use --force when running npm install on Appveyor
---
appveyor.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/appveyor.yml b/appveyor.yml
index b8fd60c0062..a88d64c6161 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -5,7 +5,7 @@ install:
- npm install -g gulp mocha
build_script:
- - .\scripts\npm.bat install
+ - .\scripts\npm.bat install --force
- gulp electron
- gulp compile
From 7754743a7e0860d8b8e0096ef544a72371695c1d Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Wed, 25 Nov 2015 10:58:13 +0100
Subject: [PATCH 061/588] api tests: allow to run and debug them
---
extensions/tsconfig.json | 3 +-
.../vscode-api-tests/.vscode/launch.json | 17 +++++++++++
.../vscode-api-tests/.vscode/tasks.json | 30 +++++++++++++++++++
extensions/vscode-api-tests/package.json | 2 ++
4 files changed, 51 insertions(+), 1 deletion(-)
create mode 100644 extensions/vscode-api-tests/.vscode/launch.json
create mode 100644 extensions/vscode-api-tests/.vscode/tasks.json
diff --git a/extensions/tsconfig.json b/extensions/tsconfig.json
index 36f6ef5e85c..379cfd01b07 100644
--- a/extensions/tsconfig.json
+++ b/extensions/tsconfig.json
@@ -11,6 +11,7 @@
"typescript/src/lib",
"typescript/out/lib",
"jshint",
- "csharp-o"
+ "csharp-o",
+ "vscode-api-tests/node_modules"
]
}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/.vscode/launch.json b/extensions/vscode-api-tests/.vscode/launch.json
new file mode 100644
index 00000000000..b6ed0f7a674
--- /dev/null
+++ b/extensions/vscode-api-tests/.vscode/launch.json
@@ -0,0 +1,17 @@
+// A launch configuration that compiles the extension and then opens it inside a new window
+{
+ "version": "0.1.0",
+ "configurations": [
+ {
+ "name": "Launch Tests",
+ "type": "extensionHost",
+ "request": "launch",
+ "runtimeExecutable": "${execPath}",
+ "args": ["${workspaceRoot}/../../", "${workspaceRoot}/testWorkspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out" ],
+ "stopOnEntry": false,
+ "sourceMaps": true,
+ "outDir": "out",
+ "preLaunchTask": "npm"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/.vscode/tasks.json b/extensions/vscode-api-tests/.vscode/tasks.json
new file mode 100644
index 00000000000..d31b15910ee
--- /dev/null
+++ b/extensions/vscode-api-tests/.vscode/tasks.json
@@ -0,0 +1,30 @@
+// Available variables which can be used inside of strings.
+// ${workspaceRoot}: the root folder of the team
+// ${file}: the current opened file
+// ${fileBasename}: the current opened file's basename
+// ${fileDirname}: the current opened file's dirname
+// ${fileExtname}: the current opened file's extension
+// ${cwd}: the current working directory of the spawned process
+
+// A task runner that calls a custom npm script that compiles the extension.
+{
+ "version": "0.1.0",
+
+ // we want to run npm
+ "command": "npm",
+
+ // the command is a shell script
+ "isShellCommand": true,
+
+ // show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+
+ // we run the custom script "compile" as defined in package.json
+ "args": ["run", "compile", "--loglevel", "silent"],
+
+ // The tsc compiler is started in watching mode
+ "isWatching": true,
+
+ // use the standard tsc in watch mode problem matcher to find compile problems in the output.
+ "problemMatcher": "$tsc-watch"
+}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
index 20e6ba7de8d..8b6055b5822 100644
--- a/extensions/vscode-api-tests/package.json
+++ b/extensions/vscode-api-tests/package.json
@@ -8,9 +8,11 @@
"vscode": "*"
},
"scripts": {
+ "compile": "node ./node_modules/vscode/bin/compile -watch -p ./",
"vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../gulpfile.plugins.js compile-plugin:vscode-api-tests ./tsconfig.json"
},
"devDependencies": {
+ "typescript": "^1.6.2",
"vscode": "next"
}
}
\ No newline at end of file
From 6ea319fa68201e80fb194b6cb41df95051bdc8ae Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Wed, 25 Nov 2015 11:00:40 +0100
Subject: [PATCH 062/588] move the logic of getOutlineEntries into one place
---
.../contrib/quickOpen/common/quickOpen.ts | 63 ++++++++++++++++++-
.../workbench/api/common/languageFeatures.ts | 8 +--
.../quickopen/browser/gotoSymbolHandler.ts | 33 +---------
.../test/common/api/languageFeatures.test.ts | 14 ++---
4 files changed, 75 insertions(+), 43 deletions(-)
diff --git a/src/vs/editor/contrib/quickOpen/common/quickOpen.ts b/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
index cf5c24c299e..b4e2dc1c9ea 100644
--- a/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
+++ b/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
@@ -5,14 +5,73 @@
'use strict';
+import {onUnexpectedError} from 'vs/base/common/errors';
+import {TPromise} from 'vs/base/common/winjs.base';
+import {Range} from 'vs/editor/common/core/range';
+import {IModel} from 'vs/editor/common/editorCommon';
import {IOutlineEntry, IOutlineSupport} from 'vs/editor/common/modes';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
-const QuickOutineRegistry = new LanguageFeatureRegistry('outlineSupport');
+const OutlineRegistry = new LanguageFeatureRegistry('outlineSupport');
export {
+ OutlineRegistry,
IOutlineEntry,
IOutlineSupport
}
-export default QuickOutineRegistry;
\ No newline at end of file
+export function getOutlineEntries(model: IModel): TPromise<{ entries: IOutlineEntry[], outlineGroupLabel: { [n: string]: string;} }> {
+
+ let resource = model.getAssociatedResource();
+ let groupLabels: { [n: string]: string } = Object.create(null);
+ let entries: IOutlineEntry[] = [];
+
+ let promises = OutlineRegistry.all(model).map(support => {
+
+ if (support.outlineGroupLabel) {
+ for (var key in support.outlineGroupLabel) {
+ if (Object.prototype.hasOwnProperty.call(support.outlineGroupLabel, key)) {
+ groupLabels[key] = support.outlineGroupLabel[key];
+ }
+ }
+ }
+
+ return support.getOutline(resource).then(result => {
+ if (Array.isArray(result)) {
+ entries.push(...result);
+ }
+ }, err => {
+ onUnexpectedError(err);
+ });
+ });
+
+ return TPromise.join(promises).then(() => {
+ let flatEntries: IOutlineEntry[] = [];
+ flatten(flatEntries, entries, '');
+ flatEntries.sort(compareEntriesUsingStart);
+
+ return {
+ entries: flatEntries,
+ outlineGroupLabel: groupLabels
+ }
+ });
+}
+
+function compareEntriesUsingStart(a: IOutlineEntry, b: IOutlineEntry): number{
+ return Range.compareRangesUsingStarts(a.range, b.range);
+}
+
+function flatten(bucket: IOutlineEntry[], entries: IOutlineEntry[], overrideContainerLabel: string): void {
+ for (let entry of entries) {
+ bucket.push({
+ type: entry.type,
+ range: entry.range,
+ label: entry.label,
+ icon: entry.icon,
+ containerLabel: entry.containerLabel || overrideContainerLabel
+ });
+ if (entry.children) {
+ flatten(bucket, entry.children, entry.label);
+ }
+ }
+}
diff --git a/src/vs/workbench/api/common/languageFeatures.ts b/src/vs/workbench/api/common/languageFeatures.ts
index b5caf5ddbd2..4fa0fb5ffc7 100644
--- a/src/vs/workbench/api/common/languageFeatures.ts
+++ b/src/vs/workbench/api/common/languageFeatures.ts
@@ -27,7 +27,7 @@ import ExtraInfoRegistry from 'vs/editor/contrib/hover/common/hover';
import DocumentHighlighterRegistry from 'vs/editor/contrib/wordHighlighter/common/wordHighlighter';
import ReferenceSearchRegistry from 'vs/editor/contrib/referenceSearch/common/referenceSearch';
import QuickFixRegistry from 'vs/editor/contrib/quickFix/common/quickFix';
-import QuickOutlineRegistry, {IOutlineEntry, IOutlineSupport} from 'vs/editor/contrib/quickOpen/common/quickOpen';
+import {OutlineRegistry, IOutlineEntry, IOutlineSupport} from 'vs/editor/contrib/quickOpen/common/quickOpen';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
import {NavigateTypesSupportRegistry, INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search'
import {RenameRegistry} from 'vs/editor/contrib/rename/common/rename';
@@ -544,7 +544,7 @@ export class ExtensionHostDocumentSymbols extends AbstractExtensionHostFeature implements IOutlineSupport {
constructor( @IThreadService threadService: IThreadService) {
- super('vscode.executeDocumentSymbolProvider', QuickOutlineRegistry, threadService);
+ super('vscode.executeDocumentSymbolProvider', OutlineRegistry, threadService);
}
getOutline(resource: URI): TPromise{
@@ -1262,7 +1262,7 @@ export namespace LanguageFeatures {
threadService.getRemotable(MainThreadReferenceSearch);
threadService.getRemotable(MainThreadCodeActions);
threadService.getRemotable(MainThreadCodeLens);
- threadService.getRemotable(MainThreadDocumentSymbols);
+ // threadService.getRemotable(MainThreadDocumentSymbols);
threadService.getRemotable(MainThreadWorkspaceSymbols);
threadService.getRemotable(MainThreadRename);
threadService.getRemotable(MainThreadFormatDocument);
@@ -1280,7 +1280,7 @@ export namespace LanguageFeatures {
referenceSearch: new ExtensionHostReferenceSearch(threadService),
codeActions: new ExtensionHostCodeActions(threadService),
codeLens: threadService.getRemotable(ExtensionHostCodeLens),
- documentSymbols: new ExtensionHostDocumentSymbols(threadService),
+ // documentSymbols: new ExtensionHostDocumentSymbols(threadService),
workspaceSymbols: new ExtensionHostWorkspaceSymbols(threadService),
rename: new ExtensionHostRename(threadService),
formatDocument: new ExtHostFormatDocument(threadService),
diff --git a/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts b/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
index 046dd4cc8d6..576ce3f82c2 100644
--- a/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
+++ b/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
@@ -31,7 +31,7 @@ import {IQuickOpenService} from 'vs/workbench/services/quickopen/browser/quickOp
import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace';
import {Position} from 'vs/platform/editor/common/editor';
import {KeyMod, KeyCode} from 'vs/base/common/keyCodes';
-import QuickOpenRegistry from 'vs/editor/contrib/quickOpen/common/quickOpen';
+import {OutlineRegistry, getOutlineEntries} from 'vs/editor/contrib/quickOpen/common/quickOpen';
const ACTION_ID = 'workbench.action.gotoSymbol';
const ACTION_LABEL = nls.localize('gotoSymbol', "Go to Symbol...");
@@ -432,7 +432,7 @@ export class GotoSymbolHandler extends QuickOpenHandler {
if (model && types.isFunction((model).getMode)) {
- canRun = QuickOpenRegistry.has( model);
+ canRun = OutlineRegistry.has( model);
}
}
@@ -527,34 +527,7 @@ export class GotoSymbolHandler extends QuickOpenHandler {
return TPromise.as(this.outlineToModelCache[modelId]);
}
- let groupLabels: { [n: string]: string } = Object.create(null);
- let entries: IOutlineEntry[] = [];
- let resource = (model).getAssociatedResource();
- let promises = QuickOpenRegistry.all(model).map(support => {
-
- if (support.outlineGroupLabel) {
- for (var key in support.outlineGroupLabel) {
- if (Object.prototype.hasOwnProperty.call(support.outlineGroupLabel, key)) {
- groupLabels[key] = support.outlineGroupLabel[key];
- }
- }
- }
-
- return support.getOutline(resource).then(result => {
- if (Array.isArray(result)) {
- entries.push(...result);
- }
- }, err => {
- errors.onUnexpectedError(err);
- });
- });
-
- return TPromise.join(promises).then(() => {
-
- let outline = {
- entries,
- outlineGroupLabel: groupLabels
- };
+ return getOutlineEntries(model).then(outline => {
let model = new OutlineModel(outline, this.toQuickOpenEntries(outline));
diff --git a/src/vs/workbench/test/common/api/languageFeatures.test.ts b/src/vs/workbench/test/common/api/languageFeatures.test.ts
index 5ea693041f9..bf6a92187e6 100644
--- a/src/vs/workbench/test/common/api/languageFeatures.test.ts
+++ b/src/vs/workbench/test/common/api/languageFeatures.test.ts
@@ -18,7 +18,7 @@ import * as LF from 'vs/workbench/api/common/languageFeatures';
import {PluginHostCommands, MainThreadCommands} from 'vs/workbench/api/common/pluginHostCommands';
import {PluginHostModelService} from 'vs/workbench/api/common/pluginHostDocuments';
import {SyncDescriptor0} from 'vs/platform/instantiation/common/descriptors';
-import QuickOutlineRegistry from 'vs/editor/contrib/quickOpen/common/quickOpen';
+import {OutlineRegistry} from 'vs/editor/contrib/quickOpen/common/quickOpen';
import {LanguageSelector, ModelLike} from 'vs/editor/common/modes/languageSelector';
class ThreadService extends NullThreadService {
@@ -85,17 +85,17 @@ suite('ExtHostLanguageFeatures', function() {
// register
- assert.equal(QuickOutlineRegistry.all(model).length, 0);
+ assert.equal(OutlineRegistry.all(model).length, 0);
let disposable = extHost.register('far', {
provideDocumentSymbols() {
return [];
}
});
- assert.equal(QuickOutlineRegistry.all(model).length, 1);
+ assert.equal(OutlineRegistry.all(model).length, 1);
// deregister
disposable.dispose();
- assert.equal(QuickOutlineRegistry.all(model).length, 0);
+ assert.equal(OutlineRegistry.all(model).length, 0);
// all extension host provider appear as one
disposable = extHost.register('far', {
@@ -108,12 +108,12 @@ suite('ExtHostLanguageFeatures', function() {
return [];
}
});
- assert.equal(QuickOutlineRegistry.all(model).length, 1);
+ assert.equal(OutlineRegistry.all(model).length, 1);
disposable.dispose();
- assert.equal(QuickOutlineRegistry.all(model).length, 1);
+ assert.equal(OutlineRegistry.all(model).length, 1);
disposable2.dispose();
- assert.equal(QuickOutlineRegistry.all(model).length, 0);
+ assert.equal(OutlineRegistry.all(model).length, 0);
});
test('DocumentSymbols, evil provider', function(done) {
From b370792f68b5ea1b62932231f4643ce02db7b74b Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Wed, 25 Nov 2015 11:01:38 +0100
Subject: [PATCH 063/588] fix document symbol duplication
each provider is represented as one support, have a provider to support adapter
---
.../api/browser/pluginHost.api.impl.ts | 4 +-
.../api/common/extHostLanguageFeatures.ts | 160 ++++++++++++++++++
src/vs/workbench/electron-browser/shell.ts | 2 +
3 files changed, 165 insertions(+), 1 deletion(-)
create mode 100644 src/vs/workbench/api/common/extHostLanguageFeatures.ts
diff --git a/src/vs/workbench/api/browser/pluginHost.api.impl.ts b/src/vs/workbench/api/browser/pluginHost.api.impl.ts
index 3364186808d..a7556ab7512 100644
--- a/src/vs/workbench/api/browser/pluginHost.api.impl.ts
+++ b/src/vs/workbench/api/browser/pluginHost.api.impl.ts
@@ -22,6 +22,7 @@ import {PluginHostMessageService} from 'vs/workbench/api/common/pluginHostMessag
import {PluginHostTelemetryService} from 'vs/workbench/api/common/pluginHostTelemetry';
import {PluginHostEditors} from 'vs/workbench/api/common/pluginHostEditors';
import {ExtHostLanguages} from 'vs/workbench/api/common/extHostLanguages';
+import {ExtHostLanguageFeatures} from 'vs/workbench/api/common/extHostLanguageFeatures';
import * as extHostTypes from 'vs/workbench/api/common/pluginHostTypes';
import 'vs/workbench/api/common/pluginHostTypes.marshalling';
import {wrapAsWinJSPromise} from 'vs/base/common/async';
@@ -251,6 +252,7 @@ export class PluginHostAPIImplementation {
const languages = new ExtHostLanguages(this._threadService);
const pluginHostDiagnostics = new PluginHostDiagnostics(this._threadService);
const features = LanguageFeatures.createExtensionHostInstances(this._threadService);
+ const languageFeatures = threadService.getRemotable(ExtHostLanguageFeatures);
this.languages = {
createDiagnosticCollection(name?: string): vscode.DiagnosticCollection {
@@ -284,7 +286,7 @@ export class PluginHostAPIImplementation {
return features.rename.register(selector, provider);
},
registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable {
- return features.documentSymbols.register(selector, provider);
+ return languageFeatures.registerDocumentSymbolProvider(selector, provider);
},
registerWorkspaceSymbolProvider(provider: vscode.WorkspaceSymbolProvider): vscode.Disposable {
return features.workspaceSymbols.register(provider);
diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
new file mode 100644
index 00000000000..d99e870d0e5
--- /dev/null
+++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
@@ -0,0 +1,160 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+import URI from 'vs/base/common/uri';
+import Event, {Emitter} from 'vs/base/common/event';
+import Severity from 'vs/base/common/severity';
+import {TPromise} from 'vs/base/common/winjs.base';
+import {sequence} from 'vs/base/common/async';
+import {Range as EditorRange} from 'vs/editor/common/core/range';
+import {IDisposable} from 'vs/base/common/lifecycle';
+import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
+import {Remotable, IThreadService} from 'vs/platform/thread/common/thread';
+import * as vscode from 'vscode';
+import * as TypeConverters from 'vs/workbench/api/common/pluginHostTypeConverters';
+import {Position, Range, SymbolKind, DocumentHighlightKind, Disposable, Diagnostic, DiagnosticSeverity, Location, SignatureHelp, CompletionItemKind} from 'vs/workbench/api/common/pluginHostTypes';
+import {IPosition, IRange, ISingleEditOperation} from 'vs/editor/common/editorCommon';
+import * as modes from 'vs/editor/common/modes';
+import {CancellationTokenSource} from 'vs/base/common/cancellation';
+import {PluginHostModelService} from 'vs/workbench/api/common/pluginHostDocuments';
+import {IMarkerService, IMarker} from 'vs/platform/markers/common/markers';
+import {PluginHostCommands, MainThreadCommands} from 'vs/workbench/api/common/pluginHostCommands';
+import DeclarationRegistry from 'vs/editor/contrib/goToDeclaration/common/goToDeclaration';
+import ExtraInfoRegistry from 'vs/editor/contrib/hover/common/hover';
+import DocumentHighlighterRegistry from 'vs/editor/contrib/wordHighlighter/common/wordHighlighter';
+import ReferenceSearchRegistry from 'vs/editor/contrib/referenceSearch/common/referenceSearch';
+import QuickFixRegistry from 'vs/editor/contrib/quickFix/common/quickFix';
+import {OutlineRegistry, IOutlineEntry, IOutlineSupport} from 'vs/editor/contrib/quickOpen/common/quickOpen';
+import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
+import {NavigateTypesSupportRegistry, INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search'
+import {RenameRegistry} from 'vs/editor/contrib/rename/common/rename';
+import {FormatRegistry, FormatOnTypeRegistry} from 'vs/editor/contrib/format/common/format';
+import {CodeLensRegistry} from 'vs/editor/contrib/codelens/common/codelens';
+import {ParameterHintsRegistry} from 'vs/editor/contrib/parameterHints/common/parameterHints';
+import {SuggestRegistry} from 'vs/editor/contrib/suggest/common/suggest';
+
+function isThenable(obj: any): obj is Thenable {
+ return obj && typeof obj['then'] === 'function';
+}
+
+function asWinJsPromise(callback: (token: vscode.CancellationToken) => T | Thenable): TPromise {
+ let source = new CancellationTokenSource();
+ return new TPromise((resolve, reject) => {
+ let item = callback(source.token);
+ if (isThenable(item)) {
+ item.then(resolve, reject);
+ } else {
+ resolve(item);
+ }
+ }, () => {
+ source.cancel();
+ });
+}
+
+// --- adapter
+
+class OutlineSupportAdapter implements IOutlineSupport {
+
+ private _documents: PluginHostModelService;
+ private _provider: vscode.DocumentSymbolProvider;
+
+ constructor(documents: PluginHostModelService, provider: vscode.DocumentSymbolProvider) {
+ this._documents = documents;
+ this._provider = provider;
+ }
+
+ getOutline(resource: URI): TPromise {
+ let doc = this._documents.getDocument(resource);
+ return asWinJsPromise(token => this._provider.provideDocumentSymbols(doc, token)).then(value => {
+ if (Array.isArray(value)) {
+ return value.map(OutlineSupportAdapter._convertSymbolInfo);
+ }
+ });
+ }
+
+ private static _convertSymbolInfo(symbol: vscode.SymbolInformation): IOutlineEntry {
+ return {
+ type: TypeConverters.fromSymbolKind(symbol.kind),
+ range: TypeConverters.fromRange(symbol.location.range),
+ containerLabel: symbol.containerName,
+ label: symbol.name,
+ icon: undefined,
+ };
+ }
+}
+
+type Adapter = OutlineSupportAdapter;
+
+@Remotable.PluginHostContext('ExtHostLanguageFeatures')
+export class ExtHostLanguageFeatures {
+
+ private static _handlePool = 0;
+
+ private _proxy: MainThreadLanguageFeatures;
+ private _documents: PluginHostModelService;
+ private _adapter: { [handle: number]: Adapter } = Object.create(null);
+
+ constructor( @IThreadService threadService: IThreadService) {
+ this._proxy = threadService.getRemotable(MainThreadLanguageFeatures);
+ this._documents = threadService.getRemotable(PluginHostModelService);
+ }
+
+ private _createDisposable(handle: number): Disposable {
+ return new Disposable(() => {
+ delete this._adapter[handle];
+ this._proxy.$unregister(handle);
+ });
+ }
+
+ // --- outline
+
+ registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable {
+ const handle = ExtHostLanguageFeatures._handlePool++;
+ this._proxy.$registerOutlineSupport(handle, selector);
+ this._adapter[handle] = new OutlineSupportAdapter(this._documents, provider);
+ return this._createDisposable(handle);
+ }
+
+ $getOutline(handle: number, resource: URI): TPromise{
+ let adapter = this._adapter[handle];
+ if (adapter instanceof OutlineSupportAdapter) {
+ return adapter.getOutline(resource);
+ }
+ return TPromise.wrapError(new Error('no adapter found'));
+ }
+}
+
+@Remotable.MainContext('MainThreadLanguageFeatures')
+export class MainThreadLanguageFeatures {
+
+ private _proxy: ExtHostLanguageFeatures;
+ private _disposables: { [handle: number]: IDisposable; } = Object.create(null);
+
+ constructor( @IThreadService threadService: IThreadService) {
+ this._proxy = threadService.getRemotable(ExtHostLanguageFeatures);
+ }
+
+ $unregister(handle: number): TPromise {
+ let d = this._disposables[handle];
+ if (d) {
+ d.dispose();
+ delete this._disposables[handle];
+ }
+ return undefined;
+ }
+
+ // --- outline
+
+ $registerOutlineSupport(handle: number, selector: vscode.DocumentSelector): TPromise {
+ let disposable = OutlineRegistry.register(selector, {
+ getOutline: (resource: URI): TPromise => {
+ return this._proxy.$getOutline(handle, resource);
+ }
+ });
+ this._disposables[handle] = disposable;
+ return undefined;
+ }
+}
\ No newline at end of file
diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts
index cd3566cd7d5..67d448b965c 100644
--- a/src/vs/workbench/electron-browser/shell.ts
+++ b/src/vs/workbench/electron-browser/shell.ts
@@ -68,6 +68,7 @@ import {MainThreadEditors} from 'vs/workbench/api/common/pluginHostEditors';
import {MainThreadWorkspace} from 'vs/workbench/api/browser/pluginHostWorkspace';
import {MainThreadConfiguration} from 'vs/workbench/api/common/pluginHostConfiguration';
import {LanguageFeatures} from 'vs/workbench/api/common/languageFeatures';
+import {MainThreadLanguageFeatures} from 'vs/workbench/api/common/extHostLanguageFeatures';
import {EventService} from 'vs/platform/event/common/eventService';
import {IOptions} from 'vs/workbench/common/options';
import themes = require('vs/platform/theme/common/themes');
@@ -337,6 +338,7 @@ export class WorkbenchShell {
this.threadServiceInstance.getRemotable(MainThreadWorkspace);
this.threadServiceInstance.getRemotable(MainThreadEditors);
this.threadServiceInstance.getRemotable(MainThreadStorage);
+ this.threadServiceInstance.getRemotable(MainThreadLanguageFeatures);
LanguageFeatures.createMainThreadInstances(this.threadServiceInstance);
}
From c37136730f3eeddd091c43b0cff78f60a4fbe4b5 Mon Sep 17 00:00:00 2001
From: Martin Aeschlimann
Date: Wed, 25 Nov 2015 11:09:23 +0100
Subject: [PATCH 064/588] [json] 'JSON with comments' text mate bundle
---
extensions/json/OSSREADME.json | 21 +--
extensions/json/package.json | 2 +-
extensions/json/syntaxes/JSON.tmLanguage | 159 +++++++++++++++++------
3 files changed, 124 insertions(+), 58 deletions(-)
diff --git a/extensions/json/OSSREADME.json b/extensions/json/OSSREADME.json
index 2d12a69da84..aa2ec19ee33 100644
--- a/extensions/json/OSSREADME.json
+++ b/extensions/json/OSSREADME.json
@@ -1,22 +1,7 @@
// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
[{
- "name": "textmate/json.tmbundle",
+ "name": "Benvie/JavaScriptNext.tmLanguage",
"version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/json.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-json.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
+ "license": "MIT",
+ "repositoryURL": "https://github.com/Benvie/JavaScriptNext.tmLanguage"
}]
diff --git a/extensions/json/package.json b/extensions/json/package.json
index b68380b554f..983a0480e4b 100644
--- a/extensions/json/package.json
+++ b/extensions/json/package.json
@@ -11,7 +11,7 @@
"mimetypes": ["application/json"]
}],
"grammars": [{
- // "language": "json" : commented out for now, will add once we have rule for comments
+ // "language": "json" : commented out for now
"scopeName": "source.json",
"path": "./syntaxes/JSON.tmLanguage"
}]
diff --git a/extensions/json/syntaxes/JSON.tmLanguage b/extensions/json/syntaxes/JSON.tmLanguage
index b158162b2a7..539d1416cbd 100644
--- a/extensions/json/syntaxes/JSON.tmLanguage
+++ b/extensions/json/syntaxes/JSON.tmLanguage
@@ -1,15 +1,44 @@
-
+
fileTypes
json
+ sublime-settings
+ sublime-menu
+ sublime-keymap
+ sublime-mousemap
+ sublime-theme
+ sublime-build
+ sublime-project
+ sublime-completions
+ foldingStartMarker
+ (?x) # turn on extended mode
+ ^ # a line beginning with
+ \s* # some optional space
+ [{\[] # the start of an object or array
+ (?! # but not followed by
+ .* # whatever
+ [}\]] # and the close of an object or array
+ ,? # an optional comma
+ \s* # some optional space
+ $ # at the end of the line
+ )
+ | # ...or...
+ [{\[] # the start of an object or array
+ \s* # some optional space
+ $ # at the end of the line
+ foldingStopMarker
+ (?x) # turn on extended mode
+ ^ # a line beginning with
+ \s* # some optional space
+ [}\]] # and the close of an object or array
keyEquivalent
^~J
name
- JSON
+ JSON (Javascript Next)
patterns
@@ -63,6 +92,58 @@
+ comments
+
+ patterns
+
+
+ begin
+ /\*\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.json
+
+
+ end
+ \*/
+ name
+ comment.block.documentation.json
+
+
+ begin
+ /\*
+ captures
+
+ 0
+
+ name
+ punctuation.definition.comment.json
+
+
+ end
+ \*/
+ name
+ comment.block.json
+
+
+ captures
+
+ 1
+
+ name
+ punctuation.definition.comment.json
+
+
+ match
+ (//).*$\n?
+ name
+ comment.line.double-slash.js
+
+
+
constant
match
@@ -72,29 +153,26 @@
number
- comment
- handles integer and decimal numbers
match
- (?x: # turn on extended mode
- -? # an optional minus
- (?:
- 0 # a zero
- | # ...or...
- [1-9] # a 1-9 character
- \d* # followed by zero or more digits
- )
- (?:
- (?:
- \. # a period
- \d+ # followed by one or more digits
- )?
- (?:
- [eE] # an e character
- [+-]? # followed by an option +/-
- \d+ # followed by one or more digits
- )? # make exponent optional
- )? # make decimal portion optional
- )
+ (?x) # turn on extended mode
+ -? # an optional minus
+ (?:
+ 0 # a zero
+ | # ...or...
+ [1-9] # a 1-9 character
+ \d* # followed by zero or more digits
+ )
+ (?:
+ (?:
+ \. # a period
+ \d+ # followed by one or more digits
+ )?
+ (?:
+ [eE] # an e character
+ [+-]? # followed by an option +/-
+ \d+ # followed by one or more digits
+ )? # make exponent optional
+ )? # make decimal portion optional
name
constant.numeric.json
@@ -110,8 +188,6 @@
punctuation.definition.dictionary.begin.json
- comment
- a JSON object
end
\}
endCaptures
@@ -132,6 +208,10 @@
include
#string
+
+ include
+ #comments
+
begin
:
@@ -207,15 +287,13 @@
match
- (?x: # turn on extended mode
- \\ # a literal backslash
- (?: # ...followed by...
- ["\\/bfnrt] # one of these characters
- | # ...or...
- u # a u
- [0-9a-fA-F]{4} # and four hex digits
- )
- )
+ (?x) # turn on extended mode
+ \\ # a literal backslash
+ (?: # ...followed by...
+ ["\\/bfnrt] # one of these characters
+ | # ...or...
+ u # a u
+ [0-9a-fA-F]{4}) # and four hex digits
name
constant.character.escape.json
@@ -229,8 +307,6 @@
value
- comment
- the 'value' diagram at http://json.org
patterns
@@ -253,12 +329,17 @@
include
#object
+
+ include
+ #comments
+
scopeName
source.json
uuid
- 0C3868E4-F96B-4E55-B204-1DCB5A20748B
+ 8f97457b-516e-48ce-83c7-08ae12fb327a
-
\ No newline at end of file
+
+
From aba9d6bf3f8140d1f8cfe2eb06553ba696f83910 Mon Sep 17 00:00:00 2001
From: Joao Moreno
Date: Wed, 25 Nov 2015 11:55:52 +0100
Subject: [PATCH 065/588] better cleanup for api tests
---
extensions/vscode-api-tests/src/utils.ts | 39 +++++++++++++++++--
.../vscode-api-tests/src/workspace.test.ts | 11 ++----
2 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/extensions/vscode-api-tests/src/utils.ts b/extensions/vscode-api-tests/src/utils.ts
index 060c79d5580..3dbfdd77365 100644
--- a/extensions/vscode-api-tests/src/utils.ts
+++ b/extensions/vscode-api-tests/src/utils.ts
@@ -5,6 +5,7 @@
'use strict';
+import * as assert from 'assert';
import * as vscode from 'vscode';
import * as fs from 'fs';
import * as os from 'os';
@@ -39,8 +40,40 @@ export function deleteFile(file: vscode.Uri): Thenable {
});
}
-export function cleanUp(): Thenable {
- return vscode.commands.executeCommand('workbench.action.closeAllEditors').then(() => {
- return vscode.commands.executeCommand('workbench.files.action.closeAllFiles');
+export function cleanUp(): Thenable {
+ return new Promise((c, e) => {
+ if (vscode.window.visibleTextEditors.length === 0) {
+ return c();
+ }
+
+ // TODO: the visibleTextEditors variable doesn't seem to be
+ // up to date after a onDidChangeActiveTextEditor event, not
+ // even using a setTimeout 0... so we MUST poll :(
+ const interval = setInterval(() => {
+ if (vscode.window.visibleTextEditors.length > 0) {
+ return;
+ }
+
+ clearInterval(interval);
+ c();
+ }, 10);
+
+ vscode.commands.executeCommand('workbench.action.closeAllEditors')
+ .then(() => vscode.commands.executeCommand('workbench.files.action.closeAllFiles'))
+ .then(null, err => {
+ clearInterval(interval);
+ e(err);
+ });
+ }).then(() => {
+ assert.equal(vscode.window.visibleTextEditors.length, 0);
+ assert(!vscode.window.activeTextEditor);
+
+ // TODO: we can't yet make this assertion because when
+ // the phost creates a document and makes no changes to it,
+ // the main side doesn't know about it and the phost side
+ // assumes it exists. Calling closeAllFiles will not
+ // remove it from textDocuments array. :(
+
+ // assert.equal(vscode.workspace.textDocuments.length, 0);
});
}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/workspace.test.ts
index 5925e579fbc..06923761b40 100644
--- a/extensions/vscode-api-tests/src/workspace.test.ts
+++ b/extensions/vscode-api-tests/src/workspace.test.ts
@@ -14,9 +14,7 @@ import * as os from 'os';
suite('workspace-namespace', () => {
- teardown((done) => {
- cleanUp().then(() => done(), (error) => done(error));
- });
+ teardown(cleanUp);
test('textDocuments', () => {
assert.ok(Array.isArray(workspace.textDocuments));
@@ -28,12 +26,9 @@ suite('workspace-namespace', () => {
assert.throws(() => workspace.rootPath = 'farboo');
});
- test('openTextDocument', done => {
- workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
+ test('openTextDocument', () => {
+ return workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
assert.ok(doc);
- done();
- }, err => {
- done(err);
});
});
From f924875c005e65766d7cb90b29131b73ca73a44a Mon Sep 17 00:00:00 2001
From: Martin Aeschlimann
Date: Wed, 25 Nov 2015 12:00:58 +0100
Subject: [PATCH 066/588] [json] improve text mate tokenizer, enable as default
---
extensions/json/package.json | 2 +-
extensions/json/syntaxes/JSON.tmLanguage | 44 +++++++++++++++++++++++-
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/extensions/json/package.json b/extensions/json/package.json
index 983a0480e4b..224e446f8a0 100644
--- a/extensions/json/package.json
+++ b/extensions/json/package.json
@@ -11,7 +11,7 @@
"mimetypes": ["application/json"]
}],
"grammars": [{
- // "language": "json" : commented out for now
+ "language": "json",
"scopeName": "source.json",
"path": "./syntaxes/JSON.tmLanguage"
}]
diff --git a/extensions/json/syntaxes/JSON.tmLanguage b/extensions/json/syntaxes/JSON.tmLanguage
index 539d1416cbd..9d6a24cc16a 100644
--- a/extensions/json/syntaxes/JSON.tmLanguage
+++ b/extensions/json/syntaxes/JSON.tmLanguage
@@ -206,7 +206,7 @@
comment
the JSON object key
include
- #string
+ #objectkey
include
@@ -283,6 +283,48 @@
name
string.quoted.double.json
+ patterns
+
+
+ include
+ #stringcontent
+
+
+
+ objectkey
+
+ begin
+ "
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.support.type.property-name.begin.json
+
+
+ end
+ "
+ endCaptures
+
+ 0
+
+ name
+ punctuation.support.type.property-name.end.json
+
+
+ name
+ support.type.property-name.json
+ patterns
+
+
+ include
+ #stringcontent
+
+
+
+ stringcontent
+
patterns
From bd93ccb864fb2d0099cb14921d4ed2a822874286 Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Wed, 25 Nov 2015 12:02:15 +0100
Subject: [PATCH 067/588] add tests for the document symbol provider
---
.../contrib/quickOpen/common/quickOpen.ts | 8 +-
.../api/common/extHostLanguageFeatures.ts | 15 +-
.../quickopen/browser/gotoSymbolHandler.ts | 5 +-
.../api/extHostLanguageFeatures.test.ts | 142 ++++++++++++++
.../test/common/api/languageFeatures.test.ts | 177 ------------------
.../test/common/api/testThreadService.ts | 84 +++++++++
6 files changed, 242 insertions(+), 189 deletions(-)
create mode 100644 src/vs/workbench/test/common/api/extHostLanguageFeatures.test.ts
delete mode 100644 src/vs/workbench/test/common/api/languageFeatures.test.ts
create mode 100644 src/vs/workbench/test/common/api/testThreadService.ts
diff --git a/src/vs/editor/contrib/quickOpen/common/quickOpen.ts b/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
index b4e2dc1c9ea..5894c18e632 100644
--- a/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
+++ b/src/vs/editor/contrib/quickOpen/common/quickOpen.ts
@@ -11,6 +11,7 @@ import {Range} from 'vs/editor/common/core/range';
import {IModel} from 'vs/editor/common/editorCommon';
import {IOutlineEntry, IOutlineSupport} from 'vs/editor/common/modes';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
+import {ModelLike} from 'vs/editor/common/modes/languageSelector';
const OutlineRegistry = new LanguageFeatureRegistry('outlineSupport');
@@ -20,13 +21,12 @@ export {
IOutlineSupport
}
-export function getOutlineEntries(model: IModel): TPromise<{ entries: IOutlineEntry[], outlineGroupLabel: { [n: string]: string;} }> {
+export function getOutlineEntries(model: ModelLike): TPromise<{ entries: IOutlineEntry[], outlineGroupLabel: { [n: string]: string;} }> {
- let resource = model.getAssociatedResource();
let groupLabels: { [n: string]: string } = Object.create(null);
let entries: IOutlineEntry[] = [];
- let promises = OutlineRegistry.all(model).map(support => {
+ let promises = OutlineRegistry.all(model).map(support => {
if (support.outlineGroupLabel) {
for (var key in support.outlineGroupLabel) {
@@ -36,7 +36,7 @@ export function getOutlineEntries(model: IModel): TPromise<{ entries: IOutlineEn
}
}
- return support.getOutline(resource).then(result => {
+ return support.getOutline( model.uri).then(result => {
if (Array.isArray(result)) {
entries.push(...result);
}
diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
index d99e870d0e5..baa4d1e25b4 100644
--- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts
+++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
@@ -8,6 +8,7 @@ import URI from 'vs/base/common/uri';
import Event, {Emitter} from 'vs/base/common/event';
import Severity from 'vs/base/common/severity';
import {TPromise} from 'vs/base/common/winjs.base';
+import {onUnexpectedError} from 'vs/base/common/errors';
import {sequence} from 'vs/base/common/async';
import {Range as EditorRange} from 'vs/editor/common/core/range';
import {IDisposable} from 'vs/base/common/lifecycle';
@@ -113,8 +114,8 @@ export class ExtHostLanguageFeatures {
registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable {
const handle = ExtHostLanguageFeatures._handlePool++;
- this._proxy.$registerOutlineSupport(handle, selector);
this._adapter[handle] = new OutlineSupportAdapter(this._documents, provider);
+ this._proxy.$registerOutlineSupport(handle, selector);
return this._createDisposable(handle);
}
@@ -131,17 +132,17 @@ export class ExtHostLanguageFeatures {
export class MainThreadLanguageFeatures {
private _proxy: ExtHostLanguageFeatures;
- private _disposables: { [handle: number]: IDisposable; } = Object.create(null);
+ private _registrations: { [handle: number]: IDisposable; } = Object.create(null);
constructor( @IThreadService threadService: IThreadService) {
this._proxy = threadService.getRemotable(ExtHostLanguageFeatures);
}
$unregister(handle: number): TPromise {
- let d = this._disposables[handle];
- if (d) {
- d.dispose();
- delete this._disposables[handle];
+ let registration = this._registrations[handle];
+ if (registration) {
+ registration.dispose();
+ delete this._registrations[handle];
}
return undefined;
}
@@ -154,7 +155,7 @@ export class MainThreadLanguageFeatures {
return this._proxy.$getOutline(handle, resource);
}
});
- this._disposables[handle] = disposable;
+ this._registrations[handle] = disposable;
return undefined;
}
}
\ No newline at end of file
diff --git a/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts b/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
index 576ce3f82c2..a4f86a7bc11 100644
--- a/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
+++ b/src/vs/workbench/parts/quickopen/browser/gotoSymbolHandler.ts
@@ -527,7 +527,10 @@ export class GotoSymbolHandler extends QuickOpenHandler {
return TPromise.as(this.outlineToModelCache[modelId]);
}
- return getOutlineEntries(model).then(outline => {
+ return getOutlineEntries({
+ uri: ( model).getAssociatedResource(),
+ language: (model).getModeId()
+ }).then(outline => {
let model = new OutlineModel(outline, this.toQuickOpenEntries(outline));
diff --git a/src/vs/workbench/test/common/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/common/api/extHostLanguageFeatures.test.ts
new file mode 100644
index 00000000000..46a90608856
--- /dev/null
+++ b/src/vs/workbench/test/common/api/extHostLanguageFeatures.test.ts
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as assert from 'assert';
+import {setUnexpectedErrorHandler, errorHandler} from 'vs/base/common/errors';
+import {create} from 'vs/base/common/types';
+import URI from 'vs/base/common/uri';
+import {TPromise} from 'vs/base/common/winjs.base';
+import {PluginHostDocument} from 'vs/workbench/api/common/pluginHostDocuments';
+import * as phTypes from 'vs/workbench/api/common/pluginHostTypes';
+import {Range as CodeEditorRange} from 'vs/editor/common/core/range';
+import * as EditorCommon from 'vs/editor/common/editorCommon';
+import threadService from './testThreadService'
+import {ExtHostLanguageFeatures, MainThreadLanguageFeatures} from 'vs/workbench/api/common/extHostLanguageFeatures';
+import {PluginHostCommands, MainThreadCommands} from 'vs/workbench/api/common/pluginHostCommands';
+import {PluginHostModelService} from 'vs/workbench/api/common/pluginHostDocuments';
+import {SyncDescriptor0} from 'vs/platform/instantiation/common/descriptors';
+import {OutlineRegistry, getOutlineEntries} from 'vs/editor/contrib/quickOpen/common/quickOpen';
+import {LanguageSelector, ModelLike} from 'vs/editor/common/modes/languageSelector';
+
+
+let model: ModelLike;
+let extHost: ExtHostLanguageFeatures;
+let mainThread: MainThreadLanguageFeatures;
+let disposables: vscode.Disposable[] = [];
+let originalErrorHandler: (e: any) => any;
+
+suite('ExtHostLanguageFeatures', function() {
+
+ suiteSetup(() => {
+
+ originalErrorHandler = errorHandler.getUnexpectedErrorHandler();
+ setUnexpectedErrorHandler(() => { });
+
+ model = {
+ language: 'far',
+ uri: URI.parse('far://testing/file.a')
+ };
+
+ threadService.getRemotable(PluginHostModelService)._acceptModelAdd({
+ isDirty: false,
+ versionId: 1,
+ modeId: 'far',
+ url: model.uri,
+ value: {
+ EOL: '\n',
+ lines: [
+ 'This is the first line',
+ 'This is the second line',
+ 'This is the third line',
+ ],
+ BOM: '',
+ length: -1
+ },
+ })
+
+ threadService.getRemotable(PluginHostCommands);
+ threadService.getRemotable(MainThreadCommands);
+ mainThread = threadService.getRemotable(MainThreadLanguageFeatures);
+ extHost = threadService.getRemotable(ExtHostLanguageFeatures);
+ });
+
+ suiteTeardown(() => {
+ setUnexpectedErrorHandler(originalErrorHandler);
+ });
+
+ teardown(function(done) {
+ while (disposables.length) {
+ disposables.pop().dispose();
+ }
+ threadService.sync()
+ .then(() => done(), err => done(err));
+ });
+
+ test('DocumentSymbols, register/deregister', function(done) {
+ assert.equal(OutlineRegistry.all(model).length, 0);
+ let d1 = extHost.registerDocumentSymbolProvider('far', {
+ provideDocumentSymbols() {
+ return [];
+ }
+ });
+
+ threadService.sync().then(() => {
+ assert.equal(OutlineRegistry.all(model).length, 1);
+ d1.dispose();
+ threadService.sync().then(() => {
+ done();
+ });
+ });
+
+ });
+
+ test('DocumentSymbols, evil provider', function(done) {
+ disposables.push(extHost.registerDocumentSymbolProvider('far', {
+ provideDocumentSymbols(): any {
+ throw new Error('evil document symbol provider');
+ }
+ }));
+ disposables.push(extHost.registerDocumentSymbolProvider('far', {
+ provideDocumentSymbols(): any {
+ return [new phTypes.SymbolInformation('test', phTypes.SymbolKind.Field, new phTypes.Range(0, 0, 0, 0))];
+ }
+ }));
+
+ threadService.sync().then(() => {
+
+ getOutlineEntries(model).then(value => {
+ assert.equal(value.entries.length, 1);
+ done();
+ }, err => {
+ done(err);
+ });
+ });
+ });
+
+ test('DocumentSymbols, data conversion', function(done) {
+ disposables.push(extHost.registerDocumentSymbolProvider('far', {
+ provideDocumentSymbols(): any {
+ return [new phTypes.SymbolInformation('test', phTypes.SymbolKind.Field, new phTypes.Range(0, 0, 0, 0))];
+ }
+ }));
+
+ threadService.sync().then(() => {
+
+ getOutlineEntries(model).then(value => {
+ assert.equal(value.entries.length, 1);
+
+ let entry = value.entries[0];
+ assert.equal(entry.label, 'test');
+ assert.deepEqual(entry.range, { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 });
+ done();
+
+ }, err => {
+ done(err);
+ });
+ });
+ });
+});
\ No newline at end of file
diff --git a/src/vs/workbench/test/common/api/languageFeatures.test.ts b/src/vs/workbench/test/common/api/languageFeatures.test.ts
deleted file mode 100644
index bf6a92187e6..00000000000
--- a/src/vs/workbench/test/common/api/languageFeatures.test.ts
+++ /dev/null
@@ -1,177 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-'use strict';
-
-import * as assert from 'assert';
-import {create} from 'vs/base/common/types';
-import URI from 'vs/base/common/uri';
-import {TPromise} from 'vs/base/common/winjs.base';
-import {PluginHostDocument} from 'vs/workbench/api/common/pluginHostDocuments';
-import * as phTypes from 'vs/workbench/api/common/pluginHostTypes';
-import {Range as CodeEditorRange} from 'vs/editor/common/core/range';
-import * as EditorCommon from 'vs/editor/common/editorCommon';
-import {NullThreadService} from 'vs/platform/test/common/nullThreadService'
-import * as LF from 'vs/workbench/api/common/languageFeatures';
-import {PluginHostCommands, MainThreadCommands} from 'vs/workbench/api/common/pluginHostCommands';
-import {PluginHostModelService} from 'vs/workbench/api/common/pluginHostDocuments';
-import {SyncDescriptor0} from 'vs/platform/instantiation/common/descriptors';
-import {OutlineRegistry} from 'vs/editor/contrib/quickOpen/common/quickOpen';
-import {LanguageSelector, ModelLike} from 'vs/editor/common/modes/languageSelector';
-
-class ThreadService extends NullThreadService {
-
- protected _registerAndInstantiateMainProcessActor(id: string, descriptor: SyncDescriptor0): T {
-
- let instance: any;
-
- return this._getOrCreateProxyInstance({
- callOnRemote: (proxyId: string, path: string, args: any[]): TPromise => {
- if (!instance) {
- instance = create(descriptor.ctor, this);
- }
- try {
- let result = (instance[path]).apply(instance, args);
- return TPromise.is(result) ? result : TPromise.as(result);
- } catch (err) {
- return TPromise.wrapError(err);
- }
- }
- }, id, descriptor)
- }
-
- protected _registerAndInstantiatePluginHostActor(id: string, descriptor: SyncDescriptor0): T {
- return this._getOrCreateLocalInstance(id, descriptor);
- }
-}
-
-let threadService: ThreadService;
-let model: ModelLike = { language: 'far', uri: URI.parse('far://testing/file.a') };
-
-let extHost: LF.ExtensionHostDocumentSymbols;
-let mainHost: LF.MainThreadDocumentSymbols;
-
-suite('ExtHostLanguageFeatures', function() {
-
- suiteSetup(() => {
- threadService = new ThreadService();
- let documents = threadService.getRemotable(PluginHostModelService);
- documents._acceptModelAdd({
- isDirty: false,
- versionId: 1,
- modeId: 'far',
- url: model.uri,
- value: {
- EOL: '\n',
- lines: [
- 'This is the first line',
- 'This is the second line',
- 'This is the third line',
- ],
- BOM: '',
- length: -1
- },
- })
- threadService.getRemotable(PluginHostCommands);
- threadService.getRemotable(MainThreadCommands);
- threadService.getRemotable(LF.MainThreadDocumentSymbols);
- extHost = new LF.ExtensionHostDocumentSymbols(threadService);
- mainHost = threadService.getRemotable(LF.MainThreadDocumentSymbols);
- });
-
- test('DocumentSymbols, register/deregister', function() {
-
-
- // register
- assert.equal(OutlineRegistry.all(model).length, 0);
- let disposable = extHost.register('far', {
- provideDocumentSymbols() {
- return [];
- }
- });
- assert.equal(OutlineRegistry.all(model).length, 1);
-
- // deregister
- disposable.dispose();
- assert.equal(OutlineRegistry.all(model).length, 0);
-
- // all extension host provider appear as one
- disposable = extHost.register('far', {
- provideDocumentSymbols() {
- return [];
- }
- });
- let disposable2 = extHost.register('far', {
- provideDocumentSymbols() {
- return [];
- }
- });
- assert.equal(OutlineRegistry.all(model).length, 1);
-
- disposable.dispose();
- assert.equal(OutlineRegistry.all(model).length, 1);
- disposable2.dispose();
- assert.equal(OutlineRegistry.all(model).length, 0);
- });
-
- test('DocumentSymbols, evil provider', function(done) {
-
-
- let disposable = extHost.register('far', {
- provideDocumentSymbols():any {
- throw new Error('ddd');
- }
- });
- let disposable2 = extHost.register('far', {
- provideDocumentSymbols():any {
- return [
- new phTypes.SymbolInformation('boo', phTypes.SymbolKind.Field, new phTypes.Range(0, 0, 0, 0))
- ];
- }
- });
-
- mainHost.getOutline(model.uri).then(result => {
- assert.equal(result.length, 1);
- done();
-
- disposable.dispose();
- disposable2.dispose();
-
- }, err => {
- done(err);
- });
- });
-
- test('DocumentSymbols, data conversion', function(done) {
-
- let d = extHost.register('far', {
- provideDocumentSymbols():any {
- return [
- new phTypes.SymbolInformation('boo',
- phTypes.SymbolKind.Field,
- new phTypes.Range(0, 0, 0, 0),
- model.uri,
- 'far')
- ];
- }
- });
-
- mainHost.getOutline(model.uri).then(result => {
- assert.equal(result.length, 1);
- let entry = result[0];
-
- assert.equal(entry.label, 'boo');
- assert.equal(entry.containerLabel, 'far');
- assert.equal(entry.children, undefined);
- assert.deepEqual(entry.range, { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 });
- d.dispose();
- done();
-
- }, err => {
- done(err);
- });
-
- });
-});
\ No newline at end of file
diff --git a/src/vs/workbench/test/common/api/testThreadService.ts b/src/vs/workbench/test/common/api/testThreadService.ts
new file mode 100644
index 00000000000..5b408734768
--- /dev/null
+++ b/src/vs/workbench/test/common/api/testThreadService.ts
@@ -0,0 +1,84 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import {NullThreadService} from 'vs/platform/test/common/nullThreadService';
+import {create} from 'vs/base/common/types';
+import {SyncDescriptor0} from 'vs/platform/instantiation/common/descriptors';
+import {TPromise} from 'vs/base/common/winjs.base';
+
+export class TestThreadService extends NullThreadService {
+
+ private _callCountValue: number = 0;
+ private _idle: TPromise;
+ private _completeIdle: Function;
+
+ private get _callCount(): number {
+ return this._callCountValue;
+ }
+
+ private set _callCount(value:number) {
+ this._callCountValue = value;
+ if (this._callCountValue === 0) {
+ this._completeIdle();
+ this._idle = undefined;
+ }
+ }
+
+ sync(): TPromise {
+ if (this._callCount === 0) {
+ return TPromise.as(undefined);
+ }
+ if (!this._idle) {
+ this._idle = new TPromise((c, e) => {
+ this._completeIdle = c;
+ }, function() {
+ // no cancel
+ });
+ }
+ return this._idle;
+ }
+
+ protected _registerAndInstantiateMainProcessActor(id: string, descriptor: SyncDescriptor0): T {
+
+ let instance: any;
+
+ return this._getOrCreateProxyInstance({
+ callOnRemote: (proxyId: string, path: string, args: any[]): TPromise => {
+
+ this._callCount++;
+
+ return TPromise.timeout(0).then(() => {
+ if (!instance) {
+ instance = create(descriptor.ctor, this);
+ }
+ let p: TPromise;
+ try {
+ let result = (instance[path]).apply(instance, args);
+ p = TPromise.is(result) ? result : TPromise.as(result);
+ } catch (err) {
+ p = TPromise.wrapError(err);
+ }
+
+ return p.then(result => {
+ this._callCount--;
+ return result;
+ }, err => {
+ this._callCount--;
+ return TPromise.wrapError(err);
+ });
+ });
+ }
+ }, id, descriptor)
+ }
+
+ protected _registerAndInstantiatePluginHostActor(id: string, descriptor: SyncDescriptor0): T {
+ return this._getOrCreateLocalInstance(id, descriptor);
+ }
+}
+
+const Instance = new TestThreadService();
+export default Instance;
\ No newline at end of file
From 052a1dc8a06869c6e219be8c4db41cd2c1727f0c Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Wed, 25 Nov 2015 12:04:21 +0100
Subject: [PATCH 068/588] api tests - more use of promises in mocha
---
extensions/vscode-api-tests/src/editor.test.ts | 10 ++++------
extensions/vscode-api-tests/src/window.test.ts | 10 ++++------
extensions/vscode-api-tests/src/workspace.test.ts | 14 +++++---------
3 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/extensions/vscode-api-tests/src/editor.test.ts b/extensions/vscode-api-tests/src/editor.test.ts
index 38a9b1558ef..e3bb24f42c2 100644
--- a/extensions/vscode-api-tests/src/editor.test.ts
+++ b/extensions/vscode-api-tests/src/editor.test.ts
@@ -14,12 +14,10 @@ import {join} from 'path';
suite("editor tests", () => {
- teardown((done) => {
- cleanUp().then(() => done(), (error) => done(error));
- });
+ teardown(cleanUp);
- test('make edit', (done) => {
- createRandomFile().then(file => {
+ test('make edit', () => {
+ return createRandomFile().then(file => {
return workspace.openTextDocument(file).then(doc => {
return window.showTextDocument(doc).then((editor) => {
return editor.edit((builder) => {
@@ -38,6 +36,6 @@ suite("editor tests", () => {
});
});
});
- }).then(() => done(), (error) => done(error));
+ });
});
});
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/window.test.ts b/extensions/vscode-api-tests/src/window.test.ts
index 0f3ba712cd3..3764c8feb9a 100644
--- a/extensions/vscode-api-tests/src/window.test.ts
+++ b/extensions/vscode-api-tests/src/window.test.ts
@@ -12,17 +12,15 @@ import {cleanUp} from './utils';
suite("window namespace tests", () => {
- teardown((done) => {
- cleanUp().then(() => done(), (error) => done(error));
- });
+ teardown(cleanUp);
- test('active text editor', (done) => {
- workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
+ test('active text editor', () => {
+ return workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
return window.showTextDocument(doc).then((editor) => {
const active = window.activeTextEditor;
assert.ok(active);
assert.equal(active.document.uri.fsPath, doc.uri.fsPath);
});
- }).then(() => done(), (error) => done(error));
+ });
});
});
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/workspace.test.ts
index 06923761b40..bf457f5b6f4 100644
--- a/extensions/vscode-api-tests/src/workspace.test.ts
+++ b/extensions/vscode-api-tests/src/workspace.test.ts
@@ -40,8 +40,8 @@ suite('workspace-namespace', () => {
});
});
- test('events: onDidOpenTextDocument, onDidChangeTextDocument, onDidSaveTextDocument', (done) => {
- createRandomFile().then(file => {
+ test('events: onDidOpenTextDocument, onDidChangeTextDocument, onDidSaveTextDocument', () => {
+ return createRandomFile().then(file => {
let disposables = [];
let onDidOpenTextDocument = false;
@@ -81,17 +81,13 @@ suite('workspace-namespace', () => {
});
});
});
- }).then(() => done(), (error) => done(error));
+ });
});
- test('findFiles', done => {
- workspace.findFiles('*.js', null).then((res) => {
+ test('findFiles', () => {
+ return workspace.findFiles('*.js', null).then((res) => {
assert.equal(res.length, 1);
assert.equal(workspace.asRelativePath(res[0]), '/far.js');
-
- done();
- }, err => {
- done(err);
});
});
});
\ No newline at end of file
From 2c09792e1c3fb49d5d5d32c634ca594f56efba6e Mon Sep 17 00:00:00 2001
From: Benjamin Pasero
Date: Wed, 25 Nov 2015 12:13:40 +0100
Subject: [PATCH 069/588] first commands test (disabled)
---
.../vscode-api-tests/src/commands.test.ts | 29 +++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 extensions/vscode-api-tests/src/commands.test.ts
diff --git a/extensions/vscode-api-tests/src/commands.test.ts b/extensions/vscode-api-tests/src/commands.test.ts
new file mode 100644
index 00000000000..6d9453f3510
--- /dev/null
+++ b/extensions/vscode-api-tests/src/commands.test.ts
@@ -0,0 +1,29 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as assert from 'assert';
+import * as fs from 'fs';
+import * as os from 'os';
+import {workspace, window, Position, commands} from 'vscode';
+import {createRandomFile, deleteFile, cleanUp} from './utils';
+import {join} from 'path';
+
+suite("editor tests", () => {
+
+ teardown(cleanUp);
+
+ // test('calling command completes with the extension host updated properly', () => {
+ // return workspace.openTextDocument(join(workspace.rootPath, './far.js')).then(doc => {
+ // return window.showTextDocument(doc).then(editor => {
+ // assert.equal(window.visibleTextEditors.length, 1);
+ // return commands.executeCommand('workbench.action.closeAllEditors').then(() => {
+ // assert.equal(window.visibleTextEditors.length, 0);
+ // });
+ // });
+ // });
+ // });
+});
\ No newline at end of file
From 770ede158afea0293f4c66448e0effb8d2788a4b Mon Sep 17 00:00:00 2001
From: Johannes Rieken
Date: Wed, 25 Nov 2015 12:48:55 +0100
Subject: [PATCH 070/588] One code lens provider is one code lens support,
fixes #360
---
.../contrib/codelens/browser/codelens.ts | 24 +--
.../contrib/codelens/common/codelens.ts | 27 ++-
.../api/browser/pluginHost.api.impl.ts | 2 +-
.../api/common/extHostLanguageFeatures.ts | 139 ++++++++++++-
.../workbench/api/common/languageFeatures.ts | 184 ------------------
.../workbench/api/common/pluginHostTypes.ts | 2 +-
.../api/extHostLanguageFeatures.test.ts | 84 +++++++-
7 files changed, 241 insertions(+), 221 deletions(-)
diff --git a/src/vs/editor/contrib/codelens/browser/codelens.ts b/src/vs/editor/contrib/codelens/browser/codelens.ts
index 84585d921fb..9ec540a9476 100644
--- a/src/vs/editor/contrib/codelens/browser/codelens.ts
+++ b/src/vs/editor/contrib/codelens/browser/codelens.ts
@@ -22,12 +22,8 @@ import {IModelService} from 'vs/editor/common/services/modelService';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
import {Range} from 'vs/editor/common/core/range';
-import {CodeLensRegistry} from '../common/codelens';
+import {CodeLensRegistry, ICodeLensData, getCodeLensData} from '../common/codelens';
-interface ICodeLensData {
- symbol: Modes.ICodeLensSymbol;
- support: Modes.ICodeLensSupport;
-}
class CodeLensViewZone implements EditorBrowser.IViewZone {
@@ -428,22 +424,8 @@ export class CodeLensContribution implements EditorCommon.IEditorContribution {
this._currentFindCodeLensSymbolsPromise.cancel();
}
- let resource = model.getAssociatedResource();
- let symbols: ICodeLensData[] = [];
- let promises = CodeLensRegistry.all(model).map(support => {
- return support.findCodeLensSymbols(resource).then(result => {
- if (!Array.isArray(result)) {
- return;
- }
- for (let symbol of result) {
- symbols.push({ symbol, support });
- }
- }, err => {
- errors.onUnexpectedError(err);
- });
- });
-
- this._currentFindCodeLensSymbolsPromise = TPromise.join(promises).then(() => symbols);
+ this._currentFindCodeLensSymbolsPromise = getCodeLensData(model.getAssociatedResource(),
+ model.getModeId());
var counterValue = ++this._modelChangeCounter;
this._currentFindCodeLensSymbolsPromise.then((result) => {
diff --git a/src/vs/editor/contrib/codelens/common/codelens.ts b/src/vs/editor/contrib/codelens/common/codelens.ts
index cf84481f124..0392ab6a924 100644
--- a/src/vs/editor/contrib/codelens/common/codelens.ts
+++ b/src/vs/editor/contrib/codelens/common/codelens.ts
@@ -5,6 +5,7 @@
'use strict';
+import {onUnexpectedError} from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import {IAction, Action} from 'vs/base/common/actions';
import {TPromise} from 'vs/base/common/winjs.base';
@@ -13,6 +14,28 @@ import {Range} from 'vs/editor/common/core/range';
import {ICodeLensSupport, ICodeLensSymbol, ICommand} from 'vs/editor/common/modes';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
-const _registry = new LanguageFeatureRegistry('codeLensSupport');
+export const CodeLensRegistry = new LanguageFeatureRegistry('codeLensSupport');
-export {_registry as CodeLensRegistry}
+export interface ICodeLensData {
+ symbol: ICodeLensSymbol;
+ support: ICodeLensSupport;
+}
+
+export function getCodeLensData(resource: URI, modeId: string) {
+
+ const symbols: ICodeLensData[] = [];
+ const promises = CodeLensRegistry.all({ uri: resource, language: modeId }).map(support => {
+ return support.findCodeLensSymbols(resource).then(result => {
+ if (!Array.isArray(result)) {
+ return;
+ }
+ for (let symbol of result) {
+ symbols.push({ symbol, support });
+ }
+ }, err => {
+ onUnexpectedError(err);
+ });
+ });
+
+ return TPromise.join(promises).then(() => symbols);
+}
\ No newline at end of file
diff --git a/src/vs/workbench/api/browser/pluginHost.api.impl.ts b/src/vs/workbench/api/browser/pluginHost.api.impl.ts
index a7556ab7512..1d4ce1101ed 100644
--- a/src/vs/workbench/api/browser/pluginHost.api.impl.ts
+++ b/src/vs/workbench/api/browser/pluginHost.api.impl.ts
@@ -268,7 +268,7 @@ export class PluginHostAPIImplementation {
return features.codeActions.register(selector, provider);
},
registerCodeLensProvider(selector: vscode.DocumentSelector, provider: vscode.CodeLensProvider): vscode.Disposable {
- return features.codeLens.register(selector, provider);
+ return languageFeatures.registerCodeLensProvider(selector, provider);
},
registerDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.DefinitionProvider): vscode.Disposable {
return features.definition.register(selector, provider);
diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
index baa4d1e25b4..953592ba9c5 100644
--- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts
+++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts
@@ -57,7 +57,7 @@ function asWinJsPromise(callback: (token: vscode.CancellationToken) => T | Th
// --- adapter
-class OutlineSupportAdapter implements IOutlineSupport {
+class OutlineAdapter implements IOutlineSupport {
private _documents: PluginHostModelService;
private _provider: vscode.DocumentSymbolProvider;
@@ -71,7 +71,7 @@ class OutlineSupportAdapter implements IOutlineSupport {
let doc = this._documents.getDocument(resource);
return asWinJsPromise(token => this._provider.provideDocumentSymbols(doc, token)).then(value => {
if (Array.isArray(value)) {
- return value.map(OutlineSupportAdapter._convertSymbolInfo);
+ return value.map(OutlineAdapter._convertSymbolInfo);
}
});
}
@@ -87,7 +87,78 @@ class OutlineSupportAdapter implements IOutlineSupport {
}
}
-type Adapter = OutlineSupportAdapter;
+class CodeLensAdapter implements modes.ICodeLensSupport {
+
+ private _documents: PluginHostModelService;
+ private _provider: vscode.CodeLensProvider;
+
+ private _cache: { [uri: string]: vscode.CodeLens[] } = Object.create(null);
+
+ constructor(documents: PluginHostModelService, provider: vscode.CodeLensProvider) {
+ this._documents = documents;
+ this._provider = provider;
+ }
+
+ findCodeLensSymbols(resource: URI): TPromise {
+ let doc = this._documents.getDocument(resource);
+ let key = resource.toString();
+
+ delete this._cache[key];
+
+ return asWinJsPromise(token => this._provider.provideCodeLenses(doc, token)).then(value => {
+ if (!Array.isArray(value)) {
+ return;
+ }
+
+ this._cache[key] = value;
+
+ return value.map((lens, i) => {
+ return {
+ id: String(i),
+ range: TypeConverters.fromRange(lens.range)
+ }
+ });
+ });
+ }
+
+ resolveCodeLensSymbol(resource: URI, symbol: modes.ICodeLensSymbol): TPromise {
+
+ let lenses = this._cache[resource.toString()];
+ if (!lenses) {
+ return;
+ }
+
+ let lens = lenses[Number(symbol.id)];
+ if (!lens) {
+ return;
+ }
+
+ let resolve: TPromise;
+ if (typeof this._provider.resolveCodeLens !== 'function' || lens.isResolved) {
+ resolve = TPromise.as(lens);
+ } else {
+ resolve = asWinJsPromise(token => this._provider.resolveCodeLens(lens, token));
+ }
+
+ return resolve.then(newLens => {
+ lens = newLens || lens;
+ let command = lens.command;
+ if (!command) {
+ command = {
+ title: '<>',
+ command: 'missing',
+ }
+ }
+ return {
+ id: command.command,
+ title: command.title,
+ arguments: command.arguments
+ }
+ });
+ }
+}
+
+type Adapter = OutlineAdapter | CodeLensAdapter;
@Remotable.PluginHostContext('ExtHostLanguageFeatures')
export class ExtHostLanguageFeatures {
@@ -110,22 +181,59 @@ export class ExtHostLanguageFeatures {
});
}
+ private _nextHandle(): number {
+ return ExtHostLanguageFeatures._handlePool++;
+ }
+
+ private _noAdapter() {
+ return TPromise.wrapError(new Error('no adapter found'));
+ }
+
// --- outline
registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable {
- const handle = ExtHostLanguageFeatures._handlePool++;
- this._adapter[handle] = new OutlineSupportAdapter(this._documents, provider);
+ const handle = this._nextHandle();
+ this._adapter[handle] = new OutlineAdapter(this._documents, provider);
this._proxy.$registerOutlineSupport(handle, selector);
return this._createDisposable(handle);
}
$getOutline(handle: number, resource: URI): TPromise{
let adapter = this._adapter[handle];
- if (adapter instanceof OutlineSupportAdapter) {
+ if (adapter instanceof OutlineAdapter) {
return adapter.getOutline(resource);
+ } else {
+ return this._noAdapter();
}
- return TPromise.wrapError(new Error('no adapter found'));
}
+
+ // --- code lens
+
+ registerCodeLensProvider(selector: vscode.DocumentSelector, provider: vscode.CodeLensProvider): vscode.Disposable {
+ const handle = this._nextHandle();
+ this._adapter[handle] = new CodeLensAdapter(this._documents, provider);
+ this._proxy.$registerCodeLensSupport(handle, selector);
+ return this._createDisposable(handle);
+ }
+
+ $findCodeLensSymbols(handle:number, resource: URI): TPromise {
+ let adapter = this._adapter[handle];
+ if (adapter instanceof CodeLensAdapter) {
+ return adapter.findCodeLensSymbols(resource);
+ } else {
+ return this._noAdapter();
+ }
+ }
+
+ $resolveCodeLensSymbol(handle:number, resource: URI, symbol: modes.ICodeLensSymbol): TPromise {
+ let adapter = this._adapter[handle];
+ if (adapter instanceof CodeLensAdapter) {
+ return adapter.resolveCodeLensSymbol(resource, symbol);
+ } else {
+ return this._noAdapter();
+ }
+ }
+
}
@Remotable.MainContext('MainThreadLanguageFeatures')
@@ -150,12 +258,25 @@ export class MainThreadLanguageFeatures {
// --- outline
$registerOutlineSupport(handle: number, selector: vscode.DocumentSelector): TPromise {
- let disposable = OutlineRegistry.register(selector, {
+ this._registrations[handle] = OutlineRegistry.register(selector, {
getOutline: (resource: URI): TPromise => {
return this._proxy.$getOutline(handle, resource);
}
});
- this._registrations[handle] = disposable;
+ return undefined;
+ }
+
+ // --- code lens
+
+ $registerCodeLensSupport(handle: number, selector: vscode.DocumentSelector): TPromise {
+ this._registrations[handle] = CodeLensRegistry.register(selector, {
+ findCodeLensSymbols: (resource: URI): TPromise => {
+ return this._proxy.$findCodeLensSymbols(handle, resource);
+ },
+ resolveCodeLensSymbol: (resource: URI, symbol: modes.ICodeLensSymbol): TPromise => {
+ return this._proxy.$resolveCodeLensSymbol(handle, resource, symbol);
+ }
+ });
return undefined;
}
}
\ No newline at end of file
diff --git a/src/vs/workbench/api/common/languageFeatures.ts b/src/vs/workbench/api/common/languageFeatures.ts
index 4fa0fb5ffc7..2d3a0fb57ea 100644
--- a/src/vs/workbench/api/common/languageFeatures.ts
+++ b/src/vs/workbench/api/common/languageFeatures.ts
@@ -480,78 +480,6 @@ export class MainThreadCodeActions extends AbstractMainThreadFeature {
-
- constructor( @IThreadService threadService: IThreadService) {
- super(threadService.getRemotable(MainThreadDocumentSymbols), threadService);
- }
-
- protected _runAsCommand(resource: URI): TPromise {
-
- if (!(resource instanceof URI)) {
- return TPromise.wrapError('uri missing');
- }
-
- let symbols: vscode.SymbolInformation[] = [];
- let document = this._models.getDocument(resource);
- let candidate = {
- language: document.languageId,
- uri: document.uri
- };
- let promises = this._registry.all(candidate).map(provider => {
- return asWinJsPromise(token => {
- return provider.provideDocumentSymbols(document, token);
- }).then(result => {
- if (Array.isArray(result)) {
- symbols.push(...result);
- }
- }, err => {
- console.log(err);
- });
- });
-
- return TPromise.join(promises).then(() => {
- return symbols
- .sort(ExtensionHostDocumentSymbols._compareByStart)
- .map(ExtensionHostDocumentSymbols._convertSymbolInfo);
- });
- }
-
- private static _compareByStart(a: vscode.SymbolInformation, b: vscode.SymbolInformation): number {
- if (a.location.range.start.isBefore(b.location.range.start)) {
- return -1;
- } else if (b.location.range.start.isBefore(a.location.range.start)) {
- return 1;
- } else {
- return 0;
- }
- }
-
- private static _convertSymbolInfo(symbol: vscode.SymbolInformation): IOutlineEntry {
- return {
- type: TypeConverters.fromSymbolKind(symbol.kind),
- range: TypeConverters.fromRange(symbol.location.range),
- containerLabel: symbol.containerName,
- label: symbol.name,
- icon: undefined,
- };
- }
-}
-
-@Remotable.MainContext('MainThreadDocumentSymbols2')
-export class MainThreadDocumentSymbols extends AbstractMainThreadFeature implements IOutlineSupport {
-
- constructor( @IThreadService threadService: IThreadService) {
- super('vscode.executeDocumentSymbolProvider', OutlineRegistry, threadService);
- }
-
- getOutline(resource: URI): TPromise{
- return this._executeCommand(resource);
- }
-}
-
// -- Rename provider
export class ExtensionHostRename extends AbstractExtensionHostFeature {
@@ -1046,114 +974,6 @@ export class MainThreadCompletions extends AbstractMainThreadFeature {
-
- private static _idPool = 0;
- private _lenses: { [id: string]: [string, vscode.CodeLensProvider, vscode.CodeLens] } = Object.create(null);
-
- constructor(@IThreadService threadService: IThreadService) {
- super(threadService.getRemotable(MainThreadCodeLens), threadService);
- this._models.onDidRemoveDocument(event => this._clearCache(event.uri));
- }
-
- _clearCache(resource: URI): void {
- for (let key in this._lenses) {
- if (this._lenses[key][0] === resource.toString()) {
- delete this._lenses[key];
- }
- }
- }
-
- _runAsCommand(resource: URI): TPromise {
-
- let document = this._models.getDocument(resource);
- let result: modes.ICodeLensSymbol[] = [];
- let promises = this._getAllFor(document).map(provider => {
-
- let providerCanResolveLens = typeof provider.resolveCodeLens === 'function';
-
- return asWinJsPromise(token => provider.provideCodeLenses(document, token)).then(lenses => {
-
- // new commands
- this._clearCache(resource);
-
- if (!Array.isArray(lenses)) {
- return;
- }
- for (let lens of lenses) {
-
- if (!providerCanResolveLens && !lens.isResolved) {
- throw new Error('illegal state - code lens must be resolved or provider must implement resolveCodeLens-function');
- }
-
- let id = 'code_lense_#' + ExtensionHostCodeLens._idPool++;
- this._lenses[id] = [resource.toString(), provider, lens];
-
- result.push({
- id,
- range: TypeConverters.fromRange(lens.range)
- });
- }
- }, err => {
- console.error(err);
- });
- });
-
- return TPromise.join(promises).then(() => {
- return result;
- });
- }
-
- _resolveCodeLensSymbol(symbol: modes.ICodeLensSymbol): TPromise {
-
- if (!this._lenses[symbol.id]) {
- return;
- }
-
- let [, provider, lens] = this._lenses[symbol.id];
- let resolve: TPromise;
-
- if (typeof provider.resolveCodeLens !== 'function') {
- resolve = TPromise.as(lens);
- } else {
- resolve = asWinJsPromise(token => provider.resolveCodeLens(lens, token));
- }
-
- return resolve.then(newLens => {
- lens = newLens || lens;
- if (lens.command) {
- return {
- id: