diff --git a/.github/classifier.yml b/.github/classifier.yml index af9e2f84e41..c1c067e5c53 100644 --- a/.github/classifier.yml +++ b/.github/classifier.yml @@ -1,43 +1,69 @@ { perform: true, alwaysRequireAssignee: false, - labelsRequiringAssignee: [ feature-request ], + labelsRequiringAssignee: [], autoAssignees: { + L10N: [], + VIM: [], api: { assignees: [ jrieken ], assignLabel: false }, - color-picker: [], - css-less-sass: [ aeschli ], + cli: [], + color-palette: [], + config: [], + css-less-scss: [ aeschli ], + debug-console: [], debug: { assignees: [ weinand ], assignLabel: false }, diff-editor: [], + dropdown: [], editor: [], editor-1000-limit: [], editor-autoclosing: [], editor-autoindent: [], editor-brackets: [], editor-clipboard: [], + editor-code-actions: [], + editor-code-lens: [], + editor-color-picker: [], + editor-colors: [], editor-columnselect: [], + editor-commands: [], editor-contrib: [], - editor-core: [], - editor-find-widget: [], + editor-drag-and-drop: [], + editor-find: [], editor-folding: [], + editor-hover: [], editor-ime: [], editor-input: [], + editor-ligatures: [], + editor-links: [], editor-minimap: [], editor-multicursor: [], + editor-parameter-hints: [], + editor-rendering: [], editor-smooth: [], + editor-symbols: [], + editor-textbuffer: [], editor-wrapping: [], emmet: [ ramya-rao-a ], error-list: [], + explorer-custom: [], + extension-host: [], extensions: [], + file-decorations: [], file-encoding: { assignees: [], assignLabel: false }, + file-explorer: { + assignees: [ isidorn ], + assignLabel: false + }, + file-glob: [], file-io: { assignees: [], assignLabel: false @@ -46,45 +72,73 @@ assignees: [], assignLabel: false }, - file-explorer: { - assignees: [ isidorn ], - assignLabel: false - }, - format: [], + formatting: [], git: [ joaomoreno ], + grammar: [], hot-exit: [ Tyriar ], html: [ aeschli ], - i18n: [], install-update: [], integrated-terminal: [ Tyriar ], + integration-test: [], + intellisense-config: [], + issue-reporter: [ RMacfarlane ], javascript: [ mjbvz ], json: [], - keybindings: [], keyboard-layout: [], + keybindings: [], + keybindings-editor: [], + lang-diagnostics: [], languages basic: [], + list: [], + log: [], markdown: [ mjbvz ], + marketplace: [], + menus: [], merge-conflict: [ chrmarti ], multi-root: { assignees: [], assignLabel: false }, + os-integration: [], + outline: [], + output: [], perf-profile: [], + perf-bloat: [], + perf-startup: [], php: [ roblourens ], proxy: [], + quick-pick: [ chrmarti ], + release-notes: [], remote: { assignees: [ jrieken ], assignLabel: false }, + rename: [], + run-as-admin: [], + samples: [], scm: [], search: [ roblourens ], + search-replace: [], + settings-editor: [], + shared-process: [], + smart-select: [], + smoke-test: [], snippets: { assignees: [ jrieken ], assignLabel: false }, + suggest: [], tasks: [ dbaeumer ], telemetry: [], themes: [], + tokenization: [], + tree: [], typescript: [ mjbvz ], + unit-test: [], + uri: [], + ux: [], + vscode-build: [], + webview: [], workbench: { assignees: [], assignLabel: false @@ -109,6 +163,10 @@ assignees: [], assignLabel: false }, + workbench-grid: { + assignees: [], + assignLabel: false + }, workbench-history: { assignees: [], assignLabel: false @@ -145,6 +203,10 @@ assignees: [], assignLabel: false }, + workbench-views: { + assignees: [], + assignLabel: false + }, workbench-welcome: [ chrmarti ] } } diff --git a/build/builtInExtensions.json b/build/builtInExtensions.json index ad7d8680ade..8bd391086c6 100644 --- a/build/builtInExtensions.json +++ b/build/builtInExtensions.json @@ -1,12 +1,12 @@ [ { "name": "ms-vscode.node-debug", - "version": "1.25.3", + "version": "1.25.4", "repo": "https://github.com/Microsoft/vscode-node-debug" }, { "name": "ms-vscode.node-debug2", - "version": "1.25.4", + "version": "1.25.5", "repo": "https://github.com/Microsoft/vscode-node-debug2" } ] diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 47f243676b5..88a57cb08e5 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -71,7 +71,7 @@ const vscodeResources = [ 'out-build/paths.js', 'out-build/vs/**/*.{svg,png,cur,html}', 'out-build/vs/base/common/performance.js', - 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh, cpuUsage.sh}', + 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,cpuUsage.sh}', 'out-build/vs/base/browser/ui/octiconLabel/octicons/**', 'out-build/vs/workbench/browser/media/*-theme.css', 'out-build/vs/workbench/electron-browser/bootstrap/**', @@ -508,6 +508,10 @@ gulp.task('generate-vscode-configuration', () => { return reject(new Error('$AGENT_BUILDDIRECTORY not set')); } + if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') { + return resolve(); + } + const userDataDir = path.join(os.tmpdir(), 'tmpuserdata'); const extensionsDir = path.join(os.tmpdir(), 'tmpextdir'); const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app'; diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 49595d5f078..5a03f23ba7d 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -74,14 +74,15 @@ function buildWin32Setup(arch, target) { DirName: product.win32DirName, Version: pkg.version, RawVersion: pkg.version.replace(/-\w+$/, ''), - NameVersion: product.win32NameVersion, + NameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''), ExeBasename: product.nameShort, RegValueName: product.win32RegValueName, ShellNameShort: product.win32ShellNameShort, AppMutex: product.win32MutexName, Arch: arch, AppId: arch === 'ia32' ? ia32AppId : x64AppId, - IncompatibleAppId: arch === 'ia32' ? x64AppId : ia32AppId, + IncompatibleTargetAppId: arch === 'ia32' ? product.win32AppId : product.win32x64AppId, + IncompatibleArchAppId: arch === 'ia32' ? x64AppId : ia32AppId, AppUserId: product.win32AppUserModelId, ArchitecturesAllowed: arch === 'ia32' ? '' : 'x64', ArchitecturesInstallIn64BitMode: arch === 'ia32' ? '' : 'x64', @@ -108,7 +109,7 @@ defineWin32SetupTasks('x64', 'user'); function archiveWin32Setup(arch) { return cb => { - const args = ['a', '-tzip', zipPath(arch), '.', '-r']; + const args = ['a', '-tzip', zipPath(arch), '-x!CodeSignSummary*.md', '.', '-r']; cp.spawn(_7z, args, { stdio: 'inherit', cwd: buildPath(arch) }) .on('error', cb) diff --git a/build/win32/OSSREADME.json b/build/win32/OSSREADME.json index 5e1078b9519..e9c1e331135 100755 --- a/build/win32/OSSREADME.json +++ b/build/win32/OSSREADME.json @@ -547,7 +547,7 @@ }, { "name": "retep998/winapi-rs", - "version": "0.3.4", + "version": "0.4.0", "repositoryUrl": "https://github.com/retep998/winapi-rs", "licenseDetail": [ "Copyright (c) 2015 The winapi-rs Developers", @@ -599,6 +599,60 @@ ], "isProd": true }, + { + "name": "retep998/winapi-rs", + "version": "0.2.2", + "repositoryUrl": "https://github.com/retep998/winapi-rs", + "licenseDetail": [ + "Copyright (c) 2015 The winapi-rs Developers", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy", + "of this software and associated documentation files (the \"Software\"), to deal", + "in the Software without restriction, including without limitation the rights", + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", + "copies of the Software, and to permit persons to whom the Software is", + "furnished to do so, subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", + "SOFTWARE." + ], + "isProd": true + }, + { + "name": "retep998/winapi-rs", + "version": "0.4.0", + "repositoryUrl": "https://github.com/retep998/winapi-rs", + "licenseDetail": [ + "Copyright (c) 2015 The winapi-rs Developers", + "", + "Permission is hereby granted, free of charge, to any person obtaining a copy", + "of this software and associated documentation files (the \"Software\"), to deal", + "in the Software without restriction, including without limitation the rights", + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", + "copies of the Software, and to permit persons to whom the Software is", + "furnished to do so, subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be included in all", + "copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", + "SOFTWARE." + ], + "isProd": true + }, { "name": "retep998/winapi-rs", "version": "0.1.1", @@ -628,61 +682,7 @@ }, { "name": "retep998/winapi-rs", - "version": "0.4.0", - "repositoryUrl": "https://github.com/retep998/winapi-rs", - "licenseDetail": [ - "Copyright (c) 2015 The winapi-rs Developers", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the \"Software\"), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in all", - "copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ], - "isProd": true - }, - { - "name": "retep998/winapi-rs", - "version": "0.4.0", - "repositoryUrl": "https://github.com/retep998/winapi-rs", - "licenseDetail": [ - "Copyright (c) 2015 The winapi-rs Developers", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the \"Software\"), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in all", - "copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ], - "isProd": true - }, - { - "name": "retep998/winapi-rs", - "version": "0.2.2", + "version": "0.3.4", "repositoryUrl": "https://github.com/retep998/winapi-rs", "licenseDetail": [ "Copyright (c) 2015 The winapi-rs Developers", diff --git a/build/win32/code.iss b/build/win32/code.iss index 3126cb76789..846455906af 100644 --- a/build/win32/code.iss +++ b/build/win32/code.iss @@ -963,8 +963,26 @@ var begin Result := True; - if IsWin64 then begin - RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleAppId}', 2, 38) + '_is1'; + #if "user" == InstallTarget + #if "ia32" == Arch + #define IncompatibleArchRootKey "HKLM32" + #else + #define IncompatibleArchRootKey "HKLM64" + #endif + + if not WizardSilent() then begin + RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleTargetAppId}', 2, 38) + '_is1'; + + if RegKeyExists({#IncompatibleArchRootKey}, RegKey) then begin + if MsgBox('{#NameShort} is already installed on this system for all users. Are you sure you want to install it for this user?', mbConfirmation, MB_YESNO) = IDNO then begin + Result := false; + end; + end; + end; + #endif + + if Result and IsWin64 then begin + RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleArchAppId}', 2, 38) + '_is1'; if '{#Arch}' = 'ia32' then begin Result := not RegKeyExists({#Uninstall64RootKey}, RegKey); diff --git a/build/win32/inno_updater.exe b/build/win32/inno_updater.exe index 6d83b2b748b..31e6e85ffe4 100755 Binary files a/build/win32/inno_updater.exe and b/build/win32/inno_updater.exe differ diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json index 661b18831b2..59fb5eefee2 100644 --- a/extensions/css-language-features/server/package.json +++ b/extensions/css-language-features/server/package.json @@ -8,7 +8,7 @@ "node": "*" }, "dependencies": { - "vscode-css-languageservice": "^3.0.9-next.18", + "vscode-css-languageservice": "^3.0.9-next.20", "vscode-languageserver": "^4.1.3", "vscode-languageserver-protocol-foldingprovider": "^2.0.1" }, diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock index 7003f400a78..dd17147de5b 100644 --- a/extensions/css-language-features/server/yarn.lock +++ b/extensions/css-language-features/server/yarn.lock @@ -194,9 +194,9 @@ supports-color@5.4.0: dependencies: has-flag "^3.0.0" -vscode-css-languageservice@^3.0.9-next.18: - version "3.0.9-next.18" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.9-next.18.tgz#f8f25123b5a8cdc9f72fafcd2c0088f726322437" +vscode-css-languageservice@^3.0.9-next.20: + version "3.0.9-next.20" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.9-next.20.tgz#8229aee66aa877929af5d2fd81a21731b415c92e" dependencies: vscode-languageserver-types "^3.7.2" vscode-nls "^3.2.2" diff --git a/extensions/css/package.json b/extensions/css/package.json index 9517029a69f..13f737e92fc 100644 --- a/extensions/css/package.json +++ b/extensions/css/package.json @@ -8,7 +8,7 @@ "vscode": "0.10.x" }, "scripts": { - "update-grammar": "node ../../build/npm/update-grammar.js atom/language-css grammars/css.cson ./syntaxes/css.tmLanguage.json" + "update-grammar": "node ../../build/npm/update-grammar.js octref/language-css grammars/css.cson ./syntaxes/css.tmLanguage.json" }, "contributes": { "languages": [ diff --git a/extensions/css/syntaxes/css.tmLanguage.json b/extensions/css/syntaxes/css.tmLanguage.json index d1be44fc3d9..ec7659719bb 100644 --- a/extensions/css/syntaxes/css.tmLanguage.json +++ b/extensions/css/syntaxes/css.tmLanguage.json @@ -1,10 +1,10 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-css/blob/master/grammars/css.cson", + "This file has been converted from https://github.com/octref/language-css/blob/master/grammars/css.cson", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-css/commit/17ad55bc5f65c16585e80ea1c7c19e0c0814f6d5", + "version": "https://github.com/octref/language-css/commit/ea1d7e3619966e47c57498913a5eabea0cce7538", "name": "CSS", "scopeName": "source.css", "patterns": [ @@ -604,6 +604,45 @@ "include": "#string" } ] + }, + { + "begin": "(?i)(?=@[\\w-]+(\\s|\\(|/\\*|$))", + "end": "(?<=})(?!\\G)", + "patterns": [ + { + "begin": "(?i)\\G(@)[\\w-]+", + "beginCaptures": { + "0": { + "name": "keyword.control.at-rule.css" + }, + "1": { + "name": "punctuation.definition.keyword.css" + } + }, + "end": "(?=\\s*[{;])", + "name": "meta.at-rule.header.css" + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.begin.bracket.curly.css" + } + }, + "end": "}", + "endCaptures": { + "0": { + "name": "punctuation.section.end.bracket.curly.css" + } + }, + "name": "meta.at-rule.body.css", + "patterns": [ + { + "include": "$self" + } + ] + } + ] } ] }, @@ -1411,7 +1450,7 @@ "name": "invalid.illegal.colon.css" } }, - "match": "(?xi)\n(:)(:*)\n(?: active|any-link|checked|default|disabled|empty|enabled|first\n | (?:first|last|only)-(?:child|of-type)|focus|focus-within|fullscreen|host|hover\n | in-range|indeterminate|invalid|left|link|optional|out-of-range\n | read-only|read-write|required|right|root|scope|target|unresolved\n | valid|visited\n)(?![\\w-]|\\s*[;}])", + "match": "(?xi)\n(:)(:*)\n(?: active|any-link|checked|default|defined|disabled|empty|enabled|first\n | (?:first|last|only)-(?:child|of-type)|focus|focus-visible|focus-within\n | fullscreen|host|hover|in-range|indeterminate|invalid|left|link\n | optional|out-of-range|placeholder-shown|read-only|read-write\n | required|right|root|scope|target|unresolved\n | valid|visited\n)(?![\\w-]|\\s*[;}])", "name": "entity.other.attribute-name.pseudo-class.css" }, "pseudo-elements": { diff --git a/extensions/emmet/src/selectItemHTML.ts b/extensions/emmet/src/selectItemHTML.ts index d5dbbf33d05..7e90bb285e4 100644 --- a/extensions/emmet/src/selectItemHTML.ts +++ b/extensions/emmet/src/selectItemHTML.ts @@ -31,7 +31,7 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco // Get the first child of current node which is right after the cursor and is not a comment nextNode = currentNode.firstChild; - while (nextNode && (selectionEnd.isAfterOrEqual(nextNode.start) || nextNode.type === 'comment')) { + while (nextNode && (selectionEnd.isAfterOrEqual(nextNode.end) || nextNode.type === 'comment')) { nextNode = nextNode.nextSibling; } } @@ -63,7 +63,7 @@ export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vsco if (currentNode.type !== 'comment' && selectionStart.translate(0, -1).isAfter(currentNode.open.start)) { - if (selectionStart.isBefore(currentNode.open.end) || !currentNode.firstChild) { + if (selectionStart.isBefore(currentNode.open.end) || !currentNode.firstChild || selectionEnd.isBeforeOrEqual(currentNode.firstChild.start)) { prevNode = currentNode; } else { // Select the child that appears just before the cursor and is not a comment diff --git a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts index a9f25685b91..f05469ab440 100644 --- a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts +++ b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts @@ -113,6 +113,22 @@ suite('Tests for Next/Previous Select/Edit point and Balance actions', () => { }); }); + test('Emmet Select Next/Prev item at boundary', function(): any { + return withRandomFileEditor(htmlContents, '.html', (editor, doc) => { + editor.selections = [new Selection(4, 1, 4, 1)]; + + fetchSelectItem('next'); + testSelection(editor.selection, 2, 4, 6); + + editor.selections = [new Selection(4, 1, 4, 1)]; + + fetchSelectItem('prev'); + testSelection(editor.selection, 1, 3, 5); + + return Promise.resolve(); + }); + }); + test('Emmet Next/Prev Item in html template', function (): any { const templateContents = `