feat(vscode): update to version 1.57.0 (#3544)

* Squashed 'lib/vscode/' changes from cfa2e218100..2064d4c301c

2064d4c301c fix issue reporter unit tests
d99a697eb52 Fix #125503
b098b10a77e Merge branch 'notebook/dev' into main
a57e41b7a43 notebooks: more accurately detect old style of renderers
c8a447f93b8 Fix #125507
ae4124aa7e1 Fix #122570
2bcdb95e7df update distro
89d750cd687 add restricted mode to created issues (#125537)
5f7166fd915 Put run menu above output container, Fix #125188
d9cf45e0dba Fix #125526
ab0bd774c91 Pass profiles, defaultProfile, isWorkspaceTrusted from renderer to shared process (#125450)
061403c7458 Switches to new RemoteHub authority separator
0e6d07052c8 remove untrustedWorkspace search for now
1c5b5a632f9 Hide "Customize Notebooks" in getting started behind setting
f843c51bca8 Update lock file
2456872bcaa Bump distro
12547c1de87 remove virtual workspace information from banner (#125512)
6de86dcd840 update notebook layout default values.
0f0abb3dc87 trust vfs (#125523)
8d87a664274 Bump es build
bcdfe884a3c Fix window reload with an empty remote window
a0bc15ff6fc Close Remote Connection shows up in local windows
fe1eafc80c0 Merge pull request #125498 from microsoft/hediet/fix-125034
5eb636f22fc Renames InlineSuggestionActions back to InlineCompletionsActions.
e8ad99de2b3 Merge branch 'main' into hediet/fix-125034
dcf62e3a1e4 Merge pull request #125501 from microsoft/hediet/add-accept-action
fe6fc208e9d Puts EditorOption.inlineSuggest to the right spot.
c6777d5c6c9 Reverts menu rename.
c5bbe0a35ea Merge pull request #125484 from microsoft/hediet/fix-125478
20cb29b076b Fixes #125430: Add a lock around the extension registry.
383ae36449b restricted mode hover: added a link to manage trust. For #125408
1a8285a9654 Adds accept action to inline suggestion hover. Fixes #125472.
2ba1dcb0c9c Removes setting ghostTextExpanded. Fixes #125037.
3300006ee17 * Renames command ids, context keys and command titles to Inline Suggestion. * Renames menu item, makes it proposed API.
f8c061e73d7 restricted trust status bar item should use rich hover. Fixes #125408
620434543f5 * renames editor.suggest.showSuggestionPreview to editor.suggest.preview * renames editor.suggest.showInlineCompletions to editor.inlineSuggest.enabled
4b0c17e1808 fixes #115535
93e61e267ca fix compile error
54dd1429b64 startup timings uses now `exit` and not `quit`, fyi @bpasero
922f866a282 run menu: more precise context keys
f207b383071 inline `NotebookExecuteHandler` type
fa1694c8afb Merge pull request #125465 from microsoft/menubarFix
5efc2e7abcd 💄
7954c27d2d9 Fixes #125478.
f99e1c358f0 fixes issue with asExternalUri API
8163cfd8c54 Make sure we layout editors in sideBySideEditor after they are created (#125445)
387e2f39ebb Properly complete notebook profile step
11f86fefb46 Track opening notebook separately from showing notebook GS page
a2ef11ff553 fixes context keys with menubar
fd2ed91612c Fix wrong CKS on output toolbar Fix #125109
f95fb77f22a Fix cellstatusbar layout issues from "visibleAfterExecute"  Fix #125403
0acf7df100e Fix showCellStatusbar default #125403
a244a4ccc65 improve messaging with remote
5d58be33080 switch to a switch for localization edge cases
ae0e8f04468 uppercase h in localization
885ac7f1c11 fixes #125406
b519331a06b fix #125458.
4c12628b2b5 fix #125234.
0c7e7cf21d6 disable notebook layout getting started.
4cae6713714 fix #125452.
72d325b4bc9 fix #125027
df59dc8470a don't show status bar entry until files are opened
d3db92b7a2e Fine tune image styles. Fix #122680
72a67899410 add settings links to improve understanding of workspace trust
c9e683d6c78 fix #124405
827398db432 fix #125444.
f004a398e0b Fix #125313
b26e1aba58c Remove hashes from override
41b1406d3a8 Revert parts of "Fix #125395" Re-enables GitHub extension in untrusted workspaces
eab8d0403f2 Revert "Fixes #125350: disallow in untrusted ws"
0006964091a Change cell type contextkey to markup Fix #125378
5ea26044187 Fix #124531
0a5d652bdfd Fixes #125332.
f73f263c6bf Needed localization changes for converting xlfs to json (#125442)
0f0f066b392 Remove codespaces walkthrough from Getting Started
96004bc2c97 icon hover: add pointer for element hovers
11debc38469 Merge branch 'notebook/dev' into main
b80011a819c Fix #124049
fd430418a01 Refine `CellInfo` type (#125351)
b2cc8487aed Flip positioning of steps and media in narrow layouts. Closes #125246
5966e9dfec0 Check to see if there are any artifacts that haven't been published (#125428)
a56ef182474 notebooks: fix default selection of untrusted renderer
788e39aad86 #125395 Improve the prompt
062401745a2 Switch loglevel to trace
73de22af596 Close #119722
be1cf4bddb5 Focus contributed profile terminals after creation
60651a0c4de Fix #125030
8f9eedf0019 Merge branch 'main' into notebook/dev
01c6fb557d0 Fix #125395
41163014f8c 💄
490cef7c075 Revoking trust in the remote scenario will reload the window
3f8672be8a4 fixes #124051
6d66648c51b Add snippets for ports attributes to settings helper Fixes #125081
e43c3957f64 rename onDidChangeNotebookAssociation to onDidChangeSelectedNotebooks
732769073a2 Workspace trust - add --disable-workspace-trust flag (#124998)
499e4948c7d Fix typo
41f117753ed debug: update js-debug
20df87725d3 fix build again
15aca96cd5c build - unblock lauching
8b4bc01166a Removes RemoteHub
0f2f7c7f04b Update notebook getting started images
b2a64b1379c Merge pull request #125352 from microsoft/tyriar/migrate
515b7125255 revert a change
fa19cd28adb fix build errors
6f0ce2e7508 Fix #125250
884b1e7a0d0 Fix "Trying to add a disposable to a DisposableStore that has already been disposed of." ref #125354
c8b7aaf2c29 Merge pull request #125340 from microsoft/merogge/onExit
7fd324944d3 Fix selected notebook profile highlights
99665d0b4ac Merge cell statusbar settings Fix #125173
2974dcbd985 Fix bugs causing walkthoughs to not open on install
ab1c9202003 Try setting gettingStarted as default editor (#125321)
ebde979a485 fix cell top/bottom border always active.
7dacb10b591 fix #125339.
e6aaf493989 Move notebook getting started walkthrough to its own section
f473e3dc9f8 fixes #125047
6cc80fea815 fix #125338.
66917f41795 fix #125334.
2356d7c5b76 fix init layout interrupted by editor group resize.
a2a61127667 Hide execute actions from markdown toolbar Fix #125336
0f8c499d101 Migrate profile setting and fallback properly
272208523b5 register the extension request handler once workspace is resolved fixes #125342
4c57cf40313 fix #125175.
bbc4995eca7 fix #125176.
195477a0e96 remove unused import
68e862e1d62 skip flaky window test.
9bd7cbd1403 notebook.insertToolbarLocation
769e7080f4b Fixes #125350: disallow in untrusted ws
ae2f0b39e63 Fix #122741
8f3a47cc88c add singleTerminal argument
6ef81b30370 add safeDisposeTerminal to terminal service
b295408c303 tweak wording
fa8a7a84a13 Merge branch 'main' into merogge/onExit
895dbf4dfd0 fix #125069
60dd761211b update the layout based on treatment.
26cd18321bd remove backwards compatible tests.
d215fc72380 Fallback to active editor if no webview is focused
c5a4158a651 fixes #125247
3d0d203bb02 fix #124849
509906cd916 Merge branch 'notebook/dev' into main
4d4f0b528a2 fixes #125319
093b03bb39e fix #124854 Co-Authored-By: Daniel Imms <daimms@microsoft.com
c4da8f4ab15 Improve terminal drag feedback
55f01b11fa0 fix #125067 fix #125039 Co-authored-by: Daniel Imms <daimms@microsoft.com>
941a603ccd0 Revert "Try fix getting started as default crashing integration tests"
0206b2ee43f Try fix getting started as default crashing integration tests
d0ba023c71e Fix #122680
48fcde4048c Fix #123476
0543065c41a Don't commit inline completions on tab when "tabMovesFocus" is active.
e2ad6d2c9a8 Merge pull request #125126 from microsoft/hediet/make-hover-unselectable
b49731160d3 Add henning to my-endgame notebook
1fee13180b7 Vertically center notebook profile list
09a3fa687a9 Resets context keys properly when editor is disposed.
c324c61ad57 add closing tags
e92e3d1a9ea Reset context keys when Ghost Text Controller is disposed.
ec5bf6733ca Fixes "Ctrl+Z doesn't retrigger inline suggestions"
26ff863e3d4 Merge pull request #125221 from jeanp413/fix-125035
ce8d2e86028 make IHoverDelegate.placement optional
32e6054985c Adds more documentation to the proposed inline completion API. Fixes #125267.
20be2c8eaa2 icon label hover: allow element placement. Fixes #125090
232412ff87b adopt terminalTabList
60a36219813 Revert "icon label hover: allow element placement. FIxes #125090"
4aa9f8271b8 Merge pull request #125292 from microsoft/tyriar/themeicon
8223d3d5c7f Fix #125156
0a32357e6d7 Fix filter.filterQuery initialization
3099c6f1c1b ios: trigger list/tree/table context menus
3a388466b85 tree viewer hover delegate: command handing now comes from hover service
1d471214fb3 icon label hover: allow element placement. FIxes #125090
0ee6895a6b8 Convert vscode ThemeIcon to internal type
e040c0881f7 Workspace trust - calculate trust before extension host starts (#125283)
ea339694fc7 fixes #125272
727caa7f238 Merge branch 'main' into notebook/dev
e0131062c84 bail on standard start when workspace isn't trusted
0bf73ff15ab make sash work better on ios
9764a02c5d3 sash: use DomEmitter
df709ddd3d5 Fix otherPortsAttributes protocol not updating correctly Fixes #125079
ef0fb8afb89 Revert "use associatedResource instead of untitledResource, https://github.com/microsoft/vscode/issues/125028"
073c4ffd7da remove deprecated notebook-namespace, notebooks is the future
a24c1495208 Merge pull request #125281 from microsoft/hediet/allow-inline-completion-array
2e53913b637 Separator in remote indicator can appear/disappear. Fixes #122309
d71e5718c90 Fix ctrl+click to open link in ports view Fixes #125076
f32b38aa216 Allows to directly return an array of inline completions instead of an InlineCompletionList.
b5bdc48d553 use vscode.notebooks not vscode.notebook
3d2309d4e74 Set icon for custom pty terminals
e537c47c63c Fix double extension terminal profile creation
a3337d01bb0 more api polish
17da5e37217 use associatedResource instead of untitledResource, https://github.com/microsoft/vscode/issues/125028
7051f7db889 Sort content of XLF files
109c9d9486b adopt viewType everywhere and drop support for it, fixes https://github.com/microsoft/vscode/issues/125163
b1e613481bb fix https://github.com/microsoft/vscode/issues/125163
9796ac82c3f (re)move NotebookCellOutput#id into proposal, also remove ctor overload that allows to set id
a14600c325f editor trust - limit trust validation in `openEditors` to the places we want
39e7fd6a779 Merge pull request #125128 from microsoft/alex/ghost-text
a1e7ce9cde2 tackle more todos, change ctor of NotebookCellData
0c3646199aa editors trust - support opening diffs into new window (#124618)
592ae5a1f53 editors trust - make sure diff editors bring up trust dialog too
a286059b90d macOS - workaround fullscreen window regression (#125122)
82acbe807f2 updated todo search file
ac05ae7b6f0 move file'ish things into workspace namespace
e57462fd1f6 dnd - only add file system resources (for #125187)
0b6e70302f8 remove deprecated API
dfc47c79571 rename notebookViewType context key to notebookType
542655758b4 fix https://github.com/microsoft/vscode/issues/125138
f2d6da27d01 make sure appendOutputItems and replaceOutputItems return something
ee87b2bd432 missing adopting for end-call
d487b379bae Merge branch 'main' into notebook/dev
7865b99b44e Fixes #125035
febc20e8d39 safari - disable clipboard error notification
e7b9f3a1a40 Show a confirmation notification when installing/uninstalling shell commands (fix #125145)
217f1a2f60a Workspace trust - extension enablement (#125179)
b154a3d3043 skip view column test.
322c81122dd Add "move cell up/down" to the cell context menu when drag and drop is disabled
a90729cb6f0 show notebook profile the first time when a notebook is opened.
c55d8a0e16c select notebook layout action.
b2da4119928 Add undo/redo per cell for jupyter profile.
7aa8c5ec4a7 Fix profile contribution schema
2d97edd98f2 Update QuickPick api doc (#124485)
8df0f068588 Group startTime and endTime into a single object
ef28d1663d9 Inline parameters to execution task start and end
5c6ae4fc5ac Update NotebookCellStatusBarItem constructor
872bbcc8c1c Update provideCellStatusBarItems
28bf10376c3 Add 'notebookLayout' tag to suggestions
4dd5ccb1566 Make registerWalkthrough public
d2561813a8d Merge branch 'notebook/dev' into main
dc9dc66109d tweak fix
ac7bb556e8f Disable "consolidated run button" in Jupyter profile
4449461cae4 fix #125121
a296485f007 fix #125045
8e86a3c6b16 Enable consolidated run button by default, now that Jupyter has caught up
515c64f05e6 fix #125125
5e27fb3ba85 Fix to make @recommended:languages search work
84196c8b8d3 fix: update colors
950ad4ffec5 colors: add support for exporting colors
2c503281922 Add import to pull notebook getting started content into build
9bd78a8bf53 notebooks: restore renderer messaging generic
088e0d282ee Revert "fix #125137"
d6d3091cbd3 fix #125137
c7f8b301938 Revert "fix #125137"
67e64a8fc86 Merge pull request #125083 from microsoft/ben/69349
80a899d8d67 fix #125040
aeecc7c03ff notebook: messaging api polish
4df863a28da Remove extra notebook images
092a2242ce5 fix #125137
2e8e888989a editors - more tests for capabilities
b743bf63de1 fix #125124
d6d9200832a notebook: fix mimetype switcher not working between custom renderers
ebcbe001591 update todo search file
6dbbcc2eee7 fix compile issues...
e8d8e53752a update/tackle todos
6fe84c402bb Merge pull request #125106 from microsoft/joh/api/noMetadataType
553893e940a Merge pull request #125104 from microsoft/joh/api/noItemMetadata
632f2156f2e remote indicator: remove vscode-vfs workaround
5a49e6a283e Focuses the editor after showing next/previous inline completion.
1bab611b73b Sets user-select: none to the hover actions so they cannot be selected anymore.
103d3edfdc0 Fix text replace case operation false positive Fix #123483
a3bad5878ef Add a protocol property to tunnels that corresponds to the attributes for that tunnel and is reflected in the UI.
bd8a0fb3d76 Fix #124779
0115c74d4af update todo@api search file
8dd2e53e247 bump versions
a476c9d4f08 fixes #124850
0580a6bae45 Settings: remove notification that changes are saved (fix #69349)
545b931b96b remove dedicated types for notebook and cell metadata
b1457fa4b6d remove NotebookCellOutputItem#metadata
e7b775adebf Revert "fixes #115535"
ae86512bf07 Fix automatic task timing Fixes #125044
6a02e8333c1 small jsdoc and todo tweaks
952e39f9d2d fixes #125026
d163f3f3d45 tooltip text grabbing broken. Fixes #124457
e9d05647b3b update distro
122df438a80 Run OSS Tool
89157c1a87a notebooks - tweak description for untitled files
1e446dfadf5 Don't hide suggest widget when expanding ghost text
ab80101db2d Revert "Fix regression with extension enablement"
24e1234559d [json/css/html] update services
a8a57c3fc67 Merge pull request #124288 from huszkacs/bug/issues_with_backspace
a4e1a259a2b Fix tests that were not updated
91b7e6027ad Move vscode.newWindow & vscode.removeFromRecentlyOpened out of apiCommands. For #110583
2ae32273fd2 update my-endgame notebook
0a1046ada41 Merge branch 'notebook/dev' into main
2f253fcc220 more todos
4093effb9b0 Merge pull request #124964 from microsoft/alex/ghost-text
79048992ef1 Adds leftTrim function, fixes bug in inlineCompletionToGhostText.
b1da1fbc8c4 Merge pull request #124972 from microsoft/hediet/fix-negative-overwriteAfter
3a259a7a6ae The replaced text does only need to be a prefix of the insert text after removing all leading whitespace.
1176faf27f2 Fix #119265
78c865d70d4 polish remote menu control actions
4ebf68103e6 readonly [] over ReadonlyArray...
67a85487125 Expose the inline completions provider in the monaco editor.
1eef15f0d54 more todos for notebook API...
552d457b718 updated code search file
f700cab7c36 💄
2031df26538 rename hasExecutionOrder to supportsExecutionOrder
f2fb2b8cbe3 rename viewType to notebookType, https://github.com/microsoft/vscode/issues/122922
ae17cc95591 Improve autocompletion for statusBar/remoteIndicator contribution point. Fixes #122566
efcf0eea9bc Remove default support from  vscode-translations-import
b55d4384260 Fix regression with extension enablement
b7be98705fd Update descriptions
220f89ba3c6 jsdoc and todos
1e57955c798 Remove handling of Default inno setup file
e1928efbb63 notebook API finalization part1
cc8ff11f574 Fix recursion exit condition in variable resolver
2e026cf7c28 more API todos
0fde806bf85 Add limited support for variables that resolve to other variables Fixes microsoft/vscode-remote-release#5007
355df0eccb6 move renderer script and IPC into proposed and merge with general renderer IPC, https://github.com/microsoft/vscode/issues/123601
da851abcd6f jsdoc 💄
8d244362832 remove resolved todo
83d5e2bda06 rename namespace to notebooks, https://github.com/microsoft/vscode/issues/122922
594fc814bca update untitled hint to work, use the correct setting name
f68ee48c524 Fixes #124742 by ensuring that overwriteAfter is not negative.
edf85f1711d fixes #122402
3b407e0b6c1 move onDidChangeNotebookCellExecutionState into proposed, https://github.com/microsoft/vscode/issues/124970
e9579534bb2 Only trigger session when typing, not when the model context changes.
6832b7ec4b0 Disables rendering visible whitespace due to feedback. This makes ghost text less real.
7cd53df7d72 Swaps previous and next inline completion actions in the hover menu.
427f48b8d17 Add prebuild commands
dea978dd1c1 custom hover for remote indicator
8d41153ffc5 support custom hover on status bar entries
d4161177d98 don't use console.trace for all...
692fb8ab211 print trace for potential cycle, https://github.com/microsoft/vscode/issues/124723#issuecomment-850674813
f55a5243a43 don't use console.trace for all...
910d70bb88d print trace for potential cycle, https://github.com/microsoft/vscode/issues/124723#issuecomment-850674813
8b04a825b49 Merge branch 'main' into notebook/dev
94f47f44c98 Merge branch 'main' into alex/ghost-text
d776f0c1eba Fixes border color. Renames to ghostTextBorder/Foreground.
85f9447b720 Call adjustWhitespace on snippet.
db1bd650dcc Don't compute ghost text that is not supported. Thus, no space is reserved for unsupported ghost text.
4f3d865a6b4 refactor for cleaner initialization (#124904)
ccb0a8c2d93 Revert change in default due to build failures
6737ea008ff Change executionState to state
6949856b195 Remove API todo
038bac01c41 jsdoc for notebook cell statusbar API
667e3dd844a Tune getting startred color picker
bb5b6afdce4 Remove "primary" in favor of alway opening the first applicable walkthrough
6adfa8b3135 Enable getting started as default startup editor
b2f203113c1 editors - more alignments across editor inputs
ada71479023 Open getting started the first time a notebook is opened
08eedafbd60 Finish getting started content
b0862e99074 Don't include our loader in notebooks (#124864)
26b9218d64f Merge branch 'josola-edit-devcontainer-readme-markdown' into main
ad52b3f4583 Fix merge conflicts
09d1935b4cd Correct dev container info in README
1605d16ee3d Refresh dev container content
d7a79f0393f Add notebook profiles to Getting Started
887ff91a14a Merge branch 'notebook/dev' into main
5e7cd998762 Bump TS build version
e3354e26eff Whitespace characters are near invisible in High Contrast theme (Fixes #124612)
bb4e83a19a8 Improve hover stability and handle case where mouse is directly over inline ghosted text
aada268951a update distro
5fe858a229c Workspace trust explainer in getting started
f568f5aec3a Avoid scaling down SVGs in Getting Started
eb65a93f4bb Include import ref to markdown so it gets included in bundle
bbc7af71930 fixes #115535
3772aeec10b Typo
24143e91320 Merge pull request #124828 from microsoft/alex/ghost-text
868b84ceb99 fixes #124850
f509e7552a9 update classifier
676340ffad9 Get expected service worker version from renderer instead of main.js
3bfa3455a6b Fix incorrect reference when 404 on webview resource
445dc50f737 Use unique id for releaseNotes webview
1380c0c5e0b Remove unused code for rewriting endpoint
8058ab1a966 Disable consolidated run button by default
15616f8d936 refactor codeExchangeProxy to use same route and use it for refresh token as well
a6f4d96b826 Fix #124049
44a24280846 editors - unset preferred mode/contents before attempting to resolve
c784a74b8ba send Output metadata, not just OutputItem metadata, to renderer
ea02f214c74 Merge remote-tracking branch 'origin/main' into alex/ghost-text
dca2b9e2db8 Show hover over multiline ghost text
ab1cf30d883 add api-todo code search file
affbf49ccca Introduce `HoverAnchor` to allow hovering on something other than a range
4202ab071a6 rename NotebookCellOutput#outputs to #items
b16b45fecb8 Tweaks the effect of showSuggestionPreview and introduces showInlineCompletions. Explicitly triggering inline completions will now work even if settings are disabled.
d2854fd7877 fix #124842
d9f1e27aeb9 more API todos
394a1ce2dbc Merge pull request #124752 from microsoft/tyriar/term_trust
2f0a9160d0a more jsdoc, also more API-todos...
9eb940e243f Remove padding left (#124823)
42af32d16a0 do not use shadow dom for editor context menu for iOS
6c10a5334ee add jsdoc placeholder everywhere
e7776ccdcc3 Setting for specifiying the local host for port forwarding Fixes #124581
e15f4026511 Add `mightBeForeignElement` detail for `CONTENT_TEXT` mouse target types
a2d1bd0d158 Adds menu 'editor/inlineCompletions/actions' that extensions can contribute to.
098dfd56e3c Changes shortcuts of next/previous inline completion to Alt + Open/Close Square Bracket.
00de32d013a Keep track of the span node used for hit testing
8e54aed67b7 Remove `IHoverPart.equals`
ccfda77c8e6 Reorder participants to improve stability
77bc8745b29 jsdoc for NotebookController
71fafe39464 update jsdoc for `NotebookCellExecution`
541a5d4fa70 smoke: trust dialog should appear in 5 seconds, and we can ignore if it doesn't
5b642616ef3 Use loading + spin codicon for task terminals status Part of https://github.com/microsoft/vscode/issues/121659
04e09dacdfd refine output modifications of NotebookCellExecution
3a857fc436d editors - add tests for capability change events
004f6609f8c Fix problems with port protocol
903e219ccb8 files - need to track individual readonly stats everywhere (#124524)
466dd4e490e files - provide access to stat object from not modified error
872fac207ee Merge branch 'main' into notebook/dev
d5c73cc952d fix https://github.com/microsoft/vscode/issues/123570
3ac57c71329 Fix NPEs caused by extension that is not in the marketplace
df03e4caadc Removed unused MarkdownString.
e5f70e8e2a2 fix smoke tests (#124814)
47d3d743cad set max zoom to 8 (#124769)
b2da15ea2d8 Merge pull request #124745 from microsoft/alex/ghost-text
a9c54044e50 Refactors inline completions model.
ccedcbdf5ec Do not accept suggestion on tab if indentation is suggested.
a2944c32ea9 Fixes rendering of whitespace in the inline decoration.
8a3f351eb9c Use explicit context when the user cycles through suggestions.
1fa3397c48c fix post-merge hickup
a97ebdbabc8 Merge branch 'main' into notebook/dev
8715d80695f fixes #124809
7a767570e85 editors - more tweaks to dnd behaviour
07ff28c58d2 Dont center markdown content
3ea0bf8fbca Implement run button with extra actions, and "run above"/"run below" actions
970858ef6dd Add first pass of color theme selection markdown content
29cad8fb5e6 Merge pull request #124754 from microsoft/tyriar/profile_api
e0c8a76b7ad don't sort scope list. Fixes Microsoft/vscode-pull-request-github#2751
c1448f3161e Remove ansi escapes from localized string
9eeb092206f Re-enable skipped test
9b609ab1e11 Clean up profile provider api
e8758933d80 Disallow custom profiles as default
e037348d272 Support launching contributed profiles from dropdown
280e0070733 Add undocumented always syntax only TS server mode
866ecdd45a0 Merge branch 'notebook/dev' into main
1c3cc87bccb Add an `InlineCompletionsHoverParticipant`
7ce379e3f2b Merge branch 'main' into tyriar/term_trust
d9e043161fb Bump sw version
73ff24e451d Fix de/encoding for rewritten vscode-resoruce uris
b8f11107f72 Use @types/vscode-webview
decb1ab6a89 update left aligned plus button margin.
484b04df64b fix #124774
902bb43b3b1 testing: move back to proposed
31aef10814f testing: hotkey for opening output peek
14a013e7f3c Support contributed profiles in dropdown
dd61b26f33a enable workspace trust by default #wt
5338cc32da7 fix build.
4403b9010e5 Tweak remote workspace trust calculation
e3d4313714f support editor options override.
384f42bca76 Tweak wording, fix #124724
0dd52e2d77f Update distro
b157bc7e5c3 Support for @recommended:languages search (#124546)
9224159b004 Migrate users from shell -> profile settings (#124615)
d2a0bfb2866 editors - log error when opening fails
61f3ac6e07b support context keys in menu bar (#124726)
0de0faecee5 fix https://github.com/microsoft/vscode/issues/122376
f523f65f398 Add a `description` field to decorations to be able to find leaks
4c5a061df61 rename NotebookKernelPreload to NotebookRendererScript
9ef57b5c216 remove NotebookCellOutputItem#value, https://github.com/microsoft/vscode/issues/123884
4ad3265cbed Support workspace trust in terminal
a56fe2b397e use isVirtualWorkspace
ed611d0ec39 Minor tweaks
4edb0110f6b Small tweaks
7bd0337d940 Move parts of the triggering logic into the widget
2508b33f0d3 Wait for listen when making tunnels
7a83e5aa627 workbench API: assumeGalleryExtensionsAreAddressable
e94e8ed3998 Show default profile on top of term dropdown
693677c8a24 babel.config.json language mode should be 'jsonc'. Fixes #124683
cd501b2e5bb Merge pull request #124741 from jeanp413/fix-124735
9dd89100b49 Improve editor DND to work with untyped resource editor inputs (#124749)
14a4548e4ab editors - use preferred content only once
da1193950a1 some jsdoc for NotebookCellExecution
30074591eea editors - input 💄
55d91bbed87 editors dnd - more 💄
9d907212baf rename NotebookCellExecutionTask to NotebookCellExecution
5d534b94f83 dart: fix language configuration location
d0d80ec337f fix build
23fb4207373 Merge branch 'main' into notebook/dev
0637663fcfe fix isNoCorsEnvironment
9095b835bbf editors dnd - fix dirty contents in files diff
c870d75473c editors dnd - enable diff editor transfer
70418f0aced editors dnd - fix untitled transfer
bba59424f56 Merge branch 'main' into ben/better-dnd
367a0b809ab editors dnd - towards allowing any untyped editor input
6ba7093a8a1 Fix window/folder/workspace terminology for status bar entry and banner
9638534dd51 Fixes #124735
c1d4497a31e Merge pull request #124664 from microsoft/aeschli/dart
1082913dd01 fix config default value.
433c801dcc3 editors dnd - some more cleanup
cbbdb17b80d editors dnd - rework to allow to set contents to untyped editors
b5b059d2e2b fix typo in files.ts (#124693)
5eec3c86e3c smoke test - disable experiments
85d8f223c70 Remove keymaps from getting started walkthrough
02968bc2503 Call post message to all parent clients
1fd2b4ed1e3 Rename keys and support full context key expressions for check offs
14b31425b90 Fix #124531
bfb94c85fa3 fix build.
c95af9ae460 fix build.
8519a42c5f6 notebook options respond to view type specific cell toolbar position.
e3c8ff57849 try showing the banner only after some files have been opened
561b8364008 testing: fix hidden tests not being un-hidable
ade83f05895 update context based on outputs.
574696980c9 notebooks: update state of messaging spec internally
c4fda24034a testing: fix terminal being shown inappropriately, use beaker
0feee9edefc Remove `instanceof` check
641c2b175ca Merge pull request #124707 from microsoft/alex/ghost-text
e0a52df1695 Merge branch 'notebook/dev' into main
c3d63c1a1b2 fixes #124692
8e9405e7a9b Keep the `ColorPickerModel` alive between repaints in the `ColorHover`
35b43a410b0 Help TS understand the code
ebdd548be22 fixes #124702
c538781d780 add notification if tsserver logs are left on for more than 7 days (#124149)
363e8f25f6f bump distro
244b48af73d testing: additional actions and better theming for peek
a5bbc53e882 Extract more color picker related logic to `ColorHoverParticipant`
4e6fe2dc51e Extract pieces of the Color Picker logic to a new `ColorHoverParticipant`
fd7c71a2eea 💄
c88d5756213 update compact view default value.
1e6b6cb6843 Pick up TS 4.3 final
6a12866c3e9 💄
1abeaf97753 Workspace trust - remote workspace (#124617)
a430e8f9692 Fix settings dropdown hover style Fix #124207
b6acb191fac Fixes #124665.
99bcc8e2458 Show clear outputs only when there is kernel.
9252be4f90a distro
21bf10d4977 Removed unused member.
54ebd819176 distro
f1a5d40aa75 refactor getCallbackEnvironment to return authority by default
5eddbd9d207 Properly support splitting ext profiles
08cf3df7457 Pass object instead of unwrapped args for term create
d7779916566 move buildExtensionMedia to lib
62e8b545f7a missing build
51a5caf3f23 Simplify terminal creation
bf5f7dd5ec1 Get split terminals working
d1ed9c8bf35 Adds proposed API for window.getInlineCompletionItemController(...).onDidShowCompletionItem.
3ff91e7621b Merge remote-tracking branch 'origin/main' into tyriar/profile_api
7f21b1af485 Revert "Allow extensions to create multiple sessions from the same provider (#124640)" (#124705)
4583ef442b0 Fixes bug that "show previous inline completion" actually shows the next one.
8f0589da177 Set suggestionPreviewExpanded to true by default.
9464d14f317 Make notebook renderer activate potentially async (#124647)
5eb64c54ca4 Modified markdown preview nested list styling (#124445)
23e1f261dc8 Remove `HoverPartInfo`
84bc432011c Add `IHoverPart.owner`
31a59b5970d bump distro
e6a1cc38437 Update commands.json
e29194ad0d3 Activation event, register api
6a7c700a12d file working copies - do not throw from ctor anymore when schemes are unexpected
bfccdcb9581 disable fullscreen on ios
764d8fdc3dd test: add test for event Relay (#119070)
a7ab347c2b3 remove old notification
d662cc56549 remove old license notification
c704e43d5dc Check that the /build/ folder compiles
0e3459b0b9f expose Grid.onDidScroll
0a4bfb31c90 fix naming
a628237458f Web: "Open Folder" on empty workspace does nothing
4cda850edf5 disable welcome editor in smoke tests (fix #124674)
0688745e82e Color.Format.Css.format does not return null, so the return type can be made more strict. (#124568)
dff33d73244 use actual object
0d44b63c1c1 fixes #124407
9cba86888c9 update node version in optimize
0a7a69f1908 fix build compilation
9eb4eff77b8 some more jsdoc, https://github.com/microsoft/vscode/issues/124357
d63a69abf3d some enforcement of unique mime types in the extension host, https://github.com/microsoft/vscode/issues/124357
24ca9e0d7c7 Merge pull request #124654 from ValidMelvin/main
a961587ecf7 dart as built-in language
98dc73a3296 unnecessary space in in julia cgmanifest
c97189d9d06 some more :lipstsick: and simplifications
a48d92d0fd8 only pick the first occurrence of an item per mimetype, ignore others, https://github.com/microsoft/vscode/issues/124357
18b6620bc39 fixes #123543
c2cc9b11afe Update README.md
14f61093f43 fixes #124507
69259e84a0a some 💄 for  https://github.com/microsoft/vscode/issues/124357
44b470c99ff fixes #124576
47d00215aff editors - cleanup untyped editor interfaces for text capabilities
04f585a580a cleanup interfaces
e12f21f498d Merge pull request #124549 from DonJayamanne/createNb
5e146d257b5 Update classifier.json
d0884f4a1ec webview - clear group listener when it gets disposed
fe1547c251b Merge pull request #124621 from microsoft/roblou/diffNotificationMessage
5cc9ec944d8 sandbox - bring in iframe based webview service
3084319750b Get rid of classes for workbench editor options (#124589)
b82b90c1000 editor options - more 💄 before merge
a18ea9c9ec2 Allow extensions to create multiple sessions from the same provider (#124640)
21162bfb68c Shift execution count label down just a bit
68efd480d0e Explicitly convert properties to strings before uploading
ad41b3a12b5 Mark a few more props as readonly
0a7061ed002 ReadonlyArray -> readonly arr[]
24a23a8ea05 Mark array params in vscode.d.ts readonly (#124599)
7d50ce2061e fix tests
2521499104b testing: add clear test button to peek view title
57af60a7b7f testing: initial test message split view
473cfe28bfa Revert "Revert "Merge branch 'main' of https://github.com/microsoft/vscode into main""
8822790908b Merge pull request #124622 from microsoft/gettingstarted/navigateToStep
7c01395da16 Revert "Merge branch 'main' of https://github.com/microsoft/vscode into main"
7a976501eb3 Merge branch 'main' of https://github.com/microsoft/vscode into main
22576768342 Applied new style to first getting started walkthrough
8ccc1243fc0 Fix notebook unit test
b0f67df65d7 Fix build
bb19c28fe2c Getting started layout polish
2d9aa1868ae Fix broken @tag in settings editor Better fix for #124520
0b2d890624c fixes #124619 #wt
20ce9d57629 fix weird border rendering on windows.
b4f4839da5e fix integration test
6bcd590a706 Merge branch 'notebook/dev' into main
e1731e91048 fix build
f378cff1a8e dropAndDrop -> dragAndDrop
032920fa2ee vfs -> virtualfs
72c4bd69c04 remote menu: sort entries of current remote first
757fd91f040 Hide TestReolver.newWindow when in virtual workspace
cf2a866b7dd test resolver: supports untrusted workspaces
68ba0141fbd fixed notebook focus indicator margin
5926c50d6c4 fix missing markdown height update
33209f104db update markdown height on options change.
7fd8f828c02 fix pwsh profile test failures (#124613)
8f18f3c5ff2 oops
771446e4a21 Make showCellStatusBarAfterExecute not experimental
71cc917274f Add option to show cell statusbar after execution
3ccbe2a6b1b Fixes #124247
789a91a487d wip
db6ffb43b90 fix #124583
c351b396cac Support terminal renaming inline in the tabs view (#124533)
33eb149bada Add reset to default to terminal tab color selector
18b30e5b494 Fix default shell args for debugging
a8b63f564af Merge pull request #124585 from microsoft/alex/ghost-text
19c88bc3c7a editors - more EditorOptions cleanup
5254e33173d Removes unused const.
af0078d44d5 editors - more EditorOptions cleanup
de08dcdf276 remove folding classes first when config change.
c17917e6ba4 Enable notebook renderers on web (#124557)
f2b1f78ad45 editors - remove EditorOptions
a21b824704b Enable notebook renderers on web (#124557)
0249ae32871 clarify that NotebookController#id should be stable, https://github.com/microsoft/vscode/issues/124535
080f8b5e35f editors - remove TextEditorOptions
8adc16d6c50 editors - remove TextOptions#create
b10db1828d0 editors - remove TextOptions#from
9bdb8f88816 editors - remove TextOptions#fromEditor
593a25d41e1 editors - remove TextOptions#apply
741beb8f264 TestResolver, use 127.0.0.1, not localhost
3de3141ff56 Implements basic cycling through completions.
4d4ebbee5fc Clear inline suggestions cache on commit.
f89fc476de3 Fixes colors for dark & white theme.
a78bc1aa96d icon label: supportIcons implies LabelWithHighlights
d4307f8d534 missing validation for top-level token color object
b6551f8e4e3 Workspace trust - no need to call setWorkspaceTrust (#124566)
afc2b062703 editors - start to remove typed editor options (notebooks, search)
64b0c65b8cb editors - fix cyclic dependencies
5880a6a4eeb Merge pull request #124570 from microsoft/hediet/ghost-text-expanded-by-default-setting
ce8b0049619 Merge pull request #124353 from microsoft/chrmarti/localinterface
97d576cb085 editors - more cleanup of large files
43b7187c3df Force inheritEnv in ext debug terminals
0685a4af28b Default bash, zsh and fish to login shells on macOS
a26ecef44b5 Add self to workbench-diagnostics
8a1de4b022a Merge pull request #124567 from microsoft/hediet/fix-after-decoration
0efc03fb168 Removes unused import.
5364a9351fd Adds option "editor.suggest.suggestionPreviewExpanded" to toggle whether suggestion previews are expanded by default.
8bd49ffd50b update distro
eff82a3cef1 rename trusted types CSP from notebookOutputRenderer to just notebookRenderer
ffd1f84ea9f rename notebookOutputRenderer to notebookRenderer, https://github.com/microsoft/vscode/issues/121819
fd212e712ea validation 💄 https://github.com/microsoft/vscode/issues/121819
52df34dcf19 Fixes invalid cursor position around after decorations.
eebf8e876ab editors - extract input and side by side to own classes
42e59bd3777 more complete cell info for markup renderers
e11764f8420 add ICellInfo#data to eventually replace bytes
b5fc2b0a398 NotebookCellOutputItem factories allow for metadata, expose "bytes" as data property, deprecate value-property, fix converter issues, https://github.com/microsoft/vscode/issues/123884
856fb393cb4 editors - more dnd code polish towards any editor dnd
f2248508a68 fix tests on windows
ab793cf02ac editors - make dnd code ready to delegate serialisation to respective editors
59f5bbaf253 editors - cleanup editor descriptors and 💄
dee37c6e765 web - offer upload action only for editable folders
e0f751f1287 editors - introduce and adopt capabilities
71d00b3b993 Merge branch 'main' into notebook/dev
0bada155580 more API todos
76523deb91e Bump browserslist from 4.16.1 to 4.16.6 (#124550)
963f30f0871 💄
b1823157d54 Fall back to existing published webview commit (#119295)
286b643ecd2 chore: bump electron@12.0.9
c3c2113c368 Preserve execution summary when converting dto
8173a0e0398 Fix hang when typing incomplete @feature in settings editor Fix #124520
28803975a1a Add @feature/notebook
e9f3fe9f301 rename markdown layout section.
fe41fcc58d6 💄
fe3cab25c5f compute position/width of output action bar.
af14bf673ab remove kernel picker config in menu contribution
1da9f2d2e6a Update subscribers.json
d28d8802e42 testing: add default keybindings
8b9f8595cc2 Remove unused
6cfad71ce61 notebooks: remove deprecated vscode css vars from webview
196e79256dc Add workspacePlatform context key for getting started items Closes #123824
6ed2584f390 fix unit tests.
46ef54c20e9 Merge branch 'notebook/dev' into main
8a41d85d1be notebook open layout settings.
f88c007f6c6 👋 Rachel, 👋 Tyler
d7ead317dca Close #122570
41d869f5514 move nb layout settings out of experiments.
79762396a06 Respect soft revert for custom editors (#115658)
78251f8e016 Update distro
7e0d8cd80ee Merge pull request #124511 from microsoft/tyriar/color_config
9993eb9d1ae testing: improve support for markdown messages
b168ece8de3 markdown: add nbsp to unescaped sequences
b04c9668927 Fix test resolver with trusted workspaces
dbdc7a259e2 added bottom spacing for table in markdown preview (#124385)
5cbd4bc4691 Fix color of single tab status icon
a8d2a3a87c5 Resolve todos
47b7320c1f4 Show tab prefix before icon is ready
a31d9ca6993 Don't show icon until its resolved
f7f6956554a Share profile property schema
17e82898ed1 Remove show all colors, add settings intellisense
a8e7253de09 fix scroll in table widget #wt fixes #124314
2b9f22631f5 Support terminal link word wrapping (#124514)
cdbf46815c6 update distro
fe1af896d5d Use remote reconnection constants  (#124517)
2b6564c1015 insert toolbar on the left.
df3c2c48755 testing: move apis to stable
b6dad5d1437 Support any theme color
3c2ffadf29c Dynamically generate terminal color css
9eaba8944ff Support colors in terminal profile setting
7a0ce574da6 Fix test output pty usage
777f09d4569 Fix safe config provider fallback to default
d63078aaf04 Merge pull request #124317 from jeanp413/fix-124127
a8397d15299 Merge pull request #124480 from nrayburn-tech/fix-122348
934a4244e27 Remove overrides from editor service (#124375)
b47569400a3 option to hide terminal tabs if there is only a single group fixes #122348
5319757634f Add fallback webviewExternalEndpoint in code
8f11975c47c Close #119722
d6b5df5e199 retry logic for setting password (#124390)
12fa7b04257 Increase timeout for webview focus change
4c4ec402e7e return early
b314536e56a Move find file references into the search group
18296326a9a Set proper context on new cell output toolbar
28767c88f0a Close #122795
cd8bf7ba536 fix zero height output height.
7bc2019b8d5 Updating pinning test
be8745ac9e0 Fixes #123228 (#123584)
6ee883bfa32 Split href before decoding instead of after
6af49913c2a title for notebook label in notebook toolbar
77ff6eb03bc Add image specific link normalizer (#124400)
e9b8c129155 Add types
a03daaf8506 Merge branch 'notebook/dev' into main
4ba27602740 fix #119214.
8afcdfaad8b extract complex options parsing.
9996e32bc9c testing: improvements when running a previously un-run test
6507d05310f freeze layout config.
6cda8d2373d extract configuration update
f38f3bb8e78 Merge pull request #124044 from microsoft/alex/ghost-text
51aa5402d63 Allow single line decorations that are not at the end of the line
06a86116b73 Fix firstHostSegment logic
827dec3a0df Use better logic for getting scheme and avoid extra decoding for authority
44fe867eddd fix tests
c23c9e448e6 Implement dragAndDrop enable setting
021071ff74a Avoid double encoding authority
22dc518a210 Remove unused type
97bbacd8087 Remove extra call to with
82d18a42fa2 testing: fix auto run triggering test multiple times
17f3a69e243 Allow toSide #119725
86cb6d6b337 Close #119725
4d53b454283 Fix local term warning in remote
5ac4f5f5be4 Fix didn't work
af3fbd968c9 Make sure we decode uri path
84f5040b3db Remove unused member
91fdd52d17b Merge remote-tracking branch 'origin/main' into alex/ghost-text
8b709a2f55a testing: provide test IDs in menu contributions, rather than internal elements
231c155d31f Refactors the inline completion feature.
852b70eafed Try fix (#124384)
c5da7f33a70 Fix wsl detection in profiles tests
b6387e477be Tweak output toolbar position
b78754e1e46 fix incorrect links (#124203)
a0d7f6292e9 Remove a few instances of 'vs code' in d.ts
b0683f58a5a fix #124360
9847783f62d Remove uuid from webview resource uris
79dea51e79a Rewrite webview urls to be more url-ish
8a4bf3081a8 update folding on mouse over
70c87f0db9b Fix #124240
adf68a52d56 editors - some type 💄 around setInput
effac5be7f9 drop as-prefix for ICreateCellInfo
8f093359f07 editors - simplify some serialized editor input
8aff8020dae Improve guard against unexpected URI call
82cd4f027ad fix leaking of NotebookCellOutputTextModel and NotebookCellOutputTextModel#_onDidChange, fyi @rebornix
c5b9b6c48c7 Fix missing async
5807530e3ae more jsdoc
85f518b2552 Add `RemoteAuthorityResolver.getCanonicalURI`
c650993dd39 Add `ResolvedOptions.isTrusted`
49e96be2fc1 💄 prefer `readonly` over `public readonly`
1087876df86 Use vendor-prefix for notebook specific mime-types, e.g application/vnd.code.notebook.stdout
045e5d2f568 Store conflicting defaults in storage service (#124366)
fc0b6f5e5ab fixes #122653
8b25f922b6b builtin support image/gif mime type
61aca51a322 consolidate SVGRendererContrib and HTMLRendererContrib - both were the same...
fb6f0d95fad consolidate JSONRenderer and CodeRenderer
103892d1eb4 fix code renderer layouting issues
32a06b9be2c [typescript] add limited description
bbe3b2266b5 allow to signal limited functionality in virtual workspaces
d65dace8ea0 Merge pull request #123351 from nrayburn-tech/fix-77239
b9f20119393 Bump distro
815f217174a jsdoc for factories, some unit tests, https://github.com/microsoft/vscode/issues/123884
8268bd46e7f 💄
375a15f07e9 Merge branch 'main' into notebook/dev
996dfffd637 enforce proposed API for shortTitle proposal, https://github.com/microsoft/vscode/issues/124355
c5637229dda Merge pull request #124289 from microsoft/command/shortTitle
2b959fdadc1  Listen on local interface only (#124350)
494e827e351 expose output item bytes to renderers and provide util functions: asText, asJSON, asBytes, asBlob, fyi @connor4312, https://github.com/microsoft/vscode/issues/123884
100a70731db SVG images are not render in the tooltip (fix #123688)
949f60498ae Merge pull request #124346 from microsoft/ben/pfs-promises
063be236f34 scm do not auto focus input box on iPad
f19843b0a3e editors - some 💄 and tests for workspace trust in openEditors
9086ecd9f08 Renames Suggestion to Completion and cleans up API
a6f7aa5e4c5 handle workspace uris
73c6f34f9ec Do not recognize Debian's .install file as a shell script. Fixes #124295
90b9e04f951 try to use suffix for view type when creating untitled notebook, fyi @brettfo, https://github.com/microsoft/vscode/issues/121974
779f9876bc0 debug: properly read the debug.saveBeforeStart respecting activeEditorMode
79e642a5ddb move and simplify renderer registry
bbc293839d4 declare IRenderMainframeOutput#dispose and adopt it for builtin renderer
55059ffe214 todo
e6dd819bf08 first cut of "bytes only" output items
4b5db9098c2 smoke test - disable failing search test
17459a4abd1 notebooks - add test for NotebookWorkingCopyTypeIdentifier
43b51ce8e76 notebooks - fix type identifier compute
703ca68ea6b fix typo
b8fe2db4392 fileworkingcopymanager2 => fileworkingcopymanager
0e58bef15cd file working copy => stored file working copy
78fbc51ad75 Close #124325
633ea857088 notebook working copy - some cleanup before refactorings
d0c5675f6f2 editors - less group.openEditor usage
e66c62f38a2 Generalize smoke text
89c8f919884 Add smoke test for #124146
4fd4e10e99e Fix #124146?
bfb822e4cf0 fix #124284
0989449a055 Fixes #124127
2f2b6b528d0 testing: show duration for test results, handle state computation better
3e5faf69c14 Remove console.log
9e04a67d125 Switch to use vscode-webview.net as default webview endpoint
acc07bd9591 Mark properties readonly
bf4c7042a3a cell toolbar overlap with notebook toolbar.
f29bd6f18dd Dont autofocus input on ipad Fix #122044
5b0fc94e6af fire event when trust is change in empty window #wt
c1b809ef221 Fix #124307
cd27f1fcb91 update text for loose file button #wt
07a2aab8f2c Remove duplication around checking isRemote
55c2fc5604e add setting and checkbox for untrusted files #wt
d3f040fe017 Fix notebook cell statusbar items duplicating. Cancel tokens on dispose, and dispose the timeout properly
894b7782cce Merge branch 'notebook/dev' into main
9627b4ea63e Emmet identify CDATA for wrap, fixes #123136
97740a7d253 Revert "Revert "Revert "Closes #122433"""
ddf8cc42616 Dispose CKS
4c1474b458d debug: finalize parentSession
514d3162bc8 Persist title source and set after reconnect
604b27db1bf Fixes android screen-keyboard backspace issue.
af0c01b1e36 Short title for command contribution.
18ea5ac15e6 Use isRemote instead of remote authority to determine where to load from
6f2381e33d7 Terminal tab icon API (#124004)
d0cea47ae39 Merge pull request #124194 from microsoft/dev/t-andreamah/outline-reveal-editor-switch-fix
dae2a9d4ebc do not auto focus on ios extensions input and keybindings
6b097212e69 Revert "Revert "Closes #122433""
bd934d89ea0 Use untyped editors for workspace trust
59abb887f6c notebook: address messaging api changes
5b17052a5b3 Fix webview tests
2270c36cff9 Use extension location instead of remote for asWebviewUri
9ffac783be4 Merge branch 'main' into dev/t-andreamah/outline-reveal-editor-switch-fix
22f7f470b69 Apply Logan's suggested changes
0b355ffc89b notebook: fix certain kernels/output not working
f75152cd815 notebook: fix certain kernels/output not working
ab5df442eb3 Merge pull request #123727 from microsoft/dev/t-andreamah/markdown-static-preview-scroll-state
18c254987cd Merge branch 'main' into dev/t-andreamah/markdown-static-preview-scroll-state
2ab6e9cdd26 Debounce invoking the inline suggestions provider
99be6bad750 Add a command to hide the inline suggestions
62bbbcc7bf4 Remove log
875ada9bfad experimentalUseTitleEvent -> titleMode
76154be4d4b Truncate Windows path from sequence, do title handling based on remote OS
8a6cc9cba7c Fix dynamic title for reconnected terminals
74849362b2e Render only one line of ghosted text by default
713d5861404 💄 less casts
1718a6e2ac8 Hide hover on target element(s) click
224b0f22922 Fix category and max-memory option args
5ae8db2ae0e Render the suggest widget above when rendering a multi-line preview
8c194abb5e7 Do not shrink the additional lines once a shorter suggestion is displayed
da4fcc266fc file working copy - avoid ugly casts
aea7c1a3343 Merge pull request #124196 from microsoft/tyriar/dnd_2
e538fd90c0e Hover hover when context menu is shown
4a679df5312 Hide ghosted text when it wants to be displayed in the middle of a line
e91d5475acf Merge remote-tracking branch 'origin/main' into tyriar/dnd_2
c6d2254b2fd Create a `InlineSuggestionsSession` also when showing suggestions
b5a9a026068 Invalidate current suggestion based on cursor position
49339aba513 Only start a session after a content change (with debouncing)
fdbcef0a842 Add `editor.suggest.showSuggestionPreview` to turn on/off inline suggestions
c8410ece147 node-debug@1.44.28
234136b6c28 💄 acceptsNonWorkspaceFiles -> acceptsOutOfWorkspaceFiles
91bf9326334 fixes #123469
2cc3b168fde Do not force the instantiation of the `SuggestWidget`
1543754dcab Tweak loose file dialog warning
669b0b3f719 working copy manager - clean up some types add some new APIs on manager2 for unified access: - get(resource): working copy - workingCopies: workingcopy[] - onDidCreate: Event<working copy>
3234403c5d2 Merge pull request #124191 from microsoft/aeschli/virtualWorkspacesInExtensionView
19574448d0e Fix rendering snippets
5f7cfa3a54e Introduces a GhostTextWidget model to enable data binding.
a6f89f58a9e Workspace trust - empty workspace (#123811)
0c996a39b65 Implement consolidated output toolbar
f583b4b3367 Merge branch 'main' into notebook/dev
29c61570a5b Revert "Closes #122433"
34180ac9bef Remove code allowing multiple ids for a command
35eafb78732 Add sort imports command
e65a227c829 Test using readonly[] syntax in vscode.d.ts
1ddc623e585 Simplify logic for webview resource uris (#123740)
93be0a6fa03 Update simple service
46a1ca78249 notebook: initial renderer communication
1ecba0426a9 Make `reload webviews` support webview-views
b3ed595dde7 Extract isRequestFromSafeContext
39d1a94e86f Allow loading svgs from xhr
4fbd548d72c Merge branch 'main' into dev/t-andreamah/markdown-static-preview-scroll-state
40592a274c9 fix test suite.
4fcc2720826 use custom shield dialog #wt
a65d55e9c48 Strict null fixes in webview
f822083cb70 Check `defaultPrevented` before showing built-in webview context menu
f594bb47e59 removing more unecessary whitespace
41606da2dc0 removing unecessary spaces
920c9a3a0d5 improve banner for virtual workspace
9ee1906718d pr feedback and combining prevEditor info for preview and non-preview
f433b4781a0 Pick up TS 4.3.1-rc
d921cc41fc0 Update markdown grammar
1642d4cd0ad Merge groupBy and groupByNumber utils Fix #123569
c1d6e44262e Avoid listener leak warning due to reusing cancel token for many RPC calls
0d338068034 Add suiteRepeat test util
5b3cf7cc2ae Merge branch 'notebook/dev' into main
c936add6013 hide kernel status bar item if it is already rendered in notebook toolbar.
b8c7d75e465 Avoid illegal line numbers in case of undoing a completion at the end of the file
63348b4a395 Improve contrast
de89605adfe Do not invoke provideInlineSuggestions when just moving the cursor
08f4a36de15 notebook toolbar container display none by default.
6956a38b674 Have the `InlineSuggestionsModel` listen to events directly
26194faa8be fix focus indicator default value.
2fbf0cd977e Respect the suggest widget only when there are suggestions
8c27c1f257b Update list focus highlight color in standaloned editor Refs #123703
0ec51535fa2 Rearrange actual group splits, not just instances
25bdb018483 Add theme key for terminal dnd
15f772fae32 notebook: include script url in back compat patch
b79825e7c4e Clean up
a3e72ce1d06 Reinit dnd observer after reattach
72b01fea379 Avoid selecting accepted text
d7f6d7e735d Fix markdown cell drag indiciator having wrong position in scrolled documents
de1c8ad93a9 Give clearer names and add comment
40a26850575 Fix shift for markdown cell selection only selecting current cell
3c417665643 Fix strict null errors in webview main
b8a0123cfc9 Fallback to fetch if localhost resolve fails
f0ef8dfd913 Add explicit null typings
c63ac2f6388 Use searchParams to get id
c13c6d8e468 Throw error when trying to reload/navigate within a webview
05f83d95d2b Fix issue reporter not debounce submissions (#123340)
8e87fea2f15 Support dragging to unsplit
40fbf5d915b insertToolbarPosition
e071cefa4df Support creating splits in different groups
f1a372c15f8 Support rearranging splits
2b30689ab00 Close #123935
25a12c75c5a use dummy uri
568bb89fadb Merge remote-tracking branch 'origin/main' into tyriar/dnd_2
5266a5fae3f Improved hover feedback
44d135e94f3 Merge branch 'main' into dev/t-andreamah/markdown-static-preview-scroll-state
f4e05837d01 Remove custom height, use default from menu service #123869
134d9b187bb Closes #122433
a796ebfb8b4 update actions column width #wt
f36c7a0860b Terminal dnd feedback
3804c98d6f7 fix padding for table #wt
5442f154ef6 fix issue when not connected to remote #wt
6356613d809 Update according to suggestion
49187c4e785 Replace flush with setFlushOn with loglevel info, fixes #123856
45e5c50dbfd Partially implement terminal drag and drop
283180b64b2 don't show action icons all the time wte
9716c27e068 slightly better uri for untitled notebooks, https://github.com/microsoft/vscode/issues/121974
1256b258a6f Honor the selection suggestion in the suggest widget (when it is visible)
d553c21d5e0 fixes #123869
52c8fced385 focus indicator border or gutter
81c6572671c added default editor override for symbol reveal
9326ded502b show extensions limited due to virtual workspace
b02acf39081 Merge pull request #123738 from microsoft/dev/mjbvz/unify-renderers-api
284c21a588e tweak terminology for wt entries
9a322a0d62a use folder terminology due to windows/linux limit
dc8844925ab Part of #122996
b63ad124d2e mark untitled notebooks as dirty by default, don't hold on to untitled notebooks eagerly, https://github.com/microsoft/vscode/issues/121974
09ab8ad2029 wip
eaf5a49200b status - update description of `name` property
1f912dfa3d5 Fix #123617
ff6d8771c94 fixes #124085
88d9a3aaf5c Support command links in trusted tree hovers Fixes #123723
eb5874237eb Improve task terminal status message Fixes #124062
53b58c89d44 Fix loop in port forwarding
37a11814295 do not include non configured deprecated restricted settings
53352a29540 add API to open an untitled notebook, https://github.com/microsoft/vscode/issues/121974
b7058688ad3 Fixes #124143
a0819ed4fea Add ending period to --sync
faa3146a310 Add ending period fto prof-startup
159479eb5ae Allow to show status bar entries with an id and name (fix #74972)
f23f011f552 untitled - clarify resolve methods
734b79dadae fix #124102
08618458110 fix ExtensionRecommendationsService test (for #124119)
e5bf21393bf Additional navigation keys
99f3a3726eb Additional details in the aria label
06ee4764a4c untitled file working copy - test 💄
1cc2f71a1ff untitled file working copy - tests for new unified manager
8c6db097ac7 untitled file working copy - add new manager that unifies file and untitled working copies
bc37b284431 untitled file working copy - shared dispose handling
0d92cb9dd88 untitled file working copy - poperly resolve target
37fbfa61251 untitled file working copy - set visibility
5835fbc9f1d untitled file working copy - some code 💄
a47fc96766a untitled file working copy - fix tests
1edef157350 untitled file working copy - wire in save support
8173bd132fb untitled file working copy - add workingcopyservice#get
a3ee06b3e03 untitled file working copy - extract common super type for manager
02c72e2bd64 untitled file working copy - extract reusable interfaces
44dec56af8c untitled file working copy - 💄
103ba104a56 untitled file working copy - tests
9f990bbb6ec untitled file working copy - first cut manager
4173ced659c untitled file working copy - first cut
825f6c7ab84 valide URIs created via from, https://github.com/microsoft/vscode/issues/121198
b1349b64a64 update color registry names for inline values
677f2a3be12 remove excess whitespace
0e4159cb7aa fix localization key/description for debugInline colors
df308a9a81b add color customizations for inline debug values
a9c5e37ea0d fix #124102
c5611075cad fix ExtensionRecommendationsService test (for #124119)
501b691dd06 Additional navigation keys
6034e35043e Additional details in the aria label
e878f5a3ee4 Add support for untitled file working copies (#124120)
13aff6aa7d3 untitled file working copy - test 💄
a48180b6e6d valide URIs created via from, https://github.com/microsoft/vscode/issues/121198
f22eb7ee29d untitled file working copy - tests for new unified manager
5f6d4786857 Merge pull request #123065 from nrayburn-tech/120936
2ecf53bf79a untitled file working copy - add new manager that unifies file and untitled working copies
32d4df9b823 untitled file working copy - shared dispose handling
3a1b950c147 Merge branch 'main' into ben/untitled
97518f5e869 Copy testRepeat helper to extension integration tests
721cdd6472b Fix data loss when renaming custom editors (#124057)
bbb89b86f56 remove hover bg color on notebook toolbar icon.
8f140828107 fix mouse click double background
c59f782cc7d adopt table widget for workspace trust editor
616e0fd9927 refactor: polish
4815c9e9954 fix notebook toolbar scrollbar
a069768c9b6 Remove disposing of editor input in override service
0026416a7ea move showDeprecated suggest to be a CompletionOption option
2a9f02348f6 Make notebook toolbar cell visible on click (change notebook.cellToolbarVisibility default)
df93e53dfb6 Merge branch 'notebook/dev' into main
4486788c81c allow the left toolbar to overflow.
d501abe922d contribute actions to the toolbar.
bf9f6837d14 NotebooKernelActionViewItem accepts notebook editor widget.
9063312f9c1 keep ref from cellVM to outputVM for now.
5913c5b070e Merge pull request #124125 from microsoft/tyriar/join_terminals
9b1ba3f31f0 Adds Memento.keys #87110
8b726fc9f51 update color registry names for inline values
25873bb34c4 Adds Uri.from #121198
5c4fae91762 Merge remote-tracking branch 'origin/notebook/dev' into dev/mjbvz/unify-renderers-api
79bd573d9e4 Move OpenIssueReporter api command registration out of extHostApiCommands (#124068)
73cce9a080e Fix vertical terminal margin left/right
e657d422814 debug: expose parent session on DebugSessions
25967171f17 Delay workspace recommendations as remote extensions installations are ongoing For #124119
b84a8c4215a Re-enable selectionNavigation in terminal tabs
84c23ab5bd7 debug: bump node-debug2 version
b3c56f52813 testing: bad rendering of inline decorations for markdown messages
2bc36bec9dc breakpoints select on stop
71f4934a0c6 use enum
21e0fab8b87 Don't show join in command palette
1243a51d59b Support join terminals
4e7029f593b workbench web api: builtinExtensionsFilter
34775b7d660 add requestOpenUris api
fc76d8b6b44 fix #124113
455a8b6949b List focus colors are too dark (Fixes #123703)
aee486cd293 untitled file working copy - poperly resolve target
e02714b5775 Polish for some workspace reuse (#123519)
daaa8a98bf3 debug: focus breakpoint on debug stop
f113243a516 Close and reopen tunnel when protocol changes
960af85cd93 Reduce number of calls to get port attributes
fb9d3f3e501 Fix all ports showing as user forwarded
4726abdcfa8 explorer: do not remove dotes at end of filenames before validation
026e6239be9 Merge pull request #123895 from danielgary/wmic-replacement
8f78655dbe3 untitled file working copy - set visibility
615bb082c11 Tunnel -> Port
0f5ceb2f1db Add context menu for tunnel protocol Fixes #123750
414e5dbf1f8 install additional debuggers only when at least one debugger present
1c6e481373e untitled file working copy - some code 💄
b0272010af8 Disable bell sound completely
f3cca6236e0 remove todos about ipynb cell ids
3f6e29238c5 Show status icon in tooltip
f8054f260ee Merge remote-tracking branch 'origin/main' into alex/ghost-text
2d80cb75c4b Fixes #124038: Render a `<span>` for each `::after` decoration at end of line
cdeaebbd3be Show info terminal statuses in narrow view
3467760399e Merge pull request #123867 from hediet/hediet/fix-123178-leading-ws-in-wrapped-line
71e729d1222 Merge pull request #122785 from tejasvi/patch-1
1b591be32b2 Merge remote-tracking branch 'origin/main' into pr/tejasvi/122785
49ded4d7e11 Fixes #122825: Dispose proxies when the extension host terminates
7c07550dbc5 Log errors encountered during deactivate
e4159c8f892 Add protocol to portsAttributes Part of #123750
b2c32980765 untitled file working copy - fix tests
b94b2d2cf01 untitled file working copy - wire in save support
fe2761a026e untitled file working copy - add workingcopyservice#get
956347c4edc better logic for "notebook open/close, notebook ready when cell-document open event is fired", https://github.com/microsoft/vscode/issues/123655
191ebfabe65 Merge branch 'main' into notebook/dev
2f2f8d7b0f4 untitled file working copy - extract common super type for manager
102433ffbef untitled file working copy - extract reusable interfaces
27d250fa0da Merge branch 'main' into ben/untitled
07cf22f6814 Fix ctrl+enter in code cell editor
45aafeb326d fix #123816
fd7d84a392c Merge branch 'notebook/dev' into main
d51c7f66306 add experiment global toolbar.
079be5f0fd6 remove run all cells constraint
0031e783518 Store tab list width in global storage
e270ff06255 Make default horizontal tabs width 120px
1bd7c329fb2 Move tabs list size constants into const enum
e0ff23866ad 💄
49870fb9fca More accessibility improvements
47c96324ba6 Banner accessibility improvements
7c4a2cb6cc6 Add args to source profile schema
2bf81674ee7 refs #123976
a3fe790a45f Explicitly flush OutputAppender #123856
2c91cc8a7d2 Clean up decorations when hiding ghosted text
ac85998e016 Pipe language edit counts into CES survey (#124006)
22350f3dc54 Change the order for ghost text decorations (use a class name that sorts before)
9916815a187 Merge pull request #124039 from microsoft/tyriar/121278
74372fe5663 Fixes #124038: Render a `<span>` for each `::after` decoration at end of line
a1646e35c36 Remove try catch, clean up
6353aaac13a Share code between dispose instance and remove instance
9719ae6e725 untitled file working copy - 💄
1371a8e0d49 Bulk-edit veto dialog use the correct reason
327690a3cb9 Unsplit terminals
32db232a53a Scaffold ghost text
63b6e6c51d7 untitled file working copy - tests
45769b83189 debug issues assign to Andre
f2640c349b0 untitled file working copy - first cut manager
38dda41eaa0 Merge pull request #123474 from microsoft/tyriar/local_wording
e8dbf0cc9a1 Improve wording, separate for remote and virtual
befed354684 Merge remote-tracking branch 'origin/main' into tyriar/local_wording
509926497c8 sandbox - make CLI commands a native host thing (#123899)
dc85211b159 untitled file working copy - first cut
a6db2795e36 Fix elevateIfNeeded port attribute Fixes microsoft/vscode-remote-release#5065
736896527ce Improve npm trust message
d4ca8b7f3a3 icon contribution: add requires (for #117437)
b2273e80745 Merge remote-tracking branch 'origin/main' into main
d8b70e74a88 cleanup link styling
46596757d41 fix icon contribution id validation (for #117437)
9ef2514d701 Merge branch 'main' into pr/121835
aad39f1ea63 untitled editor names 💄
7320c8514c9 status bar - fix compile errors
381e7c2d0bc status bar - use secondary priority as sorting criteria (#123827)
da374067139 state service - do not log expected file not found error
82767cc1d7b add aria description for workspace trust editor refs #122537
cfa977755b1 fixes #122537
5a5d1bc91f8 Add provider label in auth menus (#123922)
ff59c24225a fix #123709
87476adaee7 Merge pull request #123919 from jeanp413/fix-123892
217261cf739 Mitigate #123856
055319001c6 Fixes #123892
802ba30de2e allow managing workspace trust from extension icon
f3277a1e1e9 fix markdown editor position for compact view.
f0e57a781af fix #123819.
12f273e3e07 fix #121056.
6d79421b349 Merge branch 'notebook/dev' into main
7b9bb17ce56 refresh styles after kernel is changed.
e5c7b899cf1 compact view.
d0b6c2d2276 fixes #123858
40d5e6796fb fix #123700.
baccddcd459 Use Windows mode if build # is <= 19041 (#123725)
dcfdc8d2e4e Merge pull request #123429 from jeanp413/file-drop-terminal-tab
18313e82b00 update markdown folding icon padding
fcde284705f Merge pull request #123246 from vibhavsarraf/terminal_link_normalize_path
109f7feb3b0 Trim leading ../ or ./ from quick access query
4e79908dcff Merge remote-tracking branch 'origin/main' into pr/vibhavsarraf/123246
42b1e81d5d5 Merge remote-tracking branch 'origin/main' into pr/vibhavsarraf/123246
e5f3dd9ef82 simplify default view styles.
f4691de9552 remove legacy comments.
1ccd6a07946 Merge pull request #123910 from jeanp413/fix-123891
36e2b3176ee Update distro
c492f13efc4 xterm@4.13.0-beta.1
dff22a07121 Fix double border on vertical splits
c33420d9872 Fixes #123891
8c0ba0b5d79 [remote menu] add command Install Additional Remote Development Extensions. Fixes #123905
6510b614c10 Consistent casing for  `Install Additional ...` quick pick entries
22d7f210f79 Fix full path flashing in terminal tab
4946fee0dd1 Alt+click to split single tab
f8a3cef533f debug colors: compress css selectors
828e83defca Merge pull request #123726 from suzmue/hoverText
0f7439bf2e7 Middle click to kill single tab
09b77ba6d8b added comment and removed empty lines
89b4b6c90d1 Replaced wmic call with windows-process-tree
c6525283099 Remove dialog in ChangeLocalPortAction Part of microsoft/vscode-remote-release#4958
c8b4656197f Add requireLocalPort property to portsAttributes Fixes microsoft/vscode-remote-release#4958
6aec850c759 Multiroot workspaces on Windows with forward slashes are treated as relative paths. Fixes #123871
27966a2521d Merge pull request #123833 from gjsjohnmurray/fix-123831
b540874d21d Incorporate task terminal status feedback
67133f048d5 Add tooltips to task status Fixes #123730
5446…

* chore(deps): fixup lockfiles

* chore: restore .gitignore

* fix(vscode): redo extra extension paths

* fix(vscode): add setSocket to PersistentProtocol

* fix(vscode): restore server files

* fix(vscode): restore typings

* fix(vscode): restore proxy_agent.ts symlink

* fix(vscode): use ptyHost.getEnv

* fix(vscode): uriTransformer refactoring

* fix(vscode): add new terminal listener

* fix(vscode): fix + enable layering lint

* chore: format file

* Squashed 'lib/vscode/' changes from 2064d4c301c..b4c1bd0a9b0

b4c1bd0a9b0 Merge pull request #125817 from microsoft/aeschli/125786
33d504f8455 clarify nls comment
d5fbc9f45fa fix localization strings with `command:`. For  #125786
f8b576c274b trust the empty window by default (#125788)
c5e845182bf Dont use exp service for choosing first content behaviour (#125780)
78429fb8736 Use interpolation to keep special syntax out of strings to be translated (#125790)
47c2272a70d candy/125576 (#125787)
1e7b9242e89 Merge pull request #125773 from microsoft/roblou/fix122768
134cc8b7711 Update values for keybinding query context to match real keybindings. Fix #122768
26317e8dccd fixes #125722 (#125768)
629091038fc allow a 3rd character for first part of language id (#125761)
5e6379fd7a9 Merge pull request #125741 from microsoft/tyriar/r157_125729
098c99e2237 Set terminal title in ctor for custom pty terminals
c7119ae8b63 Merge pull request #125679 from microsoft/isidorn/fixRunMenu
0ef242cb5cc Merge pull request #125728 from microsoft/joh/fix/125716
c188ea91a64 make sure to transform notebook data metadata
e27b85b9958 fix #125702 (#125703)
008c3ecf4cd Port fix for git diff paths in webviews to 1.57 (#125704)
c926ecf021a Clone object before applying migrated setting (#125696)
6d4a8af5cfc Hide terminal menu if no process support is registered
2c9833b549d better context key for run menu
bf84ee619e0 #125527 (#125651)
2c4bd4f2b3c Merge pull request #125654 from microsoft/hediet/reduce-flickering-of-inline-completions
2e9321da48b Merge pull request #125657 from microsoft/hediet/adjust-inline-completions-color
b915673f7b2 Fix #125569 (#125650)
1c5f331fa08 Merge pull request #125653 from microsoft/hediet/fix-no-focus-after-accept
9bde5523814 Adjusts inline completions color. Fixes #125646.
7b724945310 Reduces flickering of inline completions & fixes context key.
5ba2e425f31 Fixes #125524 by focusing editor after commit.
6cdc6160057 Merge pull request #125649 from microsoft/joh/fix/125550
b3d2cd902b7 re-throw and dispose reference when resolving failed
dcc182fe3d2 Revert ESBuild updates and fix #125518 (#125574)
bdafbc3b5f2 Merge pull request #125552 from microsoft/roblou/disableRunToolbar
ce8505d5580 Add "hostRequirements" to schema (microsoft/vscode-remote-release#5144)
de98ebbc81e only show notification once per window reload (#125548)
31a11d3b786 Disable consolidated run button by default. Fix #125544

git-subtree-dir: lib/vscode
git-subtree-split: b4c1bd0a9b03c749ea011b06c6d2676c8091a70c

* fix(lib/vscode): restore product.json

* fix(vscode): backport resources hotfix

* refactor(lib/vscode): reorganize code to fit vs rules

* fix(ci): remove stray symlinks

* cleanup(lib/vscode): format .gitignore

* chore(vscode): fix formatting

* refactor(vscode): remove parsePathArg in envService

* fix(vscode): add missing terminal commands

* fix(vscode): update .eslintignore paths

* chore: document uriTransformer hacks

* fix(lib/vscode): restore patches

* fix(lib/vscode): restore more patches

* Squashed 'lib/vscode/' changes from b4c1bd0a9b0..507ce72a446

507ce72a446 Merge pull request #126577 from microsoft/sandy081/recovery/fix125970
3f4baf46c6f move focus check while converting
d95f6de445f - migrate only from active window - respect old value while reading
08bca485860 Fix race that causes auto port forwarding setting to be ignored (#126481)
2650c2e51d3 Merge pull request #126413 from microsoft/inline-suggest-prevent-auto-suggest
45c13db2195 Do not auto-trigger suggest when typing exactly the inline suggestion
20a512db915 Fix #126178; fixes markdown scrolling bug
3300069a2b7 separated editor scroll info by type and consume entry on access
92c259a77f5 Update package.json (#126283)
d21d7d9d3e8 Port fix #126057 (#126215)
d9b1d6b8c17 Merge pull request #126234 from microsoft/tyriar/157_125985
a16b9181915 Pass config to external terminal service
6bca69fc6fb macos - restore Cmd+W to close window when no editors opened (#126045)
b9f4ab00ba8 linux - restore `--no-sandbox` for startup scripts (#126028)
ca66517cf90 Revert back to Electron `12.0.7` (#126026)
6370d95598d Set visibility of markdown cells before rendering it (#126099)

git-subtree-dir: lib/vscode
git-subtree-split: 507ce72a4466fbb27b715c3722558bb15afa9f48

* fmt(docs): remove trailing whitespace

* fix(test): fix e2e tests

* chore(deps): update vulnerable vscode deps

* fix(test): clean up terminal test

* Retry menu navigation in e2e tests

* Update VS Code loader with trusted types policy

* Update build resources with renamed file

* Restore proposed API patch

Without this it is impossible to enable the proposed API for extensions.

To replicate the issue run a build or search for enableProposedApiForAll
and set it to false (it is set to true during development) then try
running an extension that uses the proposed API like the GitHub pull
request extension and look for an error in the browser console.

* Restore async storage write patch

This issue can be reliably replicated by creating an extension with the
following code:

await context.globalState.update("key", "value")
vscode.commands.executeCommand("workbench.action.reloadWindow");

If you do this the global state will never update. This can be seen by
logging with a notification or browsing the global state manually.

This is probably a bug with upstream because without this patch it is
impossible to wait for the actual storage write.

This actually required more patching than we previously had; I don't
think it was working in 1.56 either.

* Remove duplicate telemetry service registration

We no longer comment out the telemetry service in the workbench so ours
is redundant.

- logTelemetry call was slightly wrong (uses an object rather than an
  array)
- No longer need the telemetry channel since the default uses the
  extension environment channel.
- No longer need disableTelemetry since we don't create the setting.
  This does mean the setting is not toggled off when the disable flag is
  set (it does of course still prevent telemetry) but that appears to be
  the same with upstream.

* Use service in terminal channel instead of interface

This allows us to avoid checking whether some functions exist when we
know they will. This means we can't use this for other pty services like
the browser one but that won't be necessary as this strictly runs on the
Node end anyway.

* Rename uri transformer using camel case

* Update yarn.lock

I got changes when I ran yarn so I reverted to 1.57 then ran yarn again
and here is the result.

* Restore .yarnrc patch

Delete .yarnrc and update the build process where that file is read
since it no longer exists.

This should resolve the issues we keep having with mismatched Node
versions. This can be consistently replicated by spinning up a new
environment (no previous modules or cache), running yarn, then running
yarn watch.

Also use process.versions.node instead of process.version as the latter
has an extra v at the beginning.

* Remove gulp-tar dependency

It's pulling in a security vuln and we don't need it anyway.

* Cancel current menu navigation on retry

* chore(docs): update docs with patches

* chore(ci): increase timeout to 15 minutes

Co-authored-by: Asher <ash@coder.com>
This commit is contained in:
Akash Satheesan 2021-07-14 00:39:20 +05:30 committed by GitHub
parent cc50e7f72b
commit ddee4f748c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1402 changed files with 56569 additions and 33421 deletions

View File

@ -18,7 +18,7 @@ jobs:
prebuild: prebuild:
name: Pre-build checks name: Pre-build checks
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 5 timeout-minutes: 15
env: env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
steps: steps:

View File

@ -82,10 +82,12 @@ bundle_vscode() {
rsync "$VSCODE_SRC_PATH/resources/linux/code.png" "$VSCODE_OUT_PATH/resources/linux/code.png" rsync "$VSCODE_SRC_PATH/resources/linux/code.png" "$VSCODE_OUT_PATH/resources/linux/code.png"
rsync "$VSCODE_SRC_PATH/resources/web/callback.html" "$VSCODE_OUT_PATH/resources/web/callback.html" rsync "$VSCODE_SRC_PATH/resources/web/callback.html" "$VSCODE_OUT_PATH/resources/web/callback.html"
# Adds the commit and date to product.json # Add the commit and date and enable telemetry. This just makes telemetry
# available; telemetry can still be disabled by flag or setting.
jq --slurp '.[0] * .[1]' "$VSCODE_SRC_PATH/product.json" <( jq --slurp '.[0] * .[1]' "$VSCODE_SRC_PATH/product.json" <(
cat << EOF cat << EOF
{ {
"enableTelemetry": true,
"commit": "$(git rev-parse HEAD)", "commit": "$(git rev-parse HEAD)",
"date": $(jq -n 'now | todate') "date": $(jq -n 'now | todate')
} }

View File

@ -27,6 +27,12 @@ main() {
cd "$RELEASE_PATH" cd "$RELEASE_PATH"
yarn --production --frozen-lockfile yarn --production --frozen-lockfile
# HACK: the version of Typescript vscode 1.57 uses in extensions/
# leaves a few stray symlinks. Clean them up so nfpm does not fail.
# Remove this line when its no longer needed.
rm -fr "$RELEASE_PATH/lib/vscode/extensions/node_modules/.bin"
} }
main "$@" main "$@"

View File

@ -200,16 +200,62 @@ a Git subtree to fork and modify VS Code. This code lives under
Some noteworthy changes in our version of VS Code include: Some noteworthy changes in our version of VS Code include:
- Adding our build file, which includes our code and VS Code's web code - Adding our build file, [`lib/vscode/coder.js`](../lib/vscode/coder.js), which includes build steps specific to code-server
- Allowing multiple extension directories (both user and built-in) - Node.js version detection changes in [`build/lib/node.ts`](../lib/vscode/build/lib/node.ts) and [`build/lib/util.ts`](../lib/vscode/build/lib/util.ts)
- Modifying the loader, WebSocket, webview, service worker, and asset requests to - Allowing extra extension directories
use the URL of the page as a base (and TLS, if necessary for the WebSocket) - Added extra arguments to [`src/vs/platform/environment/common/argv.ts`](../lib/vscode/src/vs/platform/environment/common/argv.ts) and to [`src/vs/platform/environment/node/argv.ts`](../lib/vscode/src/vs/platform/environment/node/argv.ts)
- Sending client-side telemetry through the server - Added extra environment state to [`src/vs/platform/environment/common/environment.ts`](../lib/vscode/src/vs/platform/environment/common/environment.ts);
- Allowing modification of the display language - Added extra getters to [`src/vs/platform/environment/common/environmentService.ts`](../lib/vscode/src/vs/platform/environment/common/environmentService.ts)
- Making it possible for us to load code on the client - Added extra scanning paths to [`src/vs/platform/extensionManagement/node/extensionsScanner.ts`](../lib/vscode/src/vs/platform/extensionManagement/node/extensionsScanner.ts)
- Making it possible to install extensions of any kind - Additions/removals from [`package.json`](../lib/vscode/package.json):
- Fixing issue with getting disconnected when your machine sleeps or hibernates - Removing `electron`, `keytar` and `native-keymap` to avoid pulling in desktop dependencies during build on Linux
- Adding connection type to web socket query parameters - Removing `gulp-azure-storage` and `gulp-tar` (unsued in our build process, may pull in outdated dependencies)
- Adding `proxy-agent`, `proxy-from-env` (for proxying) and `rimraf` (used during build/install steps)
- Adding our branding/custom URLs/version:
- [`product.json`](../lib/vscode/product.json)
- [`src/vs/base/common/product.ts`](../lib/vscode/src/vs/base/common/product.ts)
- [`src/vs/workbench/browser/parts/dialogs/dialogHandler.ts`](../lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts)
- [`src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts`](../lib/vscode/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts)
- [`src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts`](../lib/vscode/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts)
- Removing azure/macOS signing related dependencies from [`build/package.json`](../lib/vscode/build/package.json)
- Modifying `.gitignore` to allow us to add files to `src/vs/server` and modifying `.eslintignore` to ignore lint on the shared files below (we use different formatter settings than VS Code).
- Sharing some files with our codebase via symlinks:
- [`src/vs/base/common/ipc.d.ts`](../lib/vscode/src/vs/base/common/ipc.d.ts) points to [`typings/ipc.d.ts`](../typings/ipc.d.ts)
- [`src/vs/base/common/util.ts`](../lib/vscode/src/vs/base/common/util.ts) points to [`src/common/util.ts`](../src/common/util.ts)
- [`src/vs/base/node/proxy_agent.ts`](../lib/vscode/src/vs/base/node/proxy_agent.ts) points to [`src/node/proxy_agent.ts`](../src/node/proxy_agent.ts)
- Allowing socket changes by adding `setSocket` in [`src/vs/base/parts/ipc/common/ipc.net.ts`](../lib/vscode/src/vs/base/parts/ipc/common/ipc.net.ts)
- We use this for connection persistence in our server-side code.
- Added our server-side Node.JS code to `src/vs/server`.
- This code includes the logic to spawn the various services (extension host, terminal, etc.) and some glue
- Added [`src/vs/workbench/browser/client.ts`](../lib/vscode/src/vs/workbench/browser/client.ts) to hold some server customizations.
- Includes the functionality for the Log Out command and menu item
- Also, imported and called `initialize` from the main web file, [`src/vs/workbench/browser/web.main.ts`](../lib/vscode/src/vs/workbench/browser/web.main.ts)
- Added a (hopefully temporary) hotfix to [`src/vs/workbench/common/resources.ts`](../lib/vscode/src/vs/workbench/common/resources.ts) to get context menu actions working for the Git integration.
- Added connection type to WebSocket query parameters in [`src/vs/platform/remote/common/remoteAgentConnection.ts`](../lib/vscode/src/vs/platform/remote/common/remoteAgentConnection.ts)
- Added `CODE_SERVER*` variables to the sanitization list in [`src/vs/base/common/processes.ts`](../lib/vscode/src/vs/base/common/processes.ts)
- Fix localization support:
- Added file [`src/vs/workbench/services/localizations/browser/localizationsService.ts`](../lib/vscode/src/vs/workbench/services/localizations/browser/localizationsService.ts).
- Modified file [`src/vs/base/common/platform.ts`](../lib/vscode/src/vs/base/common/platform.ts)
- Modified file [`src/vs/base/node/languagePacks.js`](../lib/vscode/src/vs/base/node/languagePacks.js)
- Added code to allow server to inject settings to [`src/vs/platform/product/common/product.ts`](../lib/vscode/src/vs/platform/product/common/product.ts)
- Extension fixes:
- Avoid disabling extensions by extensionKind in [`src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts`](../lib/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts) (Needed for vscode-icons)
- Remove broken symlinks in [`extensions/postinstall.js`](../lib/vscode/extensions/postinstall.js)
- Add tip about extension gallery in [`src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts`](../lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts)
- Use our own server for GitHub authentication in [`extensions/github-authentication/src/githubServer.ts`](../lib/vscode/extensions/github-authentication/src/githubServer.ts)
- Settings persistence on the server in [`src/vs/workbench/services/environment/browser/environmentService.ts`](../lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts)
- Add extension install fallback in [`src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts`](../lib/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts)
- Add proxy-agent monkeypatch and keep extension host indefinitely running in [`src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts`](../lib/vscode/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts)
- Patch build system to avoid removing extension dependencies for `yarn global add` users in [`build/lib/extensions.ts`](../lib/vscode/build/lib/extensions.ts)
- Allow all extensions to use proposed APIs in [`src/vs/workbench/services/environment/browser/environmentService.ts`](../lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts)
- Make storage writes async to allow extensions to wait for them to complete in [`src/vs/platform/storage/common/storage.ts`](../lib/vscode/src/vs/platform/storage/common/storage.ts)
- Specify webview path in [`src/vs/code/browser/workbench/workbench.ts`](../lib/vscode/src/vs/code/browser/workbench/workbench.ts)
- URL readability improvements for folder/workspace in [`src/vs/code/browser/workbench/workbench.ts`](../lib/vscode/src/vs/code/browser/workbench/workbench.ts)
- Socket/Authority-related fixes (for remote proxying etc.):
- [`src/vs/code/browser/workbench/workbench.ts`](../lib/vscode/src/vs/code/browser/workbench/workbench.ts)
- [`src/vs/platform/remote/browser/browserSocketFactory.ts`](../lib/vscode/src/vs/platform/remote/browser/browserSocketFactory.ts)
- [`src/vs/base/common/network.ts`](../lib/vscode/src/vs/base/common/network.ts)
- Added code to write out IPC path in [`src/vs/workbench/api/node/extHostCLIServer.ts`](../lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts)
As the web portion of VS Code matures, we'll be able to shrink and possibly As the web portion of VS Code matures, we'll be able to shrink and possibly
eliminate our modifications. In the meantime, upgrading the VS Code version requires eliminate our modifications. In the meantime, upgrading the VS Code version requires

View File

@ -1,14 +1,14 @@
# Code - OSS Development Container # Code - OSS Development Container
This repository includes configuration for a development container for working with Code - OSS in an isolated local container or using [GitHub Codespaces](https://github.com/features/codespaces). This repository includes configuration for a development container for working with Code - OSS in a local container or using [GitHub Codespaces](https://github.com/features/codespaces).
> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` with a web client at `6080`. For better performance, we recommend using a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Applications like the macOS Screen Sharing app will not perform as well. > **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` and a web client is available on port `6080`.
## Quick start - local ## Quick start - local
1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.) 1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)
2. **Important**: Docker needs at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run full build. If you on macOS, or using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item, going to **Preferences/Settings > Resources > Advanced**. 2. **Important**: Docker needs at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run a full build. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.
> **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar. > **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.
@ -16,53 +16,56 @@ This repository includes configuration for a development container for working w
![Image of Remote - Containers extension](https://microsoft.github.io/vscode-remote-release/images/remote-containers-extn.png) ![Image of Remote - Containers extension](https://microsoft.github.io/vscode-remote-release/images/remote-containers-extn.png)
> Note that the Remote - Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details. > **Note:** The Remote - Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
4. Press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> and select **Remote-Containers: Clone Repository in Container Volume...**. 4. Press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Remote-Containers: Clone Repository in Container Volume...**.
> **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or using the Hyper-V engine on Windows. We recommend the "clone repository in container" approach instead since it uses "named volume" rather than the local filesystem. > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend the "clone repository in container" approach instead since it uses "named volume" rather than the local filesystem.
5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press <kbd>Enter</kbd>. 5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press <kbd>Enter</kbd>.
6. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080) or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password. 6. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080), or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
Anything you start in VS Code or the integrated terminal will appear here. Anything you start in VS Code, or the integrated terminal, will appear here.
Next: **[Try it out!](#try-it)** Next: **[Try it out!](#try-it)**
## Quick start - GitHub Codespaces ## Quick start - GitHub Codespaces
> **IMPORTANT:** You need to use a "Standard" sized codespace or larger (4-core, 8GB) since VS Code needs 6GB of RAM to compile. This is now the default for GitHub Codespaces, but do not downgrade to "Basic" unless you do not intend to compile. 1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and then click on **New codespace**. If prompted, select the **Standard** machine size (which is also the default).
1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and the **New codespace** > **Note:** You will not see these options within GitHub if you are not in the Codespaces beta.
> Note that you will not see these options if you are not in the beta yet. 2. After the codespace is up and running in your browser, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Ports: Focus on Ports View**.
2. After the codespace is up and running in your browser, press <kbd>F1</kbd> and select **Ports: Focus on Ports View**. 3. You should see **VNC web client (6080)** under in the list of ports. Select the line and click on the globe icon to open it in a browser tab.
3. You should see port `6080` under **Forwarded Ports**. Select the line and click on the globe icon to open it in a browser tab. > **Tip:** If you do not see the port, <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, select **Forward a Port** and enter port `6080`.
> If you do not see port `6080`, press <kbd>F1</kbd>, select **Forward a Port** and enter port `6080`.
4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password. 4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password.
Anything you start in VS Code or the integrated terminal will appear here. Anything you start in VS Code, or the integrated terminal, will appear here.
Next: **[Try it out!](#try-it)** Next: **[Try it out!](#try-it)**
### Using VS Code with GitHub Codespaces ### Using VS Code with GitHub Codespaces
You will likely see better performance when accessing the codespace you created from VS Code since you can use a[VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Here's how to do it. You may see improved VNC responsiveness when accessing a codespace from VS Code client since you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Here's how to do it.
1. [Create a codespace](#quick-start---github-codespaces) if you have not already. 1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).
2. Set up [VS Code for use with GitHub Codespaces](https://docs.github.com/github/developing-online-with-codespaces/using-codespaces-in-visual-studio-code) > **Note:** The GitHub Codespaces extension requires the Visual Studio Code distribution of Code - OSS.
3. After the VS Code is up and running, press <kbd>F1</kbd>, choose **Codespaces: Connect to Codespace**, and select the codespace you created. 2. After the VS Code is up and running, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, choose **Codespaces: Create New Codespace**, and use the following settings:
- `microsoft/vscode` for the repository.
- Select any branch (e.g. **main**) - you select a different one later.
- Choose **Standard** (4-core, 8GB) as the size.
4. After you've connected to the codespace, use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password. 4. After you have connected to the codespace, you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
5. Anything you start in VS Code or the integrated terminal will appear here. > **Tip:** You may also need change your VNC client's **Picture Quaility** setting to **High** to get a full color desktop.
5. Anything you start in VS Code, or the integrated terminal, will appear here.
Next: **[Try it out!](#try-it)** Next: **[Try it out!](#try-it)**
@ -70,20 +73,18 @@ Next: **[Try it out!](#try-it)**
This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed. This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.
Note you can also set the resolution from the command line by typing `set-resolution`. > **Note:** You can also set the resolution from the command line by typing `set-resolution`.
To start working with Code - OSS, follow these steps: To start working with Code - OSS, follow these steps:
1. In your local VS Code, open a terminal (<kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>\`</kbd>) and type the following commands: 1. In your local VS Code client, open a terminal (<kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>\`</kbd>) and type the following commands:
```bash ```bash
yarn install yarn install
bash scripts/code.sh bash scripts/code.sh
``` ```
Note that a previous run of `yarn install` will already be cached, so this step should simply pick up any recent differences. 2. After the build is complete, open a web browser or a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to the desktop environment as described in the quick start and enter `vscode` as the password.
2. After the build is complete, open a web browser or a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to the desktop environnement as described in the quick start and enter `vscode` as the password.
3. You should now see Code - OSS! 3. You should now see Code - OSS!
@ -91,7 +92,7 @@ Next, let's try debugging.
1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer. 1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.
2. Go to your local VS Code client, and use Run / Debug view to launch the **VS Code** configuration. (Typically the default, so you can likely just press <kbd>F5</kbd>). 2. Go to your local VS Code client, and use the **Run / Debug** view to launch the **VS Code** configuration. (Typically the default, so you can likely just press <kbd>F5</kbd>).
> **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues. > **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues.

View File

@ -3,20 +3,26 @@
// Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile
"image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main", "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main",
"workspaceMount": "source=${localWorkspaceFolder},target=/home/node/workspace/vscode,type=bind,consistency=cached",
"workspaceFolder": "/home/node/workspace/vscode",
"overrideCommand": false, "overrideCommand": false,
"runArgs": [ "--init", "--security-opt", "seccomp=unconfined"], "runArgs": [ "--init", "--security-opt", "seccomp=unconfined"],
"settings": { "settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"resmon.show.battery": false, "resmon.show.battery": false,
"resmon.show.cpufreq": false "resmon.show.cpufreq": false
}, },
// noVNC, VNC, debug ports // noVNC, VNC
"forwardPorts": [6080, 5901, 9222], "forwardPorts": [6080, 5901],
"portsAttributes": {
"6080": {
"label": "VNC web client (noVNC)",
"onAutoForward": "silent"
},
"5901": {
"label": "VNC TCP port",
"onAutoForward": "silent"
}
},
"extensions": [ "extensions": [
"dbaeumer.vscode-eslint", "dbaeumer.vscode-eslint",

View File

@ -17,6 +17,7 @@
**/extensions/typescript-basics/test/colorize-fixtures/** **/extensions/typescript-basics/test/colorize-fixtures/**
**/extensions/**/dist/** **/extensions/**/dist/**
# These are code-server code symlinks. # These are code-server code symlinks.
src/vs/base/common/util.ts
src/vs/base/common/ipc.d.ts
src/vs/base/node/proxy_agent.ts src/vs/base/node/proxy_agent.ts
src/vs/ipc.d.ts src/vs/server/uriTransformer.ts
src/vs/server/common/util.ts

View File

@ -62,7 +62,7 @@
"code-no-standalone-editor": "warn", "code-no-standalone-editor": "warn",
"code-no-unexternalized-strings": "warn", "code-no-unexternalized-strings": "warn",
"code-layering": [ "code-layering": [
"off", "warn",
{ {
"common": [], "common": [],
"node": [ "node": [
@ -88,7 +88,7 @@
} }
], ],
"code-import-patterns": [ "code-import-patterns": [
"off", "warn",
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!! Do not relax these rules !!! // !!! Do not relax these rules !!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -501,7 +501,7 @@
"**/vs/platform/**", "**/vs/platform/**",
"**/vs/editor/**", "**/vs/editor/**",
"**/vs/workbench/{common,browser,node,electron-sandbox,electron-browser}/**", "**/vs/workbench/{common,browser,node,electron-sandbox,electron-browser}/**",
"vs/workbench/contrib/files/common/editors/fileEditorInput", "vs/workbench/contrib/files/browser/editors/fileEditorInput",
"**/vs/workbench/services/**", "**/vs/workbench/services/**",
"**/vs/workbench/test/**", "**/vs/workbench/test/**",
"*" // node modules "*" // node modules
@ -807,6 +807,7 @@
"**/vs/platform/**/{common,node}/**", "**/vs/platform/**/{common,node}/**",
"**/vs/workbench/**/{common,node}/**", "**/vs/workbench/**/{common,node}/**",
"**/vs/server/**", "**/vs/server/**",
"@coder/logger", // NOTE@coder: add logger
"*" // node modules "*" // node modules
] ]
}, },

View File

@ -8,6 +8,11 @@ about: Create a report to help us improve
<!-- 🔎 Search existing issues to avoid creating duplicates. --> <!-- 🔎 Search existing issues to avoid creating duplicates. -->
<!-- 🧪 Test using the latest Insiders build to see if your issue has already been fixed: https://code.visualstudio.com/insiders/ --> <!-- 🧪 Test using the latest Insiders build to see if your issue has already been fixed: https://code.visualstudio.com/insiders/ -->
<!-- 💡 Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --> <!-- 💡 Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. -->
<!-- 🔧 Launch with `code --disable-extensions` to check. -->
Does this issue occur when all extensions are disabled?: Yes/No
<!-- 🪓 If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. -->
<!-- 📣 Issues caused by an extension need to be reported directly to the extension publisher. The 'Help > Report Issue' dialog can assist with this. -->
- VS Code Version: - VS Code Version:
- OS Version: - OS Version:
@ -15,9 +20,3 @@ Steps to Reproduce:
1. 1.
2. 2.
<!-- 🔧 Launch with `code --disable-extensions` to check. -->
Does this issue occur when all extensions are disabled?: Yes/No
<!-- 🪓 If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. -->
<!-- 📣 Issues caused by an extension need to be reported directly to the extension publisher. The 'Help > Report Issue' dialog can assist with this. -->

View File

@ -1,16 +1,17 @@
{ {
"$schema": "https://raw.githubusercontent.com/microsoft/vscode-github-triage-actions/master/classifier-deep/apply/apply-labels/deep-classifier-config.schema.json", "$schema": "https://raw.githubusercontent.com/microsoft/vscode-github-triage-actions/master/classifier-deep/apply/apply-labels/deep-classifier-config.schema.json",
"vacation": [], "vacation": ["RMacfarlane"],
"assignees": { "assignees": {
"JacksonKearl": {"accuracy": 0.5} "JacksonKearl": {"accuracy": 0.5}
}, },
"labels": { "labels": {
"L10N": {"assign": []}, "L10N": {"assign": []},
"VIM": {"assign": []}, "VIM": {"assign": []},
"accessibility": { "assign": ["isidorn"]},
"api": {"assign": ["jrieken"]}, "api": {"assign": ["jrieken"]},
"api-finalization": {"assign": []}, "api-finalization": {"assign": []},
"api-proposal": {"assign": ["jrieken"]}, "api-proposal": {"assign": ["jrieken"]},
"authentication": {"assign": ["RMacfarlane"]}, "authentication": {"assign": ["TylerLeonhardt"]},
"breadcrumbs": {"assign": ["jrieken"]}, "breadcrumbs": {"assign": ["jrieken"]},
"callhierarchy": {"assign": ["jrieken"]}, "callhierarchy": {"assign": ["jrieken"]},
"code-lens": {"assign": ["jrieken"]}, "code-lens": {"assign": ["jrieken"]},
@ -20,8 +21,7 @@
"context-keys": {"assign": []}, "context-keys": {"assign": []},
"css-less-scss": {"assign": ["aeschli"]}, "css-less-scss": {"assign": ["aeschli"]},
"custom-editors": {"assign": ["mjbvz"]}, "custom-editors": {"assign": ["mjbvz"]},
"debug": {"assign": ["isidorn"]}, "debug": {"assign": ["weinand"]},
"debug-console": {"assign": ["isidorn"]},
"dialogs": {"assign": ["sbatten"]}, "dialogs": {"assign": ["sbatten"]},
"diff-editor": {"assign": []}, "diff-editor": {"assign": []},
"dropdown": {"assign": []}, "dropdown": {"assign": []},
@ -81,14 +81,15 @@
"icon-brand": {"assign": []}, "icon-brand": {"assign": []},
"icons-product": {"assign": ["misolori"]}, "icons-product": {"assign": ["misolori"]},
"install-update": {"assign": []}, "install-update": {"assign": []},
"integrated-terminal": {"assign": ["meganrogge"]}, "terminal": {"assign": ["meganrogge"]},
"integrated-terminal-conpty": {"assign": ["meganrogge"]}, "terminal-conpty": {"assign": ["meganrogge"]},
"integrated-terminal-links": {"assign": ["meganrogge"]}, "terminal-links": {"assign": ["meganrogge"]},
"terminal-external": {"assign": ["meganrogge"]},
"integration-test": {"assign": []}, "integration-test": {"assign": []},
"intellisense-config": {"assign": []}, "intellisense-config": {"assign": []},
"ipc": {"assign": ["joaomoreno"]}, "ipc": {"assign": ["joaomoreno"]},
"issue-bot": {"assign": ["chrmarti"]}, "issue-bot": {"assign": ["chrmarti"]},
"issue-reporter": {"assign": ["RMacfarlane"]}, "issue-reporter": {"assign": ["TylerLeonhardt"]},
"javascript": {"assign": ["mjbvz"]}, "javascript": {"assign": ["mjbvz"]},
"json": {"assign": ["aeschli"]}, "json": {"assign": ["aeschli"]},
"keybindings": {"assign": []}, "keybindings": {"assign": []},
@ -113,7 +114,7 @@
"php": {"assign": ["roblourens"]}, "php": {"assign": ["roblourens"]},
"portable-mode": {"assign": ["joaomoreno"]}, "portable-mode": {"assign": ["joaomoreno"]},
"proxy": {"assign": []}, "proxy": {"assign": []},
"quick-pick": {"assign": ["chrmarti"]}, "quick-pick": {"assign": ["TylerLeonhardt"]},
"references-viewlet": {"assign": ["jrieken"]}, "references-viewlet": {"assign": ["jrieken"]},
"release-notes": {"assign": []}, "release-notes": {"assign": []},
"remote": {"assign": []}, "remote": {"assign": []},
@ -152,7 +153,7 @@
"web": {"assign": ["bpasero"]}, "web": {"assign": ["bpasero"]},
"webview": {"assign": ["mjbvz"]}, "webview": {"assign": ["mjbvz"]},
"workbench-cli": {"assign": []}, "workbench-cli": {"assign": []},
"workbench-diagnostics": {"assign": ["RMacfarlane"]}, "workbench-diagnostics": {"assign": ["Tyriar"]},
"workbench-dnd": {"assign": ["bpasero"]}, "workbench-dnd": {"assign": ["bpasero"]},
"workbench-editor-grid": {"assign": ["sbatten"]}, "workbench-editor-grid": {"assign": ["sbatten"]},
"workbench-editors": {"assign": ["bpasero"]}, "workbench-editors": {"assign": ["bpasero"]},

View File

@ -90,7 +90,7 @@
"@author" "@author"
], ],
"action": "updateLabels", "action": "updateLabels",
"addLabel": "z-author-verified", "addLabel": "verified",
"removeLabel": "author-verification-requested", "removeLabel": "author-verification-requested",
"requireLabel": "author-verification-requested", "requireLabel": "author-verification-requested",
"disallowLabel": "unreleased" "disallowLabel": "unreleased"
@ -133,6 +133,18 @@
"action": "updateLabels", "action": "updateLabels",
"addLabel": "~needs more info" "addLabel": "~needs more info"
}, },
{
"type": "comment",
"name": "needsPerfInfo",
"allowUsers": [
"cleidigh",
"usernamehw",
"gjsjohnmurray",
"IllusionMH"
],
"addLabel": "needs more info",
"comment": "Thanks for creating this issue regarding performance! Please follow this guide to help us diagnose performance issues: https://github.com/microsoft/vscode/wiki/Performance-Issues \n\nHappy Coding!"
},
{ {
"type": "comment", "type": "comment",
"name": "jsDebugLogs", "name": "jsDebugLogs",

View File

@ -4,6 +4,7 @@
"rchiodo", "rchiodo",
"greazer", "greazer",
"donjayamanne", "donjayamanne",
"jilljac" "jilljac",
"IanMatthewHuff"
] ]
} }

View File

@ -244,6 +244,9 @@ jobs:
- name: Run Valid Layers Checks - name: Run Valid Layers Checks
run: yarn valid-layers-check run: yarn valid-layers-check
- name: Compile /build/
run: yarn --cwd build compile
- name: Run Monaco Editor Checks - name: Run Monaco Editor Checks
run: yarn monaco-compile-check run: yarn monaco-compile-check

View File

@ -7,7 +7,8 @@ node_modules/
extensions/**/dist/ extensions/**/dist/
/out*/ /out*/
/extensions/**/out/ /extensions/**/out/
# src/vs/server NOTE@coder: So our code isn't ignored. # NOTE@coder: remove to provide our own server
# src/vs/server
resources/server resources/server
build/node_modules build/node_modules
coverage/ coverage/

View File

@ -2,37 +2,31 @@
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### Config", "value": "#### Config"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"April 2021\"", "value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"May 2021\""
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "### Finalization", "value": "### Finalization"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repo $milestone label:api-finalization", "value": "$repo $milestone label:api-finalization"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "### Proposals", "value": "### Proposals"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repo $milestone is:open label:api-proposal ", "value": "$repo $milestone is:open label:api-proposal "
"editable": true
} }
] ]

View File

@ -7,7 +7,7 @@
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub\n\n$MILESTONE=milestone:\"April 2021\"" "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub\n\n$MILESTONE=milestone:\"May 2021\""
}, },
{ {
"kind": 1, "kind": 1,

View File

@ -7,7 +7,7 @@
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub\n\n$MILESTONE=milestone:\"April 2021\"\n\n$MINE=assignee:@me" "value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub\n\n$MILESTONE=milestone:\"May 2021\"\n\n$MINE=assignee:@me"
}, },
{ {
"kind": 1, "kind": 1,
@ -157,7 +157,7 @@
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$REPOS $MILESTONE -$MINE is:issue is:closed sort:updated-asc label:bug -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:bamurtaugh -author:bpasero -author:btholt -author:chrisdias -author:chrmarti -author:Chuxel -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:eamodio -author:egamma -author:fiveisprime -author:gregvanl -author:isidorn -author:ItalyPaleAle -author:JacksonKearl -author:joaomoreno -author:jrieken -author:kieferrm -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:ornellaalt -author:orta -author:rebornix -author:RMacfarlane -author:roblourens -author:rzhao271 -author:sana-ajani -author:sandy081 -author:sbatten -author:stevencl -author:Tyriar -author:weinand -author:TylerLeonhardt -author:lramos15" "value": "$REPOS $MILESTONE -$MINE is:issue is:closed sort:updated-asc label:bug -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:bamurtaugh -author:bpasero -author:btholt -author:chrisdias -author:chrmarti -author:Chuxel -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:eamodio -author:egamma -author:fiveisprime -author:gregvanl -author:isidorn -author:ItalyPaleAle -author:JacksonKearl -author:joaomoreno -author:jrieken -author:kieferrm -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:ornellaalt -author:orta -author:rebornix -author:RMacfarlane -author:roblourens -author:rzhao271 -author:sana-ajani -author:sandy081 -author:sbatten -author:stevencl -author:Tyriar -author:weinand -author:TylerLeonhardt -author:lramos15 -author:hediet"
}, },
{ {
"kind": 1, "kind": 1,

View File

@ -2,115 +2,96 @@
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "##### `Config`: This should be changed every month/milestone", "value": "##### `Config`: This should be changed every month/milestone"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "// list of repos we work in\n$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog\n\n// current milestone name\n$milestone=milestone:\"April 2021\"", "value": "// list of repos we work in\n$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog\n\n// current milestone name\n$milestone=milestone:\"May 2021\""
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "github-issues", "language": "github-issues",
"value": "## Milestone Work", "value": "## Milestone Work"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos $milestone assignee:@me is:open", "value": "$repos $milestone assignee:@me is:open"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "github-issues", "language": "github-issues",
"value": "## Bugs, Debt, Features...", "value": "## Bugs, Debt, Features..."
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### My Bugs", "value": "#### My Bugs"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open label:bug", "value": "$repos assignee:@me is:open label:bug"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### Debt & Engineering", "value": "#### Debt & Engineering"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open label:debt OR $repos assignee:@me is:open label:engineering", "value": "$repos assignee:@me is:open label:debt OR $repos assignee:@me is:open label:engineering"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### Performance 🐌 🔜 🏎", "value": "#### Performance 🐌 🔜 🏎"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open label:perf OR $repos assignee:@me is:open label:perf-startup OR $repos assignee:@me is:open label:perf-bloat OR $repos assignee:@me is:open label:freeze-slow-crash-leak", "value": "$repos assignee:@me is:open label:perf OR $repos assignee:@me is:open label:perf-startup OR $repos assignee:@me is:open label:perf-bloat OR $repos assignee:@me is:open label:freeze-slow-crash-leak"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### Feature Requests", "value": "#### Feature Requests"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc", "value": "$repos assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open milestone:\"Backlog Candidates\"", "value": "$repos assignee:@me is:open milestone:\"Backlog Candidates\""
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "### Personal Inbox\n", "value": "### Personal Inbox\n"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "\n#### Missing Type label", "value": "\n#### Missing Type label"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open type:issue -label:bug -label:\"needs more info\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream", "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"needs more info\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream"
"editable": true
}, },
{ {
"kind": 1, "kind": 1,
"language": "markdown", "language": "markdown",
"value": "#### Not Actionable", "value": "#### Not Actionable"
"editable": true
}, },
{ {
"kind": 2, "kind": 2,
"language": "github-issues", "language": "github-issues",
"value": "$repos assignee:@me is:open label:\"needs more info\"", "value": "$repos assignee:@me is:open label:\"needs more info\""
"editable": true
} }
] ]

View File

@ -55,39 +55,11 @@
} }
} }
}, },
{
"type": "npm",
"script": "watch-extension-mediad",
"label": "Ext Media - Build",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "buildWatchers"
},
"problemMatcher": {
"owner": "typescript",
"applyTo": "closedDocuments",
"fileLocation": [
"absolute"
],
"pattern": {
"regexp": "Error: ([^(]+)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\): (.*)$",
"file": 1,
"location": 2,
"message": 3
},
"background": {
"beginsPattern": "Starting compilation",
"endsPattern": "Finished compilation"
}
}
},
{ {
"label": "VS Code - Build", "label": "VS Code - Build",
"dependsOn": [ "dependsOn": [
"Core - Build", "Core - Build",
"Ext - Build", "Ext - Build"
"Ext Media - Build",
], ],
"group": { "group": {
"kind": "build", "kind": "build",
@ -102,7 +74,8 @@
"group": "build", "group": "build",
"presentation": { "presentation": {
"reveal": "never", "reveal": "never",
"group": "buildKillers" "group": "buildKillers",
"close": true
}, },
"problemMatcher": "$tsc" "problemMatcher": "$tsc"
}, },
@ -113,18 +86,8 @@
"group": "build", "group": "build",
"presentation": { "presentation": {
"reveal": "never", "reveal": "never",
"group": "buildKillers" "group": "buildKillers",
}, "close": true
"problemMatcher": "$tsc"
},
{
"type": "npm",
"script": "kill-watch-extension-mediad",
"label": "Kill Ext Media - Build",
"group": "build",
"presentation": {
"reveal": "never",
"group": "buildKillers"
}, },
"problemMatcher": "$tsc" "problemMatcher": "$tsc"
}, },
@ -132,8 +95,7 @@
"label": "Kill VS Code - Build", "label": "Kill VS Code - Build",
"dependsOn": [ "dependsOn": [
"Kill Core - Build", "Kill Core - Build",
"Kill Ext - Build", "Kill Ext - Build"
"Kill Ext Media - Build",
], ],
"group": "build", "group": "build",
"problemMatcher": [] "problemMatcher": []
@ -238,7 +200,8 @@
"command": "node build/lib/preLaunch.js", "command": "node build/lib/preLaunch.js",
"label": "Ensure Prelaunch Dependencies", "label": "Ensure Prelaunch Dependencies",
"presentation": { "presentation": {
"reveal": "silent" "reveal": "silent",
"close": true
} }
}, },
{ {

View File

@ -1,3 +0,0 @@
disturl "https://electronjs.org/headers"
target "12.0.4"
runtime "electron"

View File

@ -10,7 +10,7 @@ This repository ("`Code - OSS`") is where we (Microsoft) develop the [Visual Stu
## Visual Studio Code ## Visual Studio Code
<p align="center"> <p align="center">
<img alt="VS Code in action" src="https://user-images.githubusercontent.com/1487073/58344409-70473b80-7e0a-11e9-8570-b2efc6f8fa44.png"> <img alt="VS Code in action" src="https://user-images.githubusercontent.com/35271042/118224532-3842c400-b438-11eb-923d-a5f66fa6785a.png">
</p> </p>
[Visual Studio Code](https://code.visualstudio.com) is a distribution of the `Code - OSS` repository with Microsoft specific customizations released under a traditional [Microsoft product license](https://code.visualstudio.com/License/). [Visual Studio Code](https://code.visualstudio.com) is a distribution of the `Code - OSS` repository with Microsoft specific customizations released under a traditional [Microsoft product license](https://code.visualstudio.com/License/).
@ -21,11 +21,11 @@ Visual Studio Code is updated monthly with new features and bug fixes. You can d
## Contributing ## Contributing
There are many ways in which you can participate in the project, for example: There are many ways in which you can participate in this project, for example:
* [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues), and help us verify as they are checked in * [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues), and help us verify as they are checked in
* Review [source code changes](https://github.com/microsoft/vscode/pulls) * Review [source code changes](https://github.com/microsoft/vscode/pulls)
* Review the [documentation](https://github.com/microsoft/vscode-docs) and make pull requests for anything from typos to new content * Review the [documentation](https://github.com/microsoft/vscode-docs) and make pull requests for anything from typos to additional and new content
If you are interested in fixing issues and contributing directly to the code base, If you are interested in fixing issues and contributing directly to the code base,
please see the document [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute), which covers the following: please see the document [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute), which covers the following:
@ -57,10 +57,10 @@ VS Code includes a set of built-in extensions located in the [extensions](extens
## Development Container ## Development Container
This repository includes a Visual Studio Code Remote - Containers / Codespaces development container. This repository includes a Visual Studio Code Remote - Containers / GitHub Codespaces development container.
- For [Remote - Containers](https://aka.ms/vscode-remote/download/containers), use the **Remote-Containers: Open Repository in Container...** command which creates a Docker volume for better disk I/O on macOS and Windows. - For [Remote - Containers](https://aka.ms/vscode-remote/download/containers), use the **Remote-Containers: Clone Repository in Container Volume...** command which creates a Docker volume for better disk I/O on macOS and Windows.
- For Codespaces, install the [Visual Studio Codespaces](https://aka.ms/vscs-ext-vscode) extension in VS Code, and use the **Codespaces: Create New Codespace** command. - For Codespaces, install the [Github Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespacese) extension in VS Code, and use the **Codespaces: Create New Codespace** command.
Docker / the Codespace should have at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run full build. See the [development container README](.devcontainer/README.md) for more information. Docker / the Codespace should have at least **4 Cores and 6 GB of RAM (8 GB recommended)** to run full build. See the [development container README](.devcontainer/README.md) for more information.

View File

@ -5,17 +5,17 @@ Do Not Translate or Localize
This project incorporates components from the projects listed below. The original copyright notices and the licenses under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. This project incorporates components from the projects listed below. The original copyright notices and the licenses under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise.
1. JuliaEditorSupport/atom-language-julia version 0.21.0 (https://github.com/JuliaEditorSupport/atom-language-julia) 1. atom/language-clojure version 0.22.7 (https://github.com/atom/language-clojure)
2. atom/language-clojure version 0.22.7 (https://github.com/atom/language-clojure) 2. atom/language-coffee-script version 0.49.3 (https://github.com/atom/language-coffee-script)
3. atom/language-coffee-script version 0.49.3 (https://github.com/atom/language-coffee-script) 3. atom/language-css version 0.44.4 (https://github.com/atom/language-css)
4. atom/language-css version 0.44.4 (https://github.com/atom/language-css) 4. atom/language-java version 0.32.1 (https://github.com/atom/language-java)
5. atom/language-java version 0.32.1 (https://github.com/atom/language-java) 5. atom/language-sass version 0.62.1 (https://github.com/atom/language-sass)
6. atom/language-sass version 0.61.4 (https://github.com/atom/language-sass) 6. atom/language-shellscript version 0.26.0 (https://github.com/atom/language-shellscript)
7. atom/language-shellscript version 0.26.0 (https://github.com/atom/language-shellscript) 7. atom/language-xml version 0.35.2 (https://github.com/atom/language-xml)
8. atom/language-xml version 0.35.2 (https://github.com/atom/language-xml) 8. better-go-syntax version 1.0.0 (https://github.com/jeff-hykin/better-go-syntax/ )
9. better-go-syntax version 1.0.0 (https://github.com/jeff-hykin/better-go-syntax/ ) 9. Colorsublime-Themes version 0.1.0 (https://github.com/Colorsublime/Colorsublime-Themes)
10. Colorsublime-Themes version 0.1.0 (https://github.com/Colorsublime/Colorsublime-Themes) 10. daaain/Handlebars version 1.8.0 (https://github.com/daaain/Handlebars)
11. daaain/Handlebars version 1.8.0 (https://github.com/daaain/Handlebars) 11. dart-lang/dart-syntax-highlight (https://github.com/dart-lang/dart-syntax-highlight)
12. davidrios/pug-tmbundle (https://github.com/davidrios/pug-tmbundle) 12. davidrios/pug-tmbundle (https://github.com/davidrios/pug-tmbundle)
13. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped) 13. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped)
14. demyte/language-cshtml version 0.3.0 (https://github.com/demyte/language-cshtml) 14. demyte/language-cshtml version 0.3.0 (https://github.com/demyte/language-cshtml)
@ -32,72 +32,46 @@ This project incorporates components from the projects listed below. The origina
25. jeff-hykin/cpp-textmate-grammar version 1.12.11 (https://github.com/jeff-hykin/cpp-textmate-grammar) 25. jeff-hykin/cpp-textmate-grammar version 1.12.11 (https://github.com/jeff-hykin/cpp-textmate-grammar)
26. jeff-hykin/cpp-textmate-grammar version 1.15.5 (https://github.com/jeff-hykin/cpp-textmate-grammar) 26. jeff-hykin/cpp-textmate-grammar version 1.15.5 (https://github.com/jeff-hykin/cpp-textmate-grammar)
27. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify) 27. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify)
28. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert) 28. JuliaEditorSupport/atom-language-julia version 0.21.0 (https://github.com/JuliaEditorSupport/atom-language-julia)
29. language-docker (https://github.com/moby/moby) 29. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert)
30. language-less version 0.34.2 (https://github.com/atom/language-less) 30. language-docker (https://github.com/moby/moby)
31. language-php version 0.46.0 (https://github.com/atom/language-php) 31. language-less version 0.34.2 (https://github.com/atom/language-less)
32. MagicStack/MagicPython version 1.1.1 (https://github.com/MagicStack/MagicPython) 32. language-php version 0.46.2 (https://github.com/atom/language-php)
33. marked version 1.1.0 (https://github.com/markedjs/marked) 33. MagicStack/MagicPython version 1.1.1 (https://github.com/MagicStack/MagicPython)
34. mdn-data version 1.1.12 (https://github.com/mdn/data) 34. marked version 1.1.0 (https://github.com/markedjs/marked)
35. microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/microsoft/TypeScript-TmLanguage) 35. mdn-data version 1.1.12 (https://github.com/mdn/data)
36. microsoft/vscode-JSON.tmLanguage (https://github.com/microsoft/vscode-JSON.tmLanguage) 36. microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/microsoft/TypeScript-TmLanguage)
37. microsoft/vscode-markdown-tm-grammar version 1.0.0 (https://github.com/microsoft/vscode-markdown-tm-grammar) 37. microsoft/vscode-JSON.tmLanguage (https://github.com/microsoft/vscode-JSON.tmLanguage)
38. microsoft/vscode-mssql version 1.9.0 (https://github.com/microsoft/vscode-mssql) 38. microsoft/vscode-markdown-tm-grammar version 1.0.0 (https://github.com/microsoft/vscode-markdown-tm-grammar)
39. mmims/language-batchfile version 0.7.5 (https://github.com/mmims/language-batchfile) 39. microsoft/vscode-mssql version 1.9.0 (https://github.com/microsoft/vscode-mssql)
40. NVIDIA/cuda-cpp-grammar (https://github.com/NVIDIA/cuda-cpp-grammar) 40. mmims/language-batchfile version 0.7.6 (https://github.com/mmims/language-batchfile)
41. PowerShell/EditorSyntax version 1.0.0 (https://github.com/PowerShell/EditorSyntax) 41. NVIDIA/cuda-cpp-grammar (https://github.com/NVIDIA/cuda-cpp-grammar)
42. rust-syntax version 0.4.3 (https://github.com/dustypomerleau/rust-syntax) 42. PowerShell/EditorSyntax version 1.0.0 (https://github.com/PowerShell/EditorSyntax)
43. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui) 43. rust-syntax version 0.4.3 (https://github.com/dustypomerleau/rust-syntax)
44. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage) 44. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui)
45. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle) 45. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage)
46. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle) 46. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle)
47. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle) 47. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle)
48. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle) 48. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle)
49. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle) 49. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle)
50. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle) 50. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle)
51. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle) 51. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle)
52. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle) 52. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle)
53. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle) 53. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle)
54. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle) 54. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle)
55. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle) 55. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle)
56. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle) 56. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle)
57. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle) 57. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle)
58. TypeScript-TmLanguage version 0.1.8 (https://github.com/microsoft/TypeScript-TmLanguage) 58. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle)
59. TypeScript-TmLanguage version 1.0.0 (https://github.com/microsoft/TypeScript-TmLanguage) 59. TypeScript-TmLanguage version 0.1.8 (https://github.com/microsoft/TypeScript-TmLanguage)
60. Unicode version 12.0.0 (https://home.unicode.org/) 60. TypeScript-TmLanguage version 1.0.0 (https://github.com/microsoft/TypeScript-TmLanguage)
61. vscode-codicons version 0.0.14 (https://github.com/microsoft/vscode-codicons) 61. Unicode version 12.0.0 (https://home.unicode.org/)
62. vscode-logfile-highlighter version 2.11.0 (https://github.com/emilast/vscode-logfile-highlighter) 62. vscode-codicons version 0.0.14 (https://github.com/microsoft/vscode-codicons)
63. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift) 63. vscode-logfile-highlighter version 2.11.0 (https://github.com/emilast/vscode-logfile-highlighter)
64. Web Background Synchronization (https://github.com/WICG/background-sync) 64. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
65. Web Background Synchronization (https://github.com/WICG/background-sync)
%% JuliaEditorSupport/atom-language-julia NOTICES AND INFORMATION BEGIN HERE
=========================================
The atom-language-julia package is licensed under the MIT "Expat" License:
> Copyright (c) 2015
>
> 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.
=========================================
END OF JuliaEditorSupport/atom-language-julia NOTICES AND INFORMATION
%% atom/language-clojure NOTICES AND INFORMATION BEGIN HERE %% atom/language-clojure NOTICES AND INFORMATION BEGIN HERE
========================================= =========================================
Copyright (c) 2014 GitHub Inc. Copyright (c) 2014 GitHub Inc.
@ -477,6 +451,38 @@ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
========================================= =========================================
END OF daaain/Handlebars NOTICES AND INFORMATION END OF daaain/Handlebars NOTICES AND INFORMATION
%% dart-lang/dart-syntax-highlight NOTICES AND INFORMATION BEGIN HERE
=========================================
Copyright 2020, the Dart project authors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google LLC nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=========================================
END OF dart-lang/dart-syntax-highlight NOTICES AND INFORMATION
%% davidrios/pug-tmbundle NOTICES AND INFORMATION BEGIN HERE %% davidrios/pug-tmbundle NOTICES AND INFORMATION BEGIN HERE
========================================= =========================================
The MIT License (MIT) The MIT License (MIT)
@ -855,6 +861,33 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
========================================= =========================================
END OF js-beautify NOTICES AND INFORMATION END OF js-beautify NOTICES AND INFORMATION
%% JuliaEditorSupport/atom-language-julia NOTICES AND INFORMATION BEGIN HERE
=========================================
The atom-language-julia package is licensed under the MIT "Expat" License:
> Copyright (c) 2015
>
> 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.
=========================================
END OF JuliaEditorSupport/atom-language-julia NOTICES AND INFORMATION
%% Jxck/assert NOTICES AND INFORMATION BEGIN HERE %% Jxck/assert NOTICES AND INFORMATION BEGIN HERE
========================================= =========================================
The MIT License (MIT) The MIT License (MIT)

View File

@ -5,15 +5,101 @@
'use strict'; 'use strict';
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs"); const fs = require("fs");
const url = require("url");
const crypto = require("crypto"); const crypto = require("crypto");
const azure = require("azure-storage"); const azure = require("azure-storage");
const mime = require("mime"); const mime = require("mime");
const cosmos_1 = require("@azure/cosmos"); const cosmos_1 = require("@azure/cosmos");
const retry_1 = require("./retry"); const retry_1 = require("./retry");
if (process.argv.length !== 6) { if (process.argv.length !== 8) {
console.error('Usage: node createAsset.js PLATFORM TYPE NAME FILE'); console.error('Usage: node createAsset.js PRODUCT OS ARCH TYPE NAME FILE');
process.exit(-1); process.exit(-1);
} }
// Contains all of the logic for mapping details to our actual product names in CosmosDB
function getPlatform(product, os, arch, type) {
switch (os) {
case 'win32':
switch (product) {
case 'client':
const asset = arch === 'ia32' ? 'win32' : `win32-${arch}`;
switch (type) {
case 'archive':
return `${asset}-archive`;
case 'setup':
return asset;
case 'user-setup':
return `${asset}-user`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'server':
if (arch === 'arm64') {
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
return arch === 'ia32' ? 'server-win32' : `server-win32-${arch}`;
case 'web':
if (arch === 'arm64') {
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
return arch === 'ia32' ? 'server-win32-web' : `server-win32-${arch}-web`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'linux':
switch (type) {
case 'snap':
return `linux-snap-${arch}`;
case 'archive-unsigned':
switch (product) {
case 'client':
return `linux-${arch}`;
case 'server':
return `server-linux-${arch}`;
case 'web':
return arch === 'standalone' ? 'web-standalone' : `server-linux-${arch}-web`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'deb-package':
return `linux-deb-${arch}`;
case 'rpm-package':
return `linux-rpm-${arch}`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'darwin':
switch (product) {
case 'client':
if (arch === 'x64') {
return 'darwin';
}
return `darwin-${arch}`;
case 'server':
return 'server-darwin';
case 'web':
if (arch !== 'x64') {
throw `What should the platform be?: ${product} ${os} ${arch} ${type}`;
}
return 'server-darwin-web';
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
}
// Contains all of the logic for mapping types to our actual types in CosmosDB
function getRealType(type) {
switch (type) {
case 'user-setup':
return 'setup';
case 'deb-package':
case 'rpm-package':
return 'package';
default:
return type;
}
}
function hashStream(hashName, stream) { function hashStream(hashName, stream) {
return new Promise((c, e) => { return new Promise((c, e) => {
const shasum = crypto.createHash(hashName); const shasum = crypto.createHash(hashName);
@ -45,7 +131,10 @@ function getEnv(name) {
return result; return result;
} }
async function main() { async function main() {
const [, , platform, type, fileName, filePath] = process.argv; const [, , product, os, arch, unprocessedType, fileName, filePath] = process.argv;
// getPlatform needs the unprocessedType
const platform = getPlatform(product, os, arch, unprocessedType);
const type = getRealType(unprocessedType);
const quality = getEnv('VSCODE_QUALITY'); const quality = getEnv('VSCODE_QUALITY');
const commit = getEnv('BUILD_SOURCEVERSION'); const commit = getEnv('BUILD_SOURCEVERSION');
console.log('Creating asset...'); console.log('Creating asset...');
@ -65,14 +154,27 @@ async function main() {
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`); console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
return; return;
} }
console.log('Uploading blobs to Azure storage...'); const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY'], `${storageAccount}.blob.core.chinacloudapi.cn`)
await uploadBlob(blobService, quality, blobName, filePath, fileName); .withFilter(new azure.ExponentialRetryPolicyFilter(20));
// mooncake is fussy and far away, this is needed!
blobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
await retry_1.retry(() => Promise.all([
uploadBlob(blobService, quality, blobName, filePath, fileName),
uploadBlob(mooncakeBlobService, quality, blobName, filePath, fileName)
]));
console.log('Blobs successfully uploaded.'); console.log('Blobs successfully uploaded.');
// TODO: Understand if blobName and blobPath are the same and replace blobPath with blobName if so.
const assetUrl = `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`;
const blobPath = url.parse(assetUrl).path;
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
const asset = { const asset = {
platform, platform,
type, type,
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`, url: assetUrl,
hash: sha1hash, hash: sha1hash,
mooncakeUrl,
sha256hash, sha256hash,
size size
}; };
@ -84,6 +186,7 @@ async function main() {
const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] }); const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const scripts = client.database('builds').container(quality).scripts; const scripts = client.database('builds').container(quality).scripts;
await retry_1.retry(() => scripts.storedProcedure('createAsset').execute('', [commit, asset, true])); await retry_1.retry(() => scripts.storedProcedure('createAsset').execute('', [commit, asset, true]));
console.log(` Done ✔️`);
} }
main().then(() => { main().then(() => {
console.log('Asset successfully created'); console.log('Asset successfully created');

View File

@ -6,6 +6,7 @@
'use strict'; 'use strict';
import * as fs from 'fs'; import * as fs from 'fs';
import * as url from 'url';
import { Readable } from 'stream'; import { Readable } from 'stream';
import * as crypto from 'crypto'; import * as crypto from 'crypto';
import * as azure from 'azure-storage'; import * as azure from 'azure-storage';
@ -24,11 +25,98 @@ interface Asset {
supportsFastUpdate?: boolean; supportsFastUpdate?: boolean;
} }
if (process.argv.length !== 6) { if (process.argv.length !== 8) {
console.error('Usage: node createAsset.js PLATFORM TYPE NAME FILE'); console.error('Usage: node createAsset.js PRODUCT OS ARCH TYPE NAME FILE');
process.exit(-1); process.exit(-1);
} }
// Contains all of the logic for mapping details to our actual product names in CosmosDB
function getPlatform(product: string, os: string, arch: string, type: string): string {
switch (os) {
case 'win32':
switch (product) {
case 'client':
const asset = arch === 'ia32' ? 'win32' : `win32-${arch}`;
switch (type) {
case 'archive':
return `${asset}-archive`;
case 'setup':
return asset;
case 'user-setup':
return `${asset}-user`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'server':
if (arch === 'arm64') {
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
return arch === 'ia32' ? 'server-win32' : `server-win32-${arch}`;
case 'web':
if (arch === 'arm64') {
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
return arch === 'ia32' ? 'server-win32-web' : `server-win32-${arch}-web`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'linux':
switch (type) {
case 'snap':
return `linux-snap-${arch}`;
case 'archive-unsigned':
switch (product) {
case 'client':
return `linux-${arch}`;
case 'server':
return `server-linux-${arch}`;
case 'web':
return arch === 'standalone' ? 'web-standalone' : `server-linux-${arch}-web`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'deb-package':
return `linux-deb-${arch}`;
case 'rpm-package':
return `linux-rpm-${arch}`;
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
case 'darwin':
switch (product) {
case 'client':
if (arch === 'x64') {
return 'darwin';
}
return `darwin-${arch}`;
case 'server':
return 'server-darwin';
case 'web':
if (arch !== 'x64') {
throw `What should the platform be?: ${product} ${os} ${arch} ${type}`;
}
return 'server-darwin-web';
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
default:
throw `Unrecognized: ${product} ${os} ${arch} ${type}`;
}
}
// Contains all of the logic for mapping types to our actual types in CosmosDB
function getRealType(type: string) {
switch (type) {
case 'user-setup':
return 'setup';
case 'deb-package':
case 'rpm-package':
return 'package';
default:
return type;
}
}
function hashStream(hashName: string, stream: Readable): Promise<string> { function hashStream(hashName: string, stream: Readable): Promise<string> {
return new Promise<string>((c, e) => { return new Promise<string>((c, e) => {
const shasum = crypto.createHash(hashName); const shasum = crypto.createHash(hashName);
@ -68,7 +156,10 @@ function getEnv(name: string): string {
} }
async function main(): Promise<void> { async function main(): Promise<void> {
const [, , platform, type, fileName, filePath] = process.argv; const [, , product, os, arch, unprocessedType, fileName, filePath] = process.argv;
// getPlatform needs the unprocessedType
const platform = getPlatform(product, os, arch, unprocessedType);
const type = getRealType(unprocessedType);
const quality = getEnv('VSCODE_QUALITY'); const quality = getEnv('VSCODE_QUALITY');
const commit = getEnv('BUILD_SOURCEVERSION'); const commit = getEnv('BUILD_SOURCEVERSION');
@ -98,17 +189,33 @@ async function main(): Promise<void> {
return; return;
} }
console.log('Uploading blobs to Azure storage...'); const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY']!, `${storageAccount}.blob.core.chinacloudapi.cn`)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
await uploadBlob(blobService, quality, blobName, filePath, fileName); // mooncake is fussy and far away, this is needed!
blobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
await retry(() => Promise.all([
uploadBlob(blobService, quality, blobName, filePath, fileName),
uploadBlob(mooncakeBlobService, quality, blobName, filePath, fileName)
]));
console.log('Blobs successfully uploaded.'); console.log('Blobs successfully uploaded.');
// TODO: Understand if blobName and blobPath are the same and replace blobPath with blobName if so.
const assetUrl = `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`;
const blobPath = url.parse(assetUrl).path;
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
const asset: Asset = { const asset: Asset = {
platform, platform,
type, type,
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`, url: assetUrl,
hash: sha1hash, hash: sha1hash,
mooncakeUrl,
sha256hash, sha256hash,
size size
}; };
@ -123,6 +230,8 @@ async function main(): Promise<void> {
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] }); const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const scripts = client.database('builds').container(quality).scripts; const scripts = client.database('builds').container(quality).scripts;
await retry(() => scripts.storedProcedure('createAsset').execute('', [commit, asset, true])); await retry(() => scripts.storedProcedure('createAsset').execute('', [commit, asset, true]));
console.log(` Done ✔️`);
} }
main().then(() => { main().then(() => {

View File

@ -1,87 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const url = require("url");
const azure = require("azure-storage");
const mime = require("mime");
const cosmos_1 = require("@azure/cosmos");
const retry_1 = require("./retry");
function log(...args) {
console.log(...[`[${new Date().toISOString()}]`, ...args]);
}
function error(...args) {
console.error(...[`[${new Date().toISOString()}]`, ...args]);
}
if (process.argv.length < 3) {
error('Usage: node sync-mooncake.js <quality>');
process.exit(-1);
}
async function sync(commit, quality) {
log(`Synchronizing Mooncake assets for ${quality}, ${commit}...`);
const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const container = client.database('builds').container(quality);
const query = `SELECT TOP 1 * FROM c WHERE c.id = "${commit}"`;
const res = await container.items.query(query, {}).fetchAll();
if (res.resources.length !== 1) {
throw new Error(`No builds found for ${commit}`);
}
const build = res.resources[0];
log(`Found build for ${commit}, with ${build.assets.length} assets`);
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2'];
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2'])
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY'], `${storageAccount}.blob.core.chinacloudapi.cn`)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
// mooncake is fussy and far away, this is needed!
blobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
for (const asset of build.assets) {
try {
const blobPath = url.parse(asset.url).path;
if (!blobPath) {
throw new Error(`Failed to parse URL: ${asset.url}`);
}
const blobName = blobPath.replace(/^\/\w+\//, '');
log(`Found ${blobName}`);
if (asset.mooncakeUrl) {
log(` Already in Mooncake ✔️`);
continue;
}
const readStream = blobService.createReadStream(quality, blobName, undefined);
const blobOptions = {
contentSettings: {
contentType: mime.lookup(blobPath),
cacheControl: 'max-age=31536000, public'
}
};
const writeStream = mooncakeBlobService.createWriteStreamToBlockBlob(quality, blobName, blobOptions, undefined);
log(` Uploading to Mooncake...`);
await new Promise((c, e) => readStream.pipe(writeStream).on('finish', c).on('error', e));
log(` Updating build in DB...`);
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
await retry_1.retry(() => container.scripts.storedProcedure('setAssetMooncakeUrl')
.execute('', [commit, asset.platform, asset.type, mooncakeUrl]));
log(` Done ✔️`);
}
catch (err) {
error(err);
}
}
log(`All done ✔️`);
}
function main() {
const commit = process.env['BUILD_SOURCEVERSION'];
if (!commit) {
error('Skipping publish due to missing BUILD_SOURCEVERSION');
return;
}
const quality = process.argv[2];
sync(commit, quality).catch(err => {
error(err);
process.exit(1);
});
}
main();

View File

@ -1,131 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as url from 'url';
import * as azure from 'azure-storage';
import * as mime from 'mime';
import { CosmosClient } from '@azure/cosmos';
import { retry } from './retry';
function log(...args: any[]) {
console.log(...[`[${new Date().toISOString()}]`, ...args]);
}
function error(...args: any[]) {
console.error(...[`[${new Date().toISOString()}]`, ...args]);
}
if (process.argv.length < 3) {
error('Usage: node sync-mooncake.js <quality>');
process.exit(-1);
}
interface Build {
assets: Asset[];
}
interface Asset {
platform: string;
type: string;
url: string;
mooncakeUrl: string;
hash: string;
sha256hash: string;
size: number;
supportsFastUpdate?: boolean;
}
async function sync(commit: string, quality: string): Promise<void> {
log(`Synchronizing Mooncake assets for ${quality}, ${commit}...`);
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const container = client.database('builds').container(quality);
const query = `SELECT TOP 1 * FROM c WHERE c.id = "${commit}"`;
const res = await container.items.query<Build>(query, {}).fetchAll();
if (res.resources.length !== 1) {
throw new Error(`No builds found for ${commit}`);
}
const build = res.resources[0];
log(`Found build for ${commit}, with ${build.assets.length} assets`);
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2']!;
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2']!)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY']!, `${storageAccount}.blob.core.chinacloudapi.cn`)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
// mooncake is fussy and far away, this is needed!
blobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000;
for (const asset of build.assets) {
try {
const blobPath = url.parse(asset.url).path;
if (!blobPath) {
throw new Error(`Failed to parse URL: ${asset.url}`);
}
const blobName = blobPath.replace(/^\/\w+\//, '');
log(`Found ${blobName}`);
if (asset.mooncakeUrl) {
log(` Already in Mooncake ✔️`);
continue;
}
const readStream = blobService.createReadStream(quality, blobName, undefined!);
const blobOptions: azure.BlobService.CreateBlockBlobRequestOptions = {
contentSettings: {
contentType: mime.lookup(blobPath),
cacheControl: 'max-age=31536000, public'
}
};
const writeStream = mooncakeBlobService.createWriteStreamToBlockBlob(quality, blobName, blobOptions, undefined);
log(` Uploading to Mooncake...`);
await new Promise((c, e) => readStream.pipe(writeStream).on('finish', c).on('error', e));
log(` Updating build in DB...`);
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
await retry(() => container.scripts.storedProcedure('setAssetMooncakeUrl')
.execute('', [commit, asset.platform, asset.type, mooncakeUrl]));
log(` Done ✔️`);
} catch (err) {
error(err);
}
}
log(`All done ✔️`);
}
function main(): void {
const commit = process.env['BUILD_SOURCEVERSION'];
if (!commit) {
error('Skipping publish due to missing BUILD_SOURCEVERSION');
return;
}
const quality = process.argv[2];
sync(commit, quality).catch(err => {
error(err);
process.exit(1);
});
}
main();

View File

@ -35,13 +35,13 @@ steps:
displayName: Restore modules for just build folder and compile it displayName: Restore modules for just build folder and compile it
- download: current - download: current
artifact: vscode-darwin-$(VSCODE_ARCH) artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
displayName: Download $(VSCODE_ARCH) artifact displayName: Download $(VSCODE_ARCH) artifact
- script: | - script: |
set -e set -e
unzip $(Pipeline.Workspace)/vscode-darwin-$(VSCODE_ARCH)/VSCode-darwin-$(VSCODE_ARCH).zip -d $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
mv $(Pipeline.Workspace)/vscode-darwin-$(VSCODE_ARCH)/VSCode-darwin-$(VSCODE_ARCH).zip $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip mv $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
displayName: Unzip & move displayName: Unzip & move
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
@ -108,22 +108,18 @@ steps:
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64')) condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
- script: | - script: |
set -e
# For legacy purposes, arch for x64 is just 'darwin' # For legacy purposes, arch for x64 is just 'darwin'
case $VSCODE_ARCH in case $VSCODE_ARCH in
x64) ASSET_ID="darwin" ;; x64) ASSET_ID="darwin" ;;
arm64) ASSET_ID="darwin-arm64" ;; arm64) ASSET_ID="darwin-arm64" ;;
universal) ASSET_ID="darwin-universal" ;; universal) ASSET_ID="darwin-universal" ;;
esac esac
echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID"
displayName: Set asset id variable
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - script: mv $(agent.builddirectory)/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin.zip
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ displayName: Rename x64 build to it's legacy name
AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \ condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
node build/azure-pipelines/common/createAsset.js \ - publish: $(Agent.BuildDirectory)/VSCode-$(ASSET_ID).zip
"$ASSET_ID" \ artifact: vscode_client_darwin_$(VSCODE_ARCH)_archive
archive \
"VSCode-$ASSET_ID.zip" \
../VSCode-darwin-$(VSCODE_ARCH).zip
displayName: Publish Clients

View File

@ -138,19 +138,19 @@ steps:
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'universal'), eq(variables['VSCODE_STEP_ON_IT'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'universal'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- download: current - download: current
artifact: vscode-darwin-x64 artifact: unsigned_vscode_client_darwin_x64_archive
displayName: Download x64 artifact displayName: Download x64 artifact
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'universal')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'universal'))
- download: current - download: current
artifact: vscode-darwin-arm64 artifact: unsigned_vscode_client_darwin_arm64_archive
displayName: Download arm64 artifact displayName: Download arm64 artifact
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'universal')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'universal'))
- script: | - script: |
set -e set -e
cp $(Pipeline.Workspace)/vscode-darwin-x64/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin-x64.zip cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin-x64.zip
cp $(Pipeline.Workspace)/vscode-darwin-arm64/VSCode-darwin-arm64.zip $(agent.builddirectory)/VSCode-darwin-arm64.zip cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip $(agent.builddirectory)/VSCode-darwin-arm64.zip
unzip $(agent.builddirectory)/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64 unzip $(agent.builddirectory)/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64
unzip $(agent.builddirectory)/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64 unzip $(agent.builddirectory)/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64
DEBUG=* node build/darwin/create-universal-app.js DEBUG=* node build/darwin/create-universal-app.js
@ -280,26 +280,27 @@ steps:
- script: | - script: |
set -e set -e
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ # package Remote Extension Host
AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \ pushd .. && mv vscode-reh-darwin vscode-server-darwin && zip -Xry vscode-server-darwin.zip vscode-server-darwin && popd
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
VSCODE_ARCH="$(VSCODE_ARCH)" ./build/azure-pipelines/darwin/publish-server.sh # package Remote Extension Host (Web)
displayName: Publish Servers pushd .. && mv vscode-reh-web-darwin vscode-server-darwin-web && zip -Xry vscode-server-darwin-web.zip vscode-server-darwin-web && popd
displayName: Prepare to publish servers
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip - publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
artifact: vscode-darwin-$(VSCODE_ARCH) artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
displayName: Publish client archive displayName: Publish client archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-darwin.zip - publish: $(Agent.BuildDirectory)/vscode-server-darwin.zip
artifact: vscode-server-darwin-$(VSCODE_ARCH) artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish server archive displayName: Publish server archive
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-web.zip - publish: $(Agent.BuildDirectory)/vscode-server-darwin-web.zip
artifact: vscode-server-darwin-$(VSCODE_ARCH)-web artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish web server archive displayName: Publish web server archive
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
@ -308,5 +309,5 @@ steps:
VSCODE_ARCH="$(VSCODE_ARCH)" \ VSCODE_ARCH="$(VSCODE_ARCH)" \
yarn gulp upload-vscode-configuration yarn gulp upload-vscode-configuration
displayName: Upload configuration (for Bing settings search) displayName: Upload configuration (for Bing settings search)
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64')) condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
continueOnError: true continueOnError: true

View File

@ -1,14 +0,0 @@
#!/usr/bin/env bash
set -e
if [ "$VSCODE_ARCH" == "x64" ]; then
# package Remote Extension Host
pushd .. && mv vscode-reh-darwin vscode-server-darwin && zip -Xry vscode-server-darwin.zip vscode-server-darwin && popd
# publish Remote Extension Host
node build/azure-pipelines/common/createAsset.js \
server-darwin \
archive-unsigned \
"vscode-server-darwin.zip" \
../vscode-server-darwin.zip
fi

View File

@ -1,28 +0,0 @@
#!/usr/bin/env bash
set -e
REPO="$(pwd)"
ROOT="$REPO/.."
PLATFORM_LINUX="linux-alpine"
# Publish Remote Extension Host
LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX"
SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX.tar.gz"
SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
node build/azure-pipelines/common/createAsset.js "server-$PLATFORM_LINUX" archive-unsigned "$SERVER_TARBALL_FILENAME" "$SERVER_TARBALL_PATH"
# Publish Remote Extension Host (Web)
LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web"
SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX-web.tar.gz"
SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*-web.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
node build/azure-pipelines/common/createAsset.js "server-$PLATFORM_LINUX-web" archive-unsigned "$SERVER_TARBALL_FILENAME" "$SERVER_TARBALL_PATH"

View File

@ -13,8 +13,6 @@ TARBALL_PATH="$ROOT/$TARBALL_FILENAME"
rm -rf $ROOT/code-*.tar.* rm -rf $ROOT/code-*.tar.*
(cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME) (cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME)
node build/azure-pipelines/common/createAsset.js "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$TARBALL_PATH"
# Publish Remote Extension Host # Publish Remote Extension Host
LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX" LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX" SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX"
@ -24,8 +22,6 @@ SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*.tar.* rm -rf $ROOT/vscode-server-*.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME) (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
node build/azure-pipelines/common/createAsset.js "server-$PLATFORM_LINUX" archive-unsigned "$SERVER_TARBALL_FILENAME" "$SERVER_TARBALL_PATH"
# Publish Remote Extension Host (Web) # Publish Remote Extension Host (Web)
LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX" LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web" SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web"
@ -35,8 +31,6 @@ SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*-web.tar.* rm -rf $ROOT/vscode-server-*-web.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME) (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
node build/azure-pipelines/common/createAsset.js "server-$PLATFORM_LINUX-web" archive-unsigned "$SERVER_TARBALL_FILENAME" "$SERVER_TARBALL_PATH"
# Publish DEB # Publish DEB
case $VSCODE_ARCH in case $VSCODE_ARCH in
x64) DEB_ARCH="amd64" ;; x64) DEB_ARCH="amd64" ;;
@ -47,8 +41,6 @@ PLATFORM_DEB="linux-deb-$VSCODE_ARCH"
DEB_FILENAME="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/)" DEB_FILENAME="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/)"
DEB_PATH="$REPO/.build/linux/deb/$DEB_ARCH/deb/$DEB_FILENAME" DEB_PATH="$REPO/.build/linux/deb/$DEB_ARCH/deb/$DEB_FILENAME"
node build/azure-pipelines/common/createAsset.js "$PLATFORM_DEB" package "$DEB_FILENAME" "$DEB_PATH"
# Publish RPM # Publish RPM
case $VSCODE_ARCH in case $VSCODE_ARCH in
x64) RPM_ARCH="x86_64" ;; x64) RPM_ARCH="x86_64" ;;
@ -61,8 +53,6 @@ PLATFORM_RPM="linux-rpm-$VSCODE_ARCH"
RPM_FILENAME="$(ls $REPO/.build/linux/rpm/$RPM_ARCH/ | grep .rpm)" RPM_FILENAME="$(ls $REPO/.build/linux/rpm/$RPM_ARCH/ | grep .rpm)"
RPM_PATH="$REPO/.build/linux/rpm/$RPM_ARCH/$RPM_FILENAME" RPM_PATH="$REPO/.build/linux/rpm/$RPM_ARCH/$RPM_FILENAME"
node build/azure-pipelines/common/createAsset.js "$PLATFORM_RPM" package "$RPM_FILENAME" "$RPM_PATH"
# Publish Snap # Publish Snap
# Pack snap tarball artifact, in order to preserve file perms # Pack snap tarball artifact, in order to preserve file perms
mkdir -p $REPO/.build/linux/snap-tarball mkdir -p $REPO/.build/linux/snap-tarball
@ -73,3 +63,4 @@ rm -rf $SNAP_TARBALL_PATH
# Export DEB_PATH, RPM_PATH # Export DEB_PATH, RPM_PATH
echo "##vso[task.setvariable variable=DEB_PATH]$DEB_PATH" echo "##vso[task.setvariable variable=DEB_PATH]$DEB_PATH"
echo "##vso[task.setvariable variable=RPM_PATH]$RPM_PATH" echo "##vso[task.setvariable variable=RPM_PATH]$RPM_PATH"
echo "##vso[task.setvariable variable=TARBALL_PATH]$TARBALL_PATH"

View File

@ -117,19 +117,37 @@ steps:
- script: | - script: |
set -e set -e
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ REPO="$(pwd)"
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ ROOT="$REPO/.."
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
./build/azure-pipelines/linux/alpine/publish.sh PLATFORM_LINUX="linux-alpine"
displayName: Publish
# Publish Remote Extension Host
LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX"
SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX.tar.gz"
SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
# Publish Remote Extension Host (Web)
LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX"
SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web"
SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX-web.tar.gz"
SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*-web.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
displayName: Prepare for publish
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine.tar.gz - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine.tar.gz
artifact: vscode-server-linux-alpine artifact: vscode_server_linux_alpine_archive-unsigned
displayName: Publish server archive displayName: Publish server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine-web.tar.gz - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine-web.tar.gz
artifact: vscode-server-linux-alpine-web artifact: vscode_web_linux_alpine_archive-unsigned
displayName: Publish web server archive displayName: Publish web server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))

View File

@ -245,27 +245,32 @@ steps:
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
VSCODE_ARCH="$(VSCODE_ARCH)" \ VSCODE_ARCH="$(VSCODE_ARCH)" \
./build/azure-pipelines/linux/publish.sh ./build/azure-pipelines/linux/prepare-publish.sh
displayName: Publish displayName: Prepare for Publish
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(DEB_PATH) - publish: $(DEB_PATH)
artifact: vscode-linux-deb-$(VSCODE_ARCH) artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package
displayName: Publish deb package displayName: Publish deb package
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(RPM_PATH) - publish: $(RPM_PATH)
artifact: vscode-linux-rpm-$(VSCODE_ARCH) artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package
displayName: Publish rpm package displayName: Publish rpm package
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(TARBALL_PATH)
artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish client archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
artifact: vscode-server-linux-$(VSCODE_ARCH) artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish server archive displayName: Publish server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz - publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
artifact: vscode-server-linux-$(VSCODE_ARCH)-web artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish web server archive displayName: Publish web server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))

View File

@ -50,15 +50,11 @@ steps:
esac esac
(cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft prime $SNAPCRAFT_TARGET_ARGS && snap pack prime --compression=lzo --filename="$SNAP_PATH") (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft prime $SNAPCRAFT_TARGET_ARGS && snap pack prime --compression=lzo --filename="$SNAP_PATH")
# Publish snap package
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
node build/azure-pipelines/common/createAsset.js "linux-snap-$(VSCODE_ARCH)" package "$SNAP_FILENAME" "$SNAP_PATH"
# Export SNAP_PATH # Export SNAP_PATH
echo "##vso[task.setvariable variable=SNAP_PATH]$SNAP_PATH" echo "##vso[task.setvariable variable=SNAP_PATH]$SNAP_PATH"
displayName: Prepare for publish
- publish: $(SNAP_PATH) - publish: $(SNAP_PATH)
artifact: vscode-linux-snap-$(VSCODE_ARCH) artifact: vscode_client_linux_$(VSCODE_ARCH)_snap
displayName: Publish snap package displayName: Publish snap package
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))

View File

@ -86,6 +86,8 @@ variables:
value: ${{ eq(parameters.ENABLE_TERRAPIN, true) }} value: ${{ eq(parameters.ENABLE_TERRAPIN, true) }}
- name: VSCODE_QUALITY - name: VSCODE_QUALITY
value: ${{ parameters.VSCODE_QUALITY }} value: ${{ parameters.VSCODE_QUALITY }}
- name: VSCODE_RELEASE
value: ${{ parameters.VSCODE_RELEASE }}
- name: VSCODE_BUILD_STAGE_WINDOWS - name: VSCODE_BUILD_STAGE_WINDOWS
value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }} value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}
- name: VSCODE_BUILD_STAGE_LINUX - name: VSCODE_BUILD_STAGE_LINUX
@ -301,37 +303,30 @@ stages:
steps: steps:
- template: darwin/product-build-darwin-sign.yml - template: darwin/product-build-darwin-sign.yml
- ${{ if and(eq(variables['VSCODE_PUBLISH'], true), eq(parameters.VSCODE_COMPILE_ONLY, false)) }}: - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), ne(variables['VSCODE_PUBLISH'], 'false')) }}:
- stage: Mooncake - stage: Publish
dependsOn: dependsOn:
- ${{ if eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true) }}: - Compile
- Windows
- ${{ if eq(variables['VSCODE_BUILD_STAGE_LINUX'], true) }}:
- Linux
- ${{ if eq(variables['VSCODE_BUILD_STAGE_MACOS'], true) }}:
- macOS
condition: succeededOrFailed()
pool: pool:
vmImage: "Ubuntu-18.04" vmImage: "Ubuntu-18.04"
variables:
- name: BUILDS_API_URL
value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/
jobs: jobs:
- job: SyncMooncake - job: PublishBuild
displayName: Sync Mooncake timeoutInMinutes: 180
displayName: Publish Build
steps: steps:
- template: sync-mooncake.yml - template: product-publish.yml
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), or(eq(parameters.VSCODE_RELEASE, true), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true)))) }}: - ${{ if or(eq(parameters.VSCODE_RELEASE, true), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}:
- stage: Release - stage: Release
dependsOn: dependsOn:
- ${{ if eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true) }}: - Publish
- Windows
- ${{ if eq(variables['VSCODE_BUILD_STAGE_LINUX'], true) }}:
- Linux
- ${{ if eq(variables['VSCODE_BUILD_STAGE_MACOS'], true) }}:
- macOS
pool: pool:
vmImage: "Ubuntu-18.04" vmImage: "Ubuntu-18.04"
jobs: jobs:
- job: ReleaseBuild - job: ReleaseBuild
displayName: Release Build displayName: Release Build
steps: steps:
- template: release.yml - template: product-release.yml

View File

@ -118,14 +118,6 @@ steps:
displayName: Publish Webview displayName: Publish Webview
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- script: |
set -e
VERSION=`node -p "require(\"./package.json\").version"`
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
node build/azure-pipelines/common/createBuild.js $VERSION
displayName: Create build
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
# we gotta tarball everything in order to preserve file permissions # we gotta tarball everything in order to preserve file permissions
- script: | - script: |
set -e set -e

View File

@ -0,0 +1,114 @@
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
$ARTIFACT_PROCESSED_WILDCARD_PATH = "$env:PIPELINE_WORKSPACE/artifacts_processed_*/artifacts_processed_*"
$ARTIFACT_PROCESSED_FILE_PATH = "$env:PIPELINE_WORKSPACE/artifacts_processed_$env:SYSTEM_STAGEATTEMPT/artifacts_processed_$env:SYSTEM_STAGEATTEMPT.txt"
function Get-PipelineArtifact {
param($Name = '*')
try {
$res = Invoke-RestMethod "$($env:BUILDS_API_URL)artifacts?api-version=6.0" -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -MaximumRetryCount 5 -RetryIntervalSec 1
if (!$res) {
return
}
$res.value | Where-Object { $_.name -Like $Name }
} catch {
Write-Warning $_
}
}
# This set will keep track of which artifacts have already been processed
$set = [System.Collections.Generic.HashSet[string]]::new()
if (Test-Path $ARTIFACT_PROCESSED_WILDCARD_PATH) {
# Grab the latest artifact_processed text file and load all assets already processed from that.
# This means that the latest artifact_processed_*.txt file has all of the contents of the previous ones.
# Note: The kusto-like syntax only works in PS7+ and only in scripts, not at the REPL.
Get-ChildItem $ARTIFACT_PROCESSED_WILDCARD_PATH
| Sort-Object
| Select-Object -Last 1
| Get-Content
| ForEach-Object {
$set.Add($_) | Out-Null
Write-Host "Already processed artifact: $_"
}
}
# Create the artifact file that will be used for this run
New-Item -Path $ARTIFACT_PROCESSED_FILE_PATH -Force | Out-Null
# Determine which stages we need to watch
$stages = @(
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
)
do {
Start-Sleep -Seconds 10
$artifacts = Get-PipelineArtifact -Name 'vscode_*'
if (!$artifacts) {
continue
}
$artifacts | ForEach-Object {
$artifactName = $_.name
if($set.Add($artifactName)) {
Write-Host "Processing artifact: '$artifactName. Downloading from: $($_.resource.downloadUrl)"
try {
Invoke-RestMethod $_.resource.downloadUrl -OutFile "$env:AGENT_TEMPDIRECTORY/$artifactName.zip" -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -MaximumRetryCount 5 -RetryIntervalSec 1 | Out-Null
Expand-Archive -Path "$env:AGENT_TEMPDIRECTORY/$artifactName.zip" -DestinationPath $env:AGENT_TEMPDIRECTORY | Out-Null
} catch {
Write-Warning $_
$set.Remove($artifactName) | Out-Null
continue
}
$null,$product,$os,$arch,$type = $artifactName -split '_'
$asset = Get-ChildItem -rec "$env:AGENT_TEMPDIRECTORY/$artifactName"
Write-Host "Processing artifact with the following values:"
# turning in into an object just to log nicely
@{
product = $product
os = $os
arch = $arch
type = $type
asset = $asset.Name
} | Format-Table
exec { node build/azure-pipelines/common/createAsset.js $product $os $arch $type $asset.Name $asset.FullName }
$artifactName >> $ARTIFACT_PROCESSED_FILE_PATH
}
}
# Get the timeline and see if it says the other stage completed
try {
$timeline = Invoke-RestMethod "$($env:BUILDS_API_URL)timeline?api-version=6.0" -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -MaximumRetryCount 5 -RetryIntervalSec 1
} catch {
Write-Warning $_
continue
}
foreach ($stage in $stages) {
$otherStageFinished = $timeline.records | Where-Object { $_.name -eq $stage -and $_.type -eq 'stage' -and $_.state -eq 'completed' }
if (!$otherStageFinished) {
break
}
}
$artifacts = Get-PipelineArtifact -Name 'vscode_*'
$artifactsStillToProcess = $artifacts.Count -ne $set.Count
} while (!$otherStageFinished -or $artifactsStillToProcess)
Write-Host "Processed $($set.Count) artifacts."

View File

@ -0,0 +1,89 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "12.x"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- pwsh: |
. build/azure-pipelines/win32/exec.ps1
cd build
exec { yarn }
displayName: Install dependencies
- download: current
patterns: '**/artifacts_processed_*.txt'
displayName: Download all artifacts_processed text files
- pwsh: |
. build/azure-pipelines/win32/exec.ps1
if (Test-Path "$(Pipeline.Workspace)/artifacts_processed_*/artifacts_processed_*.txt") {
Write-Host "Artifacts already processed so a build must have already been created."
return
}
$env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)"
$VERSION = node -p "require('./package.json').version"
Write-Host "Creating build with version: $VERSION"
exec { node build/azure-pipelines/common/createBuild.js $VERSION }
displayName: Create build if it hasn't been created before
- pwsh: |
$env:VSCODE_MIXIN_PASSWORD = "$(github-distro-mixin-password)"
$env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)"
$env:AZURE_STORAGE_ACCESS_KEY = "$(ticino-storage-key)"
$env:AZURE_STORAGE_ACCESS_KEY_2 = "$(vscode-storage-key)"
$env:MOONCAKE_STORAGE_ACCESS_KEY = "$(vscode-mooncake-storage-key)"
build/azure-pipelines/product-publish.ps1
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Process artifacts
- publish: $(Pipeline.Workspace)/artifacts_processed_$(System.StageAttempt)/artifacts_processed_$(System.StageAttempt).txt
artifact: artifacts_processed_$(System.StageAttempt)
displayName: Publish what artifacts were published for this stage attempt
- pwsh: |
$ErrorActionPreference = 'Stop'
# Determine which stages we need to watch
$stages = @(
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
)
Write-Host "Stages to check: $stages"
# Get the timeline and see if it says the other stage completed
$timeline = Invoke-RestMethod "$($env:BUILDS_API_URL)timeline?api-version=6.0" -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -MaximumRetryCount 5 -RetryIntervalSec 1
$failedStages = @()
foreach ($stage in $stages) {
$didStageFail = $timeline.records | Where-Object {
$_.name -eq $stage -and $_.type -eq 'stage' -and $_.result -ne 'succeeded' -and $_.result -ne 'succeededWithIssues'
}
if($didStageFail) {
$failedStages += $stage
} else {
Write-Host "'$stage' did not fail."
}
}
if ($failedStages.Length) {
throw "Failed stages: $($failedStages -join ', '). This stage will now fail so that it is easier to retry failed jobs."
}
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Determine if stage should succeed

View File

@ -1,24 +0,0 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "14.x"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode
- script: |
set -e
(cd build ; yarn)
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
MOONCAKE_STORAGE_ACCESS_KEY="$(vscode-mooncake-storage-key)" \
node build/azure-pipelines/common/sync-mooncake.js "$VSCODE_QUALITY"

View File

@ -119,13 +119,19 @@ steps:
- script: | - script: |
set -e set -e
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ REPO="$(pwd)"
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ ROOT="$REPO/.."
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
./build/azure-pipelines/web/publish.sh WEB_BUILD_NAME="vscode-web"
displayName: Publish WEB_TARBALL_FILENAME="vscode-web.tar.gz"
WEB_TARBALL_PATH="$ROOT/$WEB_TARBALL_FILENAME"
rm -rf $ROOT/vscode-web.tar.*
cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME
displayName: Prepare for publish
- publish: $(Agent.BuildDirectory)/vscode-web.tar.gz - publish: $(Agent.BuildDirectory)/vscode-web.tar.gz
artifact: vscode-web-standalone artifact: vscode_web_linux_standalone_archive-unsigned
displayName: Publish web archive displayName: Publish web archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))

View File

@ -1,15 +0,0 @@
#!/usr/bin/env bash
set -e
REPO="$(pwd)"
ROOT="$REPO/.."
# Publish Web Client
WEB_BUILD_NAME="vscode-web"
WEB_TARBALL_FILENAME="vscode-web.tar.gz"
WEB_TARBALL_PATH="$ROOT/$WEB_TARBALL_FILENAME"
rm -rf $ROOT/vscode-web.tar.*
(cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME)
node build/azure-pipelines/common/createAsset.js web-standalone archive-unsigned "$WEB_TARBALL_FILENAME" "$WEB_TARBALL_PATH"

View File

@ -13,24 +13,31 @@ $Zip = "$Repo\.build\win32-$Arch\archive\VSCode-win32-$Arch.zip"
$LegacyServer = "$Root\vscode-reh-win32-$Arch" $LegacyServer = "$Root\vscode-reh-win32-$Arch"
$Server = "$Root\vscode-server-win32-$Arch" $Server = "$Root\vscode-server-win32-$Arch"
$ServerZip = "$Repo\.build\vscode-server-win32-$Arch.zip" $ServerZip = "$Repo\.build\vscode-server-win32-$Arch.zip"
$LegacyWeb = "$Root\vscode-reh-web-win32-$Arch"
$Web = "$Root\vscode-server-win32-$Arch-web"
$WebZip = "$Repo\.build\vscode-server-win32-$Arch-web.zip"
$Build = "$Root\VSCode-win32-$Arch" $Build = "$Root\VSCode-win32-$Arch"
# Create server archive # Create server archive
if ("$Arch" -ne "arm64") { if ("$Arch" -ne "arm64") {
exec { xcopy $LegacyServer $Server /H /E /I } exec { xcopy $LegacyServer $Server /H /E /I }
exec { .\node_modules\7zip\7zip-lite\7z.exe a -tzip $ServerZip $Server -r } exec { .\node_modules\7zip\7zip-lite\7z.exe a -tzip $ServerZip $Server -r }
exec { xcopy $LegacyWeb $Web /H /E /I }
exec { .\node_modules\7zip\7zip-lite\7z.exe a -tzip $WebZip $Web -r }
} }
# get version # get version
$PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json $PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json
$Version = $PackageJson.version $Version = $PackageJson.version
$AssetPlatform = if ("$Arch" -eq "ia32") { "win32" } else { "win32-$Arch" } $ARCHIVE_NAME = "VSCode-win32-$Arch-$Version.zip"
$SYSTEM_SETUP_NAME = "VSCodeSetup-$Arch-$Version.exe"
$USER_SETUP_NAME = "VSCodeUserSetup-$Arch-$Version.exe"
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform-archive" archive "VSCode-win32-$Arch-$Version.zip" $Zip } # Set variables for upload
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform" setup "VSCodeSetup-$Arch-$Version.exe" $SystemExe } Move-Item $Zip "$Repo\.build\win32-$Arch\archive\$ARCHIVE_NAME"
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform-user" setup "VSCodeUserSetup-$Arch-$Version.exe" $UserExe } Write-Host "##vso[task.setvariable variable=ARCHIVE_NAME]$ARCHIVE_NAME"
Move-Item $SystemExe "$Repo\.build\win32-$Arch\system-setup\$SYSTEM_SETUP_NAME"
if ("$Arch" -ne "arm64") { Write-Host "##vso[task.setvariable variable=SYSTEM_SETUP_NAME]$SYSTEM_SETUP_NAME"
exec { node build/azure-pipelines/common/createAsset.js "server-$AssetPlatform" archive "vscode-server-win32-$Arch.zip" $ServerZip } Move-Item $UserExe "$Repo\.build\win32-$Arch\user-setup\$USER_SETUP_NAME"
} Write-Host "##vso[task.setvariable variable=USER_SETUP_NAME]$USER_SETUP_NAME"

View File

@ -295,31 +295,31 @@ steps:
$env:AZURE_STORAGE_ACCESS_KEY_2 = "$(vscode-storage-key)" $env:AZURE_STORAGE_ACCESS_KEY_2 = "$(vscode-storage-key)"
$env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)" $env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)"
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
.\build\azure-pipelines\win32\publish.ps1 .\build\azure-pipelines\win32\prepare-publish.ps1
displayName: Publish displayName: Publish
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\VSCode-win32-$(VSCODE_ARCH).zip - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
artifact: vscode-win32-$(VSCODE_ARCH) artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
displayName: Publish archive displayName: Publish archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\VSCodeSetup.exe - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
artifact: vscode-win32-$(VSCODE_ARCH)-setup artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
displayName: Publish system setup displayName: Publish system setup
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\VSCodeSetup.exe - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME)
artifact: vscode-win32-$(VSCODE_ARCH)-user-setup artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup
displayName: Publish user setup displayName: Publish user setup
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip - publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip
artifact: vscode-server-win32-$(VSCODE_ARCH) artifact: vscode_server_win32_$(VSCODE_ARCH)_archive
displayName: Publish server archive displayName: Publish server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip - publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip
artifact: vscode-server-win32-$(VSCODE_ARCH)-web artifact: vscode_web_win32_$(VSCODE_ARCH)_archive
displayName: Publish web server archive displayName: Publish web server archive
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64')) condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))

View File

@ -33,7 +33,7 @@ async function main() {
'Credits.rtf', 'Credits.rtf',
'CodeResources', 'CodeResources',
'fsevents.node', 'fsevents.node',
'Info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds 'Info.plist',
'.npmrc' '.npmrc'
], ],
outAppPath, outAppPath,

View File

@ -8,7 +8,6 @@ require('events').EventEmitter.defaultMaxListeners = 100;
const gulp = require('gulp'); const gulp = require('gulp');
const path = require('path'); const path = require('path');
const child_process = require('child_process');
const nodeUtil = require('util'); const nodeUtil = require('util');
const es = require('event-stream'); const es = require('event-stream');
const filter = require('gulp-filter'); const filter = require('gulp-filter');
@ -20,8 +19,6 @@ const glob = require('glob');
const root = path.dirname(__dirname); const root = path.dirname(__dirname);
const commit = util.getVersion(root); const commit = util.getVersion(root);
const plumber = require('gulp-plumber'); const plumber = require('gulp-plumber');
const fancyLog = require('fancy-log');
const ansiColors = require('ansi-colors');
const ext = require('./lib/extensions'); const ext = require('./lib/extensions');
const extensionsPath = path.join(path.dirname(__dirname), 'extensions'); const extensionsPath = path.join(path.dirname(__dirname), 'extensions');
@ -201,45 +198,17 @@ gulp.task(compileExtensionsBuildLegacyTask);
//#region Extension media //#region Extension media
// Additional projects to webpack. These typically build code for webviews const compileExtensionMediaTask = task.define('compile-extension-media', () => ext.buildExtensionMedia(false));
const webpackMediaConfigFiles = [
'markdown-language-features/webpack.config.js',
'simple-browser/webpack.config.js',
];
// Additional projects to run esbuild on. These typically build code for webviews
const esbuildMediaScripts = [
'markdown-language-features/esbuild.js',
'notebook-markdown-extensions/esbuild.js',
];
const compileExtensionMediaTask = task.define('compile-extension-media', () => buildExtensionMedia(false));
gulp.task(compileExtensionMediaTask); gulp.task(compileExtensionMediaTask);
exports.compileExtensionMediaTask = compileExtensionMediaTask; exports.compileExtensionMediaTask = compileExtensionMediaTask;
const watchExtensionMedia = task.define('watch-extension-media', () => buildExtensionMedia(true)); const watchExtensionMedia = task.define('watch-extension-media', () => ext.buildExtensionMedia(true));
gulp.task(watchExtensionMedia); gulp.task(watchExtensionMedia);
exports.watchExtensionMedia = watchExtensionMedia; exports.watchExtensionMedia = watchExtensionMedia;
const compileExtensionMediaBuildTask = task.define('compile-extension-media-build', () => buildExtensionMedia(false, '.build/extensions')); const compileExtensionMediaBuildTask = task.define('compile-extension-media-build', () => ext.buildExtensionMedia(false, '.build/extensions'));
gulp.task(compileExtensionMediaBuildTask); gulp.task(compileExtensionMediaBuildTask);
async function buildExtensionMedia(isWatch, outputRoot) {
const webpackConfigLocations = webpackMediaConfigFiles.map(p => {
return {
configPath: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
};
});
return Promise.all([
webpackExtensions('webpacking extension media', isWatch, webpackConfigLocations),
esbuildExtensions('esbuilding extension media', isWatch, esbuildMediaScripts.map(p => ({
script: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
}))),
]);
}
//#endregion //#endregion
//#region Azure Pipelines //#region Azure Pipelines
@ -271,121 +240,5 @@ async function buildWebExtensions(isWatch) {
path.join(extensionsPath, '**', 'extension-browser.webpack.config.js'), path.join(extensionsPath, '**', 'extension-browser.webpack.config.js'),
{ ignore: ['**/node_modules'] } { ignore: ['**/node_modules'] }
); );
return webpackExtensions('packaging web extension', isWatch, webpackConfigLocations.map(configPath => ({ configPath }))); return ext.webpackExtensions('packaging web extension', isWatch, webpackConfigLocations.map(configPath => ({ configPath })));
}
/**
* @param {string} taskName
* @param {boolean} isWatch
* @param {{ configPath: string, outputRoot?: boolean}} webpackConfigLocations
*/
async function webpackExtensions(taskName, isWatch, webpackConfigLocations) {
const webpack = require('webpack');
const webpackConfigs = [];
for (const { configPath, outputRoot } of webpackConfigLocations) {
const configOrFnOrArray = require(configPath);
function addConfig(configOrFn) {
let config;
if (typeof configOrFn === 'function') {
config = configOrFn({}, {});
webpackConfigs.push(config);
} else {
config = configOrFn;
}
if (outputRoot) {
config.output.path = path.join(outputRoot, path.relative(path.dirname(configPath), config.output.path));
}
webpackConfigs.push(configOrFn);
}
addConfig(configOrFnOrArray);
}
function reporter(fullStats) {
if (Array.isArray(fullStats.children)) {
for (const stats of fullStats.children) {
const outputPath = stats.outputPath;
if (outputPath) {
const relativePath = path.relative(extensionsPath, outputPath).replace(/\\/g, '/');
const match = relativePath.match(/[^\/]+(\/server|\/client)?/);
fancyLog(`Finished ${ansiColors.green(taskName)} ${ansiColors.cyan(match[0])} with ${stats.errors.length} errors.`);
}
if (Array.isArray(stats.errors)) {
stats.errors.forEach(error => {
fancyLog.error(error);
});
}
if (Array.isArray(stats.warnings)) {
stats.warnings.forEach(warning => {
fancyLog.warn(warning);
});
}
}
}
}
return new Promise((resolve, reject) => {
if (isWatch) {
webpack(webpackConfigs).watch({}, (err, stats) => {
if (err) {
reject();
} else {
reporter(stats.toJson());
}
});
} else {
webpack(webpackConfigs).run((err, stats) => {
if (err) {
fancyLog.error(err);
reject();
} else {
reporter(stats.toJson());
resolve();
}
});
}
});
}
/**
* @param {string} taskName
* @param {boolean} isWatch
* @param {{ script: string, outputRoot?: string }}} scripts
*/
async function esbuildExtensions(taskName, isWatch, scripts) {
function reporter(/** @type {string} */ stdError, /** @type {string} */script) {
const matches = (stdError || '').match(/\> (.+): error: (.+)?/g);
fancyLog(`Finished ${ansiColors.green(taskName)} ${script} with ${matches ? matches.length : 0} errors.`);
for (const match of matches || []) {
fancyLog.error(match);
}
}
const tasks = scripts.map(({ script, outputRoot }) => {
return new Promise((resolve, reject) => {
const args = [script];
if (isWatch) {
args.push('--watch');
}
if (outputRoot) {
args.push('--outputRoot', outputRoot);
}
const proc = child_process.execFile(process.argv[0], args, {}, (error, _stdout, stderr) => {
if (error) {
return reject(error);
}
reporter(stderr, script);
if (stderr) {
return reject();
}
return resolve();
});
proc.stdout.on('data', (data) => {
fancyLog(`${ansiColors.green(taskName)}: ${data.toString('utf8')}`);
});
});
});
return Promise.all(tasks);
} }

View File

@ -42,6 +42,7 @@ BUILD_TARGETS.forEach(({ platform, arch }) => {
}); });
function getNodeVersion() { function getNodeVersion() {
// NOTE@coder: Fix version due to .yarnrc removal.
return process.versions.node; return process.versions.node;
const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8'); const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');
const target = /^target "(.*)"$/m.exec(yarnrc)[1]; const target = /^target "(.*)"$/m.exec(yarnrc)[1];

View File

@ -228,7 +228,14 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
.pipe(jsFilter) .pipe(jsFilter)
.pipe(util.rewriteSourceMappingURL(sourceMappingURLBase)) .pipe(util.rewriteSourceMappingURL(sourceMappingURLBase))
.pipe(jsFilter.restore) .pipe(jsFilter.restore)
.pipe(createAsar(path.join(process.cwd(), 'node_modules'), ['**/*.node', '**/vscode-ripgrep/bin/*', '**/node-pty/build/Release/*', '**/*.wasm'], 'node_modules.asar')); .pipe(createAsar(path.join(process.cwd(), 'node_modules'), [
'**/*.node',
'**/vscode-ripgrep/bin/*',
'**/node-pty/build/Release/*',
'**/node-pty/lib/worker/conoutSocketWorker.js',
'**/node-pty/lib/shared/conout.js',
'**/*.wasm'
], 'node_modules.asar'));
let all = es.merge( let all = es.merge(
packageJsonStream, packageJsonStream,
@ -383,8 +390,6 @@ BUILD_TARGETS.forEach(buildTarget => {
} }
}); });
// Transifex Localizations
const innoSetupConfig = { const innoSetupConfig = {
'zh-cn': { codePage: 'CP936', defaultInfo: { name: 'Simplified Chinese', id: '$0804', } }, 'zh-cn': { codePage: 'CP936', defaultInfo: { name: 'Simplified Chinese', id: '$0804', } },
'zh-tw': { codePage: 'CP950', defaultInfo: { name: 'Traditional Chinese', id: '$0404' } }, 'zh-tw': { codePage: 'CP950', defaultInfo: { name: 'Traditional Chinese', id: '$0404' } },
@ -400,6 +405,8 @@ const innoSetupConfig = {
'tr': { codePage: 'CP1254' } 'tr': { codePage: 'CP1254' }
}; };
// Transifex Localizations
const apiHostname = process.env.TRANSIFEX_API_URL; const apiHostname = process.env.TRANSIFEX_API_URL;
const apiName = process.env.TRANSIFEX_API_NAME; const apiName = process.env.TRANSIFEX_API_NAME;
const apiToken = process.env.TRANSIFEX_API_TOKEN; const apiToken = process.env.TRANSIFEX_API_TOKEN;
@ -434,7 +441,7 @@ gulp.task(task.define(
function () { function () {
const pathToMetadata = './out-vscode/nls.metadata.json'; const pathToMetadata = './out-vscode/nls.metadata.json';
const pathToExtensions = '.build/extensions/*'; const pathToExtensions = '.build/extensions/*';
const pathToSetup = 'build/win32/**/{Default.isl,messages.en.isl}'; const pathToSetup = 'build/win32/i18n/messages.en.isl';
return es.merge( return es.merge(
gulp.src(pathToMetadata).pipe(i18n.createXlfFilesForCoreBundle()), gulp.src(pathToMetadata).pipe(i18n.createXlfFilesForCoreBundle()),
@ -460,8 +467,8 @@ gulp.task('vscode-translations-import', function () {
} }
}); });
return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => { return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {
let id = language.transifexId || language.id; let id = language.id;
return gulp.src(`${options.location}/${id}/setup/*/*.xlf`) return gulp.src(`${options.location}/${id}/vscode-setup/messages.xlf`)
.pipe(i18n.prepareIslFiles(language, innoSetupConfig[language.id])) .pipe(i18n.prepareIslFiles(language, innoSetupConfig[language.id]))
.pipe(vfs.dest(`./build/win32/i18n`)); .pipe(vfs.dest(`./build/win32/i18n`));
})); }));

View File

@ -18,8 +18,8 @@ const ansiColors = require("ansi-colors");
const mkdirp = require('mkdirp'); const mkdirp = require('mkdirp');
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));
const builtInExtensions = productjson.builtInExtensions; const builtInExtensions = productjson.builtInExtensions || [];
const webBuiltInExtensions = productjson.webBuiltInExtensions; const webBuiltInExtensions = productjson.webBuiltInExtensions || [];
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json'); const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');
const ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE']; const ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE'];
function log(...messages) { function log(...messages) {

View File

@ -36,8 +36,8 @@ export interface IExtensionDefinition {
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));
const builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions; const builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions || [];
const webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions; const webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions || [];
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json'); const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');
const ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE']; const ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE'];

View File

@ -12,8 +12,8 @@ const ansiColors = require("ansi-colors");
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const rootCG = path.join(root, 'extensionsCG'); const rootCG = path.join(root, 'extensionsCG');
const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));
const builtInExtensions = productjson.builtInExtensions; const builtInExtensions = productjson.builtInExtensions || [];
const webBuiltInExtensions = productjson.webBuiltInExtensions; const webBuiltInExtensions = productjson.webBuiltInExtensions || [];
const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined; const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined;
const contentBasePath = 'raw.githubusercontent.com'; const contentBasePath = 'raw.githubusercontent.com';
const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock']; const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock'];

View File

@ -13,8 +13,8 @@ import { IExtensionDefinition } from './builtInExtensions';
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const rootCG = path.join(root, 'extensionsCG'); const rootCG = path.join(root, 'extensionsCG');
const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8')); const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));
const builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions; const builtInExtensions = <IExtensionDefinition[]>productjson.builtInExtensions || [];
const webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions; const webBuiltInExtensions = <IExtensionDefinition[]>productjson.webBuiltInExtensions || [];
const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined; const token = process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined;
const contentBasePath = 'raw.githubusercontent.com'; const contentBasePath = 'raw.githubusercontent.com';

View File

@ -4,9 +4,10 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.translatePackageJSON = exports.scanBuiltinExtensions = exports.packageMarketplaceExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0; exports.buildExtensionMedia = exports.webpackExtensions = exports.translatePackageJSON = exports.scanBuiltinExtensions = exports.packageMarketplaceExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0;
const es = require("event-stream"); const es = require("event-stream");
const fs = require("fs"); const fs = require("fs");
const cp = require("child_process");
const glob = require("glob"); const glob = require("glob");
const gulp = require("gulp"); const gulp = require("gulp");
const path = require("path"); const path = require("path");
@ -328,3 +329,132 @@ function translatePackageJSON(packageJSON, packageNLSPath) {
return packageJSON; return packageJSON;
} }
exports.translatePackageJSON = translatePackageJSON; exports.translatePackageJSON = translatePackageJSON;
const extensionsPath = path.join(root, 'extensions');
// Additional projects to webpack. These typically build code for webviews
const webpackMediaConfigFiles = [
'markdown-language-features/webpack.config.js',
'simple-browser/webpack.config.js',
];
// Additional projects to run esbuild on. These typically build code for webviews
const esbuildMediaScripts = [
'markdown-language-features/esbuild.js',
'notebook-markdown-extensions/esbuild.js',
];
async function webpackExtensions(taskName, isWatch, webpackConfigLocations) {
const webpack = require('webpack');
const webpackConfigs = [];
for (const { configPath, outputRoot } of webpackConfigLocations) {
const configOrFnOrArray = require(configPath);
function addConfig(configOrFn) {
let config;
if (typeof configOrFn === 'function') {
config = configOrFn({}, {});
webpackConfigs.push(config);
}
else {
config = configOrFn;
}
if (outputRoot) {
config.output.path = path.join(outputRoot, path.relative(path.dirname(configPath), config.output.path));
}
webpackConfigs.push(configOrFn);
}
addConfig(configOrFnOrArray);
}
function reporter(fullStats) {
if (Array.isArray(fullStats.children)) {
for (const stats of fullStats.children) {
const outputPath = stats.outputPath;
if (outputPath) {
const relativePath = path.relative(extensionsPath, outputPath).replace(/\\/g, '/');
const match = relativePath.match(/[^\/]+(\/server|\/client)?/);
fancyLog(`Finished ${ansiColors.green(taskName)} ${ansiColors.cyan(match[0])} with ${stats.errors.length} errors.`);
}
if (Array.isArray(stats.errors)) {
stats.errors.forEach((error) => {
fancyLog.error(error);
});
}
if (Array.isArray(stats.warnings)) {
stats.warnings.forEach((warning) => {
fancyLog.warn(warning);
});
}
}
}
}
return new Promise((resolve, reject) => {
if (isWatch) {
webpack(webpackConfigs).watch({}, (err, stats) => {
if (err) {
reject();
}
else {
reporter(stats.toJson());
}
});
}
else {
webpack(webpackConfigs).run((err, stats) => {
if (err) {
fancyLog.error(err);
reject();
}
else {
reporter(stats.toJson());
resolve();
}
});
}
});
}
exports.webpackExtensions = webpackExtensions;
async function esbuildExtensions(taskName, isWatch, scripts) {
function reporter(stdError, script) {
const matches = (stdError || '').match(/\> (.+): error: (.+)?/g);
fancyLog(`Finished ${ansiColors.green(taskName)} ${script} with ${matches ? matches.length : 0} errors.`);
for (const match of matches || []) {
fancyLog.error(match);
}
}
const tasks = scripts.map(({ script, outputRoot }) => {
return new Promise((resolve, reject) => {
const args = [script];
if (isWatch) {
args.push('--watch');
}
if (outputRoot) {
args.push('--outputRoot', outputRoot);
}
const proc = cp.execFile(process.argv[0], args, {}, (error, _stdout, stderr) => {
if (error) {
return reject(error);
}
reporter(stderr, script);
if (stderr) {
return reject();
}
return resolve();
});
proc.stdout.on('data', (data) => {
fancyLog(`${ansiColors.green(taskName)}: ${data.toString('utf8')}`);
});
});
});
return Promise.all(tasks);
}
async function buildExtensionMedia(isWatch, outputRoot) {
return Promise.all([
webpackExtensions('webpacking extension media', isWatch, webpackMediaConfigFiles.map(p => {
return {
configPath: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
};
})),
esbuildExtensions('esbuilding extension media', isWatch, esbuildMediaScripts.map(p => ({
script: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
}))),
]);
}
exports.buildExtensionMedia = buildExtensionMedia;

View File

@ -5,6 +5,7 @@
import * as es from 'event-stream'; import * as es from 'event-stream';
import * as fs from 'fs'; import * as fs from 'fs';
import * as cp from 'child_process';
import * as glob from 'glob'; import * as glob from 'glob';
import * as gulp from 'gulp'; import * as gulp from 'gulp';
import * as path from 'path'; import * as path from 'path';
@ -19,6 +20,7 @@ import * as fancyLog from 'fancy-log';
import * as ansiColors from 'ansi-colors'; import * as ansiColors from 'ansi-colors';
const buffer = require('gulp-buffer'); const buffer = require('gulp-buffer');
import * as jsoncParser from 'jsonc-parser'; import * as jsoncParser from 'jsonc-parser';
import webpack = require('webpack');
const util = require('./util'); const util = require('./util');
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root); const commit = util.getVersion(root);
@ -403,3 +405,138 @@ export function translatePackageJSON(packageJSON: string, packageNLSPath: string
translate(packageJSON); translate(packageJSON);
return packageJSON; return packageJSON;
} }
const extensionsPath = path.join(root, 'extensions');
// Additional projects to webpack. These typically build code for webviews
const webpackMediaConfigFiles = [
'markdown-language-features/webpack.config.js',
'simple-browser/webpack.config.js',
];
// Additional projects to run esbuild on. These typically build code for webviews
const esbuildMediaScripts = [
'markdown-language-features/esbuild.js',
'notebook-markdown-extensions/esbuild.js',
];
export async function webpackExtensions(taskName: string, isWatch: boolean, webpackConfigLocations: { configPath: string, outputRoot?: string }[]) {
const webpack = require('webpack') as typeof import('webpack');
const webpackConfigs: webpack.Configuration[] = [];
for (const { configPath, outputRoot } of webpackConfigLocations) {
const configOrFnOrArray = require(configPath);
function addConfig(configOrFn: webpack.Configuration | Function) {
let config;
if (typeof configOrFn === 'function') {
config = configOrFn({}, {});
webpackConfigs.push(config);
} else {
config = configOrFn;
}
if (outputRoot) {
config.output.path = path.join(outputRoot, path.relative(path.dirname(configPath), config.output.path));
}
webpackConfigs.push(configOrFn);
}
addConfig(configOrFnOrArray);
}
function reporter(fullStats: any) {
if (Array.isArray(fullStats.children)) {
for (const stats of fullStats.children) {
const outputPath = stats.outputPath;
if (outputPath) {
const relativePath = path.relative(extensionsPath, outputPath).replace(/\\/g, '/');
const match = relativePath.match(/[^\/]+(\/server|\/client)?/);
fancyLog(`Finished ${ansiColors.green(taskName)} ${ansiColors.cyan(match![0])} with ${stats.errors.length} errors.`);
}
if (Array.isArray(stats.errors)) {
stats.errors.forEach((error: any) => {
fancyLog.error(error);
});
}
if (Array.isArray(stats.warnings)) {
stats.warnings.forEach((warning: any) => {
fancyLog.warn(warning);
});
}
}
}
}
return new Promise<void>((resolve, reject) => {
if (isWatch) {
webpack(webpackConfigs).watch({}, (err, stats) => {
if (err) {
reject();
} else {
reporter(stats.toJson());
}
});
} else {
webpack(webpackConfigs).run((err, stats) => {
if (err) {
fancyLog.error(err);
reject();
} else {
reporter(stats.toJson());
resolve();
}
});
}
});
}
async function esbuildExtensions(taskName: string, isWatch: boolean, scripts: { script: string, outputRoot?: string }[]) {
function reporter(stdError: string, script: string) {
const matches = (stdError || '').match(/\> (.+): error: (.+)?/g);
fancyLog(`Finished ${ansiColors.green(taskName)} ${script} with ${matches ? matches.length : 0} errors.`);
for (const match of matches || []) {
fancyLog.error(match);
}
}
const tasks = scripts.map(({ script, outputRoot }) => {
return new Promise<void>((resolve, reject) => {
const args = [script];
if (isWatch) {
args.push('--watch');
}
if (outputRoot) {
args.push('--outputRoot', outputRoot);
}
const proc = cp.execFile(process.argv[0], args, {}, (error, _stdout, stderr) => {
if (error) {
return reject(error);
}
reporter(stderr, script);
if (stderr) {
return reject();
}
return resolve();
});
proc.stdout!.on('data', (data) => {
fancyLog(`${ansiColors.green(taskName)}: ${data.toString('utf8')}`);
});
});
});
return Promise.all(tasks);
}
export async function buildExtensionMedia(isWatch: boolean, outputRoot?: string) {
return Promise.all([
webpackExtensions('webpacking extension media', isWatch, webpackMediaConfigFiles.map(p => {
return {
configPath: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
};
})),
esbuildExtensions('esbuilding extension media', isWatch, esbuildMediaScripts.map(p => ({
script: path.join(extensionsPath, p),
outputRoot: outputRoot ? path.join(root, outputRoot, path.dirname(p)) : undefined
}))),
]);
}

View File

@ -4,14 +4,13 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.prepareIslFiles = exports.prepareI18nPackFiles = exports.pullI18nPackFiles = exports.prepareI18nFiles = exports.pullSetupXlfFiles = exports.pullCoreAndExtensionsXlfFiles = exports.findObsoleteResources = exports.pushXlfFiles = exports.createXlfFilesForIsl = exports.createXlfFilesForExtensions = exports.createXlfFilesForCoreBundle = exports.getResource = exports.processNlsFiles = exports.Limiter = exports.XLF = exports.Line = exports.externalExtensionsWithTranslations = exports.extraLanguages = exports.defaultLanguages = void 0; exports.prepareIslFiles = exports.prepareI18nPackFiles = exports.prepareI18nFiles = exports.pullSetupXlfFiles = exports.findObsoleteResources = exports.pushXlfFiles = exports.createXlfFilesForIsl = exports.createXlfFilesForExtensions = exports.createXlfFilesForCoreBundle = exports.getResource = exports.processNlsFiles = exports.Limiter = exports.XLF = exports.Line = exports.externalExtensionsWithTranslations = exports.extraLanguages = exports.defaultLanguages = void 0;
const path = require("path"); const path = require("path");
const fs = require("fs"); const fs = require("fs");
const event_stream_1 = require("event-stream"); const event_stream_1 = require("event-stream");
const File = require("vinyl"); const File = require("vinyl");
const Is = require("is"); const Is = require("is");
const xml2js = require("xml2js"); const xml2js = require("xml2js");
const glob = require("glob");
const https = require("https"); const https = require("https");
const gulp = require("gulp"); const gulp = require("gulp");
const fancyLog = require("fancy-log"); const fancyLog = require("fancy-log");
@ -110,12 +109,16 @@ class XLF {
} }
toString() { toString() {
this.appendHeader(); this.appendHeader();
for (let file in this.files) { const files = Object.keys(this.files).sort();
for (const file of files) {
this.appendNewLine(`<file original="${file}" source-language="en" datatype="plaintext"><body>`, 2); this.appendNewLine(`<file original="${file}" source-language="en" datatype="plaintext"><body>`, 2);
for (let item of this.files[file]) { const items = this.files[file].sort((a, b) => {
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
});
for (const item of items) {
this.addStringItem(file, item); this.addStringItem(file, item);
} }
this.appendNewLine('</body></file>', 2); this.appendNewLine('</body></file>');
} }
this.appendFooter(); this.appendFooter();
return this.buffer.join('\r\n'); return this.buffer.join('\r\n');
@ -645,13 +648,12 @@ exports.createXlfFilesForExtensions = createXlfFilesForExtensions;
function createXlfFilesForIsl() { function createXlfFilesForIsl() {
return event_stream_1.through(function (file) { return event_stream_1.through(function (file) {
let projectName, resourceFile; let projectName, resourceFile;
if (path.basename(file.path) === 'Default.isl') { if (path.basename(file.path) === 'messages.en.isl') {
projectName = setupProject; projectName = setupProject;
resourceFile = 'setup_default.xlf'; resourceFile = 'messages.xlf';
} }
else { else {
projectName = workbenchProject; throw new Error(`Unknown input file ${file.path}`);
resourceFile = 'setup_messages.xlf';
} }
let xlf = new XLF(projectName), keys = [], messages = []; let xlf = new XLF(projectName), keys = [], messages = [];
let model = new TextModel(file.contents.toString()); let model = new TextModel(file.contents.toString());
@ -899,31 +901,6 @@ function updateResource(project, slug, xlfFile, apiHostname, credentials) {
request.end(); request.end();
}); });
} }
// cache resources
let _coreAndExtensionResources;
function pullCoreAndExtensionsXlfFiles(apiHostname, username, password, language, externalExtensions) {
if (!_coreAndExtensionResources) {
_coreAndExtensionResources = [];
// editor and workbench
const json = JSON.parse(fs.readFileSync('./build/lib/i18n.resources.json', 'utf8'));
_coreAndExtensionResources.push(...json.editor);
_coreAndExtensionResources.push(...json.workbench);
// extensions
let extensionsToLocalize = Object.create(null);
glob.sync('.build/extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
Object.keys(extensionsToLocalize).forEach(extension => {
_coreAndExtensionResources.push({ name: extension, project: extensionsProject });
});
if (externalExtensions) {
for (let resourceName in externalExtensions) {
_coreAndExtensionResources.push({ name: resourceName, project: extensionsProject });
}
}
}
return pullXlfFiles(apiHostname, username, password, language, _coreAndExtensionResources);
}
exports.pullCoreAndExtensionsXlfFiles = pullCoreAndExtensionsXlfFiles;
function pullSetupXlfFiles(apiHostname, username, password, language, includeDefault) { function pullSetupXlfFiles(apiHostname, username, password, language, includeDefault) {
let setupResources = [{ name: 'setup_messages', project: workbenchProject }]; let setupResources = [{ name: 'setup_messages', project: workbenchProject }];
if (includeDefault) { if (includeDefault) {
@ -1033,20 +1010,16 @@ function createI18nFile(originalFilePath, messages) {
}); });
} }
const i18nPackVersion = '1.0.0'; const i18nPackVersion = '1.0.0';
function pullI18nPackFiles(apiHostname, username, password, language, resultingTranslationPaths) {
return pullCoreAndExtensionsXlfFiles(apiHostname, username, password, language, exports.externalExtensionsWithTranslations)
.pipe(prepareI18nPackFiles(exports.externalExtensionsWithTranslations, resultingTranslationPaths, language.id === 'ps'));
}
exports.pullI18nPackFiles = pullI18nPackFiles;
function prepareI18nPackFiles(externalExtensions, resultingTranslationPaths, pseudo = false) { function prepareI18nPackFiles(externalExtensions, resultingTranslationPaths, pseudo = false) {
let parsePromises = []; let parsePromises = [];
let mainPack = { version: i18nPackVersion, contents: {} }; let mainPack = { version: i18nPackVersion, contents: {} };
let extensionsPacks = {}; let extensionsPacks = {};
let errors = []; let errors = [];
return event_stream_1.through(function (xlf) { return event_stream_1.through(function (xlf) {
let project = path.basename(path.dirname(xlf.relative)); let project = path.basename(path.dirname(path.dirname(xlf.relative)));
let resource = path.basename(xlf.relative, '.xlf'); let resource = path.basename(xlf.relative, '.xlf');
let contents = xlf.contents.toString(); let contents = xlf.contents.toString();
log(`Found ${project}: ${resource}`);
let parsePromise = pseudo ? XLF.parsePseudo(contents) : XLF.parse(contents); let parsePromise = pseudo ? XLF.parsePseudo(contents) : XLF.parse(contents);
parsePromises.push(parsePromise); parsePromises.push(parsePromise);
parsePromise.then(resolvedFiles => { parsePromise.then(resolvedFiles => {
@ -1110,9 +1083,6 @@ function prepareIslFiles(language, innoSetupConfig) {
parsePromises.push(parsePromise); parsePromises.push(parsePromise);
parsePromise.then(resolvedFiles => { parsePromise.then(resolvedFiles => {
resolvedFiles.forEach(file => { resolvedFiles.forEach(file => {
if (path.basename(file.originalFilePath) === 'Default' && !innoSetupConfig.defaultInfo) {
return;
}
let translatedFile = createIslFile(file.originalFilePath, file.messages, language, innoSetupConfig); let translatedFile = createIslFile(file.originalFilePath, file.messages, language, innoSetupConfig);
stream.queue(translatedFile); stream.queue(translatedFile);
}); });
@ -1148,22 +1118,11 @@ function createIslFile(originalFilePath, messages, language, innoSetup) {
let key = sections[0]; let key = sections[0];
let translated = line; let translated = line;
if (key) { if (key) {
if (key === 'LanguageName') {
translated = `${key}=${innoSetup.defaultInfo.name}`;
}
else if (key === 'LanguageID') {
translated = `${key}=${innoSetup.defaultInfo.id}`;
}
else if (key === 'LanguageCodePage') {
translated = `${key}=${innoSetup.codePage.substr(2)}`;
}
else {
let translatedMessage = messages[key]; let translatedMessage = messages[key];
if (translatedMessage) { if (translatedMessage) {
translated = `${key}=${translatedMessage}`; translated = `${key}=${translatedMessage}`;
} }
} }
}
content.push(translated); content.push(translated);
} }
} }

View File

@ -10,7 +10,6 @@ import { through, readable, ThroughStream } from 'event-stream';
import * as File from 'vinyl'; import * as File from 'vinyl';
import * as Is from 'is'; import * as Is from 'is';
import * as xml2js from 'xml2js'; import * as xml2js from 'xml2js';
import * as glob from 'glob';
import * as https from 'https'; import * as https from 'https';
import * as gulp from 'gulp'; import * as gulp from 'gulp';
import * as fancyLog from 'fancy-log'; import * as fancyLog from 'fancy-log';
@ -31,10 +30,6 @@ export interface Language {
export interface InnoSetup { export interface InnoSetup {
codePage: string; //code page for encoding (http://www.jrsoftware.org/ishelp/index.php?topic=langoptionssection) codePage: string; //code page for encoding (http://www.jrsoftware.org/ishelp/index.php?topic=langoptionssection)
defaultInfo?: {
name: string; // inno setup language name
id: string; // locale identifier (https://msdn.microsoft.com/en-us/library/dd318693.aspx)
};
} }
export const defaultLanguages: Language[] = [ export const defaultLanguages: Language[] = [
@ -198,14 +193,17 @@ export class XLF {
public toString(): string { public toString(): string {
this.appendHeader(); this.appendHeader();
for (let file in this.files) { const files = Object.keys(this.files).sort();
for (const file of files) {
this.appendNewLine(`<file original="${file}" source-language="en" datatype="plaintext"><body>`, 2); this.appendNewLine(`<file original="${file}" source-language="en" datatype="plaintext"><body>`, 2);
for (let item of this.files[file]) { const items = this.files[file].sort((a: Item, b: Item) => {
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
});
for (const item of items) {
this.addStringItem(file, item); this.addStringItem(file, item);
} }
this.appendNewLine('</body></file>', 2); this.appendNewLine('</body></file>');
} }
this.appendFooter(); this.appendFooter();
return this.buffer.join('\r\n'); return this.buffer.join('\r\n');
} }
@ -763,12 +761,11 @@ export function createXlfFilesForIsl(): ThroughStream {
return through(function (this: ThroughStream, file: File) { return through(function (this: ThroughStream, file: File) {
let projectName: string, let projectName: string,
resourceFile: string; resourceFile: string;
if (path.basename(file.path) === 'Default.isl') { if (path.basename(file.path) === 'messages.en.isl') {
projectName = setupProject; projectName = setupProject;
resourceFile = 'setup_default.xlf'; resourceFile = 'messages.xlf';
} else { } else {
projectName = workbenchProject; throw new Error(`Unknown input file ${file.path}`);
resourceFile = 'setup_messages.xlf';
} }
let xlf = new XLF(projectName), let xlf = new XLF(projectName),
@ -1036,35 +1033,6 @@ function updateResource(project: string, slug: string, xlfFile: File, apiHostnam
}); });
} }
// cache resources
let _coreAndExtensionResources: Resource[];
export function pullCoreAndExtensionsXlfFiles(apiHostname: string, username: string, password: string, language: Language, externalExtensions?: Map<string>): NodeJS.ReadableStream {
if (!_coreAndExtensionResources) {
_coreAndExtensionResources = [];
// editor and workbench
const json = JSON.parse(fs.readFileSync('./build/lib/i18n.resources.json', 'utf8'));
_coreAndExtensionResources.push(...json.editor);
_coreAndExtensionResources.push(...json.workbench);
// extensions
let extensionsToLocalize = Object.create(null);
glob.sync('.build/extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
Object.keys(extensionsToLocalize).forEach(extension => {
_coreAndExtensionResources.push({ name: extension, project: extensionsProject });
});
if (externalExtensions) {
for (let resourceName in externalExtensions) {
_coreAndExtensionResources.push({ name: resourceName, project: extensionsProject });
}
}
}
return pullXlfFiles(apiHostname, username, password, language, _coreAndExtensionResources);
}
export function pullSetupXlfFiles(apiHostname: string, username: string, password: string, language: Language, includeDefault: boolean): NodeJS.ReadableStream { export function pullSetupXlfFiles(apiHostname: string, username: string, password: string, language: Language, includeDefault: boolean): NodeJS.ReadableStream {
let setupResources = [{ name: 'setup_messages', project: workbenchProject }]; let setupResources = [{ name: 'setup_messages', project: workbenchProject }];
if (includeDefault) { if (includeDefault) {
@ -1196,20 +1164,16 @@ export interface TranslationPath {
resourceName: string; resourceName: string;
} }
export function pullI18nPackFiles(apiHostname: string, username: string, password: string, language: Language, resultingTranslationPaths: TranslationPath[]): NodeJS.ReadableStream {
return pullCoreAndExtensionsXlfFiles(apiHostname, username, password, language, externalExtensionsWithTranslations)
.pipe(prepareI18nPackFiles(externalExtensionsWithTranslations, resultingTranslationPaths, language.id === 'ps'));
}
export function prepareI18nPackFiles(externalExtensions: Map<string>, resultingTranslationPaths: TranslationPath[], pseudo = false): NodeJS.ReadWriteStream { export function prepareI18nPackFiles(externalExtensions: Map<string>, resultingTranslationPaths: TranslationPath[], pseudo = false): NodeJS.ReadWriteStream {
let parsePromises: Promise<ParsedXLF[]>[] = []; let parsePromises: Promise<ParsedXLF[]>[] = [];
let mainPack: I18nPack = { version: i18nPackVersion, contents: {} }; let mainPack: I18nPack = { version: i18nPackVersion, contents: {} };
let extensionsPacks: Map<I18nPack> = {}; let extensionsPacks: Map<I18nPack> = {};
let errors: any[] = []; let errors: any[] = [];
return through(function (this: ThroughStream, xlf: File) { return through(function (this: ThroughStream, xlf: File) {
let project = path.basename(path.dirname(xlf.relative)); let project = path.basename(path.dirname(path.dirname(xlf.relative)));
let resource = path.basename(xlf.relative, '.xlf'); let resource = path.basename(xlf.relative, '.xlf');
let contents = xlf.contents.toString(); let contents = xlf.contents.toString();
log(`Found ${project}: ${resource}`);
let parsePromise = pseudo ? XLF.parsePseudo(contents) : XLF.parse(contents); let parsePromise = pseudo ? XLF.parsePseudo(contents) : XLF.parse(contents);
parsePromises.push(parsePromise); parsePromises.push(parsePromise);
parsePromise.then( parsePromise.then(
@ -1278,9 +1242,6 @@ export function prepareIslFiles(language: Language, innoSetupConfig: InnoSetup):
parsePromise.then( parsePromise.then(
resolvedFiles => { resolvedFiles => {
resolvedFiles.forEach(file => { resolvedFiles.forEach(file => {
if (path.basename(file.originalFilePath) === 'Default' && !innoSetupConfig.defaultInfo) {
return;
}
let translatedFile = createIslFile(file.originalFilePath, file.messages, language, innoSetupConfig); let translatedFile = createIslFile(file.originalFilePath, file.messages, language, innoSetupConfig);
stream.queue(translatedFile); stream.queue(translatedFile);
}); });
@ -1315,19 +1276,11 @@ function createIslFile(originalFilePath: string, messages: Map<string>, language
let key = sections[0]; let key = sections[0];
let translated = line; let translated = line;
if (key) { if (key) {
if (key === 'LanguageName') {
translated = `${key}=${innoSetup.defaultInfo!.name}`;
} else if (key === 'LanguageID') {
translated = `${key}=${innoSetup.defaultInfo!.id}`;
} else if (key === 'LanguageCodePage') {
translated = `${key}=${innoSetup.codePage.substr(2)}`;
} else {
let translatedMessage = messages[key]; let translatedMessage = messages[key];
if (translatedMessage) { if (translatedMessage) {
translated = `${key}=${translatedMessage}`; translated = `${key}=${translatedMessage}`;
} }
} }
}
content.push(translated); content.push(translated);
} }

View File

@ -8,8 +8,8 @@ const path = require("path");
const fs = require("fs"); const fs = require("fs");
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
const yarnrcPath = path.join(root, 'remote', '.yarnrc'); const yarnrcPath = path.join(root, 'remote', '.yarnrc');
const yarnrc = fs.readFileSync(yarnrcPath, 'utf8'); // NOTE@coder: Fix version due to .yarnrc removal.
const version = /^target\s+"([^"]+)"$/m.exec(yarnrc)[1]; const version = process.versions.node;
const platform = process.platform; const platform = process.platform;
const arch = platform === 'darwin' ? 'x64' : process.arch; const arch = platform === 'darwin' ? 'x64' : process.arch;
const node = platform === 'win32' ? 'node.exe' : 'node'; const node = platform === 'win32' ? 'node.exe' : 'node';

View File

@ -6,9 +6,10 @@
import * as path from 'path'; import * as path from 'path';
const root = path.dirname(path.dirname(__dirname)); const root = path.dirname(path.dirname(__dirname));
// NOTE@coder: Fix version due to .yarnrc removal.
const version = process.versions.node; const version = process.versions.node;
const platform = process.platform; const platform = process.platform;
const arch = platform === 'darwin' ? 'x64' : process.arch; const arch = platform === 'darwin' ? 'x64' : process.arch;
const node = platform === 'win32' ? 'node.exe' : 'node'; const node = platform === 'win32' ? 'node.exe' : 'node';

View File

@ -177,7 +177,7 @@ function minifyTask(src, sourceMapBaseUrl) {
sourcemap: 'external', sourcemap: 'external',
outdir: '.', outdir: '.',
platform: 'node', platform: 'node',
target: ['node12.18'], target: ['node14.16'],
write: false write: false
}).then(res => { }).then(res => {
const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path)); const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path));

View File

@ -254,7 +254,7 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
sourcemap: 'external', sourcemap: 'external',
outdir: '.', outdir: '.',
platform: 'node', platform: 'node',
target: ['node12.18'], target: ['node14.16'],
write: false write: false
}).then(res => { }).then(res => {
const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path))!; const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path))!;

View File

@ -241,6 +241,9 @@ function nodeOrChildIsBlack(node) {
} }
return false; return false;
} }
function isSymbolWithDeclarations(symbol) {
return !!(symbol && symbol.declarations);
}
function markNodes(ts, languageService, options) { function markNodes(ts, languageService, options) {
const program = languageService.getProgram(); const program = languageService.getProgram();
if (!program) { if (!program) {
@ -413,7 +416,7 @@ function markNodes(ts, languageService, options) {
if (symbolImportNode) { if (symbolImportNode) {
setColor(symbolImportNode, 2 /* Black */); setColor(symbolImportNode, 2 /* Black */);
} }
if (symbol && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) { if (isSymbolWithDeclarations(symbol) && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {
for (let i = 0, len = symbol.declarations.length; i < len; i++) { for (let i = 0, len = symbol.declarations.length; i < len; i++) {
const declaration = symbol.declarations[i]; const declaration = symbol.declarations[i];
if (ts.isSourceFile(declaration)) { if (ts.isSourceFile(declaration)) {
@ -686,7 +689,7 @@ function getRealNodeSymbol(ts, checker, node) {
// get the aliased symbol instead. This allows for goto def on an import e.g. // get the aliased symbol instead. This allows for goto def on an import e.g.
// import {A, B} from "mod"; // import {A, B} from "mod";
// to jump to the implementation directly. // to jump to the implementation directly.
if (symbol && symbol.flags & ts.SymbolFlags.Alias && shouldSkipAlias(node, symbol.declarations[0])) { if (symbol && symbol.flags & ts.SymbolFlags.Alias && symbol.declarations && shouldSkipAlias(node, symbol.declarations[0])) {
const aliased = checker.getAliasedSymbol(symbol); const aliased = checker.getAliasedSymbol(symbol);
if (aliased.declarations) { if (aliased.declarations) {
// We should mark the import as visited // We should mark the import as visited

View File

@ -323,6 +323,10 @@ function nodeOrChildIsBlack(node: ts.Node): boolean {
return false; return false;
} }
function isSymbolWithDeclarations(symbol: ts.Symbol | undefined | null): symbol is ts.Symbol & { declarations: ts.Declaration[] } {
return !!(symbol && symbol.declarations);
}
function markNodes(ts: typeof import('typescript'), languageService: ts.LanguageService, options: ITreeShakingOptions) { function markNodes(ts: typeof import('typescript'), languageService: ts.LanguageService, options: ITreeShakingOptions) {
const program = languageService.getProgram(); const program = languageService.getProgram();
if (!program) { if (!program) {
@ -530,7 +534,7 @@ function markNodes(ts: typeof import('typescript'), languageService: ts.Language
setColor(symbolImportNode, NodeColor.Black); setColor(symbolImportNode, NodeColor.Black);
} }
if (symbol && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) { if (isSymbolWithDeclarations(symbol) && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {
for (let i = 0, len = symbol.declarations.length; i < len; i++) { for (let i = 0, len = symbol.declarations.length; i < len; i++) {
const declaration = symbol.declarations[i]; const declaration = symbol.declarations[i];
if (ts.isSourceFile(declaration)) { if (ts.isSourceFile(declaration)) {
@ -595,7 +599,7 @@ function markNodes(ts: typeof import('typescript'), languageService: ts.Language
} }
} }
function nodeIsInItsOwnDeclaration(nodeSourceFile: ts.SourceFile, node: ts.Node, symbol: ts.Symbol): boolean { function nodeIsInItsOwnDeclaration(nodeSourceFile: ts.SourceFile, node: ts.Node, symbol: ts.Symbol & { declarations: ts.Declaration[] }): boolean {
for (let i = 0, len = symbol.declarations.length; i < len; i++) { for (let i = 0, len = symbol.declarations.length; i < len; i++) {
const declaration = symbol.declarations[i]; const declaration = symbol.declarations[i];
const declarationSourceFile = declaration.getSourceFile(); const declarationSourceFile = declaration.getSourceFile();
@ -838,7 +842,7 @@ function getRealNodeSymbol(ts: typeof import('typescript'), checker: ts.TypeChec
// get the aliased symbol instead. This allows for goto def on an import e.g. // get the aliased symbol instead. This allows for goto def on an import e.g.
// import {A, B} from "mod"; // import {A, B} from "mod";
// to jump to the implementation directly. // to jump to the implementation directly.
if (symbol && symbol.flags & ts.SymbolFlags.Alias && shouldSkipAlias(node, symbol.declarations[0])) { if (symbol && symbol.flags & ts.SymbolFlags.Alias && symbol.declarations && shouldSkipAlias(node, symbol.declarations[0])) {
const aliased = checker.getAliasedSymbol(symbol); const aliased = checker.getAliasedSymbol(symbol);
if (aliased.declarations) { if (aliased.declarations) {
// We should mark the import as visited // We should mark the import as visited

View File

@ -269,6 +269,8 @@ function streamToPromise(stream) {
} }
exports.streamToPromise = streamToPromise; exports.streamToPromise = streamToPromise;
function getElectronVersion() { function getElectronVersion() {
// NOTE@coder: Fix version due to .yarnrc removal.
return process.versions.node;
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
const target = /^target "(.*)"$/m.exec(yarnrc)[1]; const target = /^target "(.*)"$/m.exec(yarnrc)[1];
return target; return target;

View File

@ -336,8 +336,6 @@ export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise<void> {
} }
export function getElectronVersion(): string { export function getElectronVersion(): string {
// NOTE@coder: Fix version due to .yarnrc removal.
return process.versions.node; return process.versions.node;
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
const target = /^target "(.*)"$/m.exec(yarnrc)![1];
return target;
} }

View File

@ -20,19 +20,12 @@ function update(options) {
if (!idOrPath) { if (!idOrPath) {
throw new Error('Argument must be the location of the localization extension.'); throw new Error('Argument must be the location of the localization extension.');
} }
let transifex = options.transifex;
let location = options.location; let location = options.location;
if (transifex === true && location !== undefined) {
throw new Error('Either --transifex or --location can be specified, but not both.');
}
if (!transifex && !location) {
transifex = true;
}
if (location !== undefined && !fs.existsSync(location)) { if (location !== undefined && !fs.existsSync(location)) {
throw new Error(`${location} doesn't exist.`); throw new Error(`${location} doesn't exist.`);
} }
let locExtFolder = idOrPath; let locExtFolder = idOrPath;
if (/^\w{2}(-\w+)?$/.test(idOrPath)) { if (/^\w{2,3}(-\w+)?$/.test(idOrPath)) {
locExtFolder = path.join('..', 'vscode-loc', 'i18n', `vscode-language-pack-${idOrPath}`); locExtFolder = path.join('..', 'vscode-loc', 'i18n', `vscode-language-pack-${idOrPath}`);
} }
let locExtStat = fs.statSync(locExtFolder); let locExtStat = fs.statSync(locExtFolder);
@ -53,51 +46,29 @@ function update(options) {
if (!localization.languageId || !localization.languageName || !localization.localizedLanguageName) { if (!localization.languageId || !localization.languageName || !localization.localizedLanguageName) {
throw new Error('Each localization contribution must define "languageId", "languageName" and "localizedLanguageName" properties.'); throw new Error('Each localization contribution must define "languageId", "languageName" and "localizedLanguageName" properties.');
} }
let server = localization.server || 'www.transifex.com'; let languageId = localization.languageId;
let userName = localization.userName || 'api';
let apiToken = process.env.TRANSIFEX_API_TOKEN;
let languageId = localization.transifexId || localization.languageId;
let translationDataFolder = path.join(locExtFolder, 'translations'); let translationDataFolder = path.join(locExtFolder, 'translations');
if (languageId === "zh-cn") {
languageId = "zh-hans"; switch (languageId) {
} case 'zh-cn':
if (languageId === "zh-tw") { languageId = 'zh-Hans';
languageId = "zh-hant"; break;
case 'zh-tw':
languageId = 'zh-Hant';
break;
case 'pt-br':
languageId = 'pt-BR';
break;
} }
if (fs.existsSync(translationDataFolder) && fs.existsSync(path.join(translationDataFolder, 'main.i18n.json'))) { if (fs.existsSync(translationDataFolder) && fs.existsSync(path.join(translationDataFolder, 'main.i18n.json'))) {
console.log('Clearing \'' + translationDataFolder + '\'...'); console.log('Clearing \'' + translationDataFolder + '\'...');
rimraf.sync(translationDataFolder); rimraf.sync(translationDataFolder);
} }
if (transifex) {
console.log(`Downloading translations for ${languageId} to '${translationDataFolder}' ...`);
let translationPaths = [];
i18n.pullI18nPackFiles(server, userName, apiToken, { id: languageId }, translationPaths)
.on('error', (error) => {
console.log(`Error occurred while importing translations:`);
translationPaths = undefined;
if (Array.isArray(error)) {
error.forEach(console.log);
} else if (error) {
console.log(error);
} else {
console.log('Unknown error');
}
})
.pipe(vfs.dest(translationDataFolder))
.on('end', function () {
if (translationPaths !== undefined) {
localization.translations = [];
for (let tp of translationPaths) {
localization.translations.push({ id: tp.id, path: `./translations/${tp.resourceName}`});
}
fs.writeFileSync(path.join(locExtFolder, 'package.json'), JSON.stringify(packageJSON, null, '\t'));
}
});
} else {
console.log(`Importing translations for ${languageId} form '${location}' to '${translationDataFolder}' ...`); console.log(`Importing translations for ${languageId} form '${location}' to '${translationDataFolder}' ...`);
let translationPaths = []; let translationPaths = [];
gulp.src(path.join(location, languageId, '**', '*.xlf')) gulp.src(path.join(location, '**', languageId, '*.xlf'), { silent: false })
.pipe(i18n.prepareI18nPackFiles(i18n.externalExtensionsWithTranslations, translationPaths, languageId === 'ps')) .pipe(i18n.prepareI18nPackFiles(i18n.externalExtensionsWithTranslations, translationPaths, languageId === 'ps'))
.on('error', (error) => { .on('error', (error) => {
console.log(`Error occurred while importing translations:`); console.log(`Error occurred while importing translations:`);
@ -115,17 +86,15 @@ function update(options) {
if (translationPaths !== undefined) { if (translationPaths !== undefined) {
localization.translations = []; localization.translations = [];
for (let tp of translationPaths) { for (let tp of translationPaths) {
localization.translations.push({ id: tp.id, path: `./translations/${tp.resourceName}`}); localization.translations.push({ id: tp.id, path: `./translations/${tp.resourceName}` });
} }
fs.writeFileSync(path.join(locExtFolder, 'package.json'), JSON.stringify(packageJSON, null, '\t')); fs.writeFileSync(path.join(locExtFolder, 'package.json'), JSON.stringify(packageJSON, null, '\t'));
} }
}); });
}
}); });
} }
if (path.basename(process.argv[1]) === 'update-localization-extension.js') { if (path.basename(process.argv[1]) === 'update-localization-extension.js') {
var options = minimist(process.argv.slice(2), { var options = minimist(process.argv.slice(2), {
boolean: 'transifex',
string: 'location' string: 'location'
}); });
update(options); update(options);

View File

@ -22,7 +22,7 @@
"@types/minimist": "^1.2.1", "@types/minimist": "^1.2.1",
"@types/mkdirp": "^1.0.1", "@types/mkdirp": "^1.0.1",
"@types/mocha": "^8.2.0", "@types/mocha": "^8.2.0",
"@types/node": "^14.14.37", "@types/node": "14.x",
"@types/p-limit": "^2.2.0", "@types/p-limit": "^2.2.0",
"@types/plist": "^3.0.2", "@types/plist": "^3.0.2",
"@types/pump": "^1.0.1", "@types/pump": "^1.0.1",
@ -38,7 +38,7 @@
"byline": "^5.0.0", "byline": "^5.0.0",
"colors": "^1.4.0", "colors": "^1.4.0",
"commander": "^7.0.0", "commander": "^7.0.0",
"esbuild": "^0.8.30", "esbuild": "^0.12.6",
"fs-extra": "^9.1.0", "fs-extra": "^9.1.0",
"got": "11.8.1", "got": "11.8.1",
"iconv-lite-umd": "0.6.8", "iconv-lite-umd": "0.6.8",
@ -47,7 +47,7 @@
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"p-limit": "^3.1.0", "p-limit": "^3.1.0",
"source-map": "0.6.1", "source-map": "0.6.1",
"typescript": "^4.3.0-dev.20210426", "typescript": "^4.4.0-dev.20210528",
"vsce": "1.88.0", "vsce": "1.88.0",
"vscode-universal": "deepak1556/universal#61454d96223b774c53cda10f72c2098c0ce02d58" "vscode-universal": "deepak1556/universal#61454d96223b774c53cda10f72c2098c0ce02d58"
}, },

View File

@ -235,10 +235,20 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44"
integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==
"@types/node@*", "@types/node@^14.14.21", "@types/node@^14.14.37": "@types/node@*":
version "14.14.37" version "8.0.51"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.51.tgz#b31d716fb8d58eeb95c068a039b9b6292817d5fb"
integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== integrity sha512-El3+WJk2D/ppWNd2X05aiP5l2k4EwF7KwheknQZls+I26eSICoWRhRIJ56jGgw2dqNGQ5LtNajmBU2ajS28EvQ==
"@types/node@14.x":
version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
"@types/node@^14.14.21":
version "14.14.22"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18"
integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==
"@types/p-limit@^2.2.0": "@types/p-limit@^2.2.0":
version "2.2.0" version "2.2.0"
@ -683,7 +693,12 @@ dom-serializer@0, dom-serializer@~0.1.0:
domelementtype "~1.1.1" domelementtype "~1.1.1"
entities "~1.1.1" entities "~1.1.1"
domelementtype@1, domelementtype@^1.3.0: domelementtype@1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479"
integrity sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==
domelementtype@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=
@ -733,10 +748,10 @@ entities@~2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
esbuild@^0.8.30: esbuild@^0.12.6:
version "0.8.30" version "0.12.6"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.30.tgz#3d057ff9ffe6d5d30bccb0afe8cc92a2e69622d3" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.6.tgz#85bc755c7cf3005d4f34b4f10f98049ce0ee67ce"
integrity sha512-gCJQYUMO9QNrfpNOIiCnFoX41nWiPFCvURBQF+qWckyJ7gmw2xCShdKCXvS+RZcQ5krcxEOLIkzujqclePKhfw== integrity sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA==
escape-string-regexp@^1.0.5: escape-string-regexp@^1.0.5:
version "1.0.5" version "1.0.5"
@ -818,7 +833,19 @@ get-stream@^5.1.0:
dependencies: dependencies:
pump "^3.0.0" pump "^3.0.0"
glob@^7.0.6, glob@^7.1.6: glob@^7.0.6:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
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"
glob@^7.1.6:
version "7.1.6" version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@ -912,11 +939,16 @@ inflight@^1.0.4:
once "^1.3.0" once "^1.3.0"
wrappy "1" wrappy "1"
inherits@2, inherits@^2.0.1, inherits@^2.0.3: inherits@2, inherits@^2.0.1:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
is-extglob@^2.1.1: is-extglob@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@ -1010,7 +1042,12 @@ mdurl@^1.0.1:
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
mime@^1.3.4, mime@^1.4.1: mime@^1.3.4:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
mime@^1.4.1:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@ -1060,9 +1097,9 @@ nth-check@~1.0.1:
boolbase "~1.0.0" boolbase "~1.0.0"
object-inspect@^1.9.0: object-inspect@^1.9.0:
version "1.10.2" version "1.10.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
once@^1.3.0, once@^1.3.1, once@^1.4.0: once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0" version "1.4.0"
@ -1283,10 +1320,10 @@ typescript@^4.1.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7"
integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==
typescript@^4.3.0-dev.20210426: typescript@^4.4.0-dev.20210528:
version "4.3.0-dev.20210426" version "4.4.0-dev.20210528"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.0-dev.20210426.tgz#00198cb8828f6a04b4e0ae32554a486bf7137a53" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.0-dev.20210528.tgz#42453bc42e9d9df8ad0741c207c24d56407c0347"
integrity sha512-8YTqlzf3w8O8XwnnRlwRV2rswu7V7WEPUnAnH1BPPMrr06thNByMjIadA5SDW3tUJc1MG8Uj3NgZYocU5fWTVg== integrity sha512-ACV+mYKC+PhWUXIDUL6qmFClIdrKc20KRxDePt8bniCgkKQD4XRYKl7m02paxJM3nTMRdlfjs0ncaslA5BA1GA==
uc.micro@^1.0.1, uc.micro@^1.0.5: uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.5" version "1.0.5"

View File

@ -54,35 +54,6 @@
"Copyright (c) Microsoft Corporation. All rights reserved." "Copyright (c) Microsoft Corporation. All rights reserved."
] ]
}, },
{
// Reason: The npm package lacks a repoURL field
// So the license at https://github.com/floatdrop/pinkie/blob/master/license
// cannot be found by the OSS tool automatically.
"name": "pinkie",
"fullLicenseText": [
"The MIT License (MIT)",
"",
"Copyright (c) Vsevolod Strukchinsky <floatdrop@gmail.com> (github.com/floatdrop)",
"",
"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."
]
},
{ {
"name": "big-integer", "name": "big-integer",
"prependLicenseText": [ "prependLicenseText": [
@ -134,6 +105,7 @@
{ {
// Reason: Repository lacks license text. // Reason: Repository lacks license text.
// https://github.com/LinusU/load-yaml-file/blob/master/package.json declares MIT. // https://github.com/LinusU/load-yaml-file/blob/master/package.json declares MIT.
// https://github.com/LinusU/load-yaml-file/issues/2
"name": "load-yaml-file", "name": "load-yaml-file",
"fullLicenseText": [ "fullLicenseText": [
"MIT License", "MIT License",
@ -149,6 +121,7 @@
{ {
// Reason: Repository lacks license text. // Reason: Repository lacks license text.
// https://github.com/othiym23/emitter-listener/blob/master/package.json declares BSD-2-Clause. // https://github.com/othiym23/emitter-listener/blob/master/package.json declares BSD-2-Clause.
// https://github.com/othiym23/emitter-listener/issues/3
"name": "emitter-listener", "name": "emitter-listener",
"fullLicenseText": [ "fullLicenseText": [
"BSD 2-Clause \"Simplified\" License", "BSD 2-Clause \"Simplified\" License",
@ -174,19 +147,5 @@
"(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS", "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS",
"SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
] ]
},
{
// Reason: Repository has been deleted (package.json declares MIT).
"name": "vscode-js-debug-cdp-proxy-api",
"fullLicenseText": [
"MIT License",
"Copyright (c) Manuel Alabor",
"",
"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."
]
} }
] ]

View File

@ -6,7 +6,7 @@
"git": { "git": {
"name": "chromium", "name": "chromium",
"repositoryUrl": "https://chromium.googlesource.com/chromium/src", "repositoryUrl": "https://chromium.googlesource.com/chromium/src",
"commitHash": "5342041f85833c038dcbc5632d62fc10f7592323" "commitHash": "cd7a46bf02a768a1aabf9443f6ee469bc6e28e7c"
} }
}, },
"licenseDetail": [ "licenseDetail": [
@ -40,7 +40,7 @@
"SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
], ],
"isOnlyProductionDependency": true, "isOnlyProductionDependency": true,
"version": "89.0.4389.114" "version": "89.0.4389.128"
}, },
{ {
"component": { "component": {
@ -60,12 +60,12 @@
"git": { "git": {
"name": "electron", "name": "electron",
"repositoryUrl": "https://github.com/electron/electron", "repositoryUrl": "https://github.com/electron/electron",
"commitHash": "9ce7c512475aa6aa91417a3b08e19f85a8587a30" "commitHash": "8d55658bfa8b5983e1a90ad079c2e2ac91ee7af0"
} }
}, },
"isOnlyProductionDependency": true, "isOnlyProductionDependency": true,
"license": "MIT", "license": "MIT",
"version": "12.0.4" "version": "12.0.7"
}, },
{ {
"component": { "component": {

View File

@ -30,13 +30,13 @@ const vscodeResources = [
"out-build/bootstrap-fork.js", "out-build/bootstrap-fork.js",
"out-build/bootstrap-amd.js", "out-build/bootstrap-amd.js",
'out-build/bootstrap-node.js', 'out-build/bootstrap-node.js',
"out-build/paths.js",
'out-build/vs/**/*.{svg,png,html,ttf,jpg}', 'out-build/vs/**/*.{svg,png,html,ttf,jpg}',
"!out-build/vs/code/browser/workbench/*.html", "!out-build/vs/code/browser/workbench/*.html",
'!out-build/vs/code/electron-browser/**', '!out-build/vs/code/electron-browser/**',
"out-build/vs/base/common/performance.js", "out-build/vs/base/common/performance.js",
"out-build/vs/base/node/languagePacks.js", "out-build/vs/base/node/languagePacks.js",
'out-build/vs/base/browser/ui/codicons/codicon/**', 'out-build/vs/base/browser/ui/codicons/codicon/**',
'out-build/vs/base/node/userDataPath.js',
"out-build/vs/workbench/browser/media/*-theme.css", "out-build/vs/workbench/browser/media/*-theme.css",
"out-build/vs/workbench/contrib/debug/**/*.json", "out-build/vs/workbench/contrib/debug/**/*.json",
"out-build/vs/workbench/contrib/externalTerminal/**/*.scpt", "out-build/vs/workbench/contrib/externalTerminal/**/*.scpt",

View File

@ -6,11 +6,11 @@
"git": { "git": {
"name": "mmims/language-batchfile", "name": "mmims/language-batchfile",
"repositoryUrl": "https://github.com/mmims/language-batchfile", "repositoryUrl": "https://github.com/mmims/language-batchfile",
"commitHash": "95ea8c699f7a8296b15767069868532d52631c46" "commitHash": "6154ae25a24e01ac9329e7bcf958e093cd8733a9"
} }
}, },
"license": "MIT", "license": "MIT",
"version": "0.7.5" "version": "0.7.6"
} }
], ],
"version": 1 "version": 1

View File

@ -4,9 +4,18 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.", "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." "Once accepted there, we are happy to receive an update request."
], ],
"version": "https://github.com/mmims/language-batchfile/commit/95ea8c699f7a8296b15767069868532d52631c46", "version": "https://github.com/mmims/language-batchfile/commit/6154ae25a24e01ac9329e7bcf958e093cd8733a9",
"name": "Batch File", "name": "Batch File",
"scopeName": "source.batchfile", "scopeName": "source.batchfile",
"injections": {
"L:meta.block.repeat.batchfile": {
"patterns": [
{
"include": "#repeatParameter"
}
]
}
},
"patterns": [ "patterns": [
{ {
"include": "#commands" "include": "#commands"
@ -46,7 +55,7 @@
"commands": { "commands": {
"patterns": [ "patterns": [
{ {
"match": "(?<=^|[\\s@])(?i:adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|brea|cacls|cd|certreq|certutil|change|chcp|chdir|chglogon|chgport|chgusr|chkdsk|chkntfs|choice|cipher|clip|cls|clscluadmin|cluster|cmd|cmdkey|cmstp|color|comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm|edit|endlocal|eraseesentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract|fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl|hashgen|hep|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile|makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group|net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb|nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd|powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess|query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset session|rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|scp|sc|schtasks|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|setspn|setx|sfc|shadow|shift|showmount|shutdown|sort|ssh|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time|timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|mic|wscript|xcopy)(?=$|\\s)", "match": "(?<=^|[\\s@])(?i:adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|brea|cacls|cd|certreq|certutil|change|chcp|chdir|chglogon|chgport|chgusr|chkdsk|chkntfs|choice|cipher|clip|cls|clscluadmin|cluster|cmd|cmdkey|cmstp|color|comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm|edit|endlocal|eraseesentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract|fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl|hashgen|hep|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile|makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group|net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb|nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd|powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess|query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset session|rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|sc|schtasks|scp|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|setspn|setx|sfc|sftp|shadow|shift|showmount|shutdown|sort|ssh|ssh-add|ssh-agent|ssh-keygen|ssh-keyscan|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time|timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|wmic|wscript|wsl|xcopy)(?=$|\\s)",
"name": "keyword.command.batchfile" "name": "keyword.command.batchfile"
}, },
{ {
@ -285,7 +294,7 @@
"name": "keyword.operator.logical.batchfile" "name": "keyword.operator.logical.batchfile"
}, },
{ {
"match": "([^ ][^=]*)(=)", "match": "([^ =]*)(=)",
"captures": { "captures": {
"1": { "1": {
"name": "variable.other.readwrite.batchfile" "name": "variable.other.readwrite.batchfile"
@ -420,9 +429,39 @@
"name": "keyword.control.conditional.batchfile" "name": "keyword.control.conditional.batchfile"
}, },
{ {
"match": "(?<=^|\\s)(?i)for(?=\\s)", "begin": "(?<=^|[\\s(&^])(?i)for(?=\\s)",
"beginCaptures": {
"0": {
"name": "keyword.control.repeat.batchfile" "name": "keyword.control.repeat.batchfile"
} }
},
"name": "meta.block.repeat.batchfile",
"end": "\\n",
"patterns": [
{
"begin": "(?<=[\\s^])(?i)in(?=\\s)",
"beginCaptures": {
"0": {
"name": "keyword.control.repeat.in.batchfile"
}
},
"end": "(?<=[\\s)^])(?i)do(?=\\s)|\\n",
"endCaptures": {
"0": {
"name": "keyword.control.repeat.do.batchfile"
}
},
"patterns": [
{
"include": "$self"
}
]
},
{
"include": "$self"
}
]
}
] ]
}, },
"escaped_characters": { "escaped_characters": {
@ -436,7 +475,7 @@
"labels": { "labels": {
"patterns": [ "patterns": [
{ {
"match": "(?i)(?:^\\s*|(?<=goto)\\s*)(:)([^+=,;:\\s].*)$", "match": "(?i)(?:^\\s*|(?<=call|goto)\\s*)(:)([^+=,;:\\s]\\S*)",
"captures": { "captures": {
"1": { "1": {
"name": "punctuation.separator.batchfile" "name": "punctuation.separator.batchfile"
@ -512,6 +551,19 @@
} }
] ]
}, },
"repeatParameter": {
"patterns": [
{
"match": "(%%)(?:(?i:~[fdpnxsatz]*(?:\\$PATH:)?)?[a-zA-Z])",
"captures": {
"1": {
"name": "punctuation.definition.variable.batchfile"
}
},
"name": "variable.parameter.repeat.batchfile"
}
]
},
"strings": { "strings": {
"patterns": [ "patterns": [
{ {
@ -546,15 +598,13 @@
"variables": { "variables": {
"patterns": [ "patterns": [
{ {
"match": "(%)((~([fdpnxsatz]|\\$PATH:)*)?\\d|\\*)", "match": "(%)(?:(?i:~[fdpnxsatz]*(?:\\$PATH:)?)?\\d|\\*)",
"captures": { "captures": {
"1": { "1": {
"name": "punctuation.definition.variable.batchfile" "name": "punctuation.definition.variable.batchfile"
}
}, },
"2": {
"name": "variable.parameter.batchfile" "name": "variable.parameter.batchfile"
}
}
}, },
{ {
"include": "#variable" "include": "#variable"

View File

@ -139,7 +139,7 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -54,6 +54,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -80,7 +93,13 @@
"properties": { "properties": {
"onAutoForward": { "onAutoForward": {
"type": "string", "type": "string",
"enum": ["notify", "openBrowser", "openPreview", "silent", "ignore"], "enum": [
"notify",
"openBrowser",
"openPreview",
"silent",
"ignore"
],
"enumDescriptions": [ "enumDescriptions": [
"Shows a notification when a port is automatically forwarded.", "Shows a notification when a port is automatically forwarded.",
"Opens the browser when the port is automatically forwarded. Depending on your settings, this could open an embedded browser.", "Opens the browser when the port is automatically forwarded. Depending on your settings, this could open an embedded browser.",
@ -100,9 +119,28 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [{ "body": { "onAutoForward": "ignore" } }], "defaultSnippets": [
{
"body": {
"onAutoForward": "ignore"
}
}
],
"markdownDescription": "Set default properties that are applied to all ports that don't get properties from the setting `remote.portsAttributes`. For example:\n\n```\n{\n \"onAutoForward\": \"ignore\"\n}\n```", "markdownDescription": "Set default properties that are applied to all ports that don't get properties from the setting `remote.portsAttributes`. For example:\n\n```\n{\n \"onAutoForward\": \"ignore\"\n}\n```",
"additionalProperties": false "additionalProperties": false
}, },

View File

@ -162,6 +162,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -215,6 +228,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -246,7 +272,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -256,7 +302,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -266,7 +312,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -276,11 +322,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -299,6 +357,28 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
},
"additionalProperties": false
} }
}, },
"required": [ "required": [
@ -461,6 +541,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -514,6 +607,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -545,7 +651,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -555,7 +681,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -565,7 +691,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -575,11 +701,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -598,6 +736,28 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
},
"additionalProperties": false
} }
}, },
"required": [ "required": [
@ -736,6 +896,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -789,6 +962,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -820,7 +1006,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -830,7 +1036,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -840,7 +1046,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -850,11 +1056,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -873,6 +1091,28 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
},
"additionalProperties": false
} }
}, },
"required": [ "required": [
@ -977,6 +1217,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -1030,6 +1283,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -1061,7 +1327,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1071,7 +1357,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1081,7 +1367,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1091,11 +1377,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -1114,6 +1412,28 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
},
"additionalProperties": false
} }
}, },
"required": [ "required": [
@ -1187,6 +1507,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -1240,6 +1573,19 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": [
"http",
"https"
],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -1271,7 +1617,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1281,7 +1647,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1291,7 +1657,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -1301,11 +1667,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -1324,6 +1702,28 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
},
"additionalProperties": false
} }
}, },
"additionalProperties": false "additionalProperties": false

View File

@ -68,6 +68,16 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": ["http", "https"],
"description": "The protocol to use when forwarding this port."
} }
}, },
"default": { "default": {
@ -120,6 +130,16 @@
"type": "string", "type": "string",
"description": "Label that will be shown in the UI for this port.", "description": "Label that will be shown in the UI for this port.",
"default": "Application" "default": "Application"
},
"requireLocalPort": {
"type": "boolean",
"markdownDescription": "When true, a modal dialog will show if the chosen local port isn't used for forwarding.",
"default": false
},
"protocol": {
"type": "string",
"enum": ["http", "https"],
"description": "The protocol to use when forwarding this port."
} }
}, },
"defaultSnippets": [ "defaultSnippets": [
@ -151,7 +171,27 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run locally before anything else. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run locally before anything else. This command is run before \"onCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"onCreateCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container. This command is run after \"initializeCommand\" and before \"updateContentCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": {
"type": "string"
}
},
"updateContentCommand": {
"type": [
"string",
"array"
],
"description": "A command to run when creating the container and rerun when the workspace content was updated while creating the container. This command is run after \"onCreateCommand\" and before \"postCreateCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -161,7 +201,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after creating the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after creating the container. This command is run after \"updateContentCommand\" and before \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -171,7 +211,7 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after starting the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run after starting the container. This command is run after \"postCreateCommand\" and before \"postAttachCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
@ -181,11 +221,23 @@
"string", "string",
"array" "array"
], ],
"description": "A command to run after attaching to the container. If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.", "description": "A command to run when attaching to the container. This command is run after \"postStartCommand\". If this is a single string, it will be run in a shell. If this is an array of strings, it will be run as a single command without shell.",
"items": { "items": {
"type": "string" "type": "string"
} }
}, },
"waitFor": {
"type": "string",
"enum": [
"initializeCommand",
"onCreateCommand",
"updateContentCommand",
"postCreateCommand",
"postStartCommand",
"postAttachCommand"
],
"description": "The user command to wait for before continuing execution in the background while the UI is starting up. The default is \"updateContentCommand\"."
},
"devPort": { "devPort": {
"type": "integer", "type": "integer",
"description": "The port VS Code can use to connect to its backend." "description": "The port VS Code can use to connect to its backend."
@ -204,6 +256,32 @@
"type": "object", "type": "object",
"additionalProperties": true, "additionalProperties": true,
"description": "Codespaces-specific configuration." "description": "Codespaces-specific configuration."
},
"hostRequirements": {
"type": "object",
"description": "Host hardware requirements.",
"allOf": [
{
"type": "object",
"properties": {
"cpus": {
"type": "integer",
"minimum": 1,
"description": "Number of required CPUs."
},
"memory": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required RAM in bytes. Supports units tb, gb, mb and kb."
},
"storage": {
"type": "string",
"pattern": "^\\d+([tgmk]b)?$",
"description": "Amount of required disk space in bytes. Supports units tb, gb, mb and kb."
}
}
}
]
} }
} }
}, },

View File

@ -6,7 +6,7 @@
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import { getLocation, Location, parse } from 'jsonc-parser'; import { getLocation, Location, parse } from 'jsonc-parser';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import { provideInstalledExtensionProposals, provideWorkspaceTrustExtensionProposals } from './extensionsProposals'; import { provideInstalledExtensionProposals } from './extensionsProposals';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
@ -60,13 +60,9 @@ export class SettingsDocument {
return provideInstalledExtensionProposals(alreadyConfigured, `: [\n\t"ui"\n]`, range, true); return provideInstalledExtensionProposals(alreadyConfigured, `: [\n\t"ui"\n]`, range, true);
} }
// extensions.supportUntrustedWorkspaces // remote.portsAttributes
if (location.path[0] === 'extensions.supportUntrustedWorkspaces' && location.path.length === 2 && location.isAtPropertyKey) { if (location.path[0] === 'remote.portsAttributes' && location.path.length === 2 && location.isAtPropertyKey) {
let alreadyConfigured: string[] = []; return this.providePortsAttributesCompletionItem(range);
try {
alreadyConfigured = Object.keys(parse(this.document.getText())['extensions.supportUntrustedWorkspaces']);
} catch (e) {/* ignore error */ }
return provideWorkspaceTrustExtensionProposals(alreadyConfigured, range);
} }
return this.provideLanguageOverridesCompletionItems(location, position); return this.provideLanguageOverridesCompletionItems(location, position);
@ -247,6 +243,31 @@ export class SettingsDocument {
return Promise.resolve([]); return Promise.resolve([]);
} }
private providePortsAttributesCompletionItem(range: vscode.Range): vscode.CompletionItem[] {
return [this.newSnippetCompletionItem(
{
label: '\"3000\"',
documentation: 'Single Port Attribute',
range,
snippet: '\n \"${1:3000}\": {\n \"label\": \"${2:Application}\",\n \"onAutoForward\": \"${3:openPreview}\"\n }\n'
}),
this.newSnippetCompletionItem(
{
label: '\"5000-6000\"',
documentation: 'Ranged Port Attribute',
range,
snippet: '\n \"${1:40000-55000}\": {\n \"onAutoForward\": \"${2:ignore}\"\n }\n'
}),
this.newSnippetCompletionItem(
{
label: '\".+\\\\/server.js\"',
documentation: 'Command Match Port Attribute',
range,
snippet: '\n \"${1:.+\\\\/server.js\}\": {\n \"label\": \"${2:Application}\",\n \"onAutoForward\": \"${3:openPreview}\"\n }\n'
})
];
}
private newSimpleCompletionItem(text: string, range: vscode.Range, description?: string, insertText?: string): vscode.CompletionItem { private newSimpleCompletionItem(text: string, range: vscode.Range, description?: string, insertText?: string): vscode.CompletionItem {
const item = new vscode.CompletionItem(text); const item = new vscode.CompletionItem(text);
item.kind = vscode.CompletionItemKind.Value; item.kind = vscode.CompletionItemKind.Value;

View File

@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/node@^12.19.9": "@types/node@14.x":
version "12.19.9" version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
jsonc-parser@^2.2.1: jsonc-parser@^2.2.1:
version "2.2.1" version "2.2.1"

View File

@ -6,7 +6,7 @@
"git": { "git": {
"name": "dotnet/csharp-tmLanguage", "name": "dotnet/csharp-tmLanguage",
"repositoryUrl": "https://github.com/dotnet/csharp-tmLanguage", "repositoryUrl": "https://github.com/dotnet/csharp-tmLanguage",
"commitHash": "4d14854c9bfc9d84cce625d2bfebaac9741b9db8" "commitHash": "572697a2c2267430010b3534281f73337144e94f"
} }
}, },
"license": "MIT", "license": "MIT",

View File

@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.", "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." "Once accepted there, we are happy to receive an update request."
], ],
"version": "https://github.com/dotnet/csharp-tmLanguage/commit/4d14854c9bfc9d84cce625d2bfebaac9741b9db8", "version": "https://github.com/dotnet/csharp-tmLanguage/commit/572697a2c2267430010b3534281f73337144e94f",
"name": "C#", "name": "C#",
"scopeName": "source.cs", "scopeName": "source.cs",
"patterns": [ "patterns": [
@ -286,9 +286,6 @@
{ {
"include": "#this-or-base-expression" "include": "#this-or-base-expression"
}, },
{
"include": "#switch-expression"
},
{ {
"include": "#conditional-operator" "include": "#conditional-operator"
}, },
@ -619,7 +616,7 @@
] ]
}, },
"delegate-declaration": { "delegate-declaration": {
"begin": "(?x)\n(?:\\b(delegate)\\b)\\s+\n(?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()", "begin": "(?x)\n(?:\\b(delegate)\\b)\\s+\n(?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.other.delegate.cs" "name": "keyword.other.delegate.cs"
@ -970,7 +967,7 @@
] ]
}, },
"field-declaration": { "field-declaration": {
"begin": "(?x)\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g<identifier>)\\s* # first field name\n(?!=>|==)(?=,|;|=|$)", "begin": "(?x)\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s* # first field name\n(?!=>|==)(?=,|;|=|$)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1004,7 +1001,7 @@
] ]
}, },
"property-declaration": { "property-declaration": {
"begin": "(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?<return_type>\n (?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?<interface_name>\\g<type_name>\\s*\\.\\s*)?\n(?<property_name>\\g<identifier>)\\s*\n(?=\\{|=>|$)", "begin": "(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<property-name>\\g<identifier>)\\s*\n(?=\\{|=>|$)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1047,7 +1044,7 @@
] ]
}, },
"indexer-declaration": { "indexer-declaration": {
"begin": "(?x)\n(?<return_type>\n (?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?<interface_name>\\g<type_name>\\s*\\.\\s*)?\n(?<indexer_name>this)\\s*\n(?=\\[)", "begin": "(?x)\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<indexer-name>this)\\s*\n(?=\\[)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1090,7 +1087,7 @@
] ]
}, },
"event-declaration": { "event-declaration": {
"begin": "(?x)\n\\b(event)\\b\\s*\n(?<return_type>\n (?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?<interface_name>\\g<type_name>\\s*\\.\\s*)?\n(?<event_names>\\g<identifier>(?:\\s*,\\s*\\g<identifier>)*)\\s*\n(?=\\{|;|$)", "begin": "(?x)\n\\b(event)\\b\\s*\n(?<return-type>\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(?<event-names>\\g<identifier>(?:\\s*,\\s*\\g<identifier>)*)\\s*\n(?=\\{|;|$)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.other.event.cs" "name": "keyword.other.event.cs"
@ -1220,7 +1217,7 @@
] ]
}, },
"method-declaration": { "method-declaration": {
"begin": "(?x)\n(?<return_type>\n (?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?<interface_name>\\g<type_name>\\s*\\.\\s*)?\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()", "begin": "(?x)\n(?<return-type>\n (?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?<interface-name>\\g<type-name>\\s*\\.\\s*)?\n(\\g<identifier>)\\s*\n(<([^<>]+)>)?\\s*\n(?=\\()",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1356,7 +1353,7 @@
] ]
}, },
"operator-declaration": { "operator-declaration": {
"begin": "(?x)\n(?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?<operator_keyword>(?:\\b(?:operator)))\\s*\n(?<operator>(?:\\+|-|\\*|/|%|&|\\||\\^|\\<\\<|\\>\\>|==|!=|\\>|\\<|\\>=|\\<=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()", "begin": "(?x)\n(?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?<operator-keyword>(?:\\b(?:operator)))\\s*\n(?<operator>(?:\\+|-|\\*|/|%|&|\\||\\^|\\<\\<|\\>\\>|==|!=|\\>|\\<|\\>=|\\<=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1389,7 +1386,7 @@
] ]
}, },
"conversion-operator-declaration": { "conversion-operator-declaration": {
"begin": "(?x)\n(?<explicit_or_implicit_keyword>(?:\\b(?:explicit|implicit)))\\s*\n(?<operator_keyword>(?:\\b(?:operator)))\\s*\n(?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()", "begin": "(?x)\n(?<explicit-or-implicit-keyword>(?:\\b(?:explicit|implicit)))\\s*\n(?<operator-keyword>(?:\\b(?:operator)))\\s*\n(?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\()",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -1618,7 +1615,7 @@
"end": "(?=;)", "end": "(?=;)",
"patterns": [ "patterns": [
{ {
"include": "#statement" "include": "#expression"
} }
] ]
}, },
@ -1721,178 +1718,6 @@
} }
] ]
}, },
"switch-expression": {
"begin": "(?x) (?<!\\.)\\b(switch)",
"beginCaptures": {
"1": {
"name": "keyword.control.switch.cs"
}
},
"end": "(?<=\\})",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#literal"
},
{
"include": "#switch-var-pattern"
},
{
"include": "#switch-property-expression"
},
{
"include": "#member-access-expression"
},
{
"include": "#switch-pattern"
},
{
"include": "#expression-body"
},
{
"include": "#punctuation-comma"
}
]
}
]
},
"switch-pattern": {
"begin": "(?x) # e.g. int x OR var x\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g<identifier>)\\b\\s*",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"2": {
"name": "entity.name.variable.local.cs"
}
},
"end": "(?==>)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#switch-when-clause"
}
]
},
"switch-property-expression": {
"begin": "(?x) # e.g. int x OR var x\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(\\{)",
"beginCaptures": {
"1": {
"patterns": [
{
"include": "#type"
}
]
},
"6": {
"name": "punctuation.curlybrace.open.cs"
}
},
"end": "\\}",
"endCaptures": {
"0": {
"name": "punctuation.curlybrace.close.cs"
}
},
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"switch-var-pattern": {
"begin": "(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.var.cs"
},
"2": {
"patterns": [
{
"include": "#tuple-declaration-deconstruction-element-list"
}
]
}
},
"end": "(?==>)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#switch-when-clause"
}
]
},
"switch-when-clause": {
"begin": "(?<!\\.)\\b(when)\\b\\s*(\\()?",
"beginCaptures": {
"1": {
"name": "keyword.control.try.when.cs"
},
"2": {
"name": "punctuation.parenthesis.open.cs"
}
},
"end": "(?==>)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
},
{
"match": "\\(",
"captures": {
"0": {
"name": "punctuation.parenthesis.open.cs"
}
}
},
{
"match": "\\)",
"captures": {
"0": {
"name": "punctuation.parenthesis.close.cs"
}
}
}
]
},
"switch-label": { "switch-label": {
"patterns": [ "patterns": [
{ {
@ -2040,7 +1865,7 @@
}, },
"patterns": [ "patterns": [
{ {
"match": "(?x)\n(?:\n (\\bvar\\b)|\n (?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g<identifier>)\\s+\n\\b(in)\\b", "match": "(?x)\n(?:\n (\\bvar\\b)|\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\s+\n\\b(in)\\b",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.var.cs" "name": "keyword.other.var.cs"
@ -2159,7 +1984,7 @@
}, },
"patterns": [ "patterns": [
{ {
"match": "(?x)\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?:(\\g<identifier>)\\b)?", "match": "(?x)\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?:(\\g<identifier>)\\b)?",
"captures": { "captures": {
"1": { "1": {
"patterns": [ "patterns": [
@ -2319,37 +2144,31 @@
{ {
"include": "#local-variable-declaration" "include": "#local-variable-declaration"
}, },
{
"include": "#local-function-declaration"
},
{ {
"include": "#local-tuple-var-deconstruction" "include": "#local-tuple-var-deconstruction"
} }
] ]
}, },
"local-variable-declaration": { "local-variable-declaration": {
"begin": "(?x)\n(?:\n (?:(\\busing)\\s+)?\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?<type_name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?!=>)\n(?=,|;|=|\\))", "begin": "(?x)\n(?:\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?<type-name>\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?!=>)\n(?=,|;|=|\\))",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.other.using.cs" "name": "storage.modifier.cs"
}, },
"2": { "2": {
"name": "storage.modifier.cs" "name": "storage.modifier.cs"
}, },
"3": { "3": {
"name": "storage.modifier.cs"
},
"4": {
"name": "keyword.other.var.cs" "name": "keyword.other.var.cs"
}, },
"5": { "4": {
"patterns": [ "patterns": [
{ {
"include": "#type" "include": "#type"
} }
] ]
}, },
"10": { "9": {
"name": "entity.name.variable.local.cs" "name": "entity.name.variable.local.cs"
} }
}, },
@ -2371,7 +2190,7 @@
] ]
}, },
"local-constant-declaration": { "local-constant-declaration": {
"begin": "(?x)\n(?<const_keyword>\\b(?:const)\\b)\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?=,|;|=)", "begin": "(?x)\n(?<const-keyword>\\b(?:const)\\b)\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)\\s*\n(?=,|;|=)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "storage.modifier.cs" "name": "storage.modifier.cs"
@ -2404,13 +2223,6 @@
} }
] ]
}, },
"local-function-declaration": {
"patterns": [
{
"include": "#method-declaration"
}
]
},
"local-tuple-var-deconstruction": { "local-tuple-var-deconstruction": {
"begin": "(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*\n(?=;|=|\\))", "begin": "(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?<tuple>\\((?:[^\\(\\)]|\\g<tuple>)+\\))\\s*\n(?=;|=|\\))",
"beginCaptures": { "beginCaptures": {
@ -2520,7 +2332,7 @@
] ]
}, },
"declaration-expression-local": { "declaration-expression-local": {
"match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)\\]])", "match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)\\]])",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.var.cs" "name": "keyword.other.var.cs"
@ -2538,7 +2350,7 @@
} }
}, },
"declaration-expression-tuple": { "declaration-expression-tuple": {
"match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)])", "match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g<identifier>)\\b\\s*\n(?=[,)])",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.var.cs" "name": "keyword.other.var.cs"
@ -2663,7 +2475,7 @@
}, },
"verbatim-interpolated-string": { "verbatim-interpolated-string": {
"name": "string.quoted.double.cs", "name": "string.quoted.double.cs",
"begin": "(?:\\$@|@\\$)\"", "begin": "\\$@\"",
"beginCaptures": { "beginCaptures": {
"0": { "0": {
"name": "punctuation.definition.string.begin.cs" "name": "punctuation.definition.string.begin.cs"
@ -2900,7 +2712,7 @@
"patterns": [ "patterns": [
{ {
"name": "keyword.operator.assignment.compound.cs", "name": "keyword.operator.assignment.compound.cs",
"match": "\\*=|/=|%=|\\+=|-=|\\?\\?=" "match": "\\*=|/=|%=|\\+=|-="
}, },
{ {
"name": "keyword.operator.assignment.compound.bitwise.cs", "name": "keyword.operator.assignment.compound.bitwise.cs",
@ -2948,26 +2760,6 @@
} }
] ]
}, },
"switch-literal": {
"name": "constant.language.null.cs",
"match": "(?<!\\.)\\bnull\\b",
"beginCaptures": {
"1": {
"name": "constant.language.null.cs"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#punctuation-comma"
},
{
"include": "#expression-body"
}
]
},
"conditional-operator": { "conditional-operator": {
"begin": "(?<!\\?)\\?(?!\\?|\\.|\\[)", "begin": "(?<!\\?)\\?(?!\\?|\\.|\\[)",
"beginCaptures": { "beginCaptures": {
@ -3037,7 +2829,7 @@
"match": "@?[_[:alpha:]][_[:alnum:]]*" "match": "@?[_[:alpha:]][_[:alnum:]]*"
}, },
"cast-expression": { "cast-expression": {
"match": "(?x)\n(\\()\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(\\))(?=\\s*@?[_[:alnum:]\\(])", "match": "(?x)\n(\\()\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(\\))(?=\\s*@?[_[:alnum:]\\(])",
"captures": { "captures": {
"1": { "1": {
"name": "punctuation.parenthesis.open.cs" "name": "punctuation.parenthesis.open.cs"
@ -3055,7 +2847,7 @@
} }
}, },
"as-expression": { "as-expression": {
"match": "(?x)\n(?<!\\.)\\b(as)\\b\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?", "match": "(?x)\n(?<!\\.)\\b(as)\\b\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.as.cs" "name": "keyword.other.as.cs"
@ -3070,7 +2862,7 @@
} }
}, },
"is-expression": { "is-expression": {
"match": "(?x)\n(?<!\\.)\\b(is)\\b\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?", "match": "(?x)\n(?<!\\.)\\b(is)\\b\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.is.cs" "name": "keyword.other.is.cs"
@ -3096,7 +2888,7 @@
} }
}, },
"invocation-expression": { "invocation-expression": {
"begin": "(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(?<type_args>\\s*<([^<>]|\\g<type_args>)+>\\s*)?\\s* # type arguments\n(?=\\() # open paren of argument list", "begin": "(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(?<type-args>\\s*<([^<>]|\\g<type-args>)+>\\s*)?\\s* # type arguments\n(?=\\() # open paren of argument list",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.operator.null-conditional.cs" "name": "keyword.operator.null-conditional.cs"
@ -3162,7 +2954,7 @@
} }
}, },
{ {
"match": "(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?<type_params>\\s*<([^<>]|\\g<type_params>)+>\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)", "match": "(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?<type-params>\\s*<([^<>]|\\g<type-params>)+>\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)",
"captures": { "captures": {
"1": { "1": {
"name": "punctuation.accessor.cs" "name": "punctuation.accessor.cs"
@ -3200,7 +2992,7 @@
] ]
}, },
"object-creation-expression-with-parameters": { "object-creation-expression-with-parameters": {
"begin": "(?x)\n(new)\\s+\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()", "begin": "(?x)\n(new)\\s+\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\()",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.other.new.cs" "name": "keyword.other.new.cs"
@ -3221,7 +3013,7 @@
] ]
}, },
"object-creation-expression-with-no-parameters": { "object-creation-expression-with-no-parameters": {
"match": "(?x)\n(new)\\s+\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\{|$)", "match": "(?x)\n(new)\\s+\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\{|$)",
"captures": { "captures": {
"1": { "1": {
"name": "keyword.other.new.cs" "name": "keyword.other.new.cs"
@ -3236,7 +3028,7 @@
} }
}, },
"array-creation-expression": { "array-creation-expression": {
"begin": "(?x)\n\\b(new|stackalloc)\\b\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(?=\\[)", "begin": "(?x)\n\\b(new|stackalloc)\\b\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\\s*\n(?=\\[)",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.other.new.cs" "name": "keyword.other.new.cs"
@ -3339,7 +3131,7 @@
] ]
}, },
"parameter": { "parameter": {
"match": "(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?<type_name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g<identifier>)", "match": "(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?<type-name>\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g<identifier>)",
"captures": { "captures": {
"1": { "1": {
"name": "storage.modifier.cs" "name": "storage.modifier.cs"
@ -3438,7 +3230,7 @@
] ]
}, },
"query-expression": { "query-expression": {
"begin": "(?x)\n\\b(from)\\b\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g<identifier>)\\b\\s*\n\\b(in)\\b\\s*", "begin": "(?x)\n\\b(from)\\b\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\n\\s+(\\g<identifier>)\\b\\s*\n\\b(in)\\b\\s*",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.query.from.cs" "name": "keyword.query.from.cs"
@ -3530,7 +3322,7 @@
] ]
}, },
"join-clause": { "join-clause": {
"begin": "(?x)\n\\b(join)\\b\\s*\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g<identifier>)\\b\\s*\n\\b(in)\\b\\s*", "begin": "(?x)\n\\b(join)\\b\\s*\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\n\\s+(\\g<identifier>)\\b\\s*\n\\b(in)\\b\\s*",
"beginCaptures": { "beginCaptures": {
"1": { "1": {
"name": "keyword.query.join.cs" "name": "keyword.query.join.cs"
@ -3800,7 +3592,7 @@
] ]
}, },
"lambda-parameter": { "lambda-parameter": {
"match": "(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+)?\n(\\g<identifier>)\\b\\s*\n(?=[,)])", "match": "(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+)?\n(\\g<identifier>)\\b\\s*\n(?=[,)])",
"captures": { "captures": {
"1": { "1": {
"name": "storage.modifier.cs" "name": "storage.modifier.cs"
@ -3880,7 +3672,7 @@
] ]
}, },
"tuple-element": { "tuple-element": {
"match": "(?x)\n(?<type_name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name_and_type_args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name_and_type_args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\n(?:(?<tuple_name>\\g<identifier>)\\b)?", "match": "(?x)\n(?<type-name>\n (?:\n (?:\n (?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?<name-and-type-args> # identifier + type arguments (if any)\n \\g<identifier>\\s*\n (?<type-args>\\s*<(?:[^<>]|\\g<type-args>)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g<name-and-type-args>)* | # Are there any more names being dotted into?\n (?<tuple>\\s*\\((?:[^\\(\\)]|\\g<tuple>)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\n(?:(?<tuple-name>\\g<identifier>)\\b)?",
"captures": { "captures": {
"1": { "1": {
"patterns": [ "patterns": [

View File

@ -853,7 +853,7 @@
"vscode-uri": "^3.0.2" "vscode-uri": "^3.0.2"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -10,13 +10,13 @@
"main": "./out/node/cssServerMain", "main": "./out/node/cssServerMain",
"browser": "./dist/browser/cssServerMain", "browser": "./dist/browser/cssServerMain",
"dependencies": { "dependencies": {
"vscode-css-languageservice": "^5.1.1", "vscode-css-languageservice": "^5.1.3",
"vscode-languageserver": "^7.0.0", "vscode-languageserver": "^7.0.0",
"vscode-uri": "^3.0.2" "vscode-uri": "^3.0.2"
}, },
"devDependencies": { "devDependencies": {
"@types/mocha": "^8.2.0", "@types/mocha": "^8.2.0",
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"scripts": { "scripts": {
"compile": "gulp compile-extension:css-language-features-server", "compile": "gulp compile-extension:css-language-features-server",

View File

@ -24,10 +24,10 @@ suite('Completions', () => {
return completion.label === expected.label; return completion.label === expected.label;
}); });
assert.equal(matches.length, 1, `${expected.label} should only existing once: Actual: ${completions.items.map(c => c.label).join(', ')}`); assert.strictEqual(matches.length, 1, `${expected.label} should only existing once: Actual: ${completions.items.map(c => c.label).join(', ')}`);
let match = matches[0]; let match = matches[0];
if (expected.resultText && TextEdit.is(match.textEdit)) { if (expected.resultText && TextEdit.is(match.textEdit)) {
assert.equal(TextDocument.applyEdits(document, [match.textEdit]), expected.resultText); assert.strictEqual(TextDocument.applyEdits(document, [match.textEdit]), expected.resultText);
} }
}; };
@ -50,7 +50,7 @@ suite('Completions', () => {
let list = await cssLanguageService.doComplete2(document, position, stylesheet, context); let list = await cssLanguageService.doComplete2(document, position, stylesheet, context);
if (expected.count) { if (expected.count) {
assert.equal(list.items.length, expected.count); assert.strictEqual(list.items.length, expected.count);
} }
if (expected.items) { if (expected.items) {
for (let item of expected.items) { for (let item of expected.items) {

View File

@ -26,10 +26,10 @@ suite('Links', () => {
return document.offsetAt(link.range.start) === expected.offset; return document.offsetAt(link.range.start) === expected.offset;
}); });
assert.equal(matches.length, 1, `${expected.offset} should only existing once: Actual: ${links.map(l => document.offsetAt(l.range.start)).join(', ')}`); assert.strictEqual(matches.length, 1, `${expected.offset} should only existing once: Actual: ${links.map(l => document.offsetAt(l.range.start)).join(', ')}`);
let match = matches[0]; let match = matches[0];
assert.equal(document.getText(match.range), expected.value); assert.strictEqual(document.getText(match.range), expected.value);
assert.equal(match.target, expected.target); assert.strictEqual(match.target, expected.target);
}; };
async function assertLinks(value: string, expected: ItemDescription[], testUri: string, workspaceFolders?: WorkspaceFolder[], lang: string = 'css'): Promise<void> { async function assertLinks(value: string, expected: ItemDescription[], testUri: string, workspaceFolders?: WorkspaceFolder[], lang: string = 'css'): Promise<void> {
@ -47,7 +47,7 @@ suite('Links', () => {
const stylesheet = cssLanguageService.parseStylesheet(document); const stylesheet = cssLanguageService.parseStylesheet(document);
let links = await cssLanguageService.findDocumentLinks2(document, stylesheet, context)!; let links = await cssLanguageService.findDocumentLinks2(document, stylesheet, context)!;
assert.equal(links.length, expected.length); assert.strictEqual(links.length, expected.length);
for (let item of expected) { for (let item of expected) {
assertLink(links, item, document); assertLink(links, item, document);

View File

@ -7,15 +7,15 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44"
integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==
"@types/node@^12.19.9": "@types/node@14.x":
version "12.19.9" version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
vscode-css-languageservice@^5.1.1: vscode-css-languageservice@^5.1.3:
version "5.1.1" version "5.1.3"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.1.tgz#d68a22ea0b34a8356c169cafc7d32564c2ff6e87" resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.3.tgz#a7b2f21ed48842af5d9a98223bcae09e33d707d5"
integrity sha512-QW0oe/g2y5E2AbVqY7FJNr2Q8uHiAHNSFpptI6xB8Y0KgzVKppOcIVrgmBNzXhFp9IswAwptkdqr8ExSJbqPkQ== integrity sha512-c8xiUhrDBNG6iS92FEE+K3IWOHAqVvzsqjjLSaXHyF5Qdn/6VhUweGNjtZ2CBSfs+Vkmz7pJzLQ7Io1x5deumA==
dependencies: dependencies:
vscode-languageserver-textdocument "^1.0.1" vscode-languageserver-textdocument "^1.0.1"
vscode-languageserver-types "^3.16.0" vscode-languageserver-types "^3.16.0"

View File

@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/node@^12.19.9": "@types/node@14.x":
version "12.19.9" version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
balanced-match@^1.0.0: balanced-match@^1.0.0:
version "1.0.0" version "1.0.0"

View File

@ -0,0 +1,2 @@
build/**
cgmanifest.json

View File

@ -0,0 +1,46 @@
{
"registrations": [
{
"component": {
"type": "git",
"git": {
"name": "dart-lang/dart-syntax-highlight",
"repositoryUrl": "https://github.com/dart-lang/dart-syntax-highlight",
"commitHash": "65f211722c85e9fdf0aa658d5663e6ccaf2ebe25"
}
},
"licenseDetail": [
"Copyright 2020, the Dart project authors.",
"",
"Redistribution and use in source and binary forms, with or without",
"modification, are permitted provided that the following conditions are",
"met:",
"",
" * Redistributions of source code must retain the above copyright",
" notice, this list of conditions and the following disclaimer.",
" * Redistributions in binary form must reproduce the above",
" copyright notice, this list of conditions and the following",
" disclaimer in the documentation and/or other materials provided",
" with the distribution.",
" * Neither the name of Google LLC nor the names of its",
" contributors may be used to endorse or promote products derived",
" from this software without specific prior written permission.",
"",
"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS",
"\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT",
"LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR",
"A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT",
"OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,",
"SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT",
"LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,",
"DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY",
"THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT",
"(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE",
"OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
],
"license": "BSD",
"version": "0.0.0"
}
],
"version": 1
}

View File

@ -0,0 +1,29 @@
{
"comments": {
"lineComment": "//",
"blockComment": [ "/*", "*/" ]
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
],
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["<", ">"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}

View File

@ -0,0 +1,35 @@
{
"name": "dart",
"displayName": "%displayName%",
"description": "%description%",
"version": "1.0.0",
"publisher": "vscode",
"license": "MIT",
"engines": {
"vscode": "0.10.x"
},
"scripts": {
"update-grammar": "node ../node_modules/vscode-grammar-updater/bin dart-lang/dart-syntax-highlight grammars/dart.json ./syntaxes/dart.tmLanguage.json"
},
"contributes": {
"languages": [
{
"id": "dart",
"extensions": [
".dart"
],
"aliases": [
"Dart"
],
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "dart",
"scopeName": "source.dart",
"path": "./syntaxes/dart.tmLanguage.json"
}
]
}
}

View File

@ -0,0 +1,4 @@
{
"displayName": "Dart Language Basics",
"description": "Provides syntax highlighting & bracket matching in Dart files."
}

View File

@ -0,0 +1,439 @@
{
"information_for_contributors": [
"This file has been converted from https://github.com/dart-lang/dart-syntax-highlight/blob/master/grammars/dart.json",
"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/dart-lang/dart-syntax-highlight/commit/65f211722c85e9fdf0aa658d5663e6ccaf2ebe25",
"name": "Dart",
"scopeName": "source.dart",
"patterns": [
{
"name": "meta.preprocessor.script.dart",
"match": "^(#!.*)$"
},
{
"name": "meta.declaration.dart",
"begin": "^\\w*\\b(library|import|part of|part|export)\\b",
"beginCaptures": {
"0": {
"name": "keyword.other.import.dart"
}
},
"end": ";",
"endCaptures": {
"0": {
"name": "punctuation.terminator.dart"
}
},
"patterns": [
{
"include": "#strings"
},
{
"include": "#comments"
},
{
"name": "keyword.other.import.dart",
"match": "\\b(as|show|hide)\\b"
}
]
},
{
"include": "#comments"
},
{
"include": "#punctuation"
},
{
"include": "#annotations"
},
{
"include": "#keywords"
},
{
"include": "#constants-and-special-vars"
},
{
"include": "#strings"
}
],
"repository": {
"dartdoc": {
"patterns": [
{
"match": "(\\[.*?\\])",
"captures": {
"0": {
"name": "variable.name.source.dart"
}
}
},
{
"match": "^ {4,}(?![ \\*]).*",
"captures": {
"0": {
"name": "variable.name.source.dart"
}
}
},
{
"contentName": "variable.other.source.dart",
"begin": "```.*?$",
"end": "```"
},
{
"match": "(`.*?`)",
"captures": {
"0": {
"name": "variable.other.source.dart"
}
}
},
{
"match": "(`.*?`)",
"captures": {
"0": {
"name": "variable.other.source.dart"
}
}
},
{
"match": "(\\* (( ).*))$",
"captures": {
"2": {
"name": "variable.other.source.dart"
}
}
},
{
"match": "(\\* .*)$"
}
]
},
"comments": {
"patterns": [
{
"name": "comment.block.empty.dart",
"match": "/\\*\\*/",
"captures": {
"0": {
"name": "punctuation.definition.comment.dart"
}
}
},
{
"include": "#comments-doc-oldschool"
},
{
"include": "#comments-doc"
},
{
"include": "#comments-inline"
}
]
},
"comments-doc-oldschool": {
"patterns": [
{
"name": "comment.block.documentation.dart",
"begin": "/\\*\\*",
"end": "\\*/",
"patterns": [
{
"include": "#comments-doc-oldschool"
},
{
"include": "#comments-block"
},
{
"include": "#dartdoc"
}
]
}
]
},
"comments-doc": {
"patterns": [
{
"name": "comment.block.documentation.dart",
"begin": "///",
"while": "^\\s*///",
"patterns": [
{
"include": "#dartdoc"
}
]
}
]
},
"comments-inline": {
"patterns": [
{
"include": "#comments-block"
},
{
"match": "((//).*)$",
"captures": {
"1": {
"name": "comment.line.double-slash.dart"
}
}
}
]
},
"comments-block": {
"patterns": [
{
"name": "comment.block.dart",
"begin": "/\\*",
"end": "\\*/",
"patterns": [
{
"include": "#comments-block"
}
]
}
]
},
"annotations": {
"patterns": [
{
"name": "storage.type.annotation.dart",
"match": "@[a-zA-Z]+"
}
]
},
"constants-and-special-vars": {
"patterns": [
{
"name": "constant.language.dart",
"match": "(?<!\\$)\\b(true|false|null)\\b(?!\\$)"
},
{
"name": "variable.language.dart",
"match": "(?<!\\$)\\b(this|super)\\b(?!\\$)"
},
{
"name": "constant.numeric.dart",
"match": "(?<!\\$)\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)\\b(?!\\$)"
},
{
"name": "support.class.dart",
"match": "(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|bool\\b|num\\b|int\\b|double\\b|dynamic\\b)"
},
{
"match": "([_$]*[a-z][a-zA-Z0-9_$]*)(<|\\(|\\s+=>)",
"captures": {
"1": {
"name": "entity.name.function.dart"
}
}
}
]
},
"keywords": {
"patterns": [
{
"name": "keyword.cast.dart",
"match": "(?<!\\$)\\bas\\b(?!\\$)"
},
{
"name": "keyword.control.catch-exception.dart",
"match": "(?<!\\$)\\b(try|on|catch|finally|throw|rethrow)\\b(?!\\$)"
},
{
"name": "keyword.control.dart",
"match": "(?<!\\$)\\b(break|case|continue|default|do|else|for|if|in|return|switch|while)\\b(?!\\$)"
},
{
"name": "keyword.control.dart",
"match": "(?<!\\$)\\b(sync(\\*)?|async(\\*)?|await|yield(\\*)?)\\b(?!\\$)"
},
{
"name": "keyword.control.dart",
"match": "(?<!\\$)\\bassert\\b(?!\\$)"
},
{
"name": "keyword.control.new.dart",
"match": "(?<!\\$)\\b(new)\\b(?!\\$)"
},
{
"name": "keyword.declaration.dart",
"match": "(?<!\\$)\\b(abstract|class|enum|extends|extension|external|factory|implements|get|mixin|native|operator|set|typedef|with|covariant)\\b(?!\\$)"
},
{
"name": "keyword.operator.dart",
"match": "(?<!\\$)\\b(is\\!?)\\b(?!\\$)"
},
{
"name": "keyword.operator.ternary.dart",
"match": "\\?|:"
},
{
"name": "keyword.operator.bitwise.dart",
"match": "(<<|>>>?|~|\\^|\\||&)"
},
{
"name": "keyword.operator.assignment.bitwise.dart",
"match": "((&|\\^|\\||<<|>>>?)=)"
},
{
"name": "keyword.operator.closure.dart",
"match": "(=>)"
},
{
"name": "keyword.operator.comparison.dart",
"match": "(==|!=|<=?|>=?)"
},
{
"name": "keyword.operator.assignment.arithmetic.dart",
"match": "(([+*/%-]|\\~)=)"
},
{
"name": "keyword.operator.assignment.dart",
"match": "(=)"
},
{
"name": "keyword.operator.increment-decrement.dart",
"match": "(\\-\\-|\\+\\+)"
},
{
"name": "keyword.operator.arithmetic.dart",
"match": "(\\-|\\+|\\*|\\/|\\~\\/|%)"
},
{
"name": "keyword.operator.logical.dart",
"match": "(!|&&|\\|\\|)"
},
{
"name": "storage.modifier.dart",
"match": "(?<!\\$)\\b(static|final|const|required|late)\\b(?!\\$)"
},
{
"name": "storage.type.primitive.dart",
"match": "(?<!\\$)\\b(?:void|var)\\b(?!\\$)"
}
]
},
"string-interp": {
"patterns": [
{
"match": "\\$(([a-zA-Z0-9_]+)|\\{([^{}]+)\\})",
"captures": {
"2": {
"name": "variable.parameter.dart"
},
"3": {
"name": "variable.parameter.dart"
}
}
},
{
"name": "constant.character.escape.dart",
"match": "\\\\."
}
]
},
"strings": {
"patterns": [
{
"name": "string.interpolated.triple.double.dart",
"begin": "(?<!r)\"\"\"",
"end": "\"\"\"(?!\")",
"patterns": [
{
"include": "#string-interp"
}
]
},
{
"name": "string.interpolated.triple.single.dart",
"begin": "(?<!r)'''",
"end": "'''(?!')",
"patterns": [
{
"include": "#string-interp"
}
]
},
{
"name": "string.quoted.triple.double.dart",
"begin": "r\"\"\"",
"end": "\"\"\"(?!\")"
},
{
"name": "string.quoted.triple.single.dart",
"begin": "r'''",
"end": "'''(?!')"
},
{
"name": "string.interpolated.double.dart",
"begin": "(?<!\\|r)\"",
"end": "\"",
"patterns": [
{
"name": "invalid.string.newline",
"match": "\\n"
},
{
"include": "#string-interp"
}
]
},
{
"name": "string.quoted.double.dart",
"begin": "r\"",
"end": "\"",
"patterns": [
{
"name": "invalid.string.newline",
"match": "\\n"
}
]
},
{
"name": "string.interpolated.single.dart",
"begin": "(?<!\\|r)'",
"end": "'",
"patterns": [
{
"name": "invalid.string.newline",
"match": "\\n"
},
{
"include": "#string-interp"
}
]
},
{
"name": "string.quoted.single.dart",
"begin": "r'",
"end": "'",
"patterns": [
{
"name": "invalid.string.newline",
"match": "\\n"
}
]
}
]
},
"punctuation": {
"patterns": [
{
"name": "punctuation.comma.dart",
"match": ","
},
{
"name": "punctuation.terminator.dart",
"match": ";"
},
{
"name": "punctuation.dot.dart",
"match": "\\."
}
]
}
}
}

View File

@ -36,7 +36,7 @@
"vscode-nls": "^4.0.0" "vscode-nls": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"prettier": { "prettier": {
"printWidth": 100, "printWidth": 100,

View File

@ -315,12 +315,10 @@ function updateStatusBar(context: vscode.ExtensionContext, state: State, busy =
} }
if (!statusItem) { if (!statusItem) {
statusItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); statusItem = vscode.window.createStatusBarItem('status.debug.autoAttach', vscode.StatusBarAlignment.Left);
statusItem.name = localize('status.name.auto.attach', "Debug Auto Attach");
statusItem.command = TOGGLE_COMMAND; statusItem.command = TOGGLE_COMMAND;
statusItem.tooltip = localize( statusItem.tooltip = localize('status.tooltip.auto.attach', "Automatically attach to node.js processes in debug mode");
'status.tooltip.auto.attach',
'Automatically attach to node.js processes in debug mode',
);
context.subscriptions.push(statusItem); context.subscriptions.push(statusItem);
} }

View File

@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/node@^12.19.9": "@types/node@14.x":
version "12.19.9" version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
vscode-nls@^4.0.0: vscode-nls@^4.0.0:
version "4.0.0" version "4.0.0"

View File

@ -69,19 +69,23 @@
"additionalProperties": false, "additionalProperties": false,
"markdownDescription": "%debug.server.ready.serverReadyAction.description%", "markdownDescription": "%debug.server.ready.serverReadyAction.description%",
"default": { "default": {
"action": "openExternally" "action": "debugWithEdge",
"pattern": "listening on port ([0-9]+)",
"uriFormat": "http://localhost:%s",
"webRoot": "${workspaceFolder}"
}, },
"properties": { "properties": {
"action": { "action": {
"type": "string", "type": "string",
"enum": [ "enum": [
"debugWithChrome" "debugWithChrome",
"debugWithEdge"
], ],
"enumDescriptions": [ "enumDescriptions": [
"%debug.server.ready.action.debugWithChrome.description%" "%debug.server.ready.action.debugWithChrome.description%"
], ],
"markdownDescription": "%debug.server.ready.action.description%", "markdownDescription": "%debug.server.ready.action.description%",
"default": "openExternally" "default": "debugWithEdge"
}, },
"pattern": { "pattern": {
"type": "string", "type": "string",
@ -147,7 +151,7 @@
"vscode-nls": "^4.0.0" "vscode-nls": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -16,7 +16,7 @@ const WEB_ROOT = '${workspaceFolder}';
interface ServerReadyAction { interface ServerReadyAction {
pattern: string; pattern: string;
action?: 'openExternally' | 'debugWithChrome' | 'startDebugging'; action?: 'openExternally' | 'debugWithChrome' | 'debugWithEdge' | 'startDebugging';
uriFormat?: string; uriFormat?: string;
webRoot?: string; webRoot?: string;
name?: string; name?: string;
@ -147,13 +147,11 @@ class ServerReadyDetector extends vscode.Disposable {
break; break;
case 'debugWithChrome': case 'debugWithChrome':
vscode.debug.startDebugging(session.workspaceFolder, { this.debugWithBrowser('pwa-chrome', session, uri);
type: 'pwa-chrome', break;
name: 'Chrome Debug',
request: 'launch', case 'debugWithEdge':
url: uri, this.debugWithBrowser('pwa-msedge', session, uri);
webRoot: args.webRoot || WEB_ROOT
});
break; break;
case 'startDebugging': case 'startDebugging':
@ -165,6 +163,16 @@ class ServerReadyDetector extends vscode.Disposable {
break; break;
} }
} }
private debugWithBrowser(type: string, session: vscode.DebugSession, uri: string) {
return vscode.debug.startDebugging(session.workspaceFolder, {
type,
name: 'Browser Debug',
request: 'launch',
url: uri,
webRoot: session.configuration.serverReadyAction.webRoot || WEB_ROOT
});
}
} }
export function activate(context: vscode.ExtensionContext) { export function activate(context: vscode.ExtensionContext) {

View File

@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/node@^12.19.9": "@types/node@14.x":
version "12.19.9" version "14.14.43"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.43.tgz#26bcbb0595b305400e8ceaf9a127a7f905ae49c8"
integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== integrity sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==
vscode-nls@^4.0.0: vscode-nls@^4.0.0:
version "4.0.0" version "4.0.0"

View File

@ -226,7 +226,11 @@
}, },
"output.selfClosingStyle": { "output.selfClosingStyle": {
"type": "string", "type": "string",
"enum": ["html", "xhtml", "xml"], "enum": [
"html",
"xhtml",
"xml"
],
"default": "html", "default": "html",
"markdownDescription": "%emmetPreferencesOutputSelfClosingStyle%" "markdownDescription": "%emmetPreferencesOutputSelfClosingStyle%"
}, },
@ -444,7 +448,7 @@
"deps": "yarn add vscode-emmet-helper" "deps": "yarn add vscode-emmet-helper"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^12.19.9" "@types/node": "14.x"
}, },
"dependencies": { "dependencies": {
"@emmetio/abbreviation": "^2.2.0", "@emmetio/abbreviation": "^2.2.0",

View File

@ -6,7 +6,7 @@
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import * as nls from 'vscode-nls'; import * as nls from 'vscode-nls';
import { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetFlatNode'; import { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetFlatNode';
import { getEmmetHelper, getFlatNode, getMappingForIncludedLanguages, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument, isOffsetInsideOpenOrCloseTag } from './util'; import { getEmmetHelper, getFlatNode, getHtmlFlatNode, getMappingForIncludedLanguages, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument, isOffsetInsideOpenOrCloseTag } from './util';
import { getRootNode as parseDocument } from './parseDocument'; import { getRootNode as parseDocument } from './parseDocument';
const localize = nls.loadMessageBundle(); const localize = nls.loadMessageBundle();
@ -56,7 +56,8 @@ export async function wrapWithAbbreviation(args: any): Promise<boolean> {
let { start, end } = rangeToReplace; let { start, end } = rangeToReplace;
const startOffset = document.offsetAt(start); const startOffset = document.offsetAt(start);
const startNode = getFlatNode(rootNode, startOffset, true); const documentText = document.getText();
const startNode = getHtmlFlatNode(documentText, rootNode, startOffset, true);
if (startNode && isOffsetInsideOpenOrCloseTag(startNode, startOffset)) { if (startNode && isOffsetInsideOpenOrCloseTag(startNode, startOffset)) {
start = document.positionAt(startNode.start); start = document.positionAt(startNode.start);
const nodeEndPosition = document.positionAt(startNode.end); const nodeEndPosition = document.positionAt(startNode.end);
@ -64,7 +65,7 @@ export async function wrapWithAbbreviation(args: any): Promise<boolean> {
} }
const endOffset = document.offsetAt(end); const endOffset = document.offsetAt(end);
const endNode = getFlatNode(rootNode, endOffset, true); const endNode = getHtmlFlatNode(documentText, rootNode, endOffset, true);
if (endNode && isOffsetInsideOpenOrCloseTag(endNode, endOffset)) { if (endNode && isOffsetInsideOpenOrCloseTag(endNode, endOffset)) {
const nodeStartPosition = document.positionAt(endNode.start); const nodeStartPosition = document.positionAt(endNode.start);
start = nodeStartPosition.isBefore(start) ? nodeStartPosition : start; start = nodeStartPosition.isBefore(start) ? nodeStartPosition : start;
@ -665,6 +666,8 @@ function expandAbbr(input: ExpandAbbreviationInput): string | undefined {
const expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter); const expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);
if (input.textToWrap) { if (input.textToWrap) {
// escape ${ sections, fixes #122231
input.textToWrap = input.textToWrap.map(e => e.replace(/\$\{/g, '\\\$\{'));
if (input.filter && input.filter.includes('t')) { if (input.filter && input.filter.includes('t')) {
input.textToWrap = input.textToWrap.map(line => { input.textToWrap = input.textToWrap.map(line => {
return line.replace(trimRegex, '').trim(); return line.replace(trimRegex, '').trim();

Some files were not shown because too many files have changed in this diff Show More