diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
index 2043e48c7aa..a0435cb1d3e 100644
--- a/.github/ISSUE_TEMPLATE/question.md
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -1,9 +1,9 @@
---
name: Question
-about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/vscode.
+about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/visual-studio-code.
---
🚨 The issue tracker is not for questions 🚨
-If you have a question, please ask it on https://stackoverflow.com/questions/tagged/vscode.
+If you have a question, please ask it on https://stackoverflow.com/questions/tagged/visual-studio-code.
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..2d53c46e935 100644
--- a/build/builtInExtensions.json
+++ b/build/builtInExtensions.json
@@ -1,12 +1,12 @@
[
{
"name": "ms-vscode.node-debug",
- "version": "1.25.3",
+ "version": "1.26.0",
"repo": "https://github.com/Microsoft/vscode-node-debug"
},
{
"name": "ms-vscode.node-debug2",
- "version": "1.25.4",
+ "version": "1.26.0",
"repo": "https://github.com/Microsoft/vscode-node-debug2"
}
]
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
index a84e78dece1..6a4cd05d17f 100644
--- a/build/gulpfile.hygiene.js
+++ b/build/gulpfile.hygiene.js
@@ -82,6 +82,7 @@ const indentationFilter = [
'!build/{lib,tslintRules}/**/*.js',
'!build/**/*.sh',
'!build/tfs/**/*.js',
+ '!build/tfs/**/*.config',
'!**/Dockerfile',
'!extensions/markdown-language-features/media/*.js'
];
@@ -104,6 +105,7 @@ const copyrightFilter = [
'!**/*.code-workspace',
'!build/**/*.init',
'!resources/linux/snap/snapcraft.yaml',
+ '!resources/linux/snap/electron-launch',
'!resources/win32/bin/code.js',
'!extensions/markdown-language-features/media/highlight.css',
'!extensions/html-language-features/server/src/modes/typescript/*',
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index 47f243676b5..526e5e56f5a 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/**',
@@ -265,10 +265,17 @@ function packageTask(platform, arch, opts) {
const packageJsonStream = gulp.src(['package.json'], { base: '.' })
.pipe(json({ name, version }));
- const settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
const date = new Date().toISOString();
+ const productJsonUpdate = { commit, date, checksums };
+
+ try {
+ productJsonUpdate.settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
+ } catch (err) {
+ console.warn(err);
+ }
+
const productJsonStream = gulp.src(['product.json'], { base: '.' })
- .pipe(json({ commit, date, checksums, settingsSearchBuildId }));
+ .pipe(json(productJsonUpdate));
const license = gulp.src(['LICENSES.chromium.html', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' });
@@ -508,6 +515,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..a4268e7ce34 100644
--- a/build/gulpfile.vscode.win32.js
+++ b/build/gulpfile.vscode.win32.js
@@ -26,6 +26,7 @@ const zipPath = arch => path.join(zipDir(arch), `VSCode-win32-${arch}.zip`);
const setupDir = (arch, target) => path.join(repoPath, '.build', `win32-${arch}`, `${target}-setup`);
const issPath = path.join(__dirname, 'win32', 'code.iss');
const innoSetupPath = path.join(path.dirname(path.dirname(require.resolve('innosetup-compiler'))), 'bin', 'ISCC.exe');
+const signPS1 = path.join(repoPath, 'build', 'tfs', 'win32', 'sign.ps1');
function packageInnoSetup(iss, options, cb) {
options = options || {};
@@ -42,7 +43,11 @@ function packageInnoSetup(iss, options, cb) {
keys.forEach(key => assert(typeof definitions[key] === 'string', `Missing value for '${key}' in Inno Setup package step`));
const defs = keys.map(key => `/d${key}=${definitions[key]}`);
- const args = [iss].concat(defs);
+ const args = [
+ iss,
+ ...defs,
+ `/sesrp=powershell.exe -ExecutionPolicy bypass ${signPS1} $f`
+ ];
cp.spawn(innoSetupPath, args, { stdio: ['ignore', 'inherit', 'inherit'] })
.on('error', cb)
@@ -74,14 +79,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 +114,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/lib/i18n.resources.json b/build/lib/i18n.resources.json
index 87da5e9bb0d..81fda4c4e9e 100644
--- a/build/lib/i18n.resources.json
+++ b/build/lib/i18n.resources.json
@@ -78,6 +78,10 @@
"name": "vs/workbench/parts/logs",
"project": "vscode-workbench"
},
+ {
+ "name": "vs/workbench/parts/navigation",
+ "project": "vscode-workbench"
+ },
{
"name": "vs/workbench/parts/output",
"project": "vscode-workbench"
diff --git a/build/tfs/product-build.yml b/build/tfs/product-build.yml
index dec69a68a11..e0ac588a85a 100644
--- a/build/tfs/product-build.yml
+++ b/build/tfs/product-build.yml
@@ -125,91 +125,29 @@ phases:
]
SessionTimeout: 120
+ - task: NuGetCommand@2
+ displayName: Install ESRPClient.exe
+ inputs:
+ restoreSolution: 'build\tfs\win32\ESRPClient\packages.config'
+ feedsToUse: config
+ nugetConfigPath: 'build\tfs\win32\ESRPClient\NuGet.config'
+ externalFeedCredentials: 3fc0b7f7-da09-4ae7-a9c8-d69824b1819b
+ restoreDirectory: packages
+
+ - task: ESRPImportCertTask@1
+ displayName: Import ESRP Request Signing Certificate
+ inputs:
+ ESRP: 'ESRP CodeSign'
+
+ - powershell: |
+ $ErrorActionPreference = "Stop"
+ .\build\tfs\win32\import-esrp-auth-cert.ps1 -AuthCertificateBase64 $(ESRP_AUTH_CERTIFICATE) -AuthCertificateKey $(ESRP_AUTH_CERTIFICATE_KEY)
+ displayName: Import ESRP Auth Certificate
+
- powershell: |
$ErrorActionPreference = "Stop"
npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-archive" "vscode-win32-$(VSCODE_ARCH)-system-setup" "vscode-win32-$(VSCODE_ARCH)-user-setup"
- - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
- inputs:
- ConnectedServiceName: 'ESRP CodeSign'
- FolderPath: '$(agent.builddirectory)'
- Pattern: VSCodeSetup.exe
- signConfigType: inlineSignParams
- inlineOperation: |
- [
- {
- "keyCode": "CP-229803",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/t \"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS\""
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "Append",
- "parameterValue": "/as"
- },
- {
- "parameterName": "FileDigest",
- "parameterValue": "/fd \"SHA256\""
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolVerify",
- "parameters": [
- {
- "parameterName": "VerifyAll",
- "parameterValue": "/all"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- }
- ]
- SessionTimeout: 120
-
- - powershell: |
- $ErrorActionPreference = "Stop"
$Repo = "$(pwd)"
$Root = "$Repo\.."
$SystemExe = "$Repo\.build\win32-$(VSCODE_ARCH)\system-setup\VSCodeSetup.exe"
diff --git a/build/tfs/win32/ESRPClient/NuGet.config b/build/tfs/win32/ESRPClient/NuGet.config
new file mode 100644
index 00000000000..6d6da347fd2
--- /dev/null
+++ b/build/tfs/win32/ESRPClient/NuGet.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/tfs/win32/ESRPClient/packages.config b/build/tfs/win32/ESRPClient/packages.config
new file mode 100644
index 00000000000..d7a6f144f47
--- /dev/null
+++ b/build/tfs/win32/ESRPClient/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/build/tfs/win32/import-esrp-auth-cert.ps1 b/build/tfs/win32/import-esrp-auth-cert.ps1
new file mode 100644
index 00000000000..c345c780231
--- /dev/null
+++ b/build/tfs/win32/import-esrp-auth-cert.ps1
@@ -0,0 +1,14 @@
+Param(
+ [string]$AuthCertificateBase64,
+ [string]$AuthCertificateKey
+)
+
+# Import auth certificate
+$AuthCertificateFileName = [System.IO.Path]::GetTempFileName()
+$AuthCertificateBytes = [Convert]::FromBase64String($AuthCertificateBase64)
+[IO.File]::WriteAllBytes($AuthCertificateFileName, $AuthCertificateBytes)
+$AuthCertificate = Import-PfxCertificate -FilePath $AuthCertificateFileName -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString $AuthCertificateKey -AsPlainText -Force)
+rm $AuthCertificateFileName
+$ESRPAuthCertificateSubjectName = $AuthCertificate.Subject
+
+Write-Output ("##vso[task.setvariable variable=ESRPAuthCertificateSubjectName;]$ESRPAuthCertificateSubjectName")
\ No newline at end of file
diff --git a/build/tfs/win32/sign.ps1 b/build/tfs/win32/sign.ps1
new file mode 100644
index 00000000000..d888a7d104f
--- /dev/null
+++ b/build/tfs/win32/sign.ps1
@@ -0,0 +1,82 @@
+function Create-TmpJson($Obj) {
+ $FileName = [System.IO.Path]::GetTempFileName()
+ ConvertTo-Json -Depth 100 $Obj | Out-File -Encoding UTF8 $FileName
+ return $FileName
+}
+
+$Auth = Create-TmpJson @{
+ Version = "1.0.0"
+ AuthenticationType = "AAD_CERT"
+ ClientId = $env:ESRPClientId
+ AuthCert = @{
+ SubjectName = $env:ESRPAuthCertificateSubjectName
+ StoreLocation = "LocalMachine"
+ StoreName = "My"
+ }
+ RequestSigningCert = @{
+ SubjectName = $env:ESRPCertificateSubjectName
+ StoreLocation = "LocalMachine"
+ StoreName = "My"
+ }
+}
+
+$Policy = Create-TmpJson @{
+ Version = "1.0.0"
+}
+
+$Input = Create-TmpJson @{
+ Version = "1.0.0"
+ SignBatches = @(
+ @{
+ SourceLocationType = "UNC"
+ SignRequestFiles = @(
+ @{
+ SourceLocation = $args[0]
+ }
+ )
+ SigningInfo = @{
+ Operations = @(
+ @{
+ KeyCode = "CP-229803"
+ OperationCode = "SigntoolSign"
+ Parameters = @{
+ OpusName = "VS Code"
+ OpusInfo = "https://code.visualstudio.com/"
+ PageHash = "/NPH"
+ TimeStamp = "/t `"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS`""
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ },
+ @{
+ KeyCode = "CP-230012"
+ OperationCode = "SigntoolSign"
+ Parameters = @{
+ OpusName = "VS Code"
+ OpusInfo = "https://code.visualstudio.com/"
+ Append = "/as"
+ FileDigest = "/fd `"SHA256`""
+ PageHash = "/NPH"
+ TimeStamp = "/tr `"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer`" /td sha256"
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ },
+ @{
+ KeyCode = "CP-230012"
+ OperationCode = "SigntoolVerify"
+ Parameters = @{
+ VerifyAll = "/all"
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ }
+ )
+ }
+ }
+ )
+}
+
+$Output = [System.IO.Path]::GetTempFileName()
+$ScriptPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
+& "$ScriptPath\ESRPClient\packages\EsrpClient.1.0.27\tools\ESRPClient.exe" Sign -a $Auth -p $Policy -i $Input -o $Output
\ No newline at end of file
diff --git a/build/win32/OSSREADME.json b/build/win32/OSSREADME.json
index 5e1078b9519..6e9bb4b251a 100755
--- a/build/win32/OSSREADME.json
+++ b/build/win32/OSSREADME.json
@@ -545,33 +545,6 @@
],
"isProd": true
},
- {
- "name": "retep998/winapi-rs",
- "version": "0.3.4",
- "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.8",
@@ -707,6 +680,33 @@
],
"isProd": true
},
+ {
+ "name": "retep998/winapi-rs",
+ "version": "0.3.4",
+ "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": "rust-lang-nursery/lazy-static.rs",
"version": "1.0.0",
@@ -1791,4 +1791,4 @@
],
"isProd": true
}
-]
+]
\ No newline at end of file
diff --git a/build/win32/code.iss b/build/win32/code.iss
index 3126cb76789..cad2e27d65e 100644
--- a/build/win32/code.iss
+++ b/build/win32/code.iss
@@ -32,6 +32,7 @@ VersionInfoVersion={#RawVersion}
ShowLanguageDialog=auto
ArchitecturesAllowed={#ArchitecturesAllowed}
ArchitecturesInstallIn64BitMode={#ArchitecturesInstallIn64BitMode}
+SignTool=esrp
#if "user" == InstallTarget
DefaultDirName={userpf}\{#DirName}
@@ -91,7 +92,7 @@ Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong
#if "user" == InstallTarget
#define SoftwareClassesRootKey "HKCU"
#else
-#define SoftwareClassesRootKey "HKCR"
+#define SoftwareClassesRootKey "HKLM"
#endif
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ascx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
@@ -945,7 +946,7 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Drive\shell\{#RegValu
#define Uninstall64RootKey "HKCU64"
#define Uninstall32RootKey "HKCU32"
#else
-#define EnvironmentRootKey "HKCR"
+#define EnvironmentRootKey "HKLM"
#define EnvironmentKey "System\CurrentControlSet\Control\Session Manager\Environment"
#define Uninstall64RootKey "HKLM64"
#define Uninstall32RootKey "HKLM32"
@@ -963,8 +964,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..d2715b864f5 100755
Binary files a/build/win32/inno_updater.exe and b/build/win32/inno_updater.exe differ
diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json
index e66a313c9f6..f63d8c84087 100644
--- a/extensions/configuration-editing/package.json
+++ b/extensions/configuration-editing/package.json
@@ -18,7 +18,7 @@
},
"dependencies": {
"jsonc-parser": "^1.0.0",
- "vscode-nls": "^3.2.1"
+ "vscode-nls": "^3.2.4"
},
"contributes": {
"languages": [
diff --git a/extensions/configuration-editing/yarn.lock b/extensions/configuration-editing/yarn.lock
index 29d3d43ae80..bcf4ddb12d8 100644
--- a/extensions/configuration-editing/yarn.lock
+++ b/extensions/configuration-editing/yarn.lock
@@ -10,6 +10,6 @@ jsonc-parser@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.4.tgz#2166b4183c8aea884d20727f5449e62be69fd398"
diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json
index 9bfc56b2e3f..dc78673bf07 100644
--- a/extensions/css-language-features/package.json
+++ b/extensions/css-language-features/package.json
@@ -709,7 +709,7 @@
"dependencies": {
"vscode-languageclient": "^4.1.4",
"vscode-languageserver-protocol-foldingprovider": "^2.0.1",
- "vscode-nls": "^3.2.2"
+ "vscode-nls": "^3.2.4"
},
"devDependencies": {
"@types/node": "7.0.43",
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-language-features/yarn.lock b/extensions/css-language-features/yarn.lock
index 840422a34db..ac76cfede80 100644
--- a/extensions/css-language-features/yarn.lock
+++ b/extensions/css-language-features/yarn.lock
@@ -161,9 +161,9 @@ vscode-languageserver-types@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz#aad8846f8e3e27962648554de5a8417e358f34eb"
-vscode-nls@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+vscode-nls@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.4.tgz#2166b4183c8aea884d20727f5449e62be69fd398"
wrappy@1:
version "1.0.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/package.json b/extensions/emmet/package.json
index 397a5a35a09..406b25c97d2 100644
--- a/extensions/emmet/package.json
+++ b/extensions/emmet/package.json
@@ -449,6 +449,6 @@
"image-size": "^0.5.2",
"vscode-emmet-helper": "^1.2.10",
"vscode-languageserver-types": "^3.5.0",
- "vscode-nls": "3.2.1"
+ "vscode-nls": "3.2.4"
}
}
diff --git a/extensions/emmet/src/balance.ts b/extensions/emmet/src/balance.ts
index 5e323f29e22..4687b734524 100644
--- a/extensions/emmet/src/balance.ts
+++ b/extensions/emmet/src/balance.ts
@@ -61,7 +61,7 @@ function balance(out: boolean) {
}
function getRangeToBalanceOut(document: vscode.TextDocument, selection: vscode.Selection, rootNode: HtmlNode): vscode.Selection {
- let nodeToBalance = getHtmlNode(document, rootNode, selection.start);
+ let nodeToBalance = getHtmlNode(document, rootNode, selection.start, false);
if (!nodeToBalance) {
return selection;
}
diff --git a/extensions/emmet/src/mergeLines.ts b/extensions/emmet/src/mergeLines.ts
index 848966de4d1..cebcea3010f 100644
--- a/extensions/emmet/src/mergeLines.ts
+++ b/extensions/emmet/src/mergeLines.ts
@@ -34,7 +34,7 @@ function getRangesToReplace(document: vscode.TextDocument, selection: vscode.Sel
let endNodeToUpdate: Node | null;
if (selection.isEmpty) {
- startNodeToUpdate = endNodeToUpdate = getNode(rootNode, selection.start);
+ startNodeToUpdate = endNodeToUpdate = getNode(rootNode, selection.start, true);
} else {
startNodeToUpdate = getNode(rootNode, selection.start, true);
endNodeToUpdate = getNode(rootNode, selection.end, true);
diff --git a/extensions/emmet/src/removeTag.ts b/extensions/emmet/src/removeTag.ts
index 0ea6e4dde96..9209a6d75e8 100644
--- a/extensions/emmet/src/removeTag.ts
+++ b/extensions/emmet/src/removeTag.ts
@@ -38,7 +38,7 @@ export function removeTag() {
function getRangeToRemove(editor: vscode.TextEditor, rootNode: HtmlNode, selection: vscode.Selection, indentInSpaces: string): vscode.Range[] {
- let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start);
+ let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start, true);
if (!nodeToUpdate) {
return [];
}
diff --git a/extensions/emmet/src/selectItemHTML.ts b/extensions/emmet/src/selectItemHTML.ts
index d5dbbf33d05..6fe1825fd87 100644
--- a/extensions/emmet/src/selectItemHTML.ts
+++ b/extensions/emmet/src/selectItemHTML.ts
@@ -8,7 +8,7 @@ import { getDeepestNode, findNextWord, findPrevWord, getHtmlNode } from './util'
import { HtmlNode } from 'EmmetNode';
export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
- let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd);
+ let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd, false);
let nextNode: HtmlNode | undefined = undefined;
if (!currentNode) {
@@ -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;
}
}
@@ -54,7 +54,7 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
}
export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
- let currentNode = getHtmlNode(editor.document, rootNode, selectionStart);
+ let currentNode = getHtmlNode(editor.document, rootNode, selectionStart, false);
let prevNode: HtmlNode | undefined = undefined;
if (!currentNode) {
@@ -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/selectItemStylesheet.ts b/extensions/emmet/src/selectItemStylesheet.ts
index 3a63a8cb79f..29df659c564 100644
--- a/extensions/emmet/src/selectItemStylesheet.ts
+++ b/extensions/emmet/src/selectItemStylesheet.ts
@@ -51,7 +51,7 @@ export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vsco
}
export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, editor: vscode.TextEditor, rootNode: CssNode): vscode.Selection | undefined {
- let currentNode = getNode(rootNode, startOffset);
+ let currentNode = getNode(rootNode, startOffset, false);
if (!currentNode) {
currentNode = rootNode;
}
diff --git a/extensions/emmet/src/splitJoinTag.ts b/extensions/emmet/src/splitJoinTag.ts
index c437d5d14f3..a5f1d255c85 100644
--- a/extensions/emmet/src/splitJoinTag.ts
+++ b/extensions/emmet/src/splitJoinTag.ts
@@ -20,7 +20,7 @@ export function splitJoinTag() {
return editor.edit(editBuilder => {
editor.selections.reverse().forEach(selection => {
- let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start);
+ let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start, true);
if (nodeToUpdate) {
let textEdit = getRangesToReplace(editor.document, nodeToUpdate);
editBuilder.replace(textEdit.range, textEdit.newText);
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 = `
+
+