diff --git a/.github/workflows/author-verified.yml b/.github/workflows/author-verified.yml index 33b4b607615..2a24e793ac6 100644 --- a/.github/workflows/author-verified.yml +++ b/.github/workflows/author-verified.yml @@ -1,9 +1,5 @@ name: Author Verified on: - repository_dispatch: - types: [trigger-author-verified] - schedule: - - cron: 20 14 * * * # 4:20pm Zurich issues: types: [closed] @@ -13,28 +9,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Actions - if: github.event_name != 'issues' || contains(github.event.issue.labels.*.name, 'author-verification-requested') + if: contains(github.event.issue.labels.*.name, 'author-verification-requested') && contains(github.event.issue.labels.*.name, 'insiders-released') uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions - if: github.event_name != 'issues' || contains(github.event.issue.labels.*.name, 'author-verification-requested') + if: contains(github.event.issue.labels.*.name, 'author-verification-requested') && contains(github.event.issue.labels.*.name, 'insiders-released') run: npm install --production --prefix ./actions - - name: Checkout Repo - if: github.event_name != 'issues' || contains(github.event.issue.labels.*.name, 'author-verification-requested') - uses: actions/checkout@v2 - with: - path: ./repo - fetch-depth: 0 - name: Run Author Verified - if: github.event_name != 'issues' || contains(github.event.issue.labels.*.name, 'author-verification-requested') + if: contains(github.event.issue.labels.*.name, 'author-verification-requested') && contains(github.event.issue.labels.*.name, 'insiders-released') uses: ./actions/author-verified with: appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}} - requestVerificationComment: "This bug has been fixed in to the latest release of [VS Code Insiders](https://code.visualstudio.com/insiders/)!\n\n@${author}, you can help us out by commenting `/verified` if things are now working as expected.\n\nIf things still don't seem right, please ensure you're on version ${commit} of Insiders (today's or later - you can use `Help: About` in the command palette to check), and leave a comment letting us know what isn't working as expected.\n\nHappy Coding!" - pendingReleaseLabel: awaiting-insiders-release + requestVerificationComment: "This bug has been fixed in the latest release of [VS Code Insiders](https://code.visualstudio.com/insiders/)!\n\n@${author}, you can help us out by commenting `/verified` if things are now working as expected.\n\nIf things still don't seem right, please ensure you're on version ${commit} of Insiders (today's or later - you can use `Help: About` in the command palette to check), and leave a comment letting us know what isn't working as expected.\n\nHappy Coding!" + releasedLabel: insiders-released verifiedLabel: verified authorVerificationRequestedLabel: author-verification-requested diff --git a/.github/workflows/deep-classifier-monitor.yml b/.github/workflows/deep-classifier-monitor.yml index e8ad08aab97..106266d0cff 100644 --- a/.github/workflows/deep-classifier-monitor.yml +++ b/.github/workflows/deep-classifier-monitor.yml @@ -11,7 +11,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions run: npm install --production --prefix ./actions diff --git a/.github/workflows/deep-classifier-runner.yml b/.github/workflows/deep-classifier-runner.yml index af42751b6fe..674b35d0b78 100644 --- a/.github/workflows/deep-classifier-runner.yml +++ b/.github/workflows/deep-classifier-runner.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions run: npm install --production --prefix ./actions diff --git a/.github/workflows/deep-classifier-scraper.yml b/.github/workflows/deep-classifier-scraper.yml index 837e569689e..78a9b7f9f17 100644 --- a/.github/workflows/deep-classifier-scraper.yml +++ b/.github/workflows/deep-classifier-scraper.yml @@ -11,7 +11,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions run: npm install --production --prefix ./actions diff --git a/.github/workflows/english-please.yml b/.github/workflows/english-please.yml index 70ae98f4002..a11a9a357c6 100644 --- a/.github/workflows/english-please.yml +++ b/.github/workflows/english-please.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions if: contains(github.event.issue.labels.*.name, '*english-please') diff --git a/.github/workflows/feature-request.yml b/.github/workflows/feature-request.yml index 22307714747..bce7976b0c6 100644 --- a/.github/workflows/feature-request.yml +++ b/.github/workflows/feature-request.yml @@ -18,7 +18,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions if: github.event_name != 'issues' || contains(github.event.issue.labels.*.name, 'feature-request') run: npm install --production --prefix ./actions diff --git a/.github/workflows/latest-release-monitor.yml b/.github/workflows/latest-release-monitor.yml index bc4b6b55799..34148088b94 100644 --- a/.github/workflows/latest-release-monitor.yml +++ b/.github/workflows/latest-release-monitor.yml @@ -14,7 +14,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions run: npm install --production --prefix ./actions - name: Install Storage Module diff --git a/.github/workflows/locker.yml b/.github/workflows/locker.yml index 3cdf09ba68c..d0840daf02b 100644 --- a/.github/workflows/locker.yml +++ b/.github/workflows/locker.yml @@ -14,7 +14,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions run: npm install --production --prefix ./actions - name: Run Locker diff --git a/.github/workflows/needs-more-info-closer.yml b/.github/workflows/needs-more-info-closer.yml index d1f9a824dcd..bff4ce82697 100644 --- a/.github/workflows/needs-more-info-closer.yml +++ b/.github/workflows/needs-more-info-closer.yml @@ -14,7 +14,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions run: npm install --production --prefix ./actions - name: Run Needs More Info Closer diff --git a/.github/workflows/no-yarn-lock-changes.yml b/.github/workflows/no-yarn-lock-changes.yml index c7c8853452f..7bceb299030 100644 --- a/.github/workflows/no-yarn-lock-changes.yml +++ b/.github/workflows/no-yarn-lock-changes.yml @@ -1,8 +1,9 @@ -name: "Prevent yarn.lock changes in PRs" +name: Prevent yarn.lock changes in PRs on: [pull_request] jobs: main: + name: Prevent yarn.lock changes in PRs runs-on: ubuntu-latest steps: - id: file_changes diff --git a/.github/workflows/commands.yml b/.github/workflows/on-comment.yml similarity index 63% rename from .github/workflows/commands.yml rename to .github/workflows/on-comment.yml index f189a10a2cd..8d661336a89 100644 --- a/.github/workflows/commands.yml +++ b/.github/workflows/on-comment.yml @@ -1,4 +1,4 @@ -name: Commands +name: On Comment on: issue_comment: types: [created] @@ -13,7 +13,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions run: npm install --production --prefix ./actions - name: Run Commands @@ -22,3 +22,10 @@ jobs: appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}} config-path: commands + - name: "Run Release Pipeline Labeler" + uses: ./actions/release-pipeline + with: + token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}} + appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} + notYetReleasedLabel: unreleased + insidersReleasedLabel: insiders-released diff --git a/.github/workflows/on-label.yml b/.github/workflows/on-label.yml index 86bbecb6884..9d62de8e57c 100644 --- a/.github/workflows/on-label.yml +++ b/.github/workflows/on-label.yml @@ -11,29 +11,25 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions run: npm install --production --prefix ./actions # source of truth in ./author-verified.yml - - name: Checkout Repo - if: contains(github.event.issue.labels.*.name, 'author-verification-requested') - uses: actions/checkout@v2 - with: - path: ./repo - fetch-depth: 0 - name: Run Author Verified - if: contains(github.event.issue.labels.*.name, 'author-verification-requested') + if: contains(github.event.issue.labels.*.name, 'author-verification-requested') && contains(github.event.issue.labels.*.name, 'insiders-released') uses: ./actions/author-verified with: appInsightsKey: ${{secrets.TRIAGE_ACTIONS_APP_INSIGHTS}} - requestVerificationComment: "This bug has been fixed in to the latest release of [VS Code Insiders](https://code.visualstudio.com/insiders/)!\n\n@${author}, you can help us out by confirming things are working as expected in the latest Insiders release. If things look good, please leave a comment with the text `/verified` to let us know. If not, please ensure you're on version ${commit} of Insiders (today's or later - you can use `Help: About` in the command palette to check), and leave a comment letting us know what isn't working as expected.\n\nHappy Coding!" - pendingReleaseLabel: awaiting-insiders-release + token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}} + requestVerificationComment: "This bug has been fixed in the latest release of [VS Code Insiders](https://code.visualstudio.com/insiders/)!\n\n@${author}, you can help us out by commenting `/verified` if things are now working as expected.\n\nIf things still don't seem right, please ensure you're on version ${commit} of Insiders (today's or later - you can use `Help: About` in the command palette to check), and leave a comment letting us know what isn't working as expected.\n\nHappy Coding!" + releasedLabel: insiders-released verifiedLabel: verified authorVerificationRequestedLabel: author-verification-requested - # source of truth in ./commands.yml + + # also make changes in ./on-comment.yml - name: Run Commands uses: ./actions/commands with: diff --git a/.github/workflows/on-open.yml b/.github/workflows/on-open.yml index c500a0e2b76..e5dc42ac44a 100644 --- a/.github/workflows/on-open.yml +++ b/.github/workflows/on-open.yml @@ -11,7 +11,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Install Actions run: npm install --production --prefix ./actions diff --git a/.github/workflows/release-pipeline-labeler.yml b/.github/workflows/release-pipeline-labeler.yml index edb01fa5278..0124667d4a8 100644 --- a/.github/workflows/release-pipeline-labeler.yml +++ b/.github/workflows/release-pipeline-labeler.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v2 with: repository: "microsoft/vscode-github-triage-actions" - ref: v42 + ref: stable path: ./actions - name: Checkout Repo if: github.event_name != 'issues' diff --git a/.github/workflows/test-plan-item-validator.yml b/.github/workflows/test-plan-item-validator.yml index 72c21346370..3d381236e09 100644 --- a/.github/workflows/test-plan-item-validator.yml +++ b/.github/workflows/test-plan-item-validator.yml @@ -14,7 +14,7 @@ jobs: with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: v42 + ref: stable - name: Install Actions if: contains(github.event.issue.labels.*.name, 'testplan-item') || contains(github.event.issue.labels.*.name, 'invalid-testplan-item') run: npm install --production --prefix ./actions diff --git a/.mailmap b/.mailmap index d54a71fdf1f..bd9e4941e50 100644 --- a/.mailmap +++ b/.mailmap @@ -1,2 +1,5 @@ Eric Amodio Eric Amodio Daniel Imms Daniel Imms +Tanha Kabir Tanha Kabir +Raymond Zhao +Tyler Leonhardt Tyler Leonhardt diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index b760d90aaf5..a34ae1c4247 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -244,6 +244,16 @@ steps: displayName: Run smoke tests (Electron) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + - script: | + set -e + APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) + APP_NAME="`ls $APP_ROOT | head -n 1`" + VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin" \ + yarn smoketest-no-compile --build "$APP_ROOT/$APP_NAME" --remote + timeoutInMinutes: 5 + displayName: Run smoke tests (Remote) + condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + - script: | set -e VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin" \ diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json index bb2ed8a7e41..9dc574614ff 100644 --- a/build/lib/i18n.resources.json +++ b/build/lib/i18n.resources.json @@ -218,6 +218,10 @@ "name": "vs/workbench/contrib/webviewPanel", "project": "vscode-workbench" }, + { + "name": "vs/workbench/contrib/workspace", + "project": "vscode-workbench" + }, { "name": "vs/workbench/contrib/workspaces", "project": "vscode-workbench" diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json index 5edd01aa31c..174c668b0ff 100644 --- a/extensions/css-language-features/package.json +++ b/extensions/css-language-features/package.json @@ -61,6 +61,18 @@ "default": true, "description": "%css.validate.desc%" }, + "css.hover.documentation": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%css.hover.documentation%" + }, + "css.hover.references": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%css.hover.references%" + }, "css.lint.compatibleVendorPrefixes": { "type": "string", "scope": "resource", @@ -316,6 +328,18 @@ "default": true, "description": "%scss.validate.desc%" }, + "scss.hover.documentation": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%scss.hover.documentation%" + }, + "scss.hover.references": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%scss.hover.references%" + }, "scss.lint.compatibleVendorPrefixes": { "type": "string", "scope": "resource", @@ -561,6 +585,18 @@ "default": true, "description": "%less.validate.desc%" }, + "less.hover.documentation": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%less.hover.documentation%" + }, + "less.hover.references": { + "type": "boolean", + "scope": "resource", + "default": true, + "description": "%less.hover.references%" + }, "less.lint.compatibleVendorPrefixes": { "type": "string", "scope": "resource", diff --git a/extensions/css-language-features/package.nls.json b/extensions/css-language-features/package.nls.json index 7f2ffb5c1d9..b27b41636f9 100644 --- a/extensions/css-language-features/package.nls.json +++ b/extensions/css-language-features/package.nls.json @@ -28,6 +28,8 @@ "css.trace.server.desc": "Traces the communication between VS Code and the CSS language server.", "css.validate.title": "Controls CSS validation and problem severities.", "css.validate.desc": "Enables or disables all validations.", + "css.hover.documentation": "Show tag and attribute documentation in CSS hovers.", + "css.hover.references": "Show references to MDN in CSS hovers.", "less.title": "LESS", "less.completion.triggerPropertyValueCompletion.desc": "By default, VS Code triggers property value completion after selecting a CSS property. Use this setting to disable this behavior.", "less.completion.completePropertyWithSemicolon.desc": "Insert semicolon at end of line when completing CSS properties", @@ -53,6 +55,8 @@ "less.lint.zeroUnits.desc": "No unit for zero needed.", "less.validate.title": "Controls LESS validation and problem severities.", "less.validate.desc": "Enables or disables all validations.", + "less.hover.documentation": "Show tag and attribute documentation in LESS hovers.", + "less.hover.references": "Show references to MDN in LESS hovers.", "scss.title": "SCSS (Sass)", "scss.completion.triggerPropertyValueCompletion.desc": "By default, VS Code triggers property value completion after selecting a CSS property. Use this setting to disable this behavior.", "scss.completion.completePropertyWithSemicolon.desc": "Insert semicolon at end of line when completing CSS properties", @@ -78,6 +82,8 @@ "scss.lint.zeroUnits.desc": "No unit for zero needed.", "scss.validate.title": "Controls SCSS validation and problem severities.", "scss.validate.desc": "Enables or disables all validations.", + "scss.hover.documentation": "Show tag and attribute documentation in SCSS hovers.", + "scss.hover.references": "Show references to MDN in SCSS hovers.", "css.colorDecorators.enable.deprecationMessage": "The setting `css.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.", "scss.colorDecorators.enable.deprecationMessage": "The setting `scss.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.", "less.colorDecorators.enable.deprecationMessage": "The setting `less.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`." diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json index e271bfd7fab..f33c90caae9 100644 --- a/extensions/css-language-features/server/package.json +++ b/extensions/css-language-features/server/package.json @@ -10,7 +10,7 @@ "main": "./out/node/cssServerMain", "browser": "./dist/browser/cssServerMain", "dependencies": { - "vscode-css-languageservice": "^5.0.3", + "vscode-css-languageservice": "^5.1.0", "vscode-languageserver": "^7.0.0", "vscode-uri": "^3.0.2" }, diff --git a/extensions/css-language-features/server/src/cssServer.ts b/extensions/css-language-features/server/src/cssServer.ts index e62a8ecc20a..cdfe37ff6a1 100644 --- a/extensions/css-language-features/server/src/cssServer.ts +++ b/extensions/css-language-features/server/src/cssServer.ts @@ -206,10 +206,10 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment) return runSafeAsync(async () => { const document = documents.get(textDocumentPosition.textDocument.uri); if (document) { - await dataProvidersReady; + const [settings,] = await Promise.all([getDocumentSettings(document), dataProvidersReady]); const styleSheet = stylesheets.get(document); const documentContext = getDocumentContext(document.uri, workspaceFolders); - return getLanguageService(document).doComplete2(document, textDocumentPosition.position, styleSheet, documentContext); + return getLanguageService(document).doComplete2(document, textDocumentPosition.position, styleSheet, documentContext, settings?.completion); } return null; }, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`, token); @@ -219,9 +219,9 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment) return runSafeAsync(async () => { const document = documents.get(textDocumentPosition.textDocument.uri); if (document) { - await dataProvidersReady; + const [settings,] = await Promise.all([getDocumentSettings(document), dataProvidersReady]); const styleSheet = stylesheets.get(document); - return getLanguageService(document).doHover(document, textDocumentPosition.position, styleSheet); + return getLanguageService(document).doHover(document, textDocumentPosition.position, styleSheet, settings?.hover); } return null; }, null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`, token); diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock index 62acbd46baf..5f49fd38717 100644 --- a/extensions/css-language-features/server/yarn.lock +++ b/extensions/css-language-features/server/yarn.lock @@ -12,10 +12,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== -vscode-css-languageservice@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.0.3.tgz#2d400a47e73d0bfc5bc0d3fdf5be487cfdca341b" - integrity sha512-KJt4jhCxqrgGrC02UsQsKw90dPkFknMHsH5HTInT7gkDRRfGFwEd+e2O1/E75br3TdFhvRmzjljYz5thZ58L3A== +vscode-css-languageservice@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.0.tgz#cd172d13e9e7ae23ba567c73778aee10475ff716" + integrity sha512-iLHd/WjRKgaZBXMNeUooHG+r0qlhJBkXa+3MpQQR6Rpm928cis/3OV2Mp1R80yAQevIMeDL32RIJfHoJCT/RRg== dependencies: vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-types "^3.16.0" diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index 4fe4b5f4bac..c786c715cde 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -439,7 +439,7 @@ "@emmetio/html-matcher": "^0.3.3", "@emmetio/math-expression": "^1.0.4", "image-size": "^0.5.2", - "vscode-emmet-helper": "2.2.4-3", + "vscode-emmet-helper": "2.2.4", "vscode-languageserver-textdocument": "^1.0.1" } } diff --git a/extensions/emmet/yarn.lock b/extensions/emmet/yarn.lock index b2b572223e9..bebce02cf48 100644 --- a/extensions/emmet/yarn.lock +++ b/extensions/emmet/yarn.lock @@ -75,10 +75,10 @@ jsonc-parser@^2.3.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== -vscode-emmet-helper@2.2.4-3: - version "2.2.4-3" - resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-2.2.4-3.tgz#b1aed7eaaf0ecc2480c65c819f6e9d42d2d3cf5a" - integrity sha512-M+pAiAro8nRiHb0/9lRoRzBod6DPlSwhOX26ZfM8n9a7/zr9ZJojxohDyGmnsApU5xVPhcrsNVI/fEagSeeO0Q== +vscode-emmet-helper@2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-2.2.4.tgz#8ab86d2b7fe9e6270b4c77c9fd8d1eb8f3f4c401" + integrity sha512-1N6bMzP1ZzkDGzamvsKxQ/lOmBc4+OQdj0dA2C9A5PSeYV9gh5xbJ061sm+VyFHOGZE+VyUQq5m/WFmFsLbKnA== dependencies: emmet "https://github.com/rzhao271/emmet.git#1b2df677d8925ef5ea6da9df8845968403979a0a" jsonc-parser "^2.3.0" diff --git a/extensions/git/package.json b/extensions/git/package.json index 4f0a6e8c40a..d18cdba8057 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -2140,6 +2140,15 @@ "highContrast": "#c74e39" } }, + { + "id": "gitDecoration.renamedResourceForeground", + "description": "%colors.renamed%", + "defaults": { + "light": "#007100", + "dark": "#73C991", + "highContrast": "#73C991" + } + }, { "id": "gitDecoration.untrackedResourceForeground", "description": "%colors.untracked%", @@ -2180,9 +2189,9 @@ "id": "gitDecoration.conflictingResourceForeground", "description": "%colors.conflict%", "defaults": { - "light": "#6c6cc4", - "dark": "#6c6cc4", - "highContrast": "#6c6cc4" + "light": "#ad0707", + "dark": "#e4676b", + "highContrast": "#c74e39" } }, { diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index f76c42dbb55..394a326c0a7 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -198,6 +198,7 @@ "colors.stageModified": "Color for modified resources which have been staged.", "colors.stageDeleted": "Color for deleted resources which have been staged.", "colors.deleted": "Color for deleted resources.", + "colors.renamed": "Color for renamed or copied resources.", "colors.untracked": "Color for untracked resources.", "colors.ignored": "Color for ignored resources.", "colors.conflict": "Color for resources with conflicts.", diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index e8b45122de4..aabea31a725 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -5,7 +5,7 @@ import * as os from 'os'; import * as path from 'path'; -import { commands, Disposable, LineChange, MessageOptions, OutputChannel, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider } from 'vscode'; +import { Command, commands, Disposable, LineChange, MessageOptions, OutputChannel, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider } from 'vscode'; import TelemetryReporter from 'vscode-extension-telemetry'; import * as nls from 'vscode-nls'; import { Branch, ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourceProvider } from './api/git'; @@ -153,21 +153,21 @@ class AddRemoteItem implements QuickPickItem { } } -interface CommandOptions { +interface ScmCommandOptions { repository?: boolean; diff?: boolean; } -interface Command { +interface ScmCommand { commandId: string; key: string; method: Function; - options: CommandOptions; + options: ScmCommandOptions; } -const Commands: Command[] = []; +const Commands: ScmCommand[] = []; -function command(commandId: string, options: CommandOptions = {}): Function { +function command(commandId: string, options: ScmCommandOptions = {}): Function { return (_target: any, key: string, descriptor: any) => { if (!(typeof descriptor.value === 'function')) { throw new Error('not supported'); @@ -2612,6 +2612,22 @@ export class CommandCenter { @command('git.timeline.openDiff', { repository: false }) async timelineOpenDiff(item: TimelineItem, uri: Uri | undefined, _source: string) { + const cmd = this.resolveTimelineOpenDiffCommand( + item, uri, + { + preserveFocus: true, + preview: true, + viewColumn: ViewColumn.Active + }, + ); + if (cmd === undefined) { + return undefined; + } + + return commands.executeCommand(cmd.command, ...(cmd.arguments ?? [])); + } + + resolveTimelineOpenDiffCommand(item: TimelineItem, uri: Uri | undefined, options?: TextDocumentShowOptions): Command | undefined { if (uri === undefined || uri === null || !GitTimelineItem.is(item)) { return undefined; } @@ -2628,13 +2644,11 @@ export class CommandCenter { title = localize('git.title.diffRefs', '{0} ({1}) ⟷ {0} ({2})', basename, item.shortPreviousRef, item.shortRef); } - const options: TextDocumentShowOptions = { - preserveFocus: true, - preview: true, - viewColumn: ViewColumn.Active + return { + command: 'vscode.diff', + title: 'Open Comparison', + arguments: [toGitUri(uri, item.previousRef), item.ref === '' ? uri : toGitUri(uri, item.ref), title, options] }; - - return commands.executeCommand('vscode.diff', toGitUri(uri, item.previousRef), item.ref === '' ? uri : toGitUri(uri, item.ref), title, options); } @command('git.timeline.copyCommitId', { repository: false }) @@ -2664,7 +2678,7 @@ export class CommandCenter { } } - private createCommand(id: string, key: string, method: Function, options: CommandOptions): (...args: any[]) => any { + private createCommand(id: string, key: string, method: Function, options: ScmCommandOptions): (...args: any[]) => any { const result = (...args: any[]) => { let result: Promise; diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index d5c81c8891f..f391996c968 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -73,12 +73,13 @@ async function createModel(context: ExtensionContext, outputChannel: OutputChann git.onOutput.addListener('log', onOutput); disposables.push(toDisposable(() => git.onOutput.removeListener('log', onOutput))); + const cc = new CommandCenter(git, model, outputChannel, telemetryReporter); disposables.push( - new CommandCenter(git, model, outputChannel, telemetryReporter), + cc, new GitFileSystemProvider(model), new GitDecorations(model), new GitProtocolHandler(), - new GitTimelineProvider(model) + new GitTimelineProvider(model, cc) ); checkGitVersion(info); diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index c374e780faf..90149ad0a87 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -55,13 +55,13 @@ export class Resource implements SourceControlResourceState { case Status.UNTRACKED: return localize('untracked', "Untracked"); case Status.IGNORED: return localize('ignored', "Ignored"); case Status.INTENT_TO_ADD: return localize('intent to add', "Intent to Add"); - case Status.BOTH_DELETED: return localize('both deleted', "Both Deleted"); - case Status.ADDED_BY_US: return localize('added by us', "Added By Us"); - case Status.DELETED_BY_THEM: return localize('deleted by them', "Deleted By Them"); - case Status.ADDED_BY_THEM: return localize('added by them', "Added By Them"); - case Status.DELETED_BY_US: return localize('deleted by us', "Deleted By Us"); - case Status.BOTH_ADDED: return localize('both added', "Both Added"); - case Status.BOTH_MODIFIED: return localize('both modified', "Both Modified"); + case Status.BOTH_DELETED: return localize('both deleted', "Conflict: Both Deleted"); + case Status.ADDED_BY_US: return localize('added by us', "Conflict: Added By Us"); + case Status.DELETED_BY_THEM: return localize('deleted by them', "Conflict: Deleted By Them"); + case Status.ADDED_BY_THEM: return localize('added by them', "Conflict: Added By Them"); + case Status.DELETED_BY_US: return localize('deleted by us', "Conflict: Deleted By Us"); + case Status.BOTH_ADDED: return localize('both added', "Conflict: Both Added"); + case Status.BOTH_MODIFIED: return localize('both modified', "Conflict: Both Modified"); default: return ''; } } @@ -199,12 +199,13 @@ export class Resource implements SourceControlResourceState { case Status.DELETED_BY_US: return 'D'; case Status.INDEX_COPIED: + return 'C'; case Status.BOTH_DELETED: case Status.ADDED_BY_US: case Status.ADDED_BY_THEM: case Status.BOTH_ADDED: case Status.BOTH_MODIFIED: - return 'C'; + return '!'; // Using ! instead of ⚠, because the latter looks really bad on windows default: throw new Error('Unknown git status: ' + this.type); } @@ -223,12 +224,13 @@ export class Resource implements SourceControlResourceState { case Status.INDEX_ADDED: case Status.INTENT_TO_ADD: return new ThemeColor('gitDecoration.addedResourceForeground'); + case Status.INDEX_COPIED: case Status.INDEX_RENAMED: + return new ThemeColor('gitDecoration.renamedResourceForeground'); case Status.UNTRACKED: return new ThemeColor('gitDecoration.untrackedResourceForeground'); case Status.IGNORED: return new ThemeColor('gitDecoration.ignoredResourceForeground'); - case Status.INDEX_COPIED: case Status.BOTH_DELETED: case Status.ADDED_BY_US: case Status.DELETED_BY_THEM: @@ -246,10 +248,10 @@ export class Resource implements SourceControlResourceState { switch (this.type) { case Status.INDEX_MODIFIED: case Status.MODIFIED: + case Status.INDEX_COPIED: return 2; case Status.IGNORED: return 3; - case Status.INDEX_COPIED: case Status.BOTH_DELETED: case Status.ADDED_BY_US: case Status.DELETED_BY_THEM: diff --git a/extensions/git/src/timelineProvider.ts b/extensions/git/src/timelineProvider.ts index f00302f61ad..5a9a1390bf1 100644 --- a/extensions/git/src/timelineProvider.ts +++ b/extensions/git/src/timelineProvider.ts @@ -9,6 +9,7 @@ import { Model } from './model'; import { Repository, Resource } from './repository'; import { debounce } from './decorators'; import { emojify, ensureEmojis } from './emoji'; +import { CommandCenter } from './commands'; const localize = nls.loadMessageBundle(); @@ -73,7 +74,7 @@ export class GitTimelineProvider implements TimelineProvider { private repoDisposable: Disposable | undefined; private repoStatusDate: Date | undefined; - constructor(private readonly model: Model) { + constructor(private readonly model: Model, private commands: CommandCenter) { this.disposable = Disposable.from( model.onDidOpenRepository(this.onRepositoriesChanged, this), workspace.onDidChangeConfiguration(this.onConfigurationChanged, this) @@ -161,16 +162,20 @@ export class GitTimelineProvider implements TimelineProvider { const message = emojify(c.message); const item = new GitTimelineItem(c.hash, commits[i + 1]?.hash ?? `${c.hash}^`, message, date?.getTime() ?? 0, c.hash, 'git:file:commit'); - item.iconPath = new (ThemeIcon as any)('git-commit'); + item.iconPath = new ThemeIcon('git-commit'); if (showAuthor) { item.description = c.authorName; } item.detail = `${c.authorName} (${c.authorEmail}) — ${c.hash.substr(0, 8)}\n${dateFormatter.format(date)}\n\n${message}`; - item.command = { - title: 'Open Comparison', - command: 'git.timeline.openDiff', - arguments: [item, uri, this.id] - }; + + const cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri); + if (cmd) { + item.command = { + title: 'Open Comparison', + command: cmd.command, + arguments: cmd.arguments, + }; + } return item; }); @@ -184,14 +189,18 @@ export class GitTimelineProvider implements TimelineProvider { const item = new GitTimelineItem('~', 'HEAD', localize('git.timeline.stagedChanges', 'Staged Changes'), date.getTime(), 'index', 'git:file:index'); // TODO@eamodio: Replace with a better icon -- reflecting its status maybe? - item.iconPath = new (ThemeIcon as any)('git-commit'); + item.iconPath = new ThemeIcon('git-commit'); item.description = ''; item.detail = localize('git.timeline.detail', '{0} — {1}\n{2}\n\n{3}', you, localize('git.index', 'Index'), dateFormatter.format(date), Resource.getStatusText(index.type)); - item.command = { - title: 'Open Comparison', - command: 'git.timeline.openDiff', - arguments: [item, uri, this.id] - }; + + const cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri); + if (cmd) { + item.command = { + title: 'Open Comparison', + command: cmd.command, + arguments: cmd.arguments, + }; + } items.splice(0, 0, item); } @@ -202,14 +211,18 @@ export class GitTimelineProvider implements TimelineProvider { const item = new GitTimelineItem('', index ? '~' : 'HEAD', localize('git.timeline.uncommitedChanges', 'Uncommitted Changes'), date.getTime(), 'working', 'git:file:working'); // TODO@eamodio: Replace with a better icon -- reflecting its status maybe? - item.iconPath = new (ThemeIcon as any)('git-commit'); + item.iconPath = new ThemeIcon('git-commit'); item.description = ''; item.detail = localize('git.timeline.detail', '{0} — {1}\n{2}\n\n{3}', you, localize('git.workingTree', 'Working Tree'), dateFormatter.format(date), Resource.getStatusText(working.type)); - item.command = { - title: 'Open Comparison', - command: 'git.timeline.openDiff', - arguments: [item, uri, this.id] - }; + + const cmd = this.commands.resolveTimelineOpenDiffCommand(item, uri); + if (cmd) { + item.command = { + title: 'Open Comparison', + command: cmd.command, + arguments: cmd.arguments, + }; + } items.splice(0, 0, item); } diff --git a/extensions/html-language-features/server/package.json b/extensions/html-language-features/server/package.json index 3fd01ff5b8a..af9c6766f77 100644 --- a/extensions/html-language-features/server/package.json +++ b/extensions/html-language-features/server/package.json @@ -9,7 +9,7 @@ }, "main": "./out/node/htmlServerMain", "dependencies": { - "vscode-css-languageservice": "^5.0.3", + "vscode-css-languageservice": "^5.1.0", "vscode-html-languageservice": "^4.0.1", "vscode-languageserver": "^7.0.0", "vscode-nls": "^5.0.0", diff --git a/extensions/html-language-features/server/src/modes/cssMode.ts b/extensions/html-language-features/server/src/modes/cssMode.ts index f7c5455b7bc..9757d99cd88 100644 --- a/extensions/html-language-features/server/src/modes/cssMode.ts +++ b/extensions/html-language-features/server/src/modes/cssMode.ts @@ -5,7 +5,7 @@ import { LanguageModelCache, getLanguageModelCache } from '../languageModelCache'; import { Stylesheet, LanguageService as CSSLanguageService } from 'vscode-css-languageservice'; -import { LanguageMode, Workspace, Color, TextDocument, Position, Range, CompletionList, DocumentContext, Settings } from './languageModes'; +import { LanguageMode, Workspace, Color, TextDocument, Position, Range, CompletionList, DocumentContext } from './languageModes'; import { HTMLDocumentRegions, CSS_STYLE_RULE } from './embeddedSupport'; export function getCSSMode(cssLanguageService: CSSLanguageService, documentRegions: LanguageModelCache, workspace: Workspace): LanguageMode { @@ -23,11 +23,11 @@ export function getCSSMode(cssLanguageService: CSSLanguageService, documentRegio async doComplete(document: TextDocument, position: Position, documentContext: DocumentContext, _settings = workspace.settings) { let embedded = embeddedCSSDocuments.get(document); const stylesheet = cssStylesheets.get(embedded); - return cssLanguageService.doComplete2(embedded, position, stylesheet, documentContext) || CompletionList.create(); + return cssLanguageService.doComplete2(embedded, position, stylesheet, documentContext, _settings?.css?.completion) || CompletionList.create(); }, - async doHover(document: TextDocument, position: Position, settings?: Settings) { + async doHover(document: TextDocument, position: Position, settings = workspace.settings) { let embedded = embeddedCSSDocuments.get(document); - return cssLanguageService.doHover(embedded, position, cssStylesheets.get(embedded), settings?.html?.hover); + return cssLanguageService.doHover(embedded, position, cssStylesheets.get(embedded), settings?.css?.hover); }, async findDocumentHighlight(document: TextDocument, position: Position) { let embedded = embeddedCSSDocuments.get(document); diff --git a/extensions/html-language-features/server/yarn.lock b/extensions/html-language-features/server/yarn.lock index 3db2336242e..f6e11d5cbc4 100644 --- a/extensions/html-language-features/server/yarn.lock +++ b/extensions/html-language-features/server/yarn.lock @@ -12,10 +12,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== -vscode-css-languageservice@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.0.3.tgz#2d400a47e73d0bfc5bc0d3fdf5be487cfdca341b" - integrity sha512-KJt4jhCxqrgGrC02UsQsKw90dPkFknMHsH5HTInT7gkDRRfGFwEd+e2O1/E75br3TdFhvRmzjljYz5thZ58L3A== +vscode-css-languageservice@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.0.tgz#cd172d13e9e7ae23ba567c73778aee10475ff716" + integrity sha512-iLHd/WjRKgaZBXMNeUooHG+r0qlhJBkXa+3MpQQR6Rpm928cis/3OV2Mp1R80yAQevIMeDL32RIJfHoJCT/RRg== dependencies: vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-types "^3.16.0" diff --git a/extensions/npm/src/tasks.ts b/extensions/npm/src/tasks.ts index 53bd085caed..96db9e0dc39 100644 --- a/extensions/npm/src/tasks.ts +++ b/extensions/npm/src/tasks.ts @@ -324,7 +324,7 @@ export async function createTask(packageManager: string, script: NpmTaskDefiniti const result: (string | ShellQuotedString)[] = new Array(cmd.length); for (let i = 0; i < cmd.length; i++) { if (/\s/.test(cmd[i])) { - result[i] = { value: `${cmd[i]}`, quoting: ShellQuoting.Strong }; + result[i] = { value: cmd[i], quoting: cmd[i].includes('--') ? ShellQuoting.Weak : ShellQuoting.Strong }; } else { result[i] = cmd[i]; } diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index d124b99aa0b..5ee66760548 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -17,7 +17,6 @@ ], "dependencies": { "jsonc-parser": "^2.2.1", - "rimraf": "^2.6.3", "semver": "5.5.1", "typescript-vscode-sh-plugin": "^0.6.14", "vscode-extension-telemetry": "0.1.1", diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index 1d6ccd2914d..2a567898f1a 100644 --- a/extensions/typescript-language-features/src/extension.ts +++ b/extensions/typescript-language-features/src/extension.ts @@ -3,9 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as rimraf from 'rimraf'; +import * as fs from 'fs'; import * as vscode from 'vscode'; import { Api, getExtensionApi } from './api'; +import { CommandManager } from './commands/commandManager'; import { registerBaseCommands } from './commands/index'; import { LanguageConfigurationManager } from './languageFeatures/languageConfiguration'; import { createLazyClientHost, lazilyActivateClient } from './lazyClientHost'; @@ -13,7 +14,6 @@ import { nodeRequestCancellerFactory } from './tsServer/cancellation.electron'; import { NodeLogDirectoryProvider } from './tsServer/logDirectoryProvider.electron'; import { ChildServerProcess } from './tsServer/serverProcess.electron'; import { DiskTypeScriptVersionProvider } from './tsServer/versionProvider.electron'; -import { CommandManager } from './commands/commandManager'; import { onCaseInsenitiveFileSystem } from './utils/fileSystem.electron'; import { PluginManager } from './utils/plugins'; import * as temp from './utils/temp.electron'; @@ -62,5 +62,5 @@ export function activate( } export function deactivate() { - rimraf.sync(temp.getInstanceTempDir()); + fs.rmdirSync(temp.getInstanceTempDir(), { recursive: true }); } diff --git a/extensions/typescript-language-features/yarn.lock b/extensions/typescript-language-features/yarn.lock index 1a2c1545f72..f95020cdbe7 100644 --- a/extensions/typescript-language-features/yarn.lock +++ b/extensions/typescript-language-features/yarn.lock @@ -47,24 +47,6 @@ applicationinsights@1.0.8: diagnostic-channel-publishers "0.2.1" zone.js "0.7.6" -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - diagnostic-channel-publishers@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3" @@ -77,67 +59,11 @@ diagnostic-channel@0.2.0: dependencies: semver "^5.3.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - jsonc-parser@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - semver@5.5.1: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" @@ -165,11 +91,6 @@ vscode-nls@^4.1.1: resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.2.tgz#ca8bf8bb82a0987b32801f9fddfdd2fb9fd3c167" integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - zone.js@0.7.6: version "0.7.6" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009" diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json index 162b2dce4e3..6974a720072 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -5,6 +5,7 @@ "publisher": "vscode", "license": "MIT", "enableProposedApi": true, + "requiresWorkspaceTrust": "onDemand", "private": true, "activationEvents": [], "main": "./out/extension", diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/extensions.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/extensions.test.ts new file mode 100644 index 00000000000..889faa0bf1d --- /dev/null +++ b/extensions/vscode-api-tests/src/singlefolder-tests/extensions.test.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import 'mocha'; +import * as assert from 'assert'; +import * as vscode from 'vscode'; + +suite('vscode server cli', () => { + + + test('extension is installed and enabled when installed by server cli', function () { + const extension = process.env.TESTRESOLVER_INSTALL_BUILTIN_EXTENSION; + if (!process.env.BUILD_SOURCEVERSION // Skip it when running out of sources + || !process.env.REMOTE_VSCODE // Skip it when not a remote integration test + || !extension // Skip it when extension is not provided to server + ) { + this.skip(); + } + + assert.ok(vscode.extensions.getExtension(extension!)); + }); + +}); diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts index 9cede7605b4..a24019b21fe 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { window, Pseudoterminal, EventEmitter, TerminalDimensions, workspace, ConfigurationTarget, Disposable, UIKind, env, EnvironmentVariableMutatorType, EnvironmentVariableMutator, extensions, ExtensionContext, TerminalOptions, ExtensionTerminalOptions } from 'vscode'; -import { doesNotThrow, equal, ok, deepEqual, throws } from 'assert'; +import { window, Pseudoterminal, EventEmitter, TerminalDimensions, workspace, ConfigurationTarget, Disposable, UIKind, env, EnvironmentVariableMutatorType, EnvironmentVariableMutator, extensions, ExtensionContext, TerminalOptions, ExtensionTerminalOptions, Terminal } from 'vscode'; +import { doesNotThrow, equal, deepEqual, throws } from 'assert'; import { assertNoRpc } from '../utils'; // Disable terminal tests: @@ -36,19 +36,25 @@ import { assertNoRpc } from '../utils'; disposables.length = 0; }); - test('sendText immediately after createTerminal should not throw', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(terminal, term); - } catch (e) { - done(e); - return; - } - terminal.dispose(); - disposables.push(window.onDidCloseTerminal(() => done())); - })); + test('sendText immediately after createTerminal should not throw', async () => { const terminal = window.createTerminal(); + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); doesNotThrow(terminal.sendText.bind(terminal, 'echo "foo"')); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } + })); + terminal.dispose(); + }); }); (process.platform === 'linux' ? test.skip : test)('echo works in the default shell', (done) => { @@ -96,124 +102,133 @@ import { assertNoRpc } from '../utils'; }); }); - test('onDidCloseTerminal event fires when terminal is disposed', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(terminal, term); - } catch (e) { - done(e); - return; - } - terminal.dispose(); - disposables.push(window.onDidCloseTerminal(() => done())); - })); + test('onDidCloseTerminal event fires when terminal is disposed', async () => { const terminal = window.createTerminal(); - }); - - test('processId immediately after createTerminal should fetch the pid', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(terminal, term); - } catch (e) { - done(e); - return; - } - terminal.processId.then(id => { - try { - ok(id && id > 0); - } catch (e) { - done(e); - return; + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); } - terminal.dispose(); - disposables.push(window.onDidCloseTerminal(() => done())); - }); - })); + })); + }); + equal(result, terminal); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } + })); + terminal.dispose(); + }); + }); + + test('processId immediately after createTerminal should fetch the pid', async () => { const terminal = window.createTerminal(); + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + let pid = await result.processId; + equal(true, pid && pid > 0); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } + })); + terminal.dispose(); + }); }); - test('name in constructor should set terminal.name', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(terminal, term); - } catch (e) { - done(e); - return; - } - terminal.dispose(); - disposables.push(window.onDidCloseTerminal(() => done())); - })); + test('name in constructor should set terminal.name', async () => { const terminal = window.createTerminal('a'); - try { - equal(terminal.name, 'a'); - } catch (e) { - done(e); - return; - } + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } + })); + terminal.dispose(); + }); }); - test('creationOptions should be set and readonly for TerminalOptions terminals', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(terminal, term); - } catch (e) { - done(e); - return; - } - terminal.dispose(); - disposables.push(window.onDidCloseTerminal(() => done())); - })); + test('creationOptions should be set and readonly for TerminalOptions terminals', async () => { const options = { name: 'foo', hideFromUser: true }; const terminal = window.createTerminal(options); - try { - equal(terminal.name, 'foo'); - const terminalOptions = terminal.creationOptions as TerminalOptions; - equal(terminalOptions.name, 'foo'); - equal(terminalOptions.hideFromUser, true); - throws(() => terminalOptions.name = 'bad', 'creationOptions should be readonly at runtime'); - } catch (e) { - done(e); - return; - } - }); - - test('onDidOpenTerminal should fire when a terminal is created', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(term.name, 'b'); - } catch (e) { - done(e); - return; - } - disposables.push(window.onDidCloseTerminal(() => done())); - terminal.dispose(); - })); - const terminal = window.createTerminal('b'); - }); - - test('exitStatus.code should be set to undefined after a terminal is disposed', (done) => { - disposables.push(window.onDidOpenTerminal(term => { - try { - equal(term, terminal); - } catch (e) { - done(e); - return; - } - disposables.push(window.onDidCloseTerminal(t => { - try { - deepEqual(t.exitStatus, { code: undefined }); - } catch (e) { - done(e); - return; + const terminalOptions = terminal.creationOptions as TerminalOptions; + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); } - done(); })); terminal.dispose(); - })); + }); + throws(() => terminalOptions.name = 'bad', 'creationOptions should be readonly at runtime'); + }); + + test('onDidOpenTerminal should fire when a terminal is created', async () => { + const terminal = window.createTerminal('b'); + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } + })); + terminal.dispose(); + }); + }); + + test('exitStatus.code should be set to undefined after a terminal is disposed', async () => { const terminal = window.createTerminal(); + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + deepEqual(t.exitStatus, { code: undefined }); + r(); + } + })); + terminal.dispose(); + }); }); // test('onDidChangeActiveTerminal should fire when new terminals are created', (done) => { @@ -287,23 +302,25 @@ import { assertNoRpc } from '../utils'; // }); suite('hideFromUser', () => { - test('should be available to terminals API', done => { + test('should be available to terminals API', async () => { const terminal = window.createTerminal({ name: 'bg', hideFromUser: true }); - disposables.push(window.onDidOpenTerminal(t => { - try { - equal(t, terminal); - equal(t.name, 'bg'); - ok(window.terminals.indexOf(terminal) !== -1); - } catch (e) { - done(e); - return; - } - disposables.push(window.onDidCloseTerminal(() => { - // reg3.dispose(); - done(); + const result = await new Promise(r => { + disposables.push(window.onDidOpenTerminal(t => { + if (t === terminal) { + r(t); + } + })); + }); + equal(result, terminal); + equal(true, window.terminals.indexOf(terminal) !== -1); + await new Promise(r => { + disposables.push(window.onDidCloseTerminal(t => { + if (t === terminal) { + r(); + } })); terminal.dispose(); - })); + }); }); }); diff --git a/extensions/vscode-test-resolver/src/extension.ts b/extensions/vscode-test-resolver/src/extension.ts index ccac6c52c48..d33fe9cdbbf 100644 --- a/extensions/vscode-test-resolver/src/extension.ts +++ b/extensions/vscode-test-resolver/src/extension.ts @@ -83,12 +83,6 @@ export function activate(context: vscode.ExtensionContext) { const env = getNewEnv(); const remoteDataDir = process.env['TESTRESOLVER_DATA_FOLDER'] || path.join(os.homedir(), serverDataFolderName || `${dataFolderName}-testresolver`); - const remoteExtension = process.env['TESTRESOLVER_REMOTE_EXTENSION']; - if (remoteExtension) { - commandArgs.push('--install-extension', remoteExtension); - commandArgs.push('--start-server'); - } - env['VSCODE_AGENT_FOLDER'] = remoteDataDir; outputChannel.appendLine(`Using data folder at ${remoteDataDir}`); @@ -98,6 +92,11 @@ export function activate(context: vscode.ExtensionContext) { const serverCommandPath = path.join(vscodePath, 'resources', 'server', 'bin-dev', serverCommand); extHostProcess = cp.spawn(serverCommandPath, commandArgs, { env, cwd: vscodePath }); } else { + const extensionToInstall = process.env['TESTRESOLVER_INSTALL_BUILTIN_EXTENSION']; + if (extensionToInstall) { + commandArgs.push('--install-builtin-extension', extensionToInstall); + commandArgs.push('--start-server'); + } const serverCommand = process.platform === 'win32' ? 'server.cmd' : 'server.sh'; let serverLocation = env['VSCODE_REMOTE_SERVER_PATH']; // support environment variable to specify location of server on disk if (!serverLocation) { diff --git a/package.json b/package.json index 0a82a4a914c..b4e5cfd8a91 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.54.0", - "distro": "a1836302c2aaab6ded8ad4a0871f74dbc42359f5", + "distro": "e555ce6c25c9e08034b3ba25b24e32bc1b0815fb", "author": { "name": "Microsoft Corporation" }, @@ -82,7 +82,7 @@ "vscode-ripgrep": "^1.11.1", "vscode-sqlite3": "4.0.10", "vscode-textmate": "5.2.0", - "xterm": "4.11.0-beta.2", + "xterm": "4.11.0-beta.3", "xterm-addon-search": "0.8.0", "xterm-addon-unicode11": "0.3.0-beta.3", "xterm-addon-webgl": "0.10.0-beta.2", diff --git a/remote/package.json b/remote/package.json index 97d84e01912..3d36902888e 100644 --- a/remote/package.json +++ b/remote/package.json @@ -22,7 +22,7 @@ "vscode-regexpp": "^3.1.0", "vscode-ripgrep": "^1.11.1", "vscode-textmate": "5.2.0", - "xterm": "4.11.0-beta.2", + "xterm": "4.11.0-beta.3", "xterm-addon-search": "0.8.0", "xterm-addon-unicode11": "0.3.0-beta.3", "xterm-addon-webgl": "0.10.0-beta.2", diff --git a/remote/web/package.json b/remote/web/package.json index 65c7cb3fef0..6084e4460cc 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -8,7 +8,7 @@ "tas-client-umd": "0.1.2", "vscode-oniguruma": "1.3.1", "vscode-textmate": "5.2.0", - "xterm": "4.11.0-beta.2", + "xterm": "4.11.0-beta.3", "xterm-addon-search": "0.8.0", "xterm-addon-unicode11": "0.3.0-beta.3", "xterm-addon-webgl": "0.10.0-beta.2" diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index bba1210d75c..9bcfb3b1e72 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -42,7 +42,7 @@ xterm-addon-webgl@0.10.0-beta.2: resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.2.tgz#520547b2f845b2f9265f1817140b0f4e114c4a55" integrity sha512-DLfmF5+H1M/0BABEaqJlLUasKck7TjyRWVlzGflFTWVCr7/Kqaf0al4KMlw3yWX76A1ITGXrWj0qbDn2Sixl2Q== -xterm@4.11.0-beta.2: - version "4.11.0-beta.2" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0-beta.2.tgz#a95560b61c771f54a336c2eb10e1472e556d9f4b" - integrity sha512-0BUaAfuclnowirdOuB13OGgq6OUGg/8etnRVT6apgnOrLGOLRCE1NiL3KhxotleAf4gVP0m3iCxsIr3csDY40g== +xterm@4.11.0-beta.3: + version "4.11.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0-beta.3.tgz#f19b4aaabdd634a6e62a96d770d6a8e8be0664b9" + integrity sha512-hmAbSwmgYDgQPE5A2UtfpU+Wta4PYIpsDlnGwbhC783OwcYK8ZW0XajhTIQGZywpZb9bXusNmpcGeVsqHYWGLg== diff --git a/remote/yarn.lock b/remote/yarn.lock index e3c62dd28a3..a264b79dde8 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -465,10 +465,10 @@ xterm-addon-webgl@0.10.0-beta.2: resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.2.tgz#520547b2f845b2f9265f1817140b0f4e114c4a55" integrity sha512-DLfmF5+H1M/0BABEaqJlLUasKck7TjyRWVlzGflFTWVCr7/Kqaf0al4KMlw3yWX76A1ITGXrWj0qbDn2Sixl2Q== -xterm@4.11.0-beta.2: - version "4.11.0-beta.2" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0-beta.2.tgz#a95560b61c771f54a336c2eb10e1472e556d9f4b" - integrity sha512-0BUaAfuclnowirdOuB13OGgq6OUGg/8etnRVT6apgnOrLGOLRCE1NiL3KhxotleAf4gVP0m3iCxsIr3csDY40g== +xterm@4.11.0-beta.3: + version "4.11.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0-beta.3.tgz#f19b4aaabdd634a6e62a96d770d6a8e8be0664b9" + integrity sha512-hmAbSwmgYDgQPE5A2UtfpU+Wta4PYIpsDlnGwbhC783OwcYK8ZW0XajhTIQGZywpZb9bXusNmpcGeVsqHYWGLg== yauzl@^2.9.2: version "2.10.0" diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts index 3eb11e78c63..f67929c3641 100644 --- a/src/vs/base/browser/browser.ts +++ b/src/vs/base/browser/browser.ts @@ -119,4 +119,5 @@ export const isWebkitWebView = (!isChrome && !isSafari && isWebKit); export const isIPad = (userAgent.indexOf('iPad') >= 0 || (isSafari && navigator.maxTouchPoints > 0)); export const isEdgeLegacyWebView = isEdgeLegacy && (userAgent.indexOf('WebView/') >= 0); export const isElectron = (userAgent.indexOf('Electron/') >= 0); +export const isAndroid = (userAgent.indexOf('Android') >= 0); export const isStandalone = (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches); diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 04996c83c73..8f1b3448554 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -1476,12 +1476,13 @@ export class ModifierKeyEmitter extends Emitter { }; this._subscriptions.add(domEvent(document.body, 'keydown', true)(e => { - // if keydown event is repeated, ignore it #112347 - if (e.repeat) { - return; - } const event = new StandardKeyboardEvent(e); + // If Alt-key keydown event is repeated, ignore it #112347 + // Only known to be necessary for Alt-Key at the moment #115810 + if (event.keyCode === KeyCode.Alt && e.repeat) { + return; + } if (e.altKey && !this._keyStatus.altKey) { this._keyStatus.lastKeyPressed = 'alt'; diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts index 6a304f9ffc2..7ff135971f9 100644 --- a/src/vs/base/browser/ui/menu/menubar.ts +++ b/src/vs/base/browser/ui/menu/menubar.ts @@ -746,7 +746,7 @@ export class MenuBar extends Disposable { private setUnfocusedState(): void { if (this.options.visibility === 'toggle' || this.options.visibility === 'hidden') { this.focusState = MenubarState.HIDDEN; - } else if (this.options.visibility === 'default' && browser.isFullscreen()) { + } else if (this.options.visibility === 'classic' && browser.isFullscreen()) { this.focusState = MenubarState.HIDDEN; } else { this.focusState = MenubarState.VISIBLE; @@ -838,6 +838,22 @@ export class MenuBar extends Disposable { this._mnemonicsInUse = value; } + private get shouldAltKeyFocus(): boolean { + if (isMacintosh) { + return false; + } + + if (!this.options.disableAltFocus) { + return true; + } + + if (this.options.visibility === 'toggle') { + return true; + } + + return false; + } + public get onVisibilityChange(): Event { return this._onVisibilityChange.event; } @@ -869,7 +885,7 @@ export class MenuBar extends Disposable { } // Prevent alt-key default if the menu is not hidden and we use alt to focus - if (modifierKeyStatus.event && !this.options.disableAltFocus) { + if (modifierKeyStatus.event && this.shouldAltKeyFocus) { if (ScanCodeUtils.toEnum(modifierKeyStatus.event.code) === ScanCode.AltLeft) { modifierKeyStatus.event.preventDefault(); } @@ -885,7 +901,7 @@ export class MenuBar extends Disposable { // Clean alt key press and release if (allModifiersReleased && modifierKeyStatus.lastKeyPressed === 'alt' && modifierKeyStatus.lastKeyReleased === 'alt') { if (!this.awaitingAltRelease) { - if (!this.isFocused && !(this.options.disableAltFocus && this.options.visibility !== 'toggle')) { + if (!this.isFocused && this.shouldAltKeyFocus) { this.mnemonicsInUse = true; this.focusedMenu = { index: this.numMenusShown > 0 ? 0 : MenuBar.OVERFLOW_INDEX }; this.focusState = MenubarState.FOCUSED; diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index 653587dc5e4..48f708a4421 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -547,8 +547,8 @@ export namespace FuzzyScore { */ export const Default: FuzzyScore = ([-100, 0]); - export function isDefault(score?: FuzzyScore): score is [-100, 0, 0] { - return !score || (score[0] === -100 && score[1] === 0 && score[2] === 0); + export function isDefault(score?: FuzzyScore): score is [-100, 0] { + return !score || (score.length === 2 && score[0] === -100 && score[1] === 0); } } diff --git a/src/vs/base/worker/workerMain.ts b/src/vs/base/worker/workerMain.ts index c39dba9a350..51b02fea540 100644 --- a/src/vs/base/worker/workerMain.ts +++ b/src/vs/base/worker/workerMain.ts @@ -5,10 +5,14 @@ (function () { - let MonacoEnvironment = (self).MonacoEnvironment; - let monacoBaseUrl = MonacoEnvironment && MonacoEnvironment.baseUrl ? MonacoEnvironment.baseUrl : '../../../'; + const MonacoEnvironment = (self).MonacoEnvironment; + const monacoBaseUrl = MonacoEnvironment && MonacoEnvironment.baseUrl ? MonacoEnvironment.baseUrl : '../../../'; - const trustedTypesPolicy = self.trustedTypes?.createPolicy('amdLoader', { createScriptURL: value => value }); + const trustedTypesPolicy = ( + typeof self.trustedTypes?.createPolicy === 'function' + ? self.trustedTypes?.createPolicy('amdLoader', { createScriptURL: value => value }) + : undefined + ); if (typeof (self).define !== 'function' || !(self).define.amd) { let loaderSrc: string | TrustedScriptURL = monacoBaseUrl + 'vs/loader.js'; diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index 3aa7cce16e8..c01735c558e 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -29,7 +29,7 @@ import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetry import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; import { ipcRenderer } from 'vs/base/parts/sandbox/electron-sandbox/globals'; -import { ILogService, ILoggerService, MultiplexLogService, ConsoleLogService } from 'vs/platform/log/common/log'; +import { ILogService, ILoggerService, MultiplexLogService, ConsoleLogger } from 'vs/platform/log/common/log'; import { LoggerChannelClient, FollowerLogService } from 'vs/platform/log/common/logIpc'; import { LocalizationsService } from 'vs/platform/localizations/node/localizations'; import { ILocalizationsService } from 'vs/platform/localizations/common/localizations'; @@ -41,7 +41,7 @@ import { LanguagePackCachedDataCleaner } from 'vs/code/electron-browser/sharedPr import { StorageDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/storageDataCleaner'; import { LogsDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/logsDataCleaner'; import { IMainProcessService, MessagePortMainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService'; -import { SpdLogService } from 'vs/platform/log/node/spdlogService'; +import { SpdLogLogger } from 'vs/platform/log/node/spdlogLog'; import { DiagnosticsService, IDiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsService'; import { FileService } from 'vs/platform/files/common/fileService'; import { IFileService } from 'vs/platform/files/common/files'; @@ -144,8 +144,8 @@ class SharedProcessMain extends Disposable { const mainRouter = new StaticRouter(ctx => ctx === 'main'); const loggerClient = new LoggerChannelClient(this.server.getChannel('logger', mainRouter)); // we only use this for log levels const multiplexLogger = this._register(new MultiplexLogService([ - this._register(new ConsoleLogService(this.configuration.logLevel)), - this._register(new SpdLogService('sharedprocess', environmentService.logsPath, this.configuration.logLevel)) + this._register(new ConsoleLogger(this.configuration.logLevel)), + this._register(new SpdLogLogger('sharedprocess', environmentService.logsPath, this.configuration.logLevel)) ])); const logService = this._register(new FollowerLogService(loggerClient, multiplexLogger)); diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 2a01fa11d0c..3da94d9c531 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -20,7 +20,7 @@ import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiati import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ILogService, ConsoleLogMainService, MultiplexLogService, getLogLevel } from 'vs/platform/log/common/log'; +import { ILogService, ConsoleMainLogger, MultiplexLogService, getLogLevel } from 'vs/platform/log/common/log'; import { StateService } from 'vs/platform/state/node/stateService'; import { IStateService } from 'vs/platform/state/node/state'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -31,7 +31,7 @@ import { IRequestService } from 'vs/platform/request/common/request'; import { RequestMainService } from 'vs/platform/request/electron-main/requestMainService'; import { CodeApplication } from 'vs/code/electron-main/app'; import { getPathLabel, mnemonicButtonLabel } from 'vs/base/common/labels'; -import { SpdLogService } from 'vs/platform/log/node/spdlogService'; +import { SpdLogLogger } from 'vs/platform/log/node/spdlogLog'; import { BufferLogService } from 'vs/platform/log/common/bufferLog'; import { setUnexpectedErrorHandler } from 'vs/base/common/errors'; import { IThemeMainService, ThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; @@ -133,7 +133,7 @@ class CodeMain { const mainIpcServer = await this.doStartup(args, logService, environmentService, lifecycleMainService, instantiationService, true); - bufferLogService.logger = new SpdLogService('main', environmentService.logsPath, bufferLogService.getLevel()); + bufferLogService.logger = new SpdLogLogger('main', environmentService.logsPath, bufferLogService.getLevel()); once(lifecycleMainService.onWillShutdown)(() => { fileService.dispose(); (configurationService as ConfigurationService).dispose(); @@ -154,7 +154,7 @@ class CodeMain { services.set(IEnvironmentService, environmentService); services.set(IEnvironmentMainService, environmentService); - const logService = new MultiplexLogService([new ConsoleLogMainService(getLogLevel(environmentService)), bufferLogService]); + const logService = new MultiplexLogService([new ConsoleMainLogger(getLogLevel(environmentService)), bufferLogService]); process.once('exit', () => logService.dispose()); services.set(ILogService, logService); diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index 2b4dd76b92f..8ab193bff8e 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -1192,7 +1192,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { private getMenuBarVisibility(): MenuBarVisibility { let menuBarVisibility = getMenuBarVisibility(this.configurationService); if (['visible', 'toggle', 'hidden'].indexOf(menuBarVisibility) < 0) { - menuBarVisibility = 'default'; + menuBarVisibility = 'classic'; } return menuBarVisibility; @@ -1227,7 +1227,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { const isFullscreen = this.isFullScreen; switch (visibility) { - case ('default'): + case ('classic'): this._win.setMenuBarVisibility(!isFullscreen); this._win.autoHideMenuBar = isFullscreen; break; diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index 7e1fbe14cbb..3ca6c5fa5eb 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -30,9 +30,9 @@ import { ConfigurationService } from 'vs/platform/configuration/common/configura import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; import { IStateService } from 'vs/platform/state/node/state'; import { StateService } from 'vs/platform/state/node/stateService'; -import { ILogService, getLogLevel, LogLevel, ConsoleLogService, MultiplexLogService } from 'vs/platform/log/common/log'; +import { ILogService, getLogLevel, LogLevel, ConsoleLogger, MultiplexLogService, ILogger } from 'vs/platform/log/common/log'; import { Schemas } from 'vs/base/common/network'; -import { SpdLogService } from 'vs/platform/log/node/spdlogService'; +import { SpdLogLogger } from 'vs/platform/log/node/spdlogLog'; import { buildTelemetryMessage } from 'vs/platform/telemetry/node/telemetry'; import { FileService } from 'vs/platform/files/common/fileService'; import { IFileService } from 'vs/platform/files/common/files'; @@ -104,10 +104,10 @@ class CliMain extends Disposable { // Log const logLevel = getLogLevel(environmentService); - const loggers: ILogService[] = []; - loggers.push(new SpdLogService('cli', environmentService.logsPath, logLevel)); + const loggers: ILogger[] = []; + loggers.push(new SpdLogLogger('cli', environmentService.logsPath, logLevel)); if (logLevel === LogLevel.Trace) { - loggers.push(new ConsoleLogService(logLevel)); + loggers.push(new ConsoleLogger(logLevel)); } const logService = this._register(new MultiplexLogService(loggers)); diff --git a/src/vs/editor/browser/controller/coreCommands.ts b/src/vs/editor/browser/controller/coreCommands.ts index 1f399fe561d..4ec704f9e7e 100644 --- a/src/vs/editor/browser/controller/coreCommands.ts +++ b/src/vs/editor/browser/controller/coreCommands.ts @@ -1931,6 +1931,7 @@ registerOverwritableCommand(Handler.Type, { }] }); registerOverwritableCommand(Handler.ReplacePreviousChar); +registerOverwritableCommand(Handler.CompositionType); registerOverwritableCommand(Handler.CompositionStart); registerOverwritableCommand(Handler.CompositionEnd); registerOverwritableCommand(Handler.Paste); diff --git a/src/vs/editor/browser/controller/mouseHandler.ts b/src/vs/editor/browser/controller/mouseHandler.ts index 31f3a0b68d7..8c7dae6abea 100644 --- a/src/vs/editor/browser/controller/mouseHandler.ts +++ b/src/vs/editor/browser/controller/mouseHandler.ts @@ -42,6 +42,7 @@ export interface IPointerHandlerHelper { linesContentDomNode: HTMLElement; focusTextArea(): void; + dispatchTextAreaEvent(event: CustomEvent): void; /** * Get the last rendered information for cursors & textarea. diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index b86fd84fd67..830599b9c52 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -13,6 +13,7 @@ import { EditorMouseEvent, EditorPointerEventFactory } from 'vs/editor/browser/e import { ViewController } from 'vs/editor/browser/view/viewController'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import { BrowserFeatures } from 'vs/base/browser/canIUse'; +import { TextAreaSyntethicEvents } from 'vs/editor/browser/controller/textAreaInput'; interface IThrottledGestureEvent { translationX: number; @@ -210,6 +211,11 @@ class TouchHandler extends MouseHandler { const target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false); if (target.position) { + // Send the tap event also to the