diff --git a/.github/commands.yml b/.github/commands.yml index 8076f05fd1f66dd9beb1b9dbd548f635afa276ec..ba8c8d7f3ceb08b946ee63b9a9cc77491e491840 100644 --- a/.github/commands.yml +++ b/.github/commands.yml @@ -56,5 +56,11 @@ action: 'updateLabels', addLabel: 'confirmed' }, + { + type: 'comment', + name: 'findDuplicates', + action: 'comment', + comment: "Potential duplicates:\n${potentialDuplicates}" + }, ] } diff --git a/.github/similarity.yml b/.github/similarity.yml index 4ec8e6cc7d4218b0a19e4a7aa0ff174cacf9bb1a..cd51cd2da64f4e7a053984846351018d94ddba3a 100644 --- a/.github/similarity.yml +++ b/.github/similarity.yml @@ -1,5 +1,5 @@ { perform: true, whenCreatedByTeam: false, - comment: "Thanks for submitting this issue. Please also check if it is already covered by an existing one, like:\n${potentialDuplicates}" + comment: "(Experimental duplicate detection)\nThanks for submitting this issue. Please also check if it is already covered by an existing one, like:\n${potentialDuplicates}" } diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json index a94b0a43327b4e142a7e29ec85ba40cfae4fc552..28ff359e8d5e9c5f152251b07f30976717f996ff 100644 --- a/build/lib/i18n.resources.json +++ b/build/lib/i18n.resources.json @@ -146,6 +146,10 @@ "name": "vs/workbench/services/crashReporter", "project": "vscode-workbench" }, + { + "name": "vs/workbench/services/dialogs", + "project": "vscode-workbench" + }, { "name": "vs/workbench/services/editor", "project": "vscode-workbench" @@ -162,10 +166,6 @@ "name": "vs/workbench/services/keybinding", "project": "vscode-workbench" }, - { - "name": "vs/workbench/services/message", - "project": "vscode-workbench" - }, { "name": "vs/workbench/services/mode", "project": "vscode-workbench" diff --git a/extensions/bat/language-configuration.json b/extensions/bat/language-configuration.json index 2fb5445a34a471dedf79cb3fa2cae8d02fa1b4dc..2064cd941ca70c55f709f82fb9af3436d93eb7b4 100644 --- a/extensions/bat/language-configuration.json +++ b/extensions/bat/language-configuration.json @@ -11,7 +11,8 @@ ["{", "}"], ["[", "]"], ["(", ")"], - ["\"", "\""] + ["\"", "\""], + ["`", "`"] ], "surroundingPairs": [ ["{", "}"], diff --git a/extensions/bat/package.json b/extensions/bat/package.json index d9f1cba592bd5415093424936bd6be30d55c041d..e5809eb032e0a50e9e0446ae13fb541b5240a801 100644 --- a/extensions/bat/package.json +++ b/extensions/bat/package.json @@ -1,5 +1,7 @@ { "name": "bat", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/bat/package.nls.json b/extensions/bat/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..a3842b35c73b5e3630921eb54d6fa046c479725d --- /dev/null +++ b/extensions/bat/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Windows Bat Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in Windows batch files" +} \ No newline at end of file diff --git a/extensions/clojure/package.json b/extensions/clojure/package.json index b404ef5fb8ae4ac086c85205faf17cd094657c42..7be42cc30c10f2f7aa7f3eacd21f02764f5b8188 100644 --- a/extensions/clojure/package.json +++ b/extensions/clojure/package.json @@ -1,5 +1,7 @@ { "name": "clojure", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/clojure/package.nls.json b/extensions/clojure/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..d443e17ed45deac840cc58d65c933563fd9fcee2 --- /dev/null +++ b/extensions/clojure/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Clojure Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Clojure files" +} \ No newline at end of file diff --git a/extensions/coffeescript/package.json b/extensions/coffeescript/package.json index c688f7b08366e521fdb12b5739c25250576fddab..706b55220cea9da5d1d40567e47f249c891322cd 100644 --- a/extensions/coffeescript/package.json +++ b/extensions/coffeescript/package.json @@ -1,5 +1,7 @@ { "name": "coffeescript", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/coffeescript/package.nls.json b/extensions/coffeescript/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..e891ba0ab2ade6d36fbc9984fe3b2e2ff5c95e76 --- /dev/null +++ b/extensions/coffeescript/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Coffeescript Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in Coffeescript files" +} \ No newline at end of file diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json index c5030630b400af37402e25cdd2b7543d7e757403..da25e2e643e21625b72c037ca26b9072dba53a08 100644 --- a/extensions/configuration-editing/package.json +++ b/extensions/configuration-editing/package.json @@ -1,5 +1,7 @@ { "name": "configuration-editing", + "displayName": "%displayName%", + "description": "%description%", "version": "0.0.1", "publisher": "vscode", "engines": { @@ -81,4 +83,4 @@ "devDependencies": { "@types/node": "7.0.4" } -} +} \ No newline at end of file diff --git a/extensions/configuration-editing/package.nls.json b/extensions/configuration-editing/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..7e75dbe9053c85500a442668ffaf59d30fa64fc2 --- /dev/null +++ b/extensions/configuration-editing/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Configuration Editing", + "description": "Provides capabilities (advanced intelli-sense, auto-fixing) in configuration files like settings, launch and extension recommendation files" +} \ No newline at end of file diff --git a/extensions/cpp/package.json b/extensions/cpp/package.json index bb2f0b6aaab2893ef8fb3b490bd89b4dcc20d733..5541288995dd006cbbf41952d7e618b312785a49 100644 --- a/extensions/cpp/package.json +++ b/extensions/cpp/package.json @@ -1,5 +1,7 @@ { "name": "cpp", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, @@ -15,7 +17,7 @@ }, { "id": "cpp", - "extensions": [ ".cpp", ".cc", ".cxx", ".hpp", ".hh", ".hxx", ".h", ".ino", ".inl" ], + "extensions": [ ".cpp", ".cc", ".cxx", ".hpp", ".hh", ".hxx", ".h", ".ino", ".inl", ".ipp" ], "aliases": [ "C++", "Cpp", "cpp"], "configuration": "./language-configuration.json" }], diff --git a/extensions/cpp/package.nls.json b/extensions/cpp/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..241d7a1adbfc8cd876a4ea0f1b9a945ae821b16e --- /dev/null +++ b/extensions/cpp/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "C/C++ Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in C/C++ files" +} \ No newline at end of file diff --git a/extensions/csharp/package.json b/extensions/csharp/package.json index 137ce2656d6d6bd48959312b282624266ecf1181..e5aae513537aba74f599f10be485bf7378f0f03f 100644 --- a/extensions/csharp/package.json +++ b/extensions/csharp/package.json @@ -1,5 +1,7 @@ { "name": "csharp", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/csharp/package.nls.json b/extensions/csharp/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..ff75c382146941278236dc1347a2f3f9b642b02f --- /dev/null +++ b/extensions/csharp/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "C# Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in C# files" +} \ No newline at end of file diff --git a/extensions/css/package.json b/extensions/css/package.json index 21b3f36d8719592f276bcf6f84448787f839f4cf..c5022b59db6b1a37a692673765c0a21b21d2ef1b 100644 --- a/extensions/css/package.json +++ b/extensions/css/package.json @@ -1,5 +1,7 @@ { "name": "css", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/css/package.nls.json b/extensions/css/package.nls.json index 33fbf6d5c2879e6a32c6bc1f2a5b0de54bff7493..cbe77ea0abb55c405477c97492004682913f787f 100644 --- a/extensions/css/package.nls.json +++ b/extensions/css/package.nls.json @@ -1,4 +1,6 @@ { + "displayName": "CSS Language Features", + "description": "Provides rich language support for CSS, LESS and SCSS files.", "css.title": "CSS", "css.lint.argumentsInColorFunction.desc": "Invalid number of parameters", "css.lint.boxModel.desc": "Do not use width or height when using padding or border", diff --git a/extensions/diff/package.json b/extensions/diff/package.json index a62e57243c30a50f3ec9afd33a315df79c977d57..79d69c4e472ba0033844de1a0fd74839a5bf76d0 100644 --- a/extensions/diff/package.json +++ b/extensions/diff/package.json @@ -1,5 +1,7 @@ { "name": "diff", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/diff/package.nls.json b/extensions/diff/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..2159c202e6837cf11873ed6ea14a069fb6c2c204 --- /dev/null +++ b/extensions/diff/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Diff File Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Diff files" +} \ No newline at end of file diff --git a/extensions/docker/package.json b/extensions/docker/package.json index e58f082641901c7680d541d8d2534eacd95bcb4c..905cca458a9033d3fbda98908d2c6d19d13bcf69 100644 --- a/extensions/docker/package.json +++ b/extensions/docker/package.json @@ -1,5 +1,7 @@ { "name": "docker", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/docker/package.nls.json b/extensions/docker/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..3a8c10f1a231161f91daea58315f7d608555a895 --- /dev/null +++ b/extensions/docker/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Docker Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Docker files" +} \ No newline at end of file diff --git a/extensions/extension-editing/package.json b/extensions/extension-editing/package.json index 6c13e41f4a17efbaf850fa817866da5009590124..1068667eb1cdd9f6ee0e6129d87a2d0a40753f56 100644 --- a/extensions/extension-editing/package.json +++ b/extensions/extension-editing/package.json @@ -1,5 +1,7 @@ { "name": "extension-editing", + "displayName": "%displayName%", + "description": "%description%", "version": "0.0.1", "publisher": "vscode", "engines": { diff --git a/extensions/extension-editing/package.nls.json b/extensions/extension-editing/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..89325ce28d9241bc1625a3f233daf6b689657e1a --- /dev/null +++ b/extensions/extension-editing/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Package File Editing", + "description": "Provides intelli-sense for VS Code extension points and linting capabilities in Package json files" +} \ No newline at end of file diff --git a/extensions/fsharp/package.json b/extensions/fsharp/package.json index b0ca0ae5af21eefbb264e0d0907f3c8f60f187ab..616dce6c703612d62609f98fb96bf89e862821c4 100644 --- a/extensions/fsharp/package.json +++ b/extensions/fsharp/package.json @@ -1,5 +1,7 @@ { "name": "fsharp", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/fsharp/package.nls.json b/extensions/fsharp/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..9c2a0992ae4e84b29e713c26c621ba9c0a6ca8a6 --- /dev/null +++ b/extensions/fsharp/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "F# Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in F# files" +} \ No newline at end of file diff --git a/extensions/git/package.json b/extensions/git/package.json index 808b1cf9170666210e3f7ee6929b43bcc735472a..7b757fb21b8868c7f15b123b4bde868214066289 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -1026,7 +1026,7 @@ "byline": "^5.0.0", "file-type": "^7.2.0", "iconv-lite": "0.4.19", - "vscode-extension-telemetry": "0.0.12", + "vscode-extension-telemetry": "0.0.13", "vscode-nls": "^3.2.1", "which": "^1.3.0" }, diff --git a/extensions/git/src/autofetch.ts b/extensions/git/src/autofetch.ts index ef309483297d386f58bd4ef31501529c584a7fd2..f76dd7db38873dc373e9f8a0f970ef98f0f262f2 100644 --- a/extensions/git/src/autofetch.ts +++ b/extensions/git/src/autofetch.ts @@ -57,7 +57,7 @@ export class AutoFetcher { const readMore: MessageItem = { title: localize('read more', "Read More") }; const no: MessageItem = { isCloseAffordance: true, title: localize('no', "No") }; const askLater: MessageItem = { title: localize('not now', "Ask Me Later") }; - const result = await window.showInformationMessage(localize('suggest auto fetch', "Would you like Code to periodically run `git fetch`?"), yes, readMore, no, askLater); + const result = await window.showInformationMessage(localize('suggest auto fetch', "Would you like Code to periodically run 'git fetch'?"), yes, readMore, no, askLater); if (result === askLater) { return; diff --git a/extensions/git/yarn.lock b/extensions/git/yarn.lock index b134231880226fd6ef7cbb42f23406558cf4d766..93801131a77cbb8503393d31d648ddc2faba5a93 100644 --- a/extensions/git/yarn.lock +++ b/extensions/git/yarn.lock @@ -253,9 +253,9 @@ supports-color@3.1.2: dependencies: has-flag "^1.0.0" -vscode-extension-telemetry@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/groovy/package.json b/extensions/groovy/package.json index 56f91c9dda400276645d764148eacd65b657cd94..169b38d65888eaab69c4f3ce727a9789efdc2b3f 100644 --- a/extensions/groovy/package.json +++ b/extensions/groovy/package.json @@ -1,5 +1,7 @@ { "name": "groovy", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/groovy/package.nls.json b/extensions/groovy/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..6579bc61876e5da2bef336fd6998d6d37fb86a67 --- /dev/null +++ b/extensions/groovy/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Groovy Language Features", + "description": "Provides Syntax highlighting, Bracket matching, Snippets and other language features in Groovy files" +} \ No newline at end of file diff --git a/extensions/handlebars/package.json b/extensions/handlebars/package.json index 2f70eb6f10026790c9a3327aa7f163a8495c572d..a0bcf1b6deb9ab71fbe5357ac2191d35dd7adb5c 100644 --- a/extensions/handlebars/package.json +++ b/extensions/handlebars/package.json @@ -1,5 +1,7 @@ { - "name": "handlebars", + "name": "handlebars", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/handlebars/package.nls.json b/extensions/handlebars/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..9af7548cf04a7eaa6b454f4166a1c522f6aba726 --- /dev/null +++ b/extensions/handlebars/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Handlebars Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Handlebars files" +} \ No newline at end of file diff --git a/extensions/hlsl/package.json b/extensions/hlsl/package.json index 280c4563828593f9fec3dfebfd67a12576be5e84..22a13fd68cf78e65d044672414c72b309e2d4cc4 100644 --- a/extensions/hlsl/package.json +++ b/extensions/hlsl/package.json @@ -1,5 +1,7 @@ { "name": "hlsl", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/hlsl/package.nls.json b/extensions/hlsl/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..44d18a9283a610723899b96cf5e7ac775005d304 --- /dev/null +++ b/extensions/hlsl/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "HLSL Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in HLSL files" +} \ No newline at end of file diff --git a/extensions/html/package.json b/extensions/html/package.json index bed34bf9f454194552610fef6e8af52d42f9f459..7c97ed5ac7c43a583ec0059bc260b038985454c1 100644 --- a/extensions/html/package.json +++ b/extensions/html/package.json @@ -1,5 +1,7 @@ { "name": "html", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", @@ -226,7 +228,7 @@ } }, "dependencies": { - "vscode-extension-telemetry": "0.0.12", + "vscode-extension-telemetry": "0.0.13", "vscode-languageclient": "^4.0.0-next.9", "vscode-nls": "^3.2.1" }, diff --git a/extensions/html/package.nls.json b/extensions/html/package.nls.json index c09d8d337bd77770dd94db52f7f026520eb82b24..4b59c6fba33a2aa3f9a7914dfd0e1097954d7093 100644 --- a/extensions/html/package.nls.json +++ b/extensions/html/package.nls.json @@ -1,4 +1,6 @@ { + "displayName": "HTML Language Features", + "description": "Provides rich language support for HTML, Razor and Handlebar files.", "html.format.enable.desc": "Enable/disable default HTML formatter", "html.format.wrapLineLength.desc": "Maximum amount of characters per line (0 = disable).", "html.format.unformatted.desc": "List of tags, comma separated, that shouldn't be reformatted. 'null' defaults to all tags listed at https://www.w3.org/TR/html5/dom.html#phrasing-content.", diff --git a/extensions/html/yarn.lock b/extensions/html/yarn.lock index eb2e530e3afc1982e67cb82663b06771a9d81167..293e931499677bf7145fdb3e6d4b946e36a8d080 100644 --- a/extensions/html/yarn.lock +++ b/extensions/html/yarn.lock @@ -28,9 +28,9 @@ semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -vscode-extension-telemetry@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/ini/package.json b/extensions/ini/package.json index bfb7bb522157e1d00c6506883e2ebeeed045b159..46c5fcb34735ca982a16d5cab2980d8dafcc5ef6 100644 --- a/extensions/ini/package.json +++ b/extensions/ini/package.json @@ -1,5 +1,7 @@ { "name": "ini", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/ini/package.nls.json b/extensions/ini/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..6299868a6ee6f4cbc030a5674806b51cb13b1a31 --- /dev/null +++ b/extensions/ini/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Ini Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Ini files" +} \ No newline at end of file diff --git a/extensions/java/package.json b/extensions/java/package.json index 6493004d0a80f620b143745125c5d0ada9321780..73c9b13f49376568da943fb929d1cfcf287b2421 100644 --- a/extensions/java/package.json +++ b/extensions/java/package.json @@ -1,5 +1,7 @@ { "name": "java", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/java/package.nls.json b/extensions/java/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..a53c62ed5482bc31eb81ca7b604527b7351b85b6 --- /dev/null +++ b/extensions/java/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Java Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in Java files" +} \ No newline at end of file diff --git a/extensions/json/package.json b/extensions/json/package.json index 95e0738922b595ddac131a5b938cb6c77a5fd8b5..0f976e9b2f6848a15400e228d0893bcf04fafcb4 100644 --- a/extensions/json/package.json +++ b/extensions/json/package.json @@ -1,5 +1,7 @@ { "name": "json", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", @@ -162,7 +164,7 @@ } }, "dependencies": { - "vscode-extension-telemetry": "0.0.12", + "vscode-extension-telemetry": "0.0.13", "vscode-languageclient": "^4.0.0-next.9", "vscode-nls": "^3.2.1" }, diff --git a/extensions/json/package.nls.json b/extensions/json/package.nls.json index 31385fd819f2b1512c98d7fe95b25f1ba5761c4e..f9d52e8ebcf4fea2c2cacbbf674d98e2aac064c8 100644 --- a/extensions/json/package.nls.json +++ b/extensions/json/package.nls.json @@ -1,4 +1,6 @@ { + "displayName": "JSON Language Features", + "description": "Provides rich language support for JSON files.", "json.schemas.desc": "Associate schemas to JSON files in the current project", "json.schemas.url.desc": "A URL to a schema or a relative path to a schema in the current directory", "json.schemas.fileMatch.desc": "An array of file patterns to match against when resolving JSON files to schemas.", diff --git a/extensions/json/yarn.lock b/extensions/json/yarn.lock index eb2e530e3afc1982e67cb82663b06771a9d81167..293e931499677bf7145fdb3e6d4b946e36a8d080 100644 --- a/extensions/json/yarn.lock +++ b/extensions/json/yarn.lock @@ -28,9 +28,9 @@ semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -vscode-extension-telemetry@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/less/package.json b/extensions/less/package.json index b23dfe356b9e4d2759e54c72e1e4a97230caec4f..4858278fbb8749638649b0e62b37edd76b2aefcd 100644 --- a/extensions/less/package.json +++ b/extensions/less/package.json @@ -1,5 +1,7 @@ { "name": "less", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/less/package.nls.json b/extensions/less/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..b21d1cfdddb337ea6ea830a9877e8aa25217012d --- /dev/null +++ b/extensions/less/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Less Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Less files." +} \ No newline at end of file diff --git a/extensions/log/package.json b/extensions/log/package.json index 04d399d172dd12bc956a3d74fb14df91c87549a4..ab8b0da1c9de89734f3176bacd7d083816a3f614 100644 --- a/extensions/log/package.json +++ b/extensions/log/package.json @@ -1,5 +1,7 @@ { "name": "log", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/log/package.nls.json b/extensions/log/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..a5d3018fbc6ad313d52ecc5cb72c39a356069c58 --- /dev/null +++ b/extensions/log/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Log", + "description": "Provides Syntax highlighting for files with .log extension" +} \ No newline at end of file diff --git a/extensions/lua/package.json b/extensions/lua/package.json index 067fde1aeeebebbf670d66816faa87363385ca65..df3a9a1e723f731bf4c360b3a67b139bfedc0dfc 100644 --- a/extensions/lua/package.json +++ b/extensions/lua/package.json @@ -1,5 +1,7 @@ { "name": "lua", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/lua/package.nls.json b/extensions/lua/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..e8b420e63dde643cd919689efe3290aca262cd7a --- /dev/null +++ b/extensions/lua/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Lua Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Lua files" +} \ No newline at end of file diff --git a/extensions/make/package.json b/extensions/make/package.json index 59ed17b79556c7779a6e590e3ffe548fd46847d1..afae76d54617ad86c71e05e7dfe749f5ac2b896e 100644 --- a/extensions/make/package.json +++ b/extensions/make/package.json @@ -1,5 +1,7 @@ { "name": "make", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/make/package.nls.json b/extensions/make/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..186bfcefb8cf1b34b2d23632d9388dc89dfbc48d --- /dev/null +++ b/extensions/make/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Make Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Make files" +} \ No newline at end of file diff --git a/extensions/markdown/media/main.js b/extensions/markdown/media/main.js index 53ac317d8517aebe86f6138ce929046957f4d0b6..42bac764d7a03f9fe4d96986eb9252fb1a4269f1 100644 --- a/extensions/markdown/media/main.js +++ b/extensions/markdown/media/main.js @@ -155,9 +155,10 @@ if (previous) { if (next) { const betweenProgress = (offset - window.scrollY - previous.element.getBoundingClientRect().top) / (next.element.getBoundingClientRect().top - previous.element.getBoundingClientRect().top); - return previous.line + betweenProgress * (next.line - previous.line); + const line = previous.line + betweenProgress * (next.line - previous.line); + return Math.max(line, 0); } else { - return previous.line; + return Math.max(previous.line, 0); } } return null; @@ -232,7 +233,7 @@ } // Ignore clicks on links - for (let node = event.target; node; node = node.parentNode) { + for (let node = /** @type {HTMLElement} */(event.target); node; node = /** @type {HTMLElement} */(node.parentNode)) { if (node.tagName === "A") { return; } @@ -255,13 +256,13 @@ /** @type {*} */ let node = event.target; while (node) { - if (node.tagName && node.tagName.toLowerCase() === 'a' && node.href) { + if (node.tagName && node.tagName === 'A' && node.href) { if (node.getAttribute('href').startsWith('#')) { break; } - if (node.href.startsWith('file://')) { - const [path, fragment] = node.href.replace(/^file:\/\//i, '').split('#'); - postMessage('_markdown.openDocumentLink', { path, fragment }); + if (node.href.startsWith('file://') || node.href.startsWith('vscode-workspace-resource:')) { + const [path, fragment] = node.href.replace(/^(file:\/\/|vscode-workspace-resource:)/i, '').split('#'); + postMessage('_markdown.openDocumentLink', [{ path, fragment }]); event.preventDefault(); event.stopPropagation(); break; diff --git a/extensions/markdown/package.json b/extensions/markdown/package.json index 99ce9bedd469a2697c7ad822673fd3449eb2b666..a3b4df103e1997d47c1767079dc47900964a59e4 100644 --- a/extensions/markdown/package.json +++ b/extensions/markdown/package.json @@ -314,7 +314,7 @@ "highlight.js": "9.5.0", "markdown-it": "^8.4.0", "markdown-it-named-headers": "0.0.4", - "vscode-extension-telemetry": "^0.0.12", + "vscode-extension-telemetry": "^0.0.13", "vscode-nls": "^3.2.1" }, "devDependencies": { diff --git a/extensions/markdown/yarn.lock b/extensions/markdown/yarn.lock index 61798cfa83dcf2473531a610271bddbc447b75e7..6a725e5ec59960301a3268c988c2e21eea9205c2 100644 --- a/extensions/markdown/yarn.lock +++ b/extensions/markdown/yarn.lock @@ -1743,9 +1743,9 @@ vinyl@~2.0.1: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vscode-extension-telemetry@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/merge-conflict/package.json b/extensions/merge-conflict/package.json index 739eb66f0ede75488a6cd19593699235949296e4..cd4de32ff61bccf1793eb6367c5e518c246f9a49 100644 --- a/extensions/merge-conflict/package.json +++ b/extensions/merge-conflict/package.json @@ -99,7 +99,7 @@ } }, "dependencies": { - "vscode-extension-telemetry": "0.0.12", + "vscode-extension-telemetry": "0.0.13", "vscode-nls": "^3.2.1" }, "devDependencies": { diff --git a/extensions/merge-conflict/yarn.lock b/extensions/merge-conflict/yarn.lock index 7d01dc5cbd7d7d285f5d4f836255e837f7904a01..30b8b37fab8e3f3154f1197eeb46aadb6d976647 100644 --- a/extensions/merge-conflict/yarn.lock +++ b/extensions/merge-conflict/yarn.lock @@ -28,9 +28,9 @@ semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -vscode-extension-telemetry@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/objective-c/package.json b/extensions/objective-c/package.json index 0a5125c3273874a546c892216cf07d62c0b94c52..a391a6c83949adffa73590be6c42797da46de42b 100644 --- a/extensions/objective-c/package.json +++ b/extensions/objective-c/package.json @@ -1,5 +1,7 @@ { "name": "objective-c", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/objective-c/package.nls.json b/extensions/objective-c/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..370c032a469ade9d0ae171dcef632ec65ba9a0a9 --- /dev/null +++ b/extensions/objective-c/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Objective-C Language Features", + "description": "Provides Syntax highlighting,Bracket matching and other language features in Objective-C files" +} \ No newline at end of file diff --git a/extensions/perl/package.json b/extensions/perl/package.json index 9197f588182b08919383e67775266df6db8f5eda..1044186d5ae6592a93aebc5c6af3c0dd16e520f0 100644 --- a/extensions/perl/package.json +++ b/extensions/perl/package.json @@ -1,5 +1,7 @@ { "name": "perl", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/perl/package.nls.json b/extensions/perl/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..e7324aaa99058678fb03928223031ea6bedbc7db --- /dev/null +++ b/extensions/perl/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Perl Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Perl files" +} \ No newline at end of file diff --git a/extensions/powershell/package.json b/extensions/powershell/package.json index c53e476238b4264eaf4e82bd3e3172e8c5810f4d..82b93077a483d305567332af8309a86301ac99f0 100644 --- a/extensions/powershell/package.json +++ b/extensions/powershell/package.json @@ -1,5 +1,7 @@ { "name": "powershell", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/powershell/package.nls.json b/extensions/powershell/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..19a93bf4c943282605ff5ec07f4cc347d8f98f32 --- /dev/null +++ b/extensions/powershell/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Powershell Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in Powershell files" +} \ No newline at end of file diff --git a/extensions/pug/package.json b/extensions/pug/package.json index 2d80e2c46d0f2817577cc48903c8a62d57ea6618..81c1b46d907464899c37e32e4dfab0d16e476aa1 100644 --- a/extensions/pug/package.json +++ b/extensions/pug/package.json @@ -1,5 +1,7 @@ { "name": "pug", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/pug/package.nls.json b/extensions/pug/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..9c42fef1f1c5521d958d47839d024b36891ddf0a --- /dev/null +++ b/extensions/pug/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Pug Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Pug files" +} \ No newline at end of file diff --git a/extensions/python/package.json b/extensions/python/package.json index 49c9d6ace9f1c235ad98b5cc1b7f342504145bff..9de1edf11fde2c6be976b0b463b704e295f60a18 100644 --- a/extensions/python/package.json +++ b/extensions/python/package.json @@ -1,5 +1,7 @@ { "name": "python", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/python/package.nls.json b/extensions/python/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..9f4e16e90a04d5bfcb20d9d2bc5a5e0c29f0ef9f --- /dev/null +++ b/extensions/python/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Python Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching and other language features in Python files" +} \ No newline at end of file diff --git a/extensions/r/package.json b/extensions/r/package.json index 96f89e8c67b8f701f987b93dffa36de33df80da1..7a983f5289976f86a1dfbe43e4991ad5c8b512ce 100644 --- a/extensions/r/package.json +++ b/extensions/r/package.json @@ -1,5 +1,7 @@ { "name": "r", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/r/package.nls.json b/extensions/r/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..157646f7eb41b7c45be22446508a930df056b925 --- /dev/null +++ b/extensions/r/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "R Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in R files" +} \ No newline at end of file diff --git a/extensions/razor/package.json b/extensions/razor/package.json index 5aa758a9f553ce4db00d84ce56794f35f8eb8994..abbde5ab15720ef05dc1c6dce45a5d26dccc348e 100644 --- a/extensions/razor/package.json +++ b/extensions/razor/package.json @@ -1,5 +1,7 @@ { - "name": "razor", + "name": "razor", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/razor/package.nls.json b/extensions/razor/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..67985cc04130498a281af2c32e8dd8c718b2e0dc --- /dev/null +++ b/extensions/razor/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Razor Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching and other language features in Razor files" +} \ No newline at end of file diff --git a/extensions/ruby/package.json b/extensions/ruby/package.json index 43f0d35aaedad321d16ab59045e6f13c3de0245c..0a166b2d8f429e426332ce88f8f19c7d4f0ea678 100644 --- a/extensions/ruby/package.json +++ b/extensions/ruby/package.json @@ -1,5 +1,7 @@ { "name": "ruby", + "displayName": "%displayName%", + "description": "%description%", "version": "0.2.1", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/ruby/package.nls.json b/extensions/ruby/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..22f85f2d3763671d3bb5653171baff9f5d343ffd --- /dev/null +++ b/extensions/ruby/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Ruby Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Ruby files" +} \ No newline at end of file diff --git a/extensions/rust/package.json b/extensions/rust/package.json index a04ca7ef8340fa964e271caff764d6bde6083fca..0c1b8b7f5b3168a3601f2883be82215d23205933 100644 --- a/extensions/rust/package.json +++ b/extensions/rust/package.json @@ -1,5 +1,7 @@ { "name": "rust", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/rust/package.nls.json b/extensions/rust/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..41b6a3b293b9c43eca1b3cb6106fc0bd384be4eb --- /dev/null +++ b/extensions/rust/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Rust Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Rust files" +} \ No newline at end of file diff --git a/extensions/scss/package.json b/extensions/scss/package.json index 60873e98791aefbddbe2d7d0a66e268ec074f02a..b2bc11406eab0ee915adf95343fef9f3fa25a4eb 100644 --- a/extensions/scss/package.json +++ b/extensions/scss/package.json @@ -1,5 +1,7 @@ { "name": "scss", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/scss/package.nls.json b/extensions/scss/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..b38ad29894746e4eb9eb221db24f7b46eb0fad22 --- /dev/null +++ b/extensions/scss/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "SCSS Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in SCSS files." +} \ No newline at end of file diff --git a/extensions/shaderlab/package.json b/extensions/shaderlab/package.json index 2eabed584d2b7acb263eb10024031d57e88016e7..a5d675b55f1ef04943255d7ec4b926685119cc21 100644 --- a/extensions/shaderlab/package.json +++ b/extensions/shaderlab/package.json @@ -1,5 +1,7 @@ { "name": "shaderlab", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { diff --git a/extensions/shaderlab/package.nls.json b/extensions/shaderlab/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..b22f1492629322c8961bb5038ce159d945d7e73d --- /dev/null +++ b/extensions/shaderlab/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Shaderlab Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Shaderlab files" +} \ No newline at end of file diff --git a/extensions/shellscript/package.json b/extensions/shellscript/package.json index ef9014dc01d3a8bca13efad6242d0240de07e140..94924aa14b79a38de2fb952862b300e023e90d36 100644 --- a/extensions/shellscript/package.json +++ b/extensions/shellscript/package.json @@ -1,5 +1,7 @@ { "name": "shellscript", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/shellscript/package.nls.json b/extensions/shellscript/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..e16f6f253a2c17d86c9749772b9e9f0d922b7033 --- /dev/null +++ b/extensions/shellscript/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Shell Script Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in Shell Script files" +} \ No newline at end of file diff --git a/extensions/sql/package.json b/extensions/sql/package.json index e983778bf3672124758ccf5635ccca6203dfcea5..2bb2b5cde1fc73c2a3c54ee179ac6109773d180e 100644 --- a/extensions/sql/package.json +++ b/extensions/sql/package.json @@ -1,5 +1,7 @@ { "name": "sql", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/sql/package.nls.json b/extensions/sql/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..baba5622d85a3ca89fc6908d641493e3750f4271 --- /dev/null +++ b/extensions/sql/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "SQL Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in SQL files" +} \ No newline at end of file diff --git a/extensions/swift/package.json b/extensions/swift/package.json index a9139a22a6d6c47ef7bf6eb1064d93bcb4e34093..32bd9376967e75548b6917b5d4f4b2241051fe19 100644 --- a/extensions/swift/package.json +++ b/extensions/swift/package.json @@ -1,5 +1,7 @@ { "name": "swift", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/swift/package.nls.json b/extensions/swift/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..c17798302471e35433c6fbc05bf4c0e9d62a5117 --- /dev/null +++ b/extensions/swift/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Swift Language Features", + "description": "Provides Syntax highlighting, Bracket matching, Snippets and other language features in Swift files" +} \ No newline at end of file diff --git a/extensions/theme-abyss/package.json b/extensions/theme-abyss/package.json index dd1aa7b31a2fd921b0330138b2a46f64a5c47427..4a49e49149edfbe0389bf4bf020290053d7c6d0e 100644 --- a/extensions/theme-abyss/package.json +++ b/extensions/theme-abyss/package.json @@ -1,5 +1,7 @@ { "name": "theme-abyss", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-abyss/package.nls.json b/extensions/theme-abyss/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..48fbcd8583aaa56b119108a0b4b66bdfff403eb1 --- /dev/null +++ b/extensions/theme-abyss/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Abyss Theme", + "description": "Abyss theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-defaults/package.json b/extensions/theme-defaults/package.json index 7a48ad6ece2c0d7be4971a53cfc39ca2291bc2c3..2e20824eb85c49ffb730d9bdfb64d515972b9e67 100644 --- a/extensions/theme-defaults/package.json +++ b/extensions/theme-defaults/package.json @@ -1,7 +1,7 @@ { "name": "theme-defaults", - "displayName": "Default Themes", - "description": "The default light and dark themes (Plus and Visual Studio)", + "displayName": "%displayName%", + "description": "%description%", "categories": [ "Themes" ], "version": "0.1.10", "publisher": "vscode", diff --git a/extensions/theme-defaults/package.nls.json b/extensions/theme-defaults/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..46dee28cf267530280ca796e3fa191ec56b42831 --- /dev/null +++ b/extensions/theme-defaults/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Default Themes", + "description": "The default light and dark themes (Plus and Visual Studio)" +} \ No newline at end of file diff --git a/extensions/theme-kimbie-dark/package.json b/extensions/theme-kimbie-dark/package.json index f22ca5e5f098160253a0413c46799999c3227afa..c71105d67179775171434385bd29b465ad34e8fe 100644 --- a/extensions/theme-kimbie-dark/package.json +++ b/extensions/theme-kimbie-dark/package.json @@ -1,5 +1,7 @@ { "name": "theme-kimbie-dark", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-kimbie-dark/package.nls.json b/extensions/theme-kimbie-dark/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..85c736cee8b1d5bebc6771af41b096b0d978f5cc --- /dev/null +++ b/extensions/theme-kimbie-dark/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Kimbie Dark Theme", + "description": "Kimbie dark theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-monokai-dimmed/package.json b/extensions/theme-monokai-dimmed/package.json index 18ed5256ad8d95c23a5267ccb95a04b6564a0dea..1e59351e87f4a8f6b9c0ef68b0f17e0bf1570634 100644 --- a/extensions/theme-monokai-dimmed/package.json +++ b/extensions/theme-monokai-dimmed/package.json @@ -1,8 +1,12 @@ { "name": "theme-monokai-dimmed", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", - "engines": { "vscode": "*" }, + "engines": { + "vscode": "*" + }, "contributes": { "themes": [ { diff --git a/extensions/theme-monokai-dimmed/package.nls.json b/extensions/theme-monokai-dimmed/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..3d93898e2ca35daa86040c579b935544bd9049a1 --- /dev/null +++ b/extensions/theme-monokai-dimmed/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Monokai Dimmed Theme", + "description": "Monokai dimmed theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-monokai/package.json b/extensions/theme-monokai/package.json index 4e4fdd358b7f1c9e9abe8cd3e468bb0b7dbd2dcb..06aae0fb019a51339421824d5715118e272874c3 100644 --- a/extensions/theme-monokai/package.json +++ b/extensions/theme-monokai/package.json @@ -1,8 +1,12 @@ { "name": "theme-monokai", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", - "engines": { "vscode": "*" }, + "engines": { + "vscode": "*" + }, "contributes": { "themes": [ { diff --git a/extensions/theme-monokai/package.nls.json b/extensions/theme-monokai/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..8e8d73c75689452af348865830fb02c2355200ea --- /dev/null +++ b/extensions/theme-monokai/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Monokai Theme", + "description": "Monokai theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-quietlight/package.json b/extensions/theme-quietlight/package.json index b8c78c374c8d4ffd7118f5305c572b856bab33ea..7bd6bf1ee2ec77ec47b93fb709c98af1308b0aee 100644 --- a/extensions/theme-quietlight/package.json +++ b/extensions/theme-quietlight/package.json @@ -1,8 +1,12 @@ { "name": "theme-quietlight", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", - "engines": { "vscode": "*" }, + "engines": { + "vscode": "*" + }, "contributes": { "themes": [ { diff --git a/extensions/theme-quietlight/package.nls.json b/extensions/theme-quietlight/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..1873df058e75ec050e7eb5f66f4582d6a975eee8 --- /dev/null +++ b/extensions/theme-quietlight/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Quiet Light Theme", + "description": "Quiet light theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-red/package.json b/extensions/theme-red/package.json index f2b0403c694935bef0190a0b314b9bad477c0e28..1b70c041ec8128e4eb0e703bf07e618496d792e3 100644 --- a/extensions/theme-red/package.json +++ b/extensions/theme-red/package.json @@ -1,5 +1,7 @@ { "name": "theme-red", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-red/package.nls.json b/extensions/theme-red/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..680fde603ecf0c7e6a642e7fbdaa72575ae189d6 --- /dev/null +++ b/extensions/theme-red/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Red Theme", + "description": "Red theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-seti/package.json b/extensions/theme-seti/package.json index 21c618905558e42dbddab2b054244227349cf297..6d1c27f8cb4c631f87193e4fc8e067b111e67d88 100644 --- a/extensions/theme-seti/package.json +++ b/extensions/theme-seti/package.json @@ -2,7 +2,8 @@ "name": "vscode-theme-seti", "private": true, "version": "0.1.0", - "description": "A file icon theme made out of the Seti UI file icons", + "displayName": "%displayName%", + "description": "%description%", "publisher": "vscode", "scripts": { "update": "node ./build/update-icon-theme.js" diff --git a/extensions/theme-seti/package.nls.json b/extensions/theme-seti/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..173d99ddaa81be4b076f55c8c969d50055d9d085 --- /dev/null +++ b/extensions/theme-seti/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Seti File Icon Theme", + "description": "A file icon theme made out of the Seti UI file icons" +} \ No newline at end of file diff --git a/extensions/theme-solarized-dark/package.json b/extensions/theme-solarized-dark/package.json index 3d8f91a8dc422ba258055335fb211f1a4d08a868..42d97c21593b3ed638f36b92a25daea38e0f0c64 100644 --- a/extensions/theme-solarized-dark/package.json +++ b/extensions/theme-solarized-dark/package.json @@ -1,5 +1,7 @@ { "name": "theme-solarized-dark", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-solarized-dark/package.nls.json b/extensions/theme-solarized-dark/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..c226e15f3ef055742ed921cf1167c04036fad800 --- /dev/null +++ b/extensions/theme-solarized-dark/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Solarized Dark Theme", + "description": "Solarized dark theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-solarized-light/package.json b/extensions/theme-solarized-light/package.json index 57570d33cb6343df8ba799bad70561a5c06e7b8c..5f3212cff393094a97227014d94cbed85617e4a7 100644 --- a/extensions/theme-solarized-light/package.json +++ b/extensions/theme-solarized-light/package.json @@ -1,5 +1,7 @@ { "name": "theme-solarized-light", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-solarized-light/package.nls.json b/extensions/theme-solarized-light/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..f7a3d0cee3355f5bf605b8018288f92019db285f --- /dev/null +++ b/extensions/theme-solarized-light/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Solarized Light Theme", + "description": "Solarized light theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/theme-tomorrow-night-blue/package.json b/extensions/theme-tomorrow-night-blue/package.json index 4600cd591400b58f3b71a63cde2b9b5ce578faf6..9c58e2be3b0459f6af60fb61c79a4a20839881fc 100644 --- a/extensions/theme-tomorrow-night-blue/package.json +++ b/extensions/theme-tomorrow-night-blue/package.json @@ -1,5 +1,7 @@ { "name": "theme-tomorrow-night-blue", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/theme-tomorrow-night-blue/package.nls.json b/extensions/theme-tomorrow-night-blue/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..044df352eaf69eb051151d7b4b9d081368b4f535 --- /dev/null +++ b/extensions/theme-tomorrow-night-blue/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Tomorrow Night Blue Theme", + "description": "Tomorrow night blue theme for Visual Studio Code" +} \ No newline at end of file diff --git a/extensions/typescript/package.json b/extensions/typescript/package.json index 4fd18ae4e551c4422a46bb562ab85d4453510929..45bd40190792ec2fb54e5cd6323d4c16e380450f 100644 --- a/extensions/typescript/package.json +++ b/extensions/typescript/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "semver": "4.3.6", - "vscode-extension-telemetry": "^0.0.12", + "vscode-extension-telemetry": "^0.0.13", "vscode-nls": "^3.2.1" }, "devDependencies": { diff --git a/extensions/typescript/src/features/completionItemProvider.ts b/extensions/typescript/src/features/completionItemProvider.ts index 485f0bb2029fe7b3aeea9bdbc59798a16699ea21..293b2c9cac1659fb879182711f3c4c6349494b83 100644 --- a/extensions/typescript/src/features/completionItemProvider.ts +++ b/extensions/typescript/src/features/completionItemProvider.ts @@ -464,7 +464,8 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP let hasAddedParameters = false; const snippet = new SnippetString(); - snippet.appendText(item.label || item.insertText as string); + const methodName = detail.displayParts.find(part => part.kind === 'methodName'); + snippet.appendText((methodName && methodName.text) || item.label || item.insertText as string); snippet.appendText('('); let parenCount = 0; diff --git a/extensions/typescript/src/features/jsDocCompletionProvider.ts b/extensions/typescript/src/features/jsDocCompletionProvider.ts index ab515a9a07462645867b1e19ad512ff499355ac8..34963657b2858ba096a2162b41ed98125a0d2756 100644 --- a/extensions/typescript/src/features/jsDocCompletionProvider.ts +++ b/extensions/typescript/src/features/jsDocCompletionProvider.ts @@ -170,6 +170,12 @@ class TryCompleteJsDocCommand implements Command { if (!res || !res.body) { return undefined; } + // Workaround for #43619 + // docCommentTemplate previously returned undefined for empty jsdoc templates. + // TS 2.7 now returns a single line doc comment, which breaks indentation. + if (res.body.newText === '/** */') { + return undefined; + } return TryCompleteJsDocCommand.templateToSnippet(res.body.newText); }, () => undefined); } diff --git a/extensions/typescript/src/utils/projectStatus.ts b/extensions/typescript/src/utils/projectStatus.ts index 60e49c4715d211194a8a15e49d6cba993c26b41a..186c1437ced50131f7963f0cc5e7976b8f8602b8 100644 --- a/extensions/typescript/src/utils/projectStatus.ts +++ b/extensions/typescript/src/utils/projectStatus.ts @@ -33,7 +33,7 @@ class ExcludeHintItem { constructor( private readonly telemetryReporter: TelemetryReporter ) { - this._item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, Number.MIN_VALUE); + this._item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 98 /* to the right of typescript version status (99) */); this._item.command = 'js.projectStatus.command'; } diff --git a/extensions/typescript/src/utils/versionStatus.ts b/extensions/typescript/src/utils/versionStatus.ts index 6987145864689a3dee464e639d6d4bba4d2392af..07169f8046fe7fe5c41e5c7eee2a15ae7f4bd045 100644 --- a/extensions/typescript/src/utils/versionStatus.ts +++ b/extensions/typescript/src/utils/versionStatus.ts @@ -14,7 +14,7 @@ export default class VersionStatus { constructor( private readonly normalizePath: (resource: vscode.Uri) => string | null ) { - this.versionBarEntry = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, Number.MIN_VALUE); + this.versionBarEntry = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 99 /* to the right of editor status (100) */); this.onChangeEditorSub = vscode.window.onDidChangeActiveTextEditor(this.showHideStatus, this); } diff --git a/extensions/typescript/yarn.lock b/extensions/typescript/yarn.lock index 858a18169054292d70f4f1122de8a0415cf98389..bf3aa153c3e4e3c9a5f39d374fcbbcee749b0c10 100644 --- a/extensions/typescript/yarn.lock +++ b/extensions/typescript/yarn.lock @@ -36,9 +36,9 @@ semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -vscode-extension-telemetry@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.12.tgz#b3a93b72673bc485524770e0a32fcf493da07d85" +vscode-extension-telemetry@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.13.tgz#8a4438cbb0a9f9f8ad65479e4ec08683aa4de0f7" dependencies: applicationinsights "1.0.1" diff --git a/extensions/vb/package.json b/extensions/vb/package.json index a28fba94208a5238e6f5fc8843083ddc14f4530b..f0362290bd8d1f7e74d09873661a8bd76edcfdfb 100644 --- a/extensions/vb/package.json +++ b/extensions/vb/package.json @@ -1,5 +1,7 @@ { "name": "vb", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/vb/package.nls.json b/extensions/vb/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..32294f8f111fd46f4b29980c6af6a1c80ae6b8b4 --- /dev/null +++ b/extensions/vb/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "Visual Basic Language Features", + "description": "Provides Syntax highlighting, Folding, Bracket matching, Snippets and other language features in Visual Basic files" +} \ No newline at end of file diff --git a/extensions/xml/package.json b/extensions/xml/package.json index 8f8bd0d349afbf6514976603248989c68d529ceb..0c1b701bd49cf823b7deff5e5b808a73b7a7cbc9 100644 --- a/extensions/xml/package.json +++ b/extensions/xml/package.json @@ -1,5 +1,7 @@ { "name": "xml", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/xml/package.nls.json b/extensions/xml/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..769ed924b604a1bb655498a20645bad8b0913bca --- /dev/null +++ b/extensions/xml/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "XML Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in XML files" +} \ No newline at end of file diff --git a/extensions/yaml/package.json b/extensions/yaml/package.json index 16f3a4261c0a0bc63c9ced836a6c02c6e5551885..edcd5bb3e5f9bf7dffcf84273071713d8a2d952c 100644 --- a/extensions/yaml/package.json +++ b/extensions/yaml/package.json @@ -1,5 +1,7 @@ { "name": "yaml", + "displayName": "%displayName%", + "description": "%description%", "version": "0.1.0", "publisher": "vscode", "engines": { "vscode": "*" }, diff --git a/extensions/yaml/package.nls.json b/extensions/yaml/package.nls.json new file mode 100644 index 0000000000000000000000000000000000000000..d0848c498c14c428b82956241d08bc3484b9ff9a --- /dev/null +++ b/extensions/yaml/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "YAML Language Features", + "description": "Provides Syntax highlighting, Bracket matching and other language features in YAML files" +} \ No newline at end of file diff --git a/package.json b/package.json index 0c3e4a41e531ec705932b7af9873db6b565d186e..b366709dbfe253722a519792b935d0d73909071a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.21.0", - "distro": "4957472198ae7ca4a3ed49fd40d6d082c0bc592b", + "distro": "552e2dc44bb6ea0898101c84f40e4e30efcd4846", "author": { "name": "Microsoft Corporation" }, @@ -46,7 +46,7 @@ "vscode-debugprotocol": "1.25.0", "vscode-ripgrep": "^0.7.1-patch.1.5", "vscode-textmate": "^3.2.0", - "vscode-xterm": "3.2.0-beta2", + "vscode-xterm": "3.2.0-beta3", "yauzl": "2.8.0" }, "devDependencies": { diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 8bb4ed5e33162e96073946e87a89b2e011545f75..13951c0ec242060b2ba7b63aad77a77f0b9ae22f 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -251,41 +251,26 @@ export function addDisposableNonBubblingMouseOutListener(node: Element, handler: }); } -const _animationFrame = (function () { - let emulatedRequestAnimationFrame = (callback: (time: number) => void): number => { - return setTimeout(() => callback(new Date().getTime()), 0); - }; - let nativeRequestAnimationFrame: (callback: (time: number) => void) => number = - self.requestAnimationFrame - || (self).msRequestAnimationFrame - || (self).webkitRequestAnimationFrame - || (self).mozRequestAnimationFrame - || (self).oRequestAnimationFrame; - - - - let emulatedCancelAnimationFrame = (id: number) => { }; - let nativeCancelAnimationFrame: (id: number) => void = - self.cancelAnimationFrame || (self).cancelRequestAnimationFrame - || (self).msCancelAnimationFrame || (self).msCancelRequestAnimationFrame - || (self).webkitCancelAnimationFrame || (self).webkitCancelRequestAnimationFrame - || (self).mozCancelAnimationFrame || (self).mozCancelRequestAnimationFrame - || (self).oCancelAnimationFrame || (self).oCancelRequestAnimationFrame; - - let isNative = !!nativeRequestAnimationFrame; - let request = nativeRequestAnimationFrame || emulatedRequestAnimationFrame; - let cancel = nativeCancelAnimationFrame || emulatedCancelAnimationFrame; - - return { - isNative: isNative, - request: (callback: (time: number) => void): number => { - return request(callback); - }, - cancel: (id: number) => { - return cancel(id); - } - }; -})(); +interface IRequestAnimationFrame { + (callback: (time: number) => void): number; +} +let _animationFrame: IRequestAnimationFrame = null; +function doRequestAnimationFrame(callback: (time: number) => void): number { + if (!_animationFrame) { + const emulatedRequestAnimationFrame = (callback: (time: number) => void): number => { + return setTimeout(() => callback(new Date().getTime()), 0); + }; + _animationFrame = ( + self.requestAnimationFrame + || (self).msRequestAnimationFrame + || (self).webkitRequestAnimationFrame + || (self).mozRequestAnimationFrame + || (self).oRequestAnimationFrame + || emulatedRequestAnimationFrame + ); + } + return _animationFrame(callback); +} /** * Schedule a callback to be run at the next animation frame. @@ -375,7 +360,7 @@ class AnimationFrameQueueItem implements IDisposable { if (!animFrameRequested) { animFrameRequested = true; - _animationFrame.request(animationFrameRunner); + doRequestAnimationFrame(animationFrameRunner); } return item; @@ -662,7 +647,13 @@ export function createStyleSheet(container: HTMLElement = document.getElementsBy return style; } -const sharedStyle = createStyleSheet(); +let _sharedStyleSheet: HTMLStyleElement = null; +function getSharedStyleSheet(): HTMLStyleElement { + if (!_sharedStyleSheet) { + _sharedStyleSheet = createStyleSheet(); + } + return _sharedStyleSheet; +} function getDynamicStyleSheetRules(style: any) { if (style && style.sheet && style.sheet.rules) { @@ -676,7 +667,7 @@ function getDynamicStyleSheetRules(style: any) { return []; } -export function createCSSRule(selector: string, cssText: string, style: HTMLStyleElement = sharedStyle): void { +export function createCSSRule(selector: string, cssText: string, style: HTMLStyleElement = getSharedStyleSheet()): void { if (!style || !cssText) { return; } @@ -684,7 +675,7 @@ export function createCSSRule(selector: string, cssText: string, style: HTMLStyl (style.sheet).insertRule(selector + '{' + cssText + '}', 0); } -export function removeCSSRulesContainingSelector(ruleName: string, style = sharedStyle): void { +export function removeCSSRulesContainingSelector(ruleName: string, style: HTMLStyleElement = getSharedStyleSheet()): void { if (!style) { return; } @@ -699,7 +690,7 @@ export function removeCSSRulesContainingSelector(ruleName: string, style = share } for (let i = toDelete.length - 1; i >= 0; i--) { - style.sheet.deleteRule(toDelete[i]); + (style.sheet).deleteRule(toDelete[i]); } } diff --git a/src/vs/base/browser/htmlContentRenderer.ts b/src/vs/base/browser/htmlContentRenderer.ts index 49eb011276760c25e2eb100b2dc2f1eb7d257cd7..9ac3a8094869f82921f7f2c8cee3fadea905b8e0 100644 --- a/src/vs/base/browser/htmlContentRenderer.ts +++ b/src/vs/base/browser/htmlContentRenderer.ts @@ -9,8 +9,9 @@ import * as DOM from 'vs/base/browser/dom'; import { defaultGenerator } from 'vs/base/common/idGenerator'; import { escape } from 'vs/base/common/strings'; import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent'; -import { marked } from 'vs/base/common/marked/marked'; +import { marked, MarkedRenderer, MarkedOptions } from 'vs/base/common/marked/marked'; import { IMouseEvent } from 'vs/base/browser/mouseEvent'; +import { assign } from 'vs/base/common/objects'; export interface RenderOptions { className?: string; @@ -18,6 +19,7 @@ export interface RenderOptions { actionCallback?: (content: string, event?: IMouseEvent) => void; codeBlockRenderer?: (modeId: string, value: string) => Thenable; codeBlockRenderCallback?: () => void; + joinRendererConfiguration?: (renderer: MarkedRenderer) => MarkedOptions; } function createElement(options: RenderOptions): HTMLElement { @@ -108,7 +110,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions return text; } else { - return `${text}`; + return `${text}`; } }; renderer.paragraph = (text): string => { @@ -156,10 +158,19 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions }); } - element.innerHTML = marked(markdown.value, { + const markedOptions: MarkedOptions = { sanitize: true, renderer - }); + }; + + if (options.joinRendererConfiguration) { + const additionalMarkedOptions = options.joinRendererConfiguration(renderer); + if (additionalMarkedOptions) { + assign(markedOptions, additionalMarkedOptions); + } + } + + element.innerHTML = marked(markdown.value, markedOptions); signalInnerHTML(); return element; diff --git a/src/vs/base/browser/ui/button/button.css b/src/vs/base/browser/ui/button/button.css index 44a56a4e88ff0f6e4dff4c1c5ac648a8e0a834ba..3936ed596c1f96c81f35f50b08ff925b934775bc 100644 --- a/src/vs/base/browser/ui/button/button.css +++ b/src/vs/base/browser/ui/button/button.css @@ -20,11 +20,4 @@ .monaco-button.disabled { opacity: 0.4; cursor: default; -} - -/* Theming support */ - -.vs .monaco-text-button:focus, -.vs-dark .monaco-text-button:focus { - outline-color: rgba(255, 255, 255, .5); /* buttons have a blue color, so focus indication needs to be different */ } \ No newline at end of file diff --git a/src/vs/base/browser/ui/button/button.ts b/src/vs/base/browser/ui/button/button.ts index afe338fd0651a51e51591860b65aac5652d4ce74..d8883864b4b7c819f204182119f24859de8d2e35 100644 --- a/src/vs/base/browser/ui/button/button.ts +++ b/src/vs/base/browser/ui/button/button.ts @@ -43,6 +43,8 @@ export class Button { private _onDidClick = new Emitter(); readonly onDidClick: Event = this._onDidClick.event; + private focusTracker: DOM.IFocusTracker; + constructor(container: Builder, options?: IButtonOptions); constructor(container: HTMLElement, options?: IButtonOptions); constructor(container: any, options?: IButtonOptions) { @@ -86,10 +88,7 @@ export class Button { this.$el.on(DOM.EventType.MOUSE_OVER, (e) => { if (!this.$el.hasClass('disabled')) { - const hoverBackground = this.buttonHoverBackground ? this.buttonHoverBackground.toString() : null; - if (hoverBackground) { - this.$el.style('background-color', hoverBackground); - } + this.setHoverBackground(); } }); @@ -97,9 +96,21 @@ export class Button { this.applyStyles(); // restore standard styles }); + // Also set hover background when button is focused for feedback + this.focusTracker = DOM.trackFocus(this.$el.getHTMLElement()); + this.focusTracker.onDidFocus(() => this.setHoverBackground()); + this.focusTracker.onDidBlur(() => this.applyStyles()); // restore standard styles + this.applyStyles(); } + private setHoverBackground(): void { + const hoverBackground = this.buttonHoverBackground ? this.buttonHoverBackground.toString() : null; + if (hoverBackground) { + this.$el.style('background-color', hoverBackground); + } + } + style(styles: IButtonStyles): void { this.buttonForeground = styles.buttonForeground; this.buttonBackground = styles.buttonBackground; @@ -165,6 +176,9 @@ export class Button { if (this.$el) { this.$el.dispose(); this.$el = null; + + this.focusTracker.dispose(); + this.focusTracker = null; } this._onDidClick.dispose(); diff --git a/src/vs/base/browser/ui/dropdown/dropdown.css b/src/vs/base/browser/ui/dropdown/dropdown.css index f48750fa83bb6d94e6120057c7a423748d3781c1..46ec5d50b977066845a76cc77c738339dc3cdabf 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.css +++ b/src/vs/base/browser/ui/dropdown/dropdown.css @@ -29,8 +29,4 @@ .dropdown > .dropdown-action, .dropdown > .dropdown-action > .action-label { display: inline-block; -} - -.dropdown > .dropdown-label:not(:empty) { - padding: 0 .5em; } \ No newline at end of file diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts index b484ad53139f7e80727d2855786b096cca75ece3..630fde9f16996d6414d6c43f60739595464fa8d2 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.ts +++ b/src/vs/base/browser/ui/dropdown/dropdown.ts @@ -9,8 +9,8 @@ import 'vs/css!./dropdown'; import { Builder, $ } from 'vs/base/browser/builder'; import { TPromise } from 'vs/base/common/winjs.base'; import { Gesture, EventType as GestureEventType } from 'vs/base/browser/touch'; -import { ActionRunner, IAction } from 'vs/base/common/actions'; -import { IActionItem } from 'vs/base/browser/ui/actionbar/actionbar'; +import { ActionRunner, IAction, IActionRunner } from 'vs/base/common/actions'; +import { IActionItem, BaseActionItem, IActionItemProvider } from 'vs/base/browser/ui/actionbar/actionbar'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; import { IMenuOptions } from 'vs/base/browser/ui/menu/menu'; @@ -242,4 +242,83 @@ export class DropdownMenu extends BaseDropdown { public hide(): void { // noop } +} + +export class DropdownMenuActionItem extends BaseActionItem { + private menuActionsOrProvider: any; + private dropdownMenu: DropdownMenu; + private contextMenuProvider: IContextMenuProvider; + private actionItemProvider: IActionItemProvider; + private keybindings: (action: IAction) => ResolvedKeybinding; + private clazz: string; + + constructor(action: IAction, menuActions: IAction[], contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string); + constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string); + constructor(action: IAction, menuActionsOrProvider: any, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string) { + super(null, action); + + this.menuActionsOrProvider = menuActionsOrProvider; + this.contextMenuProvider = contextMenuProvider; + this.actionItemProvider = actionItemProvider; + this.actionRunner = actionRunner; + this.keybindings = keybindings; + this.clazz = clazz; + } + + public render(container: HTMLElement): void { + let labelRenderer: ILabelRenderer = (el: HTMLElement): IDisposable => { + this.builder = $('a.action-label').attr({ + tabIndex: '0', + role: 'button', + 'aria-haspopup': 'true', + title: this._action.label || '', + class: this.clazz + }); + + this.builder.appendTo(el); + + return null; + }; + + let options: IDropdownMenuOptions = { + contextMenuProvider: this.contextMenuProvider, + labelRenderer: labelRenderer + }; + + // Render the DropdownMenu around a simple action to toggle it + if (Array.isArray(this.menuActionsOrProvider)) { + options.actions = this.menuActionsOrProvider; + } else { + options.actionProvider = this.menuActionsOrProvider; + } + + this.dropdownMenu = new DropdownMenu(container, options); + + this.dropdownMenu.menuOptions = { + actionItemProvider: this.actionItemProvider, + actionRunner: this.actionRunner, + getKeyBinding: this.keybindings, + context: this._context + }; + } + + public setActionContext(newContext: any): void { + super.setActionContext(newContext); + + if (this.dropdownMenu) { + this.dropdownMenu.menuOptions.context = newContext; + } + } + + public show(): void { + if (this.dropdownMenu) { + this.dropdownMenu.show(); + } + } + + public dispose(): void { + this.dropdownMenu.dispose(); + + super.dispose(); + } } \ No newline at end of file diff --git a/src/vs/base/browser/ui/inputbox/inputBox.css b/src/vs/base/browser/ui/inputbox/inputBox.css index 646ce808b445417cd4eb956eb986e890fd5e0346..df0073541dfdef6a1f35a66b09f7ba14fe58ee34 100644 --- a/src/vs/base/browser/ui/inputbox/inputBox.css +++ b/src/vs/base/browser/ui/inputbox/inputBox.css @@ -99,6 +99,7 @@ line-height: 17px; min-height: 34px; margin-top: -1px; + word-wrap: break-word; } /* Action bar support */ diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index ed5bf0ceba4f901a86c226d3a173cc3d3e87f64c..c5fd25c7269b05a3818e4e31e66f1802d371e7c5 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -462,15 +462,18 @@ class MouseController implements IDisposable { } let reference = this.list.getFocus()[0]; - reference = reference === undefined ? this.list.getSelection()[0] : reference; + const selection = this.list.getSelection(); + reference = reference === undefined ? selection[0] : reference; + + const focus = e.index; + if (selection.every(s => s !== focus)) { + this.list.setFocus([focus]); + } if (this.multipleSelectionSupport && this.isSelectionRangeChangeEvent(e)) { return this.changeSelection(e, reference); } - const focus = e.index; - this.list.setFocus([focus]); - if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) { return this.changeSelection(e, reference); } @@ -1016,6 +1019,7 @@ export class List implements ISpliceable, IDisposable { if (styles.listFocusBackground) { content.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.focused { background-color: ${styles.listFocusBackground}; }`); + content.push(`.monaco-list.${this.idPrefix}:focus .monaco-list-row.focused:hover { background-color: ${styles.listFocusBackground}; }`); // overwrite :hover style in this case! } if (styles.listFocusForeground) { diff --git a/src/vs/base/browser/ui/progressbar/progressbar.ts b/src/vs/base/browser/ui/progressbar/progressbar.ts index 19e5657414caf1132d04b0f893ce9b7ef6e2a2fa..f07bd617f7a5ff6d2f458069497e5a33bac9c575 100644 --- a/src/vs/base/browser/ui/progressbar/progressbar.ts +++ b/src/vs/base/browser/ui/progressbar/progressbar.ts @@ -45,7 +45,9 @@ export class ProgressBar { private animationStopToken: ValueCallback; private progressBarBackground: Color; - constructor(builder: Builder, options?: IProgressBarOptions) { + constructor(container: Builder, options?: IProgressBarOptions); + constructor(container: HTMLElement, options?: IProgressBarOptions); + constructor(container: any, options?: IProgressBarOptions) { this.options = options || Object.create(null); mixin(this.options, defaultOpts, false); @@ -54,11 +56,13 @@ export class ProgressBar { this.progressBarBackground = this.options.progressBarBackground; - this.create(builder); + this.create(container); } - private create(parent: Builder): void { - parent.div({ 'class': css_progress_container }, (builder) => { + private create(container: Builder): void; + private create(container: HTMLElement): void; + private create(container: any): void { + $(container).div({ 'class': css_progress_container }, (builder) => { this.element = builder.clone(); builder.div({ 'class': css_progress_bit }).on([DOM.EventType.ANIMATION_START, DOM.EventType.ANIMATION_END, DOM.EventType.ANIMATION_ITERATION], (e: Event) => { diff --git a/src/vs/base/browser/ui/toolbar/toolbar.css b/src/vs/base/browser/ui/toolbar/toolbar.css index 4d91d3f5c9ef34bc2d2230d48fcc5a1f144333a2..6738aeb68fd5b4fe97b956ab78bbfc8301ab8810 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.css +++ b/src/vs/base/browser/ui/toolbar/toolbar.css @@ -3,10 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -.monaco-toolbar .dropdown > .dropdown-label:not(:empty) { - padding: 0; -} - .monaco-toolbar .toolbar-toggle-more { display: inline-block; padding: 0; diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts index 7250a642c0d9d1f57667bf09ad35907b968037a7..b195b4d11f38561084088e3a126ad12cf8f365ea 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.ts +++ b/src/vs/base/browser/ui/toolbar/toolbar.ts @@ -8,12 +8,10 @@ import 'vs/css!./toolbar'; import nls = require('vs/nls'); import { TPromise } from 'vs/base/common/winjs.base'; -import { IDisposable } from 'vs/base/common/lifecycle'; import { Builder, $ } from 'vs/base/browser/builder'; -import types = require('vs/base/common/types'); import { Action, IActionRunner, IAction } from 'vs/base/common/actions'; -import { ActionBar, ActionsOrientation, IActionItemProvider, BaseActionItem } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IContextMenuProvider, DropdownMenu, IActionProvider, ILabelRenderer, IDropdownMenuOptions } from 'vs/base/browser/ui/dropdown/dropdown'; +import { ActionBar, ActionsOrientation, IActionItemProvider } from 'vs/base/browser/ui/actionbar/actionbar'; +import { IContextMenuProvider, DropdownMenuActionItem } from 'vs/base/browser/ui/dropdown/dropdown'; import { ResolvedKeybinding } from 'vs/base/common/keyCodes'; export const CONTEXT = 'context.toolbar'; @@ -181,83 +179,4 @@ class ToggleMenuAction extends Action { public set menuActions(actions: IAction[]) { this._menuActions = actions; } -} - -export class DropdownMenuActionItem extends BaseActionItem { - private menuActionsOrProvider: any; - private dropdownMenu: DropdownMenu; - private contextMenuProvider: IContextMenuProvider; - private actionItemProvider: IActionItemProvider; - private keybindings: (action: IAction) => ResolvedKeybinding; - private clazz: string; - - constructor(action: IAction, menuActions: IAction[], contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string); - constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string); - constructor(action: IAction, menuActionsOrProvider: any, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string) { - super(null, action); - - this.menuActionsOrProvider = menuActionsOrProvider; - this.contextMenuProvider = contextMenuProvider; - this.actionItemProvider = actionItemProvider; - this.actionRunner = actionRunner; - this.keybindings = keybindings; - this.clazz = clazz; - } - - public render(container: HTMLElement): void { - let labelRenderer: ILabelRenderer = (el: HTMLElement): IDisposable => { - this.builder = $('a.action-label').attr({ - tabIndex: '0', - role: 'button', - 'aria-haspopup': 'true', - title: this._action.label || '', - class: this.clazz - }); - - this.builder.appendTo(el); - - return null; - }; - - let options: IDropdownMenuOptions = { - contextMenuProvider: this.contextMenuProvider, - labelRenderer: labelRenderer - }; - - // Render the DropdownMenu around a simple action to toggle it - if (types.isArray(this.menuActionsOrProvider)) { - options.actions = this.menuActionsOrProvider; - } else { - options.actionProvider = this.menuActionsOrProvider; - } - - this.dropdownMenu = new DropdownMenu(container, options); - - this.dropdownMenu.menuOptions = { - actionItemProvider: this.actionItemProvider, - actionRunner: this.actionRunner, - getKeyBinding: this.keybindings, - context: this._context - }; - } - - public setActionContext(newContext: any): void { - super.setActionContext(newContext); - - if (this.dropdownMenu) { - this.dropdownMenu.menuOptions.context = newContext; - } - } - - public show(): void { - if (this.dropdownMenu) { - this.dropdownMenu.show(); - } - } - - public dispose(): void { - this.dropdownMenu.dispose(); - - super.dispose(); - } } \ No newline at end of file diff --git a/src/vs/base/common/actions.ts b/src/vs/base/common/actions.ts index bf62845dc0dc51e612753c5136012d04b10bb609..691139b6c2f2d34d7a86fd9b81021ce1fee7b569 100644 --- a/src/vs/base/common/actions.ts +++ b/src/vs/base/common/actions.ts @@ -233,6 +233,7 @@ export class ActionRunner implements IActionRunner { } public dispose(): void { - // noop + this._onDidBeforeRun.dispose(); + this._onDidRun.dispose(); } } diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 93c6dda80c27b9a2f879c187b3bf7676f8e46f42..34247aa7796cfa36039611de21184eceebd88cca 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -6,7 +6,6 @@ 'use strict'; import * as errors from 'vs/base/common/errors'; -import * as platform from 'vs/base/common/platform'; import { Promise, TPromise, ValueCallback, ErrorCallback, ProgressCallback } from 'vs/base/common/winjs.base'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; @@ -525,7 +524,7 @@ export function setDisposableTimeout(handler: Function, timeout: number, ...args } export class TimeoutTimer extends Disposable { - private _token: platform.TimeoutToken; + private _token: number; constructor() { super(); @@ -539,14 +538,14 @@ export class TimeoutTimer extends Disposable { cancel(): void { if (this._token !== -1) { - platform.clearTimeout(this._token); + clearTimeout(this._token); this._token = -1; } } cancelAndSet(runner: () => void, timeout: number): void { this.cancel(); - this._token = platform.setTimeout(() => { + this._token = setTimeout(() => { this._token = -1; runner(); }, timeout); @@ -557,7 +556,7 @@ export class TimeoutTimer extends Disposable { // timer is already set return; } - this._token = platform.setTimeout(() => { + this._token = setTimeout(() => { this._token = -1; runner(); }, timeout); @@ -566,7 +565,7 @@ export class TimeoutTimer extends Disposable { export class IntervalTimer extends Disposable { - private _token: platform.IntervalToken; + private _token: number; constructor() { super(); @@ -580,14 +579,14 @@ export class IntervalTimer extends Disposable { cancel(): void { if (this._token !== -1) { - platform.clearInterval(this._token); + clearInterval(this._token); this._token = -1; } } cancelAndSet(runner: () => void, interval: number): void { this.cancel(); - this._token = platform.setInterval(() => { + this._token = setInterval(() => { runner(); }, interval); } @@ -595,7 +594,7 @@ export class IntervalTimer extends Disposable { export class RunOnceScheduler { - private timeoutToken: platform.TimeoutToken; + private timeoutToken: number; private runner: () => void; private timeout: number; private timeoutHandler: () => void; @@ -620,7 +619,7 @@ export class RunOnceScheduler { */ cancel(): void { if (this.isScheduled()) { - platform.clearTimeout(this.timeoutToken); + clearTimeout(this.timeoutToken); this.timeoutToken = -1; } } @@ -630,7 +629,7 @@ export class RunOnceScheduler { */ schedule(delay = this.timeout): void { this.cancel(); - this.timeoutToken = platform.setTimeout(this.timeoutHandler, delay); + this.timeoutToken = setTimeout(this.timeoutHandler, delay); } /** diff --git a/src/vs/base/common/diagnostics.ts b/src/vs/base/common/diagnostics.ts index 66c522cb3a7d3ecb01ca75e751e3417fd196c578..7ad7daa18d43b2780bebf9987d0ca616068bc68b 100644 --- a/src/vs/base/common/diagnostics.ts +++ b/src/vs/base/common/diagnostics.ts @@ -62,7 +62,7 @@ export function register(what: string, fn: Function): (...args: any[]) => void { const thisArguments = allArgs.shift(); fn.apply(fn, thisArguments); if (allArgs.length > 0) { - Platform.setTimeout(doIt, 500); + setTimeout(doIt, 500); } }; doIt(); diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index 1d3502e48017094bbf19a2a6c8033b8bb8cfd03a..46b7f230ff80d3c03c6159d5c920eb9b2b996ad6 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -4,10 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import platform = require('vs/base/common/platform'); -import types = require('vs/base/common/types'); import { IAction } from 'vs/base/common/actions'; -import Severity from 'vs/base/common/severity'; import { TPromise, IPromiseError, IPromiseErrorDetail } from 'vs/base/common/winjs.base'; // ------ BEGIN Hook up error listeners to winjs promises @@ -79,7 +76,7 @@ export class ErrorHandler { this.listeners = []; this.unexpectedErrorHandler = function (e: any) { - platform.setTimeout(() => { + setTimeout(() => { if (e.stack) { throw new Error(e.message + '\n\n' + e.stack); } @@ -238,19 +235,22 @@ export function disposed(what: string): Error { } export interface IErrorOptions { - severity?: Severity; actions?: IAction[]; } -export function create(message: string, options: IErrorOptions = {}): Error { - let result = new Error(message); +export interface IErrorWithActions { + actions?: IAction[]; +} - if (types.isNumber(options.severity)) { - (result).severity = options.severity; - } +export function isErrorWithActions(obj: any): obj is IErrorWithActions { + return obj instanceof Error && Array.isArray((obj as IErrorWithActions).actions); +} + +export function create(message: string, options: IErrorOptions = Object.create(null)): Error & IErrorWithActions { + const result = new Error(message); if (options.actions) { - (result).actions = options.actions; + (result).actions = options.actions; } return result; diff --git a/src/vs/base/common/performance.js b/src/vs/base/common/performance.js index a7ebc4c627c9fe573f1d45f94a2a8c8d5e18ea27..a2646638ed05fd4f12b3af5c88d5bcb95d1e6ffc 100644 --- a/src/vs/base/common/performance.js +++ b/src/vs/base/common/performance.js @@ -11,7 +11,6 @@ // Because we want both instances to use the same perf-data // we store them globally // stores data as 'type','name','startTime','duration' -global._performanceEntries = global._performanceEntries || []; if (typeof define !== "function" && typeof module === "object" && typeof module.exports === "object") { // this is commonjs, fake amd @@ -23,6 +22,12 @@ if (typeof define !== "function" && typeof module === "object" && typeof module. define([], function () { + var _global = this; + if (typeof global !== 'undefined') { + _global = global; + } + _global._performanceEntries = _global._performanceEntries || []; + // const _now = global.performance && performance.now ? performance.now : Date.now const _now = Date.now; diff --git a/src/vs/base/common/platform.ts b/src/vs/base/common/platform.ts index 0306de78a920424a4760a89fdbd9df9f17c6e3a3..5bee1d98f35e1a39a67f65b85f1f92e18ce37cd1 100644 --- a/src/vs/base/common/platform.ts +++ b/src/vs/base/common/platform.ts @@ -4,12 +4,9 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -// --- THIS FILE IS TEMPORARY UNTIL ENV.TS IS CLEANED UP. IT CAN SAFELY BE USED IN ALL TARGET EXECUTION ENVIRONMENTS (node & dom) --- - let _isWindows = false; let _isMacintosh = false; let _isLinux = false; -let _isRootUser = false; let _isNative = false; let _isWeb = false; let _locale: string = undefined; @@ -48,12 +45,11 @@ if (typeof process === 'object') { _isWindows = (process.platform === 'win32'); _isMacintosh = (process.platform === 'darwin'); _isLinux = (process.platform === 'linux'); - _isRootUser = !_isWindows && (process.getuid() === 0); - let rawNlsConfig = process.env['VSCODE_NLS_CONFIG']; + const rawNlsConfig = process.env['VSCODE_NLS_CONFIG']; if (rawNlsConfig) { try { - let nlsConfig: NLSConfig = JSON.parse(rawNlsConfig); - let resolved = nlsConfig.availableLanguages['*']; + const nlsConfig: NLSConfig = JSON.parse(rawNlsConfig); + const resolved = nlsConfig.availableLanguages['*']; _locale = nlsConfig.locale; // VSCode's default language is 'en' _language = resolved ? resolved : LANGUAGE_DEFAULT; @@ -63,7 +59,7 @@ if (typeof process === 'object') { } _isNative = true; } else if (typeof navigator === 'object') { - let userAgent = navigator.userAgent; + const userAgent = navigator.userAgent; _isWindows = userAgent.indexOf('Windows') >= 0; _isMacintosh = userAgent.indexOf('Macintosh') >= 0; _isLinux = userAgent.indexOf('Linux') >= 0; @@ -93,11 +89,14 @@ if (_isNative) { export const isWindows = _isWindows; export const isMacintosh = _isMacintosh; export const isLinux = _isLinux; -export const isRootUser = _isRootUser; export const isNative = _isNative; export const isWeb = _isWeb; export const platform = _platform; +export function isRootUser(): boolean { + return _isNative && !_isWindows && (process.getuid() === 0); +} + /** * The language used for the user interface. The format of * the string is all lower case (e.g. zh-tw for Traditional @@ -117,30 +116,9 @@ export const locale = _locale; */ export const translationsConfigFile = _translationsConfigFile; -export interface TimeoutToken { -} - -export interface IntervalToken { -} - -interface IGlobals { - Worker?: any; - setTimeout(callback: (...args: any[]) => void, delay: number, ...args: any[]): TimeoutToken; - clearTimeout(token: TimeoutToken): void; - - setInterval(callback: (...args: any[]) => void, delay: number, ...args: any[]): IntervalToken; - clearInterval(token: IntervalToken): void; -} - -const _globals = (typeof self === 'object' ? self : global); +const _globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {} as any); export const globals: any = _globals; -export const setTimeout = _globals.setTimeout.bind(_globals); -export const clearTimeout = _globals.clearTimeout.bind(_globals); - -export const setInterval = _globals.setInterval.bind(_globals); -export const clearInterval = _globals.clearInterval.bind(_globals); - export const enum OperatingSystem { Windows = 1, Macintosh = 2, diff --git a/src/vs/base/common/winjs.base.raw.js b/src/vs/base/common/winjs.base.raw.js index 0ffe0bc96ccdfdb9d9ec8fa1ae50e19b06fff173..d827548303e3092ab26a5ac75904e219c3c5a899 100644 --- a/src/vs/base/common/winjs.base.raw.js +++ b/src/vs/base/common/winjs.base.raw.js @@ -7,7 +7,7 @@ */ (function() { -var _modules = {}; +var _modules = Object.create(null);//{}; _modules["WinJS/Core/_WinJS"] = {}; var _winjs = function(moduleId, deps, factory) { @@ -64,11 +64,24 @@ _winjs("WinJS/Core/_BaseCoreUtils", ["WinJS/Core/_Global"], function baseCoreUti return func; } + var actualSetImmediate = null; + return { hasWinRT: hasWinRT, markSupportedForProcessing: markSupportedForProcessing, - _setImmediate: _Global.setImmediate ? _Global.setImmediate.bind(_Global) : function (handler) { - _Global.setTimeout(handler, 0); + _setImmediate: function (callback) { + // BEGIN monaco change + if (actualSetImmediate === null) { + if (_Global.setImmediate) { + actualSetImmediate = _Global.setImmediate.bind(_Global); + } else if (typeof process !== 'undefined' && typeof process.nextTick === 'function') { + actualSetImmediate = process.nextTick.bind(process); + } else { + actualSetImmediate = _Global.setTimeout.bind(_Global); + } + } + actualSetImmediate(callback); + // END monaco change } }; }); @@ -2057,15 +2070,9 @@ _winjs("WinJS/Promise", ["WinJS/Core/_Base","WinJS/Promise/_StateMachine"], func var exported = _modules["WinJS/Core/_WinJS"]; if (typeof exports === 'undefined' && typeof define === 'function' && define.amd) { - define(exported); + define([], exported); } else { module.exports = exported; } -if (typeof process !== 'undefined' && typeof process.nextTick === 'function') { - _modules["WinJS/Core/_BaseCoreUtils"]._setImmediate = function(handler) { - return process.nextTick(handler); - }; -} - -})(); \ No newline at end of file +})(); diff --git a/src/vs/base/common/worker/simpleWorker.ts b/src/vs/base/common/worker/simpleWorker.ts index 415660a12fe5d8d5ab9c2873ad358075c92802b1..ed06f5e3d63d1a78ea01ff86f50843d02d9f61d0 100644 --- a/src/vs/base/common/worker/simpleWorker.ts +++ b/src/vs/base/common/worker/simpleWorker.ts @@ -339,13 +339,6 @@ export class SimpleWorkerServer { delete loaderConfig.paths['vs']; } } - let nlsConfig = loaderConfig['vs/nls']; - // We need to have pseudo translation - if (nlsConfig && nlsConfig.pseudo) { - require(['vs/nls'], function (nlsPlugin) { - nlsPlugin.setPseudoTranslation(nlsConfig.pseudo); - }); - } // Since this is in a web worker, enable catching errors loaderConfig.catchError = true; diff --git a/src/vs/base/node/pfs.ts b/src/vs/base/node/pfs.ts index 5fdb5cb02642f44ac7dd3f58eab961c0df94c101..c16be6ca58d2b893f27f1e472b612e3a241824d8 100644 --- a/src/vs/base/node/pfs.ts +++ b/src/vs/base/node/pfs.ts @@ -161,8 +161,14 @@ export function fileExists(path: string): TPromise { /** * Deletes a path from disk. */ -const tmpDir = os.tmpdir(); -export function del(path: string, tmp = tmpDir): TPromise { +let _tmpDir: string = null; +function getTmpDir(): string { + if (!_tmpDir) { + _tmpDir = os.tmpdir(); + } + return _tmpDir; +} +export function del(path: string, tmp = getTmpDir()): TPromise { return nfcall(extfs.del, path, tmp); } @@ -185,4 +191,4 @@ export function whenDeleted(path: string): TPromise { } }, 1000); }); -} \ No newline at end of file +} diff --git a/src/vs/base/node/processes.ts b/src/vs/base/node/processes.ts index 7aa6034bba649905403e39f427ff65b295a8df98..32ee843b5aef413499d092bb92c1b3c1b3ba903e 100644 --- a/src/vs/base/node/processes.ts +++ b/src/vs/base/node/processes.ts @@ -6,9 +6,6 @@ import path = require('path'); import * as cp from 'child_process'; -import ChildProcess = cp.ChildProcess; -import exec = cp.exec; -import spawn = cp.spawn; import { fork } from 'vs/base/node/stdFork'; import nls = require('vs/nls'); import { PPromise, TPromise, TValueCallback, TProgressCallback, ErrorCallback } from 'vs/base/common/winjs.base'; @@ -40,7 +37,7 @@ function getWindowsCode(status: number): TerminateResponseCode { } } -export function terminateProcess(process: ChildProcess, cwd?: string): TerminateResponse { +export function terminateProcess(process: cp.ChildProcess, cwd?: string): TerminateResponse { if (Platform.isWindows) { try { let options: any = { @@ -80,8 +77,8 @@ export abstract class AbstractProcess { private options: CommandOptions | ForkOptions; protected shell: boolean; - private childProcess: ChildProcess; - protected childProcessPromise: TPromise; + private childProcess: cp.ChildProcess; + protected childProcessPromise: TPromise; protected terminateRequested: boolean; private static WellKnowCommands: IStringDictionary = { @@ -173,7 +170,7 @@ export abstract class AbstractProcess { if (this.args) { cmd = cmd + ' ' + this.args.join(' '); } - this.childProcess = exec(cmd, this.options, (error, stdout, stderr) => { + this.childProcess = cp.exec(cmd, this.options, (error, stdout, stderr) => { this.childProcess = null; let err: any = error; // This is tricky since executing a command shell reports error back in case the executed command return an @@ -186,7 +183,7 @@ export abstract class AbstractProcess { } }); } else { - let childProcess: ChildProcess = null; + let childProcess: cp.ChildProcess = null; let closeHandler = (data: any) => { this.childProcess = null; this.childProcessPromise = null; @@ -231,13 +228,13 @@ export abstract class AbstractProcess { } else { args.push(commandLine.join(' ')); } - childProcess = spawn(getWindowsShell(), args, options); + childProcess = cp.spawn(getWindowsShell(), args, options); } else { if (this.cmd) { - childProcess = spawn(this.cmd, this.args, this.options); + childProcess = cp.spawn(this.cmd, this.args, this.options); } else if (this.module) { - this.childProcessPromise = new TPromise((c, e, p) => { - fork(this.module, this.args, this.options, (error: any, childProcess: ChildProcess) => { + this.childProcessPromise = new TPromise((c, e, p) => { + fork(this.module, this.args, this.options, (error: any, childProcess: cp.ChildProcess) => { if (error) { e(error); ee({ terminated: this.terminateRequested, error: error }); @@ -269,7 +266,7 @@ export abstract class AbstractProcess { } protected abstract handleExec(cc: TValueCallback, pp: TProgressCallback, error: Error, stdout: Buffer, stderr: Buffer): void; - protected abstract handleSpawn(childProcess: ChildProcess, cc: TValueCallback, pp: TProgressCallback, ee: ErrorCallback, sync: boolean): void; + protected abstract handleSpawn(childProcess: cp.ChildProcess, cc: TValueCallback, pp: TProgressCallback, ee: ErrorCallback, sync: boolean): void; protected handleClose(data: any, cc: TValueCallback, pp: TProgressCallback, ee: ErrorCallback): void { // Default is to do nothing. @@ -315,7 +312,7 @@ export abstract class AbstractProcess { if (!this.shell || !Platform.isWindows) { c(false); } - let cmdShell = spawn(getWindowsShell(), ['/s', '/c']); + let cmdShell = cp.spawn(getWindowsShell(), ['/s', '/c']); cmdShell.on('error', (error: Error) => { c(true); }); @@ -353,7 +350,7 @@ export class LineProcess extends AbstractProcess { cc({ terminated: this.terminateRequested, error: error }); } - protected handleSpawn(childProcess: ChildProcess, cc: TValueCallback, pp: TProgressCallback, ee: ErrorCallback, sync: boolean): void { + protected handleSpawn(childProcess: cp.ChildProcess, cc: TValueCallback, pp: TProgressCallback, ee: ErrorCallback, sync: boolean): void { this.stdoutLineDecoder = new LineDecoder(); this.stderrLineDecoder = new LineDecoder(); childProcess.stdout.on('data', (data: Buffer) => { @@ -384,7 +381,7 @@ export interface IQueuedSender { // queue is free again to consume messages. // On Windows we always wait for the send() method to return before sending the next message // to workaround https://github.com/nodejs/node/issues/7657 (IPC can freeze process) -export function createQueuedSender(childProcess: ChildProcess | NodeJS.Process): IQueuedSender { +export function createQueuedSender(childProcess: cp.ChildProcess | NodeJS.Process): IQueuedSender { let msgQueue: string[] = []; let useQueue = false; diff --git a/src/vs/code/electron-browser/issue/issueReporter.js b/src/vs/code/electron-browser/issue/issueReporter.js index 07e8b8663d74782c736f59e39e3f4acdc035320d..01d097357b0e3684ebaecca915680cc838d9512b 100644 --- a/src/vs/code/electron-browser/issue/issueReporter.js +++ b/src/vs/code/electron-browser/issue/issueReporter.js @@ -146,6 +146,8 @@ function main() { // In the bundled version the nls plugin is packaged with the loader so the NLS Plugins // loads as soon as the loader loads. To be able to have pseudo translation createScript(rootUrl + '/vs/loader.js', function () { + var define = global.define; + global.define = undefined; define('fs', ['original-fs'], function (originalFS) { return originalFS; }); // replace the patched electron fs with the original node fs for all AMD code window.MonacoEnvironment = {}; diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcess.js b/src/vs/code/electron-browser/sharedProcess/sharedProcess.js index b4e968d799012a9a4c956d1201ea02eea682088f..ffc640718d0a13b7db1d9e6300c9dc9f75578bc3 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcess.js +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcess.js @@ -131,6 +131,8 @@ function main() { // In the bundled version the nls plugin is packaged with the loader so the NLS Plugins // loads as soon as the loader loads. To be able to have pseudo translation createScript(rootUrl + '/vs/loader.js', function () { + var define = global.define; + global.define = undefined; define('fs', ['original-fs'], function (originalFS) { return originalFS; }); // replace the patched electron fs with the original node fs for all AMD code window.MonacoEnvironment = {}; diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index baf9a0bbe85002f9c4b08fb13da85ee6c449e294..91e4a7b0ea5b38ea0ab2d612fc8c23b81df0ef66 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -30,8 +30,6 @@ import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProper import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc'; import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService'; import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; -import { IChoiceService } from 'vs/platform/message/common/message'; -import { ChoiceChannelClient } from 'vs/platform/message/common/messageIpc'; import { IWindowsService } from 'vs/platform/windows/common/windows'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; import { ipcRenderer } from 'electron'; @@ -43,6 +41,8 @@ import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log import { LocalizationsService } from 'vs/platform/localizations/node/localizations'; import { ILocalizationsService } from 'vs/platform/localizations/common/localizations'; import { LocalizationsChannel } from 'vs/platform/localizations/common/localizationsIpc'; +import { IChoiceService } from 'vs/platform/dialogs/common/dialogs'; +import { ChoiceChannelClient } from 'vs/platform/dialogs/common/choiceIpc'; export interface ISharedProcessConfiguration { readonly machineId: string; diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 05b622cab01b83952ad6270e501c43514e46212c..3ea85cd48ee648bd49b174ba7f2ae0d9d724b8c2 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -47,9 +47,9 @@ import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; import { printDiagnostics } from 'vs/code/electron-main/diagnostics'; import { BufferLogService } from 'vs/platform/log/common/bufferLog'; import { uploadLogs } from 'vs/code/electron-main/logUploader'; -import { IChoiceService } from 'vs/platform/message/common/message'; -import { ChoiceCliService } from 'vs/platform/message/node/messageCli'; import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; +import { IChoiceService } from 'vs/platform/dialogs/common/dialogs'; +import { ChoiceCliService } from 'vs/platform/dialogs/node/choiceCli'; function createServices(args: ParsedArgs, bufferLogService: BufferLogService): IInstantiationService { const services = new ServiceCollection(); diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index dbe69eb291edc2b652bdd750ce94b0e14b2ed377..8834ec853d8f0e744ed2c6826b6712a20bd72709 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -837,7 +837,7 @@ export class CodeWindow implements ICodeWindow { this._win.setAutoHideMenuBar(true); if (notify) { - this.send('vscode:showInfoMessage', nls.localize('hiddenMenuBar', "You can still access the menu bar by pressing the **Alt** key.")); + this.send('vscode:showInfoMessage', nls.localize('hiddenMenuBar', "You can still access the menu bar by pressing the Alt-key.")); } break; diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index a01bebe6cf72fd922a3a7e70cb75bd66a1faf5b0..6fd9ddcafd91664ce7f291f34b9f704fbe8dee52 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -30,14 +30,14 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { ConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; import { mkdirp, writeFile } from 'vs/base/node/pfs'; -import { IChoiceService } from 'vs/platform/message/common/message'; -import { ChoiceCliService } from 'vs/platform/message/node/messageCli'; import { getBaseLabel } from 'vs/base/common/labels'; import { IStateService } from 'vs/platform/state/common/state'; import { StateService } from 'vs/platform/state/node/stateService'; import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; import { ILogService, getLogLevel } from 'vs/platform/log/common/log'; import { isPromiseCanceledError } from 'vs/base/common/errors'; +import { IChoiceService } from 'vs/platform/dialogs/common/dialogs'; +import { ChoiceCliService } from 'vs/platform/dialogs/node/choiceCli'; const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id); diff --git a/src/vs/css.js b/src/vs/css.js index ae281dacb7bbf3c47003063331a0e6c9bf5f95ec..4a2d5a4d299726d02cf04edacf2e7350a3e21d51 100644 --- a/src/vs/css.js +++ b/src/vs/css.js @@ -20,7 +20,7 @@ var CSSLoaderPlugin; * Known issue: * - In IE there is no way to know if the CSS file loaded successfully or not. */ - var BrowserCSSLoader = (function () { + var BrowserCSSLoader = /** @class */ (function () { function BrowserCSSLoader() { this._pendingLoads = 0; } @@ -93,7 +93,7 @@ var CSSLoaderPlugin; return BrowserCSSLoader; }()); // ------------------------------ Finally, the plugin - var CSSPlugin = (function () { + var CSSPlugin = /** @class */ (function () { function CSSPlugin() { this._cssLoader = new BrowserCSSLoader(); } @@ -110,12 +110,5 @@ var CSSLoaderPlugin; return CSSPlugin; }()); CSSLoaderPlugin.CSSPlugin = CSSPlugin; - function init() { - define('vs/css', new CSSPlugin()); - } - CSSLoaderPlugin.init = init; - ; - if (typeof doNotInitLoader === 'undefined') { - init(); - } + define('vs/css', new CSSPlugin()); })(CSSLoaderPlugin || (CSSLoaderPlugin = {})); diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index ec5c18bc4476a507eafccf896928dcc721fc45c9..97a88a711a1eec33b148ea1e879926041752049f 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -11,7 +11,6 @@ import { RunOnceScheduler } from 'vs/base/common/async'; import { Disposable } from 'vs/base/common/lifecycle'; import * as objects from 'vs/base/common/objects'; import * as dom from 'vs/base/browser/dom'; -import Severity from 'vs/base/common/severity'; import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; import { ISashEvent, IVerticalSashLayoutProvider, Sash } from 'vs/base/browser/ui/sash/sash'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -41,9 +40,9 @@ import { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceCompute import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { DiffReview } from 'vs/editor/browser/widget/diffReview'; import URI from 'vs/base/common/uri'; -import { IMessageService } from 'vs/platform/message/common/message'; import { IStringBuilder, createStringBuilder } from 'vs/editor/common/core/stringBuilder'; import { IModelDeltaDecoration, IModelDecorationsChangeAccessor, ITextModel } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; interface IEditorDiffDecorations { decorations: IModelDeltaDecoration[]; @@ -192,7 +191,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE protected _contextKeyService: IContextKeyService; private _codeEditorService: ICodeEditorService; private _themeService: IThemeService; - private readonly _messageService: IMessageService; + private _notificationService: INotificationService; private _reviewPane: DiffReview; @@ -204,7 +203,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE @IInstantiationService instantiationService: IInstantiationService, @ICodeEditorService codeEditorService: ICodeEditorService, @IThemeService themeService: IThemeService, - @IMessageService messageService: IMessageService + @INotificationService notificationService: INotificationService ) { super(); @@ -213,7 +212,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._contextKeyService = contextKeyService.createScoped(domElement); this._contextKeyService.createKey('isInDiffEditor', true); this._themeService = themeService; - this._messageService = messageService; + this._notificationService = notificationService; this.id = (++DIFF_EDITOR_ID); @@ -853,7 +852,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE ) { this._lastOriginalWarning = currentOriginalModel.uri; this._lastModifiedWarning = currentModifiedModel.uri; - this._messageService.show(Severity.Warning, nls.localize("diff.tooLarge", "Cannot compare files because one file is too large.")); + this._notificationService.warn(nls.localize("diff.tooLarge", "Cannot compare files because one file is too large.")); } return; } diff --git a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts index e1761f3b3e6ab31923e0a76976d23e7dd5c4e461..68a61cec0249a1460d5e79c2e42fccd81545dc0b 100644 --- a/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts +++ b/src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts @@ -15,7 +15,7 @@ import { IConfigurationChangedEvent, IEditorOptions, IDiffEditorOptions } from ' import { IThemeService } from 'vs/platform/theme/common/themeService'; import { DiffEditorWidget } from 'vs/editor/browser/widget/diffEditorWidget'; import { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService'; -import { IMessageService } from 'vs/platform/message/common/message'; +import { INotificationService } from 'vs/platform/notification/common/notification'; export class EmbeddedCodeEditorWidget extends CodeEditor { @@ -72,9 +72,9 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget { @IInstantiationService instantiationService: IInstantiationService, @ICodeEditorService codeEditorService: ICodeEditorService, @IThemeService themeService: IThemeService, - @IMessageService messageService: IMessageService + @INotificationService notificationService: INotificationService ) { - super(domElement, parentEditor.getRawConfiguration(), editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, messageService); + super(domElement, parentEditor.getRawConfiguration(), editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService); this._parentEditor = parentEditor; this._overwriteOptions = options; diff --git a/src/vs/editor/common/core/stringBuilder.ts b/src/vs/editor/common/core/stringBuilder.ts index ff9ec2bedfc88b62a537d5fa3c9b465cf70e517e..e49d40e4d63305032e3ae40f205f4950f1b74654 100644 --- a/src/vs/editor/common/core/stringBuilder.ts +++ b/src/vs/editor/common/core/stringBuilder.ts @@ -21,7 +21,7 @@ export interface IStringBuilder { export let createStringBuilder: (capacity: number) => IStringBuilder; -if ((self).TextDecoder) { +if (typeof TextDecoder !== 'undefined') { createStringBuilder = (capacity) => new StringBuilder(capacity); } else { createStringBuilder = (capacity) => new CompatStringBuilder(); diff --git a/src/vs/editor/common/services/editorSimpleWorker.ts b/src/vs/editor/common/services/editorSimpleWorker.ts index 39a9e6a928076a39eea014c46256fb2dcc6aa86b..cd669a4a94b4e88ed6c049f9f47cd24277afc7c5 100644 --- a/src/vs/editor/common/services/editorSimpleWorker.ts +++ b/src/vs/editor/common/services/editorSimpleWorker.ts @@ -21,6 +21,7 @@ import { BasicInplaceReplace } from 'vs/editor/common/modes/supports/inplaceRepl import { getWordAtText, ensureValidWordDefinition } from 'vs/editor/common/model/wordHelper'; import { createMonacoBaseAPI } from 'vs/editor/common/standalone/standaloneBase'; import { IWordAtPosition, EndOfLineSequence } from 'vs/editor/common/model'; +import { globals } from 'vs/base/common/platform'; export interface IMirrorModel { readonly uri: URI; @@ -567,8 +568,7 @@ export function create(): IRequestHandler { return new EditorSimpleWorkerImpl(); } -var global: any = self; -let isWebWorker = (typeof global.importScripts === 'function'); -if (isWebWorker) { - global.monaco = createMonacoBaseAPI(); +if (typeof importScripts === 'function') { + // Running in a web worker + globals.monaco = createMonacoBaseAPI(); } diff --git a/src/vs/editor/contrib/codelens/codelensController.ts b/src/vs/editor/contrib/codelens/codelensController.ts index 693ecec734c0117edff8ecb9cce3d52ffbd39e5b..f3e26373bc6dd90157abc7e4a8f956dd9f44618b 100644 --- a/src/vs/editor/contrib/codelens/codelensController.ts +++ b/src/vs/editor/contrib/codelens/codelensController.ts @@ -10,7 +10,6 @@ import { onUnexpectedError } from 'vs/base/common/errors'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { TPromise } from 'vs/base/common/winjs.base'; import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IMessageService } from 'vs/platform/message/common/message'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { CodeLensProviderRegistry, ICodeLensSymbol } from 'vs/editor/common/modes'; import * as editorBrowser from 'vs/editor/browser/editorBrowser'; @@ -19,6 +18,7 @@ import { ICodeLensData, getCodeLensData } from './codelens'; import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions'; import { CodeLens, CodeLensHelper } from 'vs/editor/contrib/codelens/codelensWidget'; import { IModelDecorationsChangeAccessor } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; export class CodeLensContribution implements editorCommon.IEditorContribution { @@ -37,7 +37,7 @@ export class CodeLensContribution implements editorCommon.IEditorContribution { constructor( private _editor: editorBrowser.ICodeEditor, @ICommandService private readonly _commandService: ICommandService, - @IMessageService private readonly _messageService: IMessageService + @INotificationService private readonly _notificationService: INotificationService ) { this._isEnabled = this._editor.getConfiguration().contribInfo.codeLens; @@ -238,7 +238,7 @@ export class CodeLensContribution implements editorCommon.IEditorContribution { groupsIndex++; codeLensIndex++; } else { - this._lenses.splice(codeLensIndex, 0, new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._messageService, () => this._detectVisibleLenses.schedule())); + this._lenses.splice(codeLensIndex, 0, new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._notificationService, () => this._detectVisibleLenses.schedule())); codeLensIndex++; groupsIndex++; } @@ -252,7 +252,7 @@ export class CodeLensContribution implements editorCommon.IEditorContribution { // Create extra symbols while (groupsIndex < groups.length) { - this._lenses.push(new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._messageService, () => this._detectVisibleLenses.schedule())); + this._lenses.push(new CodeLens(groups[groupsIndex], this._editor, helper, accessor, this._commandService, this._notificationService, () => this._detectVisibleLenses.schedule())); groupsIndex++; } diff --git a/src/vs/editor/contrib/codelens/codelensWidget.ts b/src/vs/editor/contrib/codelens/codelensWidget.ts index 9954a4540964efb4a3c5396734da268cadfaeb19..2bd92ebaa682b17fd0f342302e36d6e8bb7f609c 100644 --- a/src/vs/editor/contrib/codelens/codelensWidget.ts +++ b/src/vs/editor/contrib/codelens/codelensWidget.ts @@ -7,11 +7,9 @@ import 'vs/css!./codelensWidget'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import Severity from 'vs/base/common/severity'; import { format, escape } from 'vs/base/common/strings'; import * as dom from 'vs/base/browser/dom'; import { ICommandService } from 'vs/platform/commands/common/commands'; -import { IMessageService } from 'vs/platform/message/common/message'; import { Range } from 'vs/editor/common/core/range'; import { ICodeLensSymbol, Command } from 'vs/editor/common/modes'; import * as editorBrowser from 'vs/editor/browser/editorBrowser'; @@ -21,6 +19,7 @@ import { editorCodeLensForeground } from 'vs/editor/common/view/editorColorRegis import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; import { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegistry'; import { IModelDeltaDecoration, IModelDecorationsChangeAccessor, ITextModel } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; class CodeLensViewZone implements editorBrowser.IViewZone { @@ -72,7 +71,7 @@ class CodeLensContentWidget implements editorBrowser.IContentWidget { editor: editorBrowser.ICodeEditor, symbolRange: Range, commandService: ICommandService, - messageService: IMessageService + notificationService: INotificationService ) { this._id = 'codeLensWidget' + (++CodeLensContentWidget._idPool); @@ -95,7 +94,7 @@ class CodeLensContentWidget implements editorBrowser.IContentWidget { if (command) { editor.focus(); commandService.executeCommand(command.id, ...command.arguments).done(undefined, err => { - messageService.show(Severity.Error, err); + notificationService.error(err); }); } } @@ -221,7 +220,7 @@ export class CodeLens { editor: editorBrowser.ICodeEditor, helper: CodeLensHelper, viewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor, - commandService: ICommandService, messageService: IMessageService, + commandService: ICommandService, notificationService: INotificationService, updateCallabck: Function ) { this._editor = editor; @@ -244,7 +243,7 @@ export class CodeLens { } }); - this._contentWidget = new CodeLensContentWidget(editor, range, commandService, messageService); + this._contentWidget = new CodeLensContentWidget(editor, range, commandService, notificationService); this._viewZone = new CodeLensViewZone(range.startLineNumber - 1, updateCallabck); this._viewZoneId = viewZoneChangeAccessor.addZone(this._viewZone); diff --git a/src/vs/editor/contrib/find/findDecorations.ts b/src/vs/editor/contrib/find/findDecorations.ts index 1a81d8c7e665657ca65c16934dbef948b96abe48..b5b5287decbed753e1e07e8e7818a9ec5cc8f2e8 100644 --- a/src/vs/editor/contrib/find/findDecorations.ts +++ b/src/vs/editor/contrib/find/findDecorations.ts @@ -8,7 +8,7 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; -import { editorFindMatchHighlight, editorFindMatch } from 'vs/platform/theme/common/colorRegistry'; +import { overviewRulerFindMatchForeground } from 'vs/platform/theme/common/colorRegistry'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IModelDecorationsChangeAccessor, FindMatch, IModelDeltaDecoration, TrackedRangeStickiness, OverviewRulerLane } from 'vs/editor/common/model'; @@ -226,8 +226,8 @@ export class FindDecorations implements IDisposable { className: 'currentFindMatch', showIfCollapsed: true, overviewRuler: { - color: themeColorFromId(editorFindMatch), - darkColor: themeColorFromId(editorFindMatch), + color: themeColorFromId(overviewRulerFindMatchForeground), + darkColor: themeColorFromId(overviewRulerFindMatchForeground), position: OverviewRulerLane.Center } }); @@ -237,8 +237,8 @@ export class FindDecorations implements IDisposable { className: 'findMatch', showIfCollapsed: true, overviewRuler: { - color: themeColorFromId(editorFindMatchHighlight), - darkColor: themeColorFromId(editorFindMatchHighlight), + color: themeColorFromId(overviewRulerFindMatchForeground), + darkColor: themeColorFromId(overviewRulerFindMatchForeground), position: OverviewRulerLane.Center } }); @@ -252,8 +252,8 @@ export class FindDecorations implements IDisposable { private static readonly _FIND_MATCH_ONLY_OVERVIEW_DECORATION = ModelDecorationOptions.register({ stickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, overviewRuler: { - color: themeColorFromId(editorFindMatchHighlight), - darkColor: themeColorFromId(editorFindMatchHighlight), + color: themeColorFromId(overviewRulerFindMatchForeground), + darkColor: themeColorFromId(overviewRulerFindMatchForeground), position: OverviewRulerLane.Center } }); diff --git a/src/vs/editor/contrib/find/findWidget.ts b/src/vs/editor/contrib/find/findWidget.ts index 19faa63f3b0b6c091fd980e986deba59092e47d4..d5c25699fbc279a1db9d9550eff9bf1a55241257 100644 --- a/src/vs/editor/contrib/find/findWidget.ts +++ b/src/vs/editor/contrib/find/findWidget.ts @@ -28,7 +28,7 @@ import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/c import { ITheme, registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService'; import { Color } from 'vs/base/common/color'; import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions'; -import { editorFindRangeHighlight, editorFindMatch, editorFindMatchHighlight, activeContrastBorder, contrastBorder, inputBackground, editorWidgetBackground, inputActiveOptionBorder, widgetShadow, inputForeground, inputBorder, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationErrorBackground, inputValidationErrorBorder, errorForeground, editorWidgetBorder } from 'vs/platform/theme/common/colorRegistry'; +import { editorFindRangeHighlight, editorFindMatch, editorFindMatchHighlight, contrastBorder, inputBackground, editorWidgetBackground, inputActiveOptionBorder, widgetShadow, inputForeground, inputBorder, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationErrorBackground, inputValidationErrorBorder, errorForeground, editorWidgetBorder, editorFindMatchBorder, editorFindMatchHighlightBorder, editorFindRangeHighlightBorder } from 'vs/platform/theme/common/colorRegistry'; export interface IFindController { @@ -1076,12 +1076,19 @@ registerThemingParticipant((theme, collector) => { collector.addRule(`.monaco-editor .find-widget { box-shadow: 0 2px 8px ${widgetShadowColor}; }`); } - let hcOutline = theme.getColor(activeContrastBorder); - if (hcOutline) { - collector.addRule(`.monaco-editor .findScope { border: 1px dashed ${hcOutline.transparent(0.4)}; }`); - collector.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${hcOutline}; padding: 1px; -moz-box-sizing: border-box; box-sizing: border-box; }`); - collector.addRule(`.monaco-editor .findMatch { border: 1px dotted ${hcOutline}; -moz-box-sizing: border-box; box-sizing: border-box; }`); + let findMatchHighlightBorder = theme.getColor(editorFindMatchHighlightBorder); + if (findMatchHighlightBorder) { + collector.addRule(`.monaco-editor .findMatch { border: 1px dotted ${findMatchHighlightBorder}; -moz-box-sizing: border-box; box-sizing: border-box; }`); } + let findMatchBorder = theme.getColor(editorFindMatchBorder); + if (findMatchBorder) { + collector.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${findMatchBorder}; padding: 1px; -moz-box-sizing: border-box; box-sizing: border-box; }`); + } + let findRangeHighlightBorder = theme.getColor(editorFindRangeHighlightBorder); + if (findRangeHighlightBorder) { + collector.addRule(`.monaco-editor .findScope { border: 1px dashed ${findRangeHighlightBorder}; }`); + } + let hcBorder = theme.getColor(contrastBorder); if (hcBorder) { collector.addRule(`.monaco-editor .find-widget { border: 2px solid ${hcBorder}; }`); diff --git a/src/vs/editor/contrib/folding/folding.ts b/src/vs/editor/contrib/folding/folding.ts index d898a618ca4c402d39ece181fbec54f0e65b20be..9fd6f41c706cb4d27cfc7cde9282c357b54f7e5c 100644 --- a/src/vs/editor/contrib/folding/folding.ts +++ b/src/vs/editor/contrib/folding/folding.ts @@ -26,6 +26,7 @@ import { HiddenRangeModel } from 'vs/editor/contrib/folding/hiddenRangeModel'; import { IRange } from 'vs/editor/common/core/range'; import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry'; import { computeRanges as computeIndentRanges } from 'vs/editor/contrib/folding/indentRangeProvider'; +import { IPosition } from 'vs/editor/common/core/position'; export const ID = 'editor.contrib.folding'; @@ -104,7 +105,11 @@ export class FoldingController implements IEditorContribution { if (!model || !this._isEnabled || model.isTooLargeForTokenization()) { return {}; } - return { collapsedRegions: this.foldingModel.getMemento(), lineCount: model.getLineCount() }; + if (this.foldingModel) { // disposed ? + let collapsedRegions = this.foldingModel.isInitialized ? this.foldingModel.getMemento() : this.hiddenRangeModel.getMemento(); + return { collapsedRegions, lineCount: model.getLineCount() }; + } + return void 0; } /** @@ -313,15 +318,15 @@ export class FoldingController implements IEditorContribution { toToggle.push(...foldingModel.getRegionsInside(region, r => r.isCollapsed === isCollapsed)); } foldingModel.toggleCollapseState(toToggle); - this.reveal(lineNumber); + this.reveal({ lineNumber, column: 1 }); } } } }); } - public reveal(focusLine: number): void { - this.editor.revealPositionInCenterIfOutsideViewport({ lineNumber: focusLine, column: 1 }, ScrollType.Smooth); + public reveal(position: IPosition): void { + this.editor.revealPositionInCenterIfOutsideViewport(position, ScrollType.Smooth); } } @@ -340,6 +345,7 @@ abstract class FoldingAction extends EditorAction { return foldingModelPromise.then(foldingModel => { if (foldingModel) { this.invoke(foldingController, foldingModel, editor, args); + foldingController.reveal(editor.getSelection().getStartPosition()); } }); } @@ -510,10 +516,6 @@ class FoldRecursivelyAction extends FoldingAction { invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void { let selectedLines = this.getSelectedLines(editor); setCollapseStateLevelsDown(foldingModel, true, Number.MAX_VALUE, selectedLines); - if (selectedLines.length > 0) { - foldingController.reveal(selectedLines[0]); - } - } } diff --git a/src/vs/editor/contrib/folding/foldingModel.ts b/src/vs/editor/contrib/folding/foldingModel.ts index eb230e2d66e12144cd622ef61c1dd646de965374..33e1826061cb5beb203227d14be3c1855a528f98 100644 --- a/src/vs/editor/contrib/folding/foldingModel.ts +++ b/src/vs/editor/contrib/folding/foldingModel.ts @@ -26,18 +26,21 @@ export class FoldingModel { private _ranges: FoldingRanges; private _editorDecorationIds: string[]; + private _isInitialized: boolean; private _updateEventEmitter = new Emitter(); public get ranges(): FoldingRanges { return this._ranges; } public get onDidChange(): Event { return this._updateEventEmitter.event; } public get textModel() { return this._textModel; } + public get isInitialized() { return this._isInitialized; } constructor(textModel: ITextModel, decorationProvider: IDecorationProvider) { this._textModel = textModel; this._decorationProvider = decorationProvider; this._ranges = new FoldingRanges(new Uint32Array(0), new Uint32Array(0)); this._editorDecorationIds = []; + this._isInitialized = false; } public toggleCollapseState(regions: FoldingRegion[]) { @@ -128,6 +131,7 @@ export class FoldingModel { this._editorDecorationIds = this._decorationProvider.deltaDecorations(this._editorDecorationIds, newEditorDecorations); this._ranges = newRanges; + this._isInitialized = true; this._updateEventEmitter.fire({ model: this }); } diff --git a/src/vs/editor/contrib/folding/hiddenRangeModel.ts b/src/vs/editor/contrib/folding/hiddenRangeModel.ts index a684890bb8469de767a7c50ce26295706d8dbc9f..fee0f5108c283cb2b3e23039365ba6792cd05bf7 100644 --- a/src/vs/editor/contrib/folding/hiddenRangeModel.ts +++ b/src/vs/editor/contrib/folding/hiddenRangeModel.ts @@ -12,7 +12,7 @@ import { findFirst } from 'vs/base/common/arrays'; export class HiddenRangeModel { private _foldingModel: FoldingModel; - private _hiddenRanges: IRange[] = []; + private _hiddenRanges: IRange[]; private _foldingModelListener: IDisposable; private _updateEventEmitter = new Emitter(); @@ -22,6 +22,7 @@ export class HiddenRangeModel { public constructor(model: FoldingModel) { this._foldingModel = model; this._foldingModelListener = model.onDidChange(_ => this.updateHiddenRanges()); + this._hiddenRanges = []; if (model.ranges.length) { this.updateHiddenRanges(); } @@ -80,6 +81,13 @@ export class HiddenRangeModel { return true; } + /** + * Collapse state memento, for persistence only, only used if folding model is not yet initialized + */ + public getMemento(): CollapseMemento { + return this._hiddenRanges.map(r => ({ startLineNumber: r.startLineNumber - 1, endLineNumber: r.endLineNumber })); + } + private applyHiddenRanges(newHiddenAreas: IRange[]) { this._hiddenRanges = newHiddenAreas; this._updateEventEmitter.fire(newHiddenAreas); diff --git a/src/vs/editor/contrib/format/formatActions.ts b/src/vs/editor/contrib/format/formatActions.ts index ee843f0e1d365fe938f2b2804c57aa3fe109c8e9..0249c04d93ea591ed3e31cb4d5545d2ee416367d 100644 --- a/src/vs/editor/contrib/format/formatActions.ts +++ b/src/vs/editor/contrib/format/formatActions.ts @@ -23,9 +23,9 @@ import { Range } from 'vs/editor/common/core/range'; import { alert } from 'vs/base/browser/ui/aria/aria'; import { EditorState, CodeEditorStateFlag } from 'vs/editor/browser/core/editorState'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IMessageService, Severity } from 'vs/platform/message/common/message'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ISingleEditOperation } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; function alertFormattingEdits(edits: ISingleEditOperation[]): void { @@ -264,7 +264,7 @@ export abstract class AbstractFormatAction extends EditorAction { public run(accessor: ServicesAccessor, editor: ICodeEditor): TPromise { const workerService = accessor.get(IEditorWorkerService); - const messageService = accessor.get(IMessageService); + const notificationService = accessor.get(INotificationService); const formattingPromise = this._getFormattingEdits(editor); if (!formattingPromise) { @@ -285,10 +285,7 @@ export abstract class AbstractFormatAction extends EditorAction { editor.focus(); }, err => { if (err instanceof Error && err.name === NoProviderError.Name) { - messageService.show( - Severity.Info, - nls.localize('no.provider', "Sorry, but there is no formatter for '{0}'-files installed.", editor.getModel().getLanguageIdentifier().language), - ); + notificationService.info(nls.localize('no.provider', "There is no formatter for '{0}'-files installed.", editor.getModel().getLanguageIdentifier().language)); } else { throw err; } diff --git a/src/vs/editor/contrib/goToDeclaration/goToDeclarationCommands.ts b/src/vs/editor/contrib/goToDeclaration/goToDeclarationCommands.ts index d27eebcc428a24a4bf8d11ba4c6da1364187bae6..5be9a6d7e492fc30fab802b2b8476c127f42aee7 100644 --- a/src/vs/editor/contrib/goToDeclaration/goToDeclarationCommands.ts +++ b/src/vs/editor/contrib/goToDeclaration/goToDeclarationCommands.ts @@ -9,10 +9,8 @@ import * as nls from 'vs/nls'; import { alert } from 'vs/base/browser/ui/aria/aria'; import { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes'; import * as platform from 'vs/base/common/platform'; -import Severity from 'vs/base/common/severity'; import { TPromise } from 'vs/base/common/winjs.base'; import { IEditorService } from 'vs/platform/editor/common/editor'; -import { IMessageService } from 'vs/platform/message/common/message'; import { Range } from 'vs/editor/common/core/range'; import { registerEditorAction, IActionOptions, ServicesAccessor, EditorAction } from 'vs/editor/browser/editorExtensions'; import { Location } from 'vs/editor/common/modes'; @@ -27,6 +25,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; import { IProgressService } from 'vs/platform/progress/common/progress'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ITextModel, IWordAtPosition } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; export class DefinitionActionConfig { @@ -50,7 +49,7 @@ export class DefinitionAction extends EditorAction { } public run(accessor: ServicesAccessor, editor: ICodeEditor): TPromise { - const messageService = accessor.get(IMessageService); + const notificationService = accessor.get(INotificationService); const editorService = accessor.get(IEditorService); const progressService = accessor.get(IProgressService); @@ -105,7 +104,7 @@ export class DefinitionAction extends EditorAction { }, (err) => { // report an error - messageService.show(Severity.Error, err); + notificationService.error(err); }); progressService.showWhile(definitionPromise, 250); diff --git a/src/vs/editor/contrib/links/links.ts b/src/vs/editor/contrib/links/links.ts index 5f09afd32507fc3f217e8a93ef32ab8421df7de9..61e679cb177ac67a0cf1990993b180aa060240bc 100644 --- a/src/vs/editor/contrib/links/links.ts +++ b/src/vs/editor/contrib/links/links.ts @@ -9,9 +9,7 @@ import 'vs/css!./links'; import * as nls from 'vs/nls'; import { onUnexpectedError } from 'vs/base/common/errors'; import * as platform from 'vs/base/common/platform'; -import Severity from 'vs/base/common/severity'; import { TPromise } from 'vs/base/common/winjs.base'; -import { IMessageService } from 'vs/platform/message/common/message'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { registerEditorAction, registerEditorContribution, ServicesAccessor, EditorAction } from 'vs/editor/browser/editorExtensions'; @@ -26,6 +24,7 @@ import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { ClickLinkGesture, ClickLinkMouseEvent, ClickLinkKeyboardEvent } from 'vs/editor/contrib/goToDeclaration/clickLinkGesture'; import { MarkdownString } from 'vs/base/common/htmlContent'; import { TrackedRangeStickiness, IModelDeltaDecoration, IModelDecorationsChangeAccessor } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; const HOVER_MESSAGE_GENERAL_META = new MarkdownString().appendText( platform.isMacintosh @@ -145,17 +144,17 @@ class LinkDetector implements editorCommon.IEditorContribution { private computePromise: TPromise; private activeLinkDecorationId: string; private openerService: IOpenerService; - private messageService: IMessageService; + private notificationService: INotificationService; private currentOccurrences: { [decorationId: string]: LinkOccurrence; }; constructor( editor: ICodeEditor, @IOpenerService openerService: IOpenerService, - @IMessageService messageService: IMessageService + @INotificationService notificationService: INotificationService ) { this.editor = editor; this.openerService = openerService; - this.messageService = messageService; + this.notificationService = notificationService; this.listenersToRemove = []; let clickLinkGesture = new ClickLinkGesture(editor); @@ -327,9 +326,9 @@ class LinkDetector implements editorCommon.IEditorContribution { }, err => { // different error cases if (err === 'invalid') { - this.messageService.show(Severity.Warning, nls.localize('invalid.url', 'Sorry, failed to open this link because it is not well-formed: {0}', link.url)); + this.notificationService.warn(nls.localize('invalid.url', 'Failed to open this link because it is not well-formed: {0}', link.url)); } else if (err === 'missing') { - this.messageService.show(Severity.Warning, nls.localize('missing.url', 'Sorry, failed to open this link because its target is missing.')); + this.notificationService.warn(nls.localize('missing.url', 'Failed to open this link because its target is missing.')); } else { onUnexpectedError(err); } diff --git a/src/vs/editor/contrib/quickFix/quickFix.ts b/src/vs/editor/contrib/quickFix/quickFix.ts index 10bbbe4d5e8915958d81946d1582ccb683c2bc3c..8e273057dc125a4083ee99fc85a4a1f51afc8be3 100644 --- a/src/vs/editor/contrib/quickFix/quickFix.ts +++ b/src/vs/editor/contrib/quickFix/quickFix.ts @@ -13,7 +13,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { onUnexpectedExternalError, illegalArgument } from 'vs/base/common/errors'; import { IModelService } from 'vs/editor/common/services/modelService'; import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions'; -import { isFalsyOrEmpty } from 'vs/base/common/arrays'; +import { isFalsyOrEmpty, mergeSort } from 'vs/base/common/arrays'; import { CodeActionKind } from './codeActionTrigger'; export function getCodeActions(model: ITextModel, range: Range, scope?: CodeActionKind): TPromise { @@ -36,7 +36,7 @@ export function getCodeActions(model: ITextModel, range: Range, scope?: CodeActi }); return TPromise.join(promises).then( - () => allResults.sort(codeActionsComparator) + () => mergeSort(allResults, codeActionsComparator) ); } diff --git a/src/vs/editor/contrib/referenceSearch/referencesController.ts b/src/vs/editor/contrib/referenceSearch/referencesController.ts index 0dc0f36b0834e4991ecc76996ece5b028756b244..fd463cf2a95c35e1db4b786b5415ade6ee652c01 100644 --- a/src/vs/editor/contrib/referenceSearch/referencesController.ts +++ b/src/vs/editor/contrib/referenceSearch/referencesController.ts @@ -7,12 +7,10 @@ import * as nls from 'vs/nls'; import { onUnexpectedError } from 'vs/base/common/errors'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import Severity from 'vs/base/common/severity'; import { TPromise } from 'vs/base/common/winjs.base'; import { IEditorService } from 'vs/platform/editor/common/editor'; import { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation'; import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { IMessageService } from 'vs/platform/message/common/message'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IStorageService } from 'vs/platform/storage/common/storage'; @@ -27,6 +25,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { Position } from 'vs/editor/common/core/position'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { Location } from 'vs/editor/common/modes'; +import { INotificationService } from 'vs/platform/notification/common/notification'; export const ctxReferenceSearchVisible = new RawContextKey('referenceSearchVisible', false); @@ -57,7 +56,7 @@ export class ReferencesController implements editorCommon.IEditorContribution { @IContextKeyService contextKeyService: IContextKeyService, @IEditorService private readonly _editorService: IEditorService, @ITextModelService private readonly _textModelResolverService: ITextModelService, - @IMessageService private readonly _messageService: IMessageService, + @INotificationService private readonly _notificationService: INotificationService, @IInstantiationService private readonly _instantiationService: IInstantiationService, @IWorkspaceContextService private readonly _contextService: IWorkspaceContextService, @IStorageService private readonly _storageService: IStorageService, @@ -171,7 +170,7 @@ export class ReferencesController implements editorCommon.IEditorContribution { }); }, error => { - this._messageService.show(Severity.Error, error); + this._notificationService.error(error); }); } diff --git a/src/vs/editor/contrib/rename/rename.ts b/src/vs/editor/contrib/rename/rename.ts index 1d7cda764c778c324ca6032408bee5488598efa4..0f301a6d09fa0d49313cae196831f2fa83036894 100644 --- a/src/vs/editor/contrib/rename/rename.ts +++ b/src/vs/editor/contrib/rename/rename.ts @@ -8,11 +8,9 @@ import * as nls from 'vs/nls'; import { isPromiseCanceledError, illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import Severity from 'vs/base/common/severity'; import { TPromise } from 'vs/base/common/winjs.base'; import { IFileService } from 'vs/platform/files/common/files'; import { RawContextKey, IContextKey, IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IMessageService } from 'vs/platform/message/common/message'; import { IProgressService } from 'vs/platform/progress/common/progress'; import { registerEditorAction, registerEditorContribution, ServicesAccessor, EditorAction, EditorCommand, registerEditorCommand, registerDefaultLanguageCommand } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -32,6 +30,7 @@ import { Range } from 'vs/editor/common/core/range'; import { MessageController } from 'vs/editor/contrib/message/messageController'; import { EditorState, CodeEditorStateFlag } from 'vs/editor/browser/core/editorState'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { INotificationService } from 'vs/platform/notification/common/notification'; export function rename(model: ITextModel, position: Position, newName: string): TPromise { @@ -113,7 +112,7 @@ class RenameController implements IEditorContribution { constructor( private editor: ICodeEditor, - @IMessageService private readonly _messageService: IMessageService, + @INotificationService private readonly _notificationService: INotificationService, @ITextModelService private readonly _textModelResolverService: ITextModelService, @IProgressService private readonly _progressService: IProgressService, @IContextKeyService contextKeyService: IContextKeyService, @@ -201,7 +200,7 @@ class RenameController implements IEditorContribution { if (state.validate(this.editor)) { MessageController.get(this.editor).showMessage(result.rejectReason, this.editor.getPosition()); } else { - this._messageService.show(Severity.Info, result.rejectReason); + this._notificationService.info(result.rejectReason); } return undefined; } @@ -216,7 +215,7 @@ class RenameController implements IEditorContribution { }); }, err => { - this._messageService.show(Severity.Error, nls.localize('rename.failed', "Sorry, rename failed to execute.")); + this._notificationService.error(nls.localize('rename.failed', "Rename failed to execute.")); return TPromise.wrapError(err); }); diff --git a/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts index 02875a72eab6b41cfc4391d0a14127d208e474dd..3918a0f64db5de490d077570d51054473cc5b2a8 100644 --- a/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/wordHighlighter.ts @@ -15,7 +15,7 @@ import { registerEditorContribution, EditorAction, IActionOptions, registerEdito import { DocumentHighlight, DocumentHighlightKind, DocumentHighlightProviderRegistry } from 'vs/editor/common/modes'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { Position } from 'vs/editor/common/core/position'; -import { registerColor, editorSelectionHighlight, activeContrastBorder, overviewRulerSelectionHighlightForeground } from 'vs/platform/theme/common/colorRegistry'; +import { registerColor, editorSelectionHighlight, overviewRulerSelectionHighlightForeground, activeContrastBorder, editorSelectionHighlightBorder } from 'vs/platform/theme/common/colorRegistry'; import { registerThemingParticipant, themeColorFromId } from 'vs/platform/theme/common/themeService'; import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; @@ -29,6 +29,8 @@ import { ITextModel, TrackedRangeStickiness, OverviewRulerLane, IModelDeltaDecor export const editorWordHighlight = registerColor('editor.wordHighlightBackground', { dark: '#575757B8', light: '#57575740', hc: null }, nls.localize('wordHighlight', 'Background color of a symbol during read-access, like reading a variable. The color must not be opaque to not hide underlying decorations.'), true); export const editorWordHighlightStrong = registerColor('editor.wordHighlightStrongBackground', { dark: '#004972B8', light: '#0e639c40', hc: null }, nls.localize('wordHighlightStrong', 'Background color of a symbol during write-access, like writing to a variable. The color must not be opaque to not hide underlying decorations.'), true); +export const editorWordHighlightBorder = registerColor('editor.wordHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('wordHighlightBorder', 'Border color of a symbol during read-access, like reading a variable.')); +export const editorWordHighlightStrongBorder = registerColor('editor.wordHighlightStrongBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('wordHighlightStrongBorder', 'Border color of a symbol during write-access, like writing to a variable.')); export const overviewRulerWordHighlightForeground = registerColor('editorOverviewRuler.wordHighlightForeground', { dark: '#A0A0A0', light: '#A0A0A0', hc: '#A0A0A0' }, nls.localize('overviewRulerWordHighlightForeground', 'Overview ruler marker color for symbol highlights.')); export const overviewRulerWordHighlightStrongForeground = registerColor('editorOverviewRuler.wordHighlightStrongForeground', { dark: '#C0A0C0', light: '#C0A0C0', hc: '#C0A0C0' }, nls.localize('overviewRulerWordHighlightStrongForeground', 'Overview ruler marker color for write-access symbol highlights.')); @@ -515,11 +517,17 @@ registerThemingParticipant((theme, collector) => { if (wordHighlightStrong) { collector.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${wordHighlightStrong}; }`); } - let hcOutline = theme.getColor(activeContrastBorder); - if (hcOutline) { - collector.addRule(`.monaco-editor .selectionHighlight { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`); - collector.addRule(`.monaco-editor .wordHighlight { border: 1px dashed ${hcOutline}; box-sizing: border-box; }`); - collector.addRule(`.monaco-editor .wordHighlightStrong { border: 1px dashed ${hcOutline}; box-sizing: border-box; }`); + let selectionHighlightBorder = theme.getColor(editorSelectionHighlightBorder); + if (selectionHighlightBorder) { + collector.addRule(`.monaco-editor .selectionHighlight { border: 1px dotted ${selectionHighlightBorder}; box-sizing: border-box; }`); + } + let wordHighlightBorder = theme.getColor(editorWordHighlightBorder); + if (wordHighlightBorder) { + collector.addRule(`.monaco-editor .wordHighlight { border: 1px dashed ${wordHighlightBorder}; box-sizing: border-box; }`); + } + let wordHighlightStrongBorder = theme.getColor(editorWordHighlightStrongBorder); + if (wordHighlightStrongBorder) { + collector.addRule(`.monaco-editor .wordHighlightStrong { border: 1px dashed ${wordHighlightStrongBorder}; box-sizing: border-box; }`); } }); diff --git a/src/vs/editor/standalone/browser/simpleServices.ts b/src/vs/editor/standalone/browser/simpleServices.ts index 87566d71df10cf238edf9a9475313a266e9d1cec..e45ae59ff28e34ca2c54f75e033433afe8d8bb54 100644 --- a/src/vs/editor/standalone/browser/simpleServices.ts +++ b/src/vs/editor/standalone/browser/simpleServices.ts @@ -17,7 +17,6 @@ import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayo import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver'; import { IKeybindingEvent, KeybindingSource, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IConfirmation, IMessageService, IConfirmationResult } from 'vs/platform/message/common/message'; import { IWorkspaceContextService, IWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { ICodeEditor, IDiffEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser'; @@ -39,6 +38,8 @@ import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKe import { OS } from 'vs/base/common/platform'; import { IRange } from 'vs/editor/common/core/range'; import { ITextModel } from 'vs/editor/common/model'; +import { INotificationService, INotification, INotificationHandle, NoOpNotification } from 'vs/platform/notification/common/notification'; +import { IConfirmation, IConfirmationResult, IConfirmationService } from 'vs/platform/dialogs/common/dialogs'; export class SimpleEditor implements IEditor { @@ -234,33 +235,10 @@ export class SimpleProgressService implements IProgressService { } } -export class SimpleMessageService implements IMessageService { +export class SimpleConfirmationService implements IConfirmationService { public _serviceBrand: any; - private static readonly Empty = function () { /* nothing */ }; - - public show(sev: Severity, message: any): () => void { - - switch (sev) { - case Severity.Error: - console.error(message); - break; - case Severity.Warning: - console.warn(message); - break; - default: - console.log(message); - break; - } - - return SimpleMessageService.Empty; - } - - public hideAll(): void { - // No-op - } - public confirm(confirmation: IConfirmation): TPromise { let messageText = confirmation.message; if (confirmation.detail) { @@ -280,6 +258,41 @@ export class SimpleMessageService implements IMessageService { } } +export class SimpleNotificationService implements INotificationService { + + public _serviceBrand: any; + + private static readonly NO_OP: INotificationHandle = new NoOpNotification(); + + public info(message: string): INotificationHandle { + return this.notify({ severity: Severity.Info, message }); + } + + public warn(message: string): INotificationHandle { + return this.notify({ severity: Severity.Warning, message }); + } + + public error(error: string | Error): INotificationHandle { + return this.notify({ severity: Severity.Error, message: error }); + } + + public notify(notification: INotification): INotificationHandle { + switch (notification.severity) { + case Severity.Error: + console.error(notification.message); + break; + case Severity.Warning: + console.warn(notification.message); + break; + default: + console.log(notification.message); + break; + } + + return SimpleNotificationService.NO_OP; + } +} + export class StandaloneCommandService implements ICommandService { _serviceBrand: any; @@ -328,10 +341,10 @@ export class StandaloneKeybindingService extends AbstractKeybindingService { contextKeyService: IContextKeyService, commandService: ICommandService, telemetryService: ITelemetryService, - messageService: IMessageService, + notificationService: INotificationService, domNode: HTMLElement ) { - super(contextKeyService, commandService, telemetryService, messageService); + super(contextKeyService, commandService, telemetryService, notificationService); this._cachedResolver = null; this._dynamicKeybindings = []; diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts index 340b2c163bb26e1ae26795aa447f61d6aafa8a2e..14e25fa01f97b2d3b65eacd5653dd7d5732dc2f0 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts @@ -27,9 +27,9 @@ import { MenuId, MenuRegistry, IMenuItem } from 'vs/platform/actions/common/acti import { IDiffEditorOptions, IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import * as aria from 'vs/base/browser/ui/aria/aria'; -import { IMessageService } from 'vs/platform/message/common/message'; import * as nls from 'vs/nls'; import * as browser from 'vs/base/browser/browser'; +import { INotificationService } from 'vs/platform/notification/common/notification'; /** * Description of an action contribution @@ -360,14 +360,14 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon @IEditorWorkerService editorWorkerService: IEditorWorkerService, @ICodeEditorService codeEditorService: ICodeEditorService, @IStandaloneThemeService themeService: IStandaloneThemeService, - @IMessageService messageService: IMessageService + @INotificationService notificationService: INotificationService ) { options = options || {}; if (typeof options.theme === 'string') { options.theme = themeService.setTheme(options.theme); } - super(domElement, options, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, messageService); + super(domElement, options, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService); this._contextViewService = contextViewService; diff --git a/src/vs/editor/standalone/browser/standaloneEditor.ts b/src/vs/editor/standalone/browser/standaloneEditor.ts index 85abea91789ca06f5c1b27a9666225ceb803150e..53493117eb5900b08316d6dd63090131d278942f 100644 --- a/src/vs/editor/standalone/browser/standaloneEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneEditor.ts @@ -36,8 +36,8 @@ import { Token } from 'vs/editor/common/core/token'; import { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo'; import * as editorOptions from 'vs/editor/common/config/editorOptions'; import { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents'; -import { IMessageService } from 'vs/platform/message/common/message'; import { ITextModel, OverviewRulerLane, EndOfLinePreference, DefaultEndOfLine, EndOfLineSequence, TrackedRangeStickiness, TextModelResolvedOptions, FindMatch } from 'vs/editor/common/model'; +import { INotificationService } from 'vs/platform/notification/common/notification'; function withAllStandaloneServices(domElement: HTMLElement, override: IEditorOverrideServices, callback: (services: DynamicStandaloneServices) => T): T { let services = new DynamicStandaloneServices(domElement, override); @@ -123,7 +123,7 @@ export function createDiffEditor(domElement: HTMLElement, options?: IDiffEditorC services.get(IEditorWorkerService), services.get(ICodeEditorService), services.get(IStandaloneThemeService), - services.get(IMessageService) + services.get(INotificationService) ); }); } diff --git a/src/vs/editor/standalone/browser/standaloneServices.ts b/src/vs/editor/standalone/browser/standaloneServices.ts index bb53a47c1fd8d26fe01e7182a65fe799f46647da..3e056e7870364f4194913465d195a7524979c15e 100644 --- a/src/vs/editor/standalone/browser/standaloneServices.ts +++ b/src/vs/editor/standalone/browser/standaloneServices.ts @@ -17,7 +17,6 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { MarkerService } from 'vs/platform/markers/common/markerService'; import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { IMessageService } from 'vs/platform/message/common/message'; import { IProgressService } from 'vs/platform/progress/common/progress'; import { IStorageService, NullStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -32,15 +31,17 @@ import { IModelService } from 'vs/editor/common/services/modelService'; import { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl'; import { CodeEditorServiceImpl } from 'vs/editor/browser/services/codeEditorServiceImpl'; import { - SimpleConfigurationService, SimpleResourceConfigurationService, SimpleMenuService, SimpleMessageService, - SimpleProgressService, StandaloneCommandService, StandaloneKeybindingService, - StandaloneTelemetryService, SimpleWorkspaceContextService + SimpleConfigurationService, SimpleResourceConfigurationService, SimpleMenuService, + SimpleProgressService, StandaloneCommandService, StandaloneKeybindingService, SimpleNotificationService, + StandaloneTelemetryService, SimpleWorkspaceContextService, SimpleConfirmationService } from 'vs/editor/standalone/browser/simpleServices'; import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService'; import { IMenuService } from 'vs/platform/actions/common/actions'; import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService'; import { StandaloneThemeServiceImpl } from 'vs/editor/standalone/browser/standaloneThemeServiceImpl'; import { ILogService, NullLogService } from 'vs/platform/log/common/log'; +import { INotificationService } from 'vs/platform/notification/common/notification'; +import { IConfirmationService } from 'vs/platform/dialogs/common/dialogs'; export interface IEditorContextViewService extends IContextViewService { dispose(): void; @@ -125,7 +126,9 @@ export module StaticServices { export const telemetryService = define(ITelemetryService, () => new StandaloneTelemetryService()); - export const messageService = define(IMessageService, () => new SimpleMessageService()); + export const confirmationService = define(IConfirmationService, () => new SimpleConfirmationService()); + + export const notificationService = define(INotificationService, () => new SimpleNotificationService()); export const markerService = define(IMarkerService, () => new MarkerService()); @@ -160,7 +163,7 @@ export class DynamicStandaloneServices extends Disposable { this._instantiationService = _instantiationService; const configurationService = this.get(IConfigurationService); - const messageService = this.get(IMessageService); + const notificationService = this.get(INotificationService); const telemetryService = this.get(ITelemetryService); let ensure = (serviceId: ServiceIdentifier, factory: () => T): T => { @@ -179,11 +182,11 @@ export class DynamicStandaloneServices extends Disposable { let commandService = ensure(ICommandService, () => new StandaloneCommandService(this._instantiationService)); - ensure(IKeybindingService, () => this._register(new StandaloneKeybindingService(contextKeyService, commandService, telemetryService, messageService, domElement))); + ensure(IKeybindingService, () => this._register(new StandaloneKeybindingService(contextKeyService, commandService, telemetryService, notificationService, domElement))); - let contextViewService = ensure(IContextViewService, () => this._register(new ContextViewService(domElement, telemetryService, messageService, new NullLogService()))); + let contextViewService = ensure(IContextViewService, () => this._register(new ContextViewService(domElement, telemetryService, new NullLogService()))); - ensure(IContextMenuService, () => this._register(new ContextMenuService(domElement, telemetryService, messageService, contextViewService))); + ensure(IContextMenuService, () => this._register(new ContextMenuService(domElement, telemetryService, notificationService, contextViewService))); ensure(IMenuService, () => new SimpleMenuService(commandService)); } diff --git a/src/vs/editor/standalone/test/browser/simpleServices.test.ts b/src/vs/editor/standalone/test/browser/simpleServices.test.ts index e2a6120ec59fe9dc301d0a5b39b7ae63901d1874..e13eab64aa9d1000a53171802e2ad8db03e9af7e 100644 --- a/src/vs/editor/standalone/test/browser/simpleServices.test.ts +++ b/src/vs/editor/standalone/test/browser/simpleServices.test.ts @@ -6,7 +6,7 @@ import * as assert from 'assert'; import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService'; -import { SimpleConfigurationService, SimpleMessageService, StandaloneKeybindingService, StandaloneCommandService } from 'vs/editor/standalone/browser/simpleServices'; +import { SimpleConfigurationService, StandaloneKeybindingService, StandaloneCommandService, SimpleNotificationService } from 'vs/editor/standalone/browser/simpleServices'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { KeyCode } from 'vs/base/common/keyCodes'; @@ -32,11 +32,11 @@ suite('StandaloneKeybindingService', () => { let commandService = new StandaloneCommandService(instantiationService); - let messageService = new SimpleMessageService(); + let notificationService = new SimpleNotificationService(); let domElement = document.createElement('div'); - let keybindingService = new TestStandaloneKeybindingService(contextKeyService, commandService, NullTelemetryService, messageService, domElement); + let keybindingService = new TestStandaloneKeybindingService(contextKeyService, commandService, NullTelemetryService, notificationService, domElement); let commandInvoked = false; keybindingService.addDynamicKeybinding('testCommand', KeyCode.F9, () => { diff --git a/src/vs/loader.js b/src/vs/loader.js index aa1ae79ae5e7ebc2051ceeca701b6db4e55b184d..291f0e8b6b39f84102e59b25c53db49adbacf415 100644 --- a/src/vs/loader.js +++ b/src/vs/loader.js @@ -22,20 +22,55 @@ var _amdLoaderGlobal = this; var AMDLoader; (function (AMDLoader) { AMDLoader.global = _amdLoaderGlobal; - var Environment = (function () { - function Environment(opts) { - this.isWindows = opts.isWindows; - this.isNode = opts.isNode; - this.isElectronRenderer = opts.isElectronRenderer; - this.isWebWorker = opts.isWebWorker; + var Environment = /** @class */ (function () { + function Environment() { + this._detected = false; + this._isWindows = false; + this._isNode = false; + this._isElectronRenderer = false; + this._isWebWorker = false; } - Environment.detect = function () { - return new Environment({ - isWindows: this._isWindows(), - isNode: (typeof module !== 'undefined' && !!module.exports), - isElectronRenderer: (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions.electron !== 'undefined' && process.type === 'renderer'), - isWebWorker: (typeof AMDLoader.global.importScripts === 'function') - }); + Object.defineProperty(Environment.prototype, "isWindows", { + get: function () { + this._detect(); + return this._isWindows; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "isNode", { + get: function () { + this._detect(); + return this._isNode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "isElectronRenderer", { + get: function () { + this._detect(); + return this._isElectronRenderer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "isWebWorker", { + get: function () { + this._detect(); + return this._isWebWorker; + }, + enumerable: true, + configurable: true + }); + Environment.prototype._detect = function () { + if (this._detected) { + return; + } + this._detected = true; + this._isWindows = Environment._isWindows(); + this._isNode = (typeof module !== 'undefined' && !!module.exports); + this._isElectronRenderer = (typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions.electron !== 'undefined' && process.type === 'renderer'); + this._isWebWorker = (typeof AMDLoader.global.importScripts === 'function'); }; Environment._isWindows = function () { if (typeof navigator !== 'undefined') { @@ -58,20 +93,7 @@ var AMDLoader; *--------------------------------------------------------------------------------------------*/ var AMDLoader; (function (AMDLoader) { - var LoaderEventType; - (function (LoaderEventType) { - LoaderEventType[LoaderEventType["LoaderAvailable"] = 1] = "LoaderAvailable"; - LoaderEventType[LoaderEventType["BeginLoadingScript"] = 10] = "BeginLoadingScript"; - LoaderEventType[LoaderEventType["EndLoadingScriptOK"] = 11] = "EndLoadingScriptOK"; - LoaderEventType[LoaderEventType["EndLoadingScriptError"] = 12] = "EndLoadingScriptError"; - LoaderEventType[LoaderEventType["BeginInvokeFactory"] = 21] = "BeginInvokeFactory"; - LoaderEventType[LoaderEventType["EndInvokeFactory"] = 22] = "EndInvokeFactory"; - LoaderEventType[LoaderEventType["NodeBeginEvaluatingScript"] = 31] = "NodeBeginEvaluatingScript"; - LoaderEventType[LoaderEventType["NodeEndEvaluatingScript"] = 32] = "NodeEndEvaluatingScript"; - LoaderEventType[LoaderEventType["NodeBeginNativeRequire"] = 33] = "NodeBeginNativeRequire"; - LoaderEventType[LoaderEventType["NodeEndNativeRequire"] = 34] = "NodeEndNativeRequire"; - })(LoaderEventType = AMDLoader.LoaderEventType || (AMDLoader.LoaderEventType = {})); - var LoaderEvent = (function () { + var LoaderEvent = /** @class */ (function () { function LoaderEvent(type, detail, timestamp) { this.type = type; this.detail = detail; @@ -80,9 +102,9 @@ var AMDLoader; return LoaderEvent; }()); AMDLoader.LoaderEvent = LoaderEvent; - var LoaderEventRecorder = (function () { + var LoaderEventRecorder = /** @class */ (function () { function LoaderEventRecorder(loaderAvailableTimestamp) { - this._events = [new LoaderEvent(LoaderEventType.LoaderAvailable, '', loaderAvailableTimestamp)]; + this._events = [new LoaderEvent(1 /* LoaderAvailable */, '', loaderAvailableTimestamp)]; } LoaderEventRecorder.prototype.record = function (type, detail) { this._events.push(new LoaderEvent(type, detail, AMDLoader.Utilities.getHighPerformanceTimestamp())); @@ -93,7 +115,7 @@ var AMDLoader; return LoaderEventRecorder; }()); AMDLoader.LoaderEventRecorder = LoaderEventRecorder; - var NullLoaderEventRecorder = (function () { + var NullLoaderEventRecorder = /** @class */ (function () { function NullLoaderEventRecorder() { } NullLoaderEventRecorder.prototype.record = function (type, detail) { @@ -102,9 +124,9 @@ var AMDLoader; NullLoaderEventRecorder.prototype.getEvents = function () { return []; }; + NullLoaderEventRecorder.INSTANCE = new NullLoaderEventRecorder(); return NullLoaderEventRecorder; }()); - NullLoaderEventRecorder.INSTANCE = new NullLoaderEventRecorder(); AMDLoader.NullLoaderEventRecorder = NullLoaderEventRecorder; })(AMDLoader || (AMDLoader = {})); /*--------------------------------------------------------------------------------------------- @@ -113,7 +135,7 @@ var AMDLoader; *--------------------------------------------------------------------------------------------*/ var AMDLoader; (function (AMDLoader) { - var Utilities = (function () { + var Utilities = /** @class */ (function () { function Utilities() { } /** @@ -199,11 +221,11 @@ var AMDLoader; } return (this.HAS_PERFORMANCE_NOW ? AMDLoader.global.performance.now() : Date.now()); }; + Utilities.NEXT_ANONYMOUS_ID = 1; + Utilities.PERFORMANCE_NOW_PROBED = false; + Utilities.HAS_PERFORMANCE_NOW = false; return Utilities; }()); - Utilities.NEXT_ANONYMOUS_ID = 1; - Utilities.PERFORMANCE_NOW_PROBED = false; - Utilities.HAS_PERFORMANCE_NOW = false; AMDLoader.Utilities = Utilities; })(AMDLoader || (AMDLoader = {})); /*--------------------------------------------------------------------------------------------- @@ -212,13 +234,13 @@ var AMDLoader; *--------------------------------------------------------------------------------------------*/ var AMDLoader; (function (AMDLoader) { - var ConfigurationOptionsUtil = (function () { + var ConfigurationOptionsUtil = /** @class */ (function () { function ConfigurationOptionsUtil() { } /** * Ensure configuration options make sense */ - ConfigurationOptionsUtil.validateConfigurationOptions = function (isWebWorker, options) { + ConfigurationOptionsUtil.validateConfigurationOptions = function (options) { function defaultOnError(err) { if (err.errorCode === 'load') { console.error('Loading "' + err.moduleId + '" failed'); @@ -253,8 +275,7 @@ var AMDLoader; options.config = {}; } if (typeof options.catchError === 'undefined') { - // Catch errors by default in web workers, do not catch errors by default in other contexts - options.catchError = isWebWorker; + options.catchError = false; } if (typeof options.urlArgs !== 'string') { options.urlArgs = ''; @@ -295,7 +316,7 @@ var AMDLoader; } return options; }; - ConfigurationOptionsUtil.mergeConfigurationOptions = function (isWebWorker, overwrite, base) { + ConfigurationOptionsUtil.mergeConfigurationOptions = function (overwrite, base) { if (overwrite === void 0) { overwrite = null; } if (base === void 0) { base = null; } var result = AMDLoader.Utilities.recursiveClone(base || {}); @@ -314,25 +335,25 @@ var AMDLoader; result[key] = AMDLoader.Utilities.recursiveClone(value); } }); - return ConfigurationOptionsUtil.validateConfigurationOptions(isWebWorker, result); + return ConfigurationOptionsUtil.validateConfigurationOptions(result); }; return ConfigurationOptionsUtil; }()); AMDLoader.ConfigurationOptionsUtil = ConfigurationOptionsUtil; - var Configuration = (function () { + var Configuration = /** @class */ (function () { function Configuration(env, options) { this._env = env; - this.options = ConfigurationOptionsUtil.mergeConfigurationOptions(this._env.isWebWorker, options); + this.options = ConfigurationOptionsUtil.mergeConfigurationOptions(options); this._createIgnoreDuplicateModulesMap(); this._createNodeModulesMap(); this._createSortedPathsRules(); if (this.options.baseUrl === '') { - if (this._env.isNode && this.options.nodeRequire && this.options.nodeRequire.main && this.options.nodeRequire.main.filename) { + if (this.options.nodeRequire && this.options.nodeRequire.main && this.options.nodeRequire.main.filename && this._env.isNode) { var nodeMain = this.options.nodeRequire.main.filename; var dirnameIndex = Math.max(nodeMain.lastIndexOf('/'), nodeMain.lastIndexOf('\\')); this.options.baseUrl = nodeMain.substring(0, dirnameIndex + 1); } - if (this._env.isNode && this.options.nodeMain) { + if (this.options.nodeMain && this._env.isNode) { var nodeMain = this.options.nodeMain; var dirnameIndex = Math.max(nodeMain.lastIndexOf('/'), nodeMain.lastIndexOf('\\')); this.options.baseUrl = nodeMain.substring(0, dirnameIndex + 1); @@ -383,7 +404,7 @@ var AMDLoader; * @result A new configuration */ Configuration.prototype.cloneAndMerge = function (options) { - return new Configuration(this._env, ConfigurationOptionsUtil.mergeConfigurationOptions(this._env.isWebWorker, options, this.options)); + return new Configuration(this._env, ConfigurationOptionsUtil.mergeConfigurationOptions(options, this.options)); }; /** * Get current options bag. Useful for passing it forward to plugins. @@ -530,41 +551,49 @@ var AMDLoader; /** * Load `scriptSrc` only once (avoid multiple