[
  {
    "path": ".all-contributorsrc",
    "content": "{\n  \"files\": [\n    \"README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"commitType\": \"docs\",\n  \"commitConvention\": \"angular\",\n  \"contributors\": [\n    {\n      \"login\": \"MaLuns\",\n      \"name\": \"白云苍狗\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/31614024?v=4\",\n      \"profile\": \"https://www.imalun.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Tiddler-7\",\n      \"name\": \"冷空气\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/73354813?v=4\",\n      \"profile\": \"https://github.com/Tiddler-7\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"imlinhanchao\",\n      \"name\": \"Hancel Lin\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1502581?v=4\",\n      \"profile\": \"http://my.hancel.org\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Torlinone\",\n      \"name\": \"Keriy\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/26668466?v=4\",\n      \"profile\": \"https://github.com/Torlinone\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ArthurMynl\",\n      \"name\": \"Arthur Meyniel\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/61516506?v=4\",\n      \"profile\": \"http://www.linkedin.com/in/arthurmeyniel\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"haryoiro\",\n      \"name\": \"haryoiro\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/55312590?v=4\",\n      \"profile\": \"https://github.com/haryoiro\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"DrBlackBird\",\n      \"name\": \"Tom\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/10115809?v=4\",\n      \"profile\": \"https://github.com/DrBlackBird\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"webwuyou\",\n      \"name\": \"风过无痕\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/15182683?v=4\",\n      \"profile\": \"http://www.webwuyou.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"whwnow\",\n      \"name\": \"whwnow\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1713701?v=4\",\n      \"profile\": \"https://github.com/whwnow\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"MichaelCurrin\",\n      \"name\": \"Michael Currin\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/18750745?v=4\",\n      \"profile\": \"https://github.com/MichaelCurrin\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"odinsam\",\n      \"name\": \"odinsam\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/68220289?v=4\",\n      \"profile\": \"https://www.odinsam.com/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"tys1128\",\n      \"name\": \"tys1128\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/24326849?v=4\",\n      \"profile\": \"https://github.com/tys1128\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"mlzzen\",\n      \"name\": \"mlzzen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/11664505?v=4\",\n      \"profile\": \"http://mlzzen.vercel.app\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"yeze322\",\n      \"name\": \"zeye\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/8528761?v=4\",\n      \"profile\": \"https://github.com/yeze322\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"moeyua\",\n      \"name\": \"Moeyua\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/45156493?v=4\",\n      \"profile\": \"https://blog.moeyua.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    }\n  ],\n  \"contributorsPerLine\": 7,\n  \"skipCi\": true,\n  \"repoType\": \"github\",\n  \"repoHost\": \"https://github.com\",\n  \"projectName\": \"git-commit-plugin\",\n  \"projectOwner\": \"RedJue\"\n}\n"
  },
  {
    "path": ".eslintrc.json",
    "content": "{\n    \"root\": true,\n    \"parser\": \"@typescript-eslint/parser\",\n    \"parserOptions\": {\n        \"ecmaVersion\": 6,\n        \"sourceType\": \"module\"\n    },\n    \"plugins\": [\"@typescript-eslint\"],\n    \"rules\": {\n        \"@typescript-eslint/class-name-casing\": \"warn\",\n        \"@typescript-eslint/semi\": \"warn\",\n        \"curly\": \"warn\",\n        \"eqeqeq\": \"warn\",\n        \"no-throw-literal\": \"warn\",\n        \"semi\": \"off\",\n        \"quotes\": [\"warn\", \"single\"],\n        \"indent\": [\"warn\", 4]\n    }\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "out\nnode_modules\n.vscode-test/\npackage-lock.json\n.vsix\n.DS_Store\ngit-commit-plugin-*.vsix\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n\t// See http://go.microsoft.com/fwlink/?LinkId=827846\n\t// for the documentation about the extensions.json format\n\t\"recommendations\": [\n\t\t\"dbaeumer.vscode-eslint\"\n\t]\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "// A launch configuration that compiles the extension and then opens it inside a new window\n// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"name\": \"Run Extension\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/**/*.js\"\n\t\t\t],\n\t\t\t\"preLaunchTask\": \"${defaultBuildTask}\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Extension Tests\",\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"runtimeExecutable\": \"${execPath}\",\n\t\t\t\"args\": [\n\t\t\t\t\"--extensionDevelopmentPath=${workspaceFolder}\",\n\t\t\t\t\"--extensionTestsPath=${workspaceFolder}/out/test/suite/index\"\n\t\t\t],\n\t\t\t\"outFiles\": [\n\t\t\t\t\"${workspaceFolder}/out/test/**/*.js\"\n\t\t\t],\n\t\t\t\"preLaunchTask\": \"${defaultBuildTask}\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "// Place your settings in this file to overwrite default and user settings.\n{\n    \"files.exclude\": {\n        \"out\": false // set this to true to hide the \"out\" folder with the compiled JS files\n    },\n    \"search.exclude\": {\n        \"out\": true // set this to false to include \"out\" folder in search results\n    },\n    // Turn off tsc task auto detection since we have the necessary tasks as npm scripts\n    \"typescript.tsc.autoDetect\": \"off\",\n    \"cSpell.words\": [\"commit\", \"costom\", \"type\"],\n    \"i18n-ally.localesPaths\": [\n        \"D:/GIT/git-commit-plugin/src/locale\",\n        \"D:/GIT/git-commit-plugin\"\n    ],\n    \"i18n-ally.keystyle\": \"flat\"\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "// See https://go.microsoft.com/fwlink/?LinkId=733558\n// for the documentation about the tasks.json format\n{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"type\": \"npm\",\n\t\t\t\"script\": \"watch\",\n\t\t\t\"problemMatcher\": \"$tsc-watch\",\n\t\t\t\"isBackground\": true,\n\t\t\t\"presentation\": {\n\t\t\t\t\"reveal\": \"never\"\n\t\t\t},\n\t\t\t\"group\": {\n\t\t\t\t\"kind\": \"build\",\n\t\t\t\t\"isDefault\": true\n\t\t\t}\n\t\t}\n\t]\n}"
  },
  {
    "path": ".vscodeignore",
    "content": ".vscode/**\n.vscode-test/**\nout/test/**\nsrc/**\n.gitignore\nvsc-extension-quickstart.md\n**/tsconfig.json\n**/.eslintrc.json\n**/*.map\n**/*.ts\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# CHANGELOG\n\n## [1.5.0]\n-   ✨ Feat: [adding \\<br\\> allows line breaks to be displayed](https://github.com/RedJue/git-commit-plugin/commit/afd6e136f145f0366c15a2cc5faa9befd6a379e7)\n## [1.4.0]\n-   ✨ Feat: [added option to copy commit message](https://github.com/RedJue/git-commit-plugin/issues/116)\n## [1.3.0]\n-   ✨ Feat: [允许将当前 commit message 作为 subject 默认内容](https://github.com/RedJue/git-commit-plugin/pull/100)\nTHX @[moeyua](https://github.com/moeyua)\n## [1.2.1]\n-   🐞Fix: [after restarting the extension host, the plugin cannot be activated normally](https://github.com/RedJue/git-commit-plugin/issues/93)\nTHX @[MaLuns](https://github.com/MaLuns)\n## [1.2.0]\n-   ✨ Feat: [zh-tw&zh-hk support](https://github.com/RedJue/git-commit-plugin/pull/90)\nTHX @[Tiddler-7](https://github.com/Tiddler-7)\n## [1.1.2]\n-   🐞Fix: [can't open with vscode v1.74.0](https://github.com/RedJue/git-commit-plugin/issues/79)\n-   🐞Fix: [更新 vscode 1.74.0（最新版）后无法使用](https://github.com/RedJue/git-commit-plugin/issues/81)\nTHX @[simida0852](https://github.com/simida0852)\nTHX @[Torlinone](https://github.com/Torlinone)\n-   🐞Fix: [<Subject> : no more than 20 words](https://github.com/RedJue/git-commit-plugin/issues/72)\nTHX @[ArthurMynl](https://github.com/ArthurMynl)\n## [1.1.0]\n-   ✨ Feat: [Added localization support for ja-jp](https://github.com/RedJue/git-commit-plugin/commit/d85c54eeb233c68afeeddd1493455884a6f4800b)\nTHX @[haryoiro](https://github.com/haryoiro)\n## [1.0.9]\n-   ✨ Feat: [Added localization](https://github.com/RedJue/git-commit-plugin/pull/60)\nTHX @[spotnick](https://github.com/spotnick)\n## [1.0.8]\n-   🐞Fix: [【Bug】无法添加多个自定义提交类型（commit type](https://github.com/RedJue/git-commit-plugin/issues/54)\n## [1.0.7]\n-   ✨Feat: [default type editable](https://github.com/RedJue/git-commit-plugin/commit/a7c43bc080b4ebfe12114e8b34923b03ed7cf8b6)\n-   📃Docs: [improve readability](https://github.com/RedJue/git-commit-plugin/commit/285afbf0e30c77c2d5068f37cdd2f42b86209b7b)\n THX @[MichaelCurrin](https://github.com/MichaelCurrin)\n -  🐞Fix: [修复未填写 scope 时输出空括号对问题](https://github.com/RedJue/git-commit-plugin/pull/52/commits/60ee9446aeef8253db95c807bec22197b7fe6b58)\n THX @[whwnow](https://github.com/whwnow)\n## [1.0.6]\n-   🐞Fix: [fix commit type crash](https://github.com/RedJue/git-commit-plugin/commit/1ddb2bc248233a689ff64a4416955b57a70538f8)\n## [1.0.5]\n-   ✨Feat: [add custom templates](https://github.com/RedJue/git-commit-plugin/commit/5225dfbbe33859e16246b29f81c3e926d559043d)\n THX @[odinsam](https://github.com/odinsam)\n## [1.0.4]\n-   🌈Style: [change icons](https://github.com/RedJue/git-commit-plugin/commit/611ecfb6c2cbf14436141056cc87da4530117c66)\n-   🐞Fix: issue [#36](https://github.com/RedJue/git-commit-plugin/issues/36)\n## [1.0.3]\n-   🐞Fix: [fix icon color fade](https://github.com/RedJue/git-commit-plugin/commit/977713698c21bdb11b1c2154d154b16343a2b570)\n\n## [1.0.2]\n-   🐞Fix: [fix type formatting](https://github.com/RedJue/git-commit-plugin/commit/418279d0c6372068c0923b8aeb7c44b546318d89)\n## [1.0.1]\n-   🐞Fix: issue [#33](https://github.com/RedJue/git-commit-plugin/issues/33)\n-   🐞Fix: issue [#29](https://github.com/RedJue/git-commit-plugin/issues/29)\n## [1.0.0]\n\n-   🐞Fix: issue [#17](https://github.com/RedJue/git-commit-plugin/issues/17)\n-   🐞Fix: issue [#21](https://github.com/RedJue/git-commit-plugin/issues/21)\n-   🐞Fix: issue [#23](https://github.com/RedJue/git-commit-plugin/issues/23)\n-   🐞Fix: issue [#19](https://github.com/RedJue/git-commit-plugin/issues/19)\n\n## [0.0.5]\n\n-   🐞Fix: issue [#13](https://github.com/RedJue/git-commit-plugin/issues/13)\n-   🐞Fix: issue [#14](https://github.com/RedJue/git-commit-plugin/issues/14)\n-   🐞Fix: issue [#15](https://github.com/RedJue/git-commit-plugin/issues/15)\n\n## [0.0.4]\n\n-   ✨Feat: [Show Emoji](https://github.com/RedJue/git-commit-plugin/commit/426e3afad2c4568f946efda922412913d73e2836#diff-1750a4dcc9a0a9b1773d275e96c46a1e)\n-   ✨Feat: [Custom Commit Type](https://github.com/RedJue/git-commit-plugin/commit/7344a1f5f65a7cf0f03a32701d53d1510777fb0a#diff-1750a4dcc9a0a9b1773d275e96c46a1e)\n-   ✨Feat: [Max Subject Words](https://github.com/RedJue/git-commit-plugin/commit/7344a1f5f65a7cf0f03a32701d53d1510777fb0a#diff-1750a4dcc9a0a9b1773d275e96c46a1e)\n-   🐞Fix: issue [#2](https://github.com/RedJue/git-commit-plugin/issues/2)\n-   🐞Fix: issue [#8](https://github.com/RedJue/git-commit-plugin/issues/8)\n\n## [0.0.3]\n\n-   Add README.md\n-   Fix bug\n\n## [0.0.2]\n\n-   Fix bug\n\n## [0.0.1]\n\n-   Initial release\n"
  },
  {
    "path": "LICENSE",
    "content": "  \nMIT License\n\nCopyright (c) 2018 RedJue\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Git Commit Plugin For VS Code\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n[![All Contributors](https://img.shields.io/badge/all_contributors-15-orange.svg?style=flat-square)](#contributors-)\n<!-- ALL-CONTRIBUTORS-BADGE:END -->\n> Automatically generate git commit messages\n\n![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/redjue.git-commit-plugin)\n![Visual Studio Marketplace Downloads](https://img.shields.io/visual-studio-marketplace/d/redjue.git-commit-plugin)\n![Visual Studio Marketplace Installs](https://img.shields.io/visual-studio-marketplace/i/redjue.git-commit-plugin)\n![Visual Studio Marketplace Rating (Stars)](https://img.shields.io/visual-studio-marketplace/stars/redjue.git-commit-plugin)\n![Visual Studio Marketplace Rating](https://img.shields.io/visual-studio-marketplace/r/redjue.git-commit-plugin)\n![GitHub contributors](https://img.shields.io/github/contributors/RedJue/git-commit-plugin)\n![GitHub last commit](https://img.shields.io/github/last-commit/RedJue/git-commit-plugin)\n![GitHub](https://img.shields.io/github/license/RedJue/git-commit-plugin?color=green)\n\n\n## Requirements\n\n- VS Code `1.42.0` or higher.\n- VS Code's built-in Git plugin \n\n## Format\n\nThis extension follows the [Angular Team Commit Specification](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines), as follows:\n\n```\n<type>(<scope>): <subject>\n<BLANK LINE>\n<body>\n<BLANK LINE>\n<footer>\n```\n\nSee info on the fields below.\n\n### Type\n\nMust be one of the following:\n\nType | Description\n---  | ---\n**feat** | A new feature\n**fix** | A bug fix\n**docs** | Documentation only changes\n**style**: | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\n**refactor** | A code change that neither fixes a bug nor adds a feature\n**perf** | A code change that improves performance\n**test** | Adding missing or correcting existing tests\n**chore** | Changes to the build process or auxiliary tools and libraries such as documentation generation\n\n### Scope\n\nThe scope could be anything specifying place of the commit change. For example `$location`, `$browser`, `$compile`, `$rootScope`, `ngHref`, `ngClick`, `ngView`, etc...\n\nYou can use `*` when the change affects more than a single scope.\n\n### Subject\n\nThe subject contains succinct description of the change:\n\n-   use the imperative, present tense: \"change\" not \"changed\" nor \"changes\"\n-   don't capitalize first letter\n-   no dot (`.`) at the end\n\n### Body\n\nJust as in the **subject**, use the imperative, present tense: \"change\" not \"changed\" nor \"changes\". The body should include the motivation for the change and contrast this with previous behavior.\n\n### Footer\n\nThe footer should contain any information about **Breaking Changes** and is also the place to [reference GitHub issues that this commit closes](https://help.github.com/articles/closing-issues-via-commit-messages/).\n\n**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.\n\nA detailed explanation can be found in this [document](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#).\n\n## Quick Start\n\n1. Install the plugin\n1. Use the command shortcut `showGitCommit` to open the command window or Click the icon on the git plugin navigation bar\n    ![open](/assets/open.gif)\n1. Enter the commit information, which automatically generates a commit message that conforms to the specification\n    ![edit](/assets/edit.gif)\n\n## Locale Support\nThe plugin will automatically switch the language description based on the `vscode` language environment.\n\n**Support Language**\n- en-US as default\n- zh-CN\n- zh-HK\n- zh-TW\n- ja-JP\n\n## Settings Options\n\n-   `GitCommitPlugin.ShowEmoji`: whether to show emoji, default `true`.\n    ```json\n    {\n      \"GitCommitPlugin.ShowEmoji\": true\n    }\n    ```\n-   `GitCommitPlugin.CustomCommitType`: customize the commit type, default `null`.\n    ```json5\n    { \n      \"GitCommitPlugin.CustomCommitType\": [\n        \"customTypeName\"\n      ]\n    }\n    ```\n    or\n    ```json5\n    [\n       {\n           // If there are duplicate keys, rewrite the config，otherwise add As a new configuration addition\n           \"key\": \"customTypeKey\", \n           \"label\": \"customTypeName\",\n           \"detail\": \"customTypeDetail\",\n           \"icon\":\"customIcon\"\n       }\n    ]\n    ```\n-   `GitCommitPlugin.MaxSubjectCharacters`: customize the maximum number of words on the subject, default `20`.\n    ```json\n    {\n      \"GitCommitPlugin.MaxSubjectCharacters\": 20\n    }\n    ```\n-  `GitCommitPlugin.FillSubjectWithCurrent`: whether to fill the subject with the current commit message, default `false`.\n    ```json\n    {\n      \"GitCommitPlugin.FillSubjectWithCurrent\": false\n    }\n    ```\n-   `GitCommitPlugin.Template`: customize the git commit template.\n    ```json5\n    {\n      \"GitCommitPlugin.Templates\": [\n        {\n            \"templateName\": \"Angular\",\n            \"templateContent\": \"<icon><space><type>(<scope>):<space><subject><enter><body><enter><footer>\"\n        },\n        {\n            \"templateName\": \"git-cz\",\n            \"templateContent\": \"<type>(<scope>):<space><icon><space><subject><enter><body><enter><footer>\",\n             // Set as default commit template\n            \"default\":true\n        }\n      ]\n    }\n    ```\n\n## License\n\nReleased under [MIT](/LICENSE) by [@RedJue](https://github.com/RedJue).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.imalun.com\"><img src=\"https://avatars.githubusercontent.com/u/31614024?v=4?s=100\" width=\"100px;\" alt=\"白云苍狗\"/><br /><sub><b>白云苍狗</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=MaLuns\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Tiddler-7\"><img src=\"https://avatars.githubusercontent.com/u/73354813?v=4?s=100\" width=\"100px;\" alt=\"冷空气\"/><br /><sub><b>冷空气</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=Tiddler-7\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://my.hancel.org\"><img src=\"https://avatars.githubusercontent.com/u/1502581?v=4?s=100\" width=\"100px;\" alt=\"Hancel Lin\"/><br /><sub><b>Hancel Lin</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=imlinhanchao\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Torlinone\"><img src=\"https://avatars.githubusercontent.com/u/26668466?v=4?s=100\" width=\"100px;\" alt=\"Keriy\"/><br /><sub><b>Keriy</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=Torlinone\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.linkedin.com/in/arthurmeyniel\"><img src=\"https://avatars.githubusercontent.com/u/61516506?v=4?s=100\" width=\"100px;\" alt=\"Arthur Meyniel\"/><br /><sub><b>Arthur Meyniel</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=ArthurMynl\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/haryoiro\"><img src=\"https://avatars.githubusercontent.com/u/55312590?v=4?s=100\" width=\"100px;\" alt=\"haryoiro\"/><br /><sub><b>haryoiro</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=haryoiro\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DrBlackBird\"><img src=\"https://avatars.githubusercontent.com/u/10115809?v=4?s=100\" width=\"100px;\" alt=\"Tom\"/><br /><sub><b>Tom</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=DrBlackBird\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.webwuyou.com\"><img src=\"https://avatars.githubusercontent.com/u/15182683?v=4?s=100\" width=\"100px;\" alt=\"风过无痕\"/><br /><sub><b>风过无痕</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=webwuyou\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/whwnow\"><img src=\"https://avatars.githubusercontent.com/u/1713701?v=4?s=100\" width=\"100px;\" alt=\"whwnow\"/><br /><sub><b>whwnow</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=whwnow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MichaelCurrin\"><img src=\"https://avatars.githubusercontent.com/u/18750745?v=4?s=100\" width=\"100px;\" alt=\"Michael Currin\"/><br /><sub><b>Michael Currin</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=MichaelCurrin\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.odinsam.com/\"><img src=\"https://avatars.githubusercontent.com/u/68220289?v=4?s=100\" width=\"100px;\" alt=\"odinsam\"/><br /><sub><b>odinsam</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=odinsam\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tys1128\"><img src=\"https://avatars.githubusercontent.com/u/24326849?v=4?s=100\" width=\"100px;\" alt=\"tys1128\"/><br /><sub><b>tys1128</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=tys1128\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://mlzzen.vercel.app\"><img src=\"https://avatars.githubusercontent.com/u/11664505?v=4?s=100\" width=\"100px;\" alt=\"mlzzen\"/><br /><sub><b>mlzzen</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=mlzzen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yeze322\"><img src=\"https://avatars.githubusercontent.com/u/8528761?v=4?s=100\" width=\"100px;\" alt=\"zeye\"/><br /><sub><b>zeye</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=yeze322\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.moeyua.com\"><img src=\"https://avatars.githubusercontent.com/u/45156493?v=4?s=100\" width=\"100px;\" alt=\"Moeyua\"/><br /><sub><b>Moeyua</b></sub></a><br /><a href=\"https://github.com/RedJue/git-commit-plugin/commits?author=moeyua\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"git-commit-plugin\",\n    \"displayName\": \"git-commit-plugin\",\n    \"description\": \"Automatically generate git commit\",\n    \"version\": \"1.5.0\",\n    \"engines\": {\n        \"vscode\": \"^1.42.0\"\n    },\n    \"publisher\": \"redjue\",\n    \"license\": \"MIT\",\n    \"homepage\": \"https://github.com/RedJue/git-commit-plugin/blob/master/README.md\",\n    \"bugs\": {\n        \"url\": \"https://github.com/RedJue/git-commit-plugin/issues\"\n    },\n    \"icon\": \"assets/logo.png\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/RedJue/git-commit-plugin\"\n    },\n    \"keywords\": [\n        \"git\",\n        \"commit\",\n        \"vscode\"\n    ],\n    \"categories\": [\n        \"Other\"\n    ],\n    \"activationEvents\": [\n        \"onCommand:extension.showGitCommit\"\n    ],\n    \"main\": \"./out/extension.js\",\n    \"contributes\": {\n        \"commands\": [\n            {\n                \"command\": \"extension.showGitCommit\",\n                \"title\": \"%extension.showGitCommit.title%\",\n                \"placeholer\": \"%extension.showGitCommit.placeholder%\",\n                \"icon\": \"$(octoface)\"\n            }\n        ],\n        \"configuration\": {\n            \"type\": \"object\",\n            \"title\": \"Git Commit Plugin\",\n            \"properties\": {\n                \"GitCommitPlugin.ShowEmoji\": {\n                    \"type\": \"boolean\",\n                    \"default\": true,\n                    \"markdownDescription\": \"%extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription%\"\n                },\n                \"GitCommitPlugin.CustomCommitType\": {\n                    \"type\": \"array\",\n                    \"default\": [],\n                    \"items\": {\n                        \"type\": [\n                            \"object\",\n                            \"string\"\n                        ]\n                    },\n                    \"markdownDescription\": \"%extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription%\",\n                    \"scope\": \"resource\"\n                },\n                \"GitCommitPlugin.MaxSubjectCharacters\": {\n                    \"type\": \"number\",\n                    \"default\": 20,\n                    \"markdownDescription\": \"%extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters%\"\n                },\n                \"GitCommitPlugin.FillSubjectWithCurrent\": {\n                    \"type\": \"boolean\",\n                    \"default\": false,\n                    \"markdownDescription\": \"%extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent%\"\n                },\n                \"GitCommitPlugin.Templates\": {\n                    \"type\": \"array\",\n                    \"default\": [],\n                    \"markdownDescription\": \"%extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates%\",\n                    \"items\": [\n                        {\n                            \"templateName\": \"Angular\",\n                            \"templateContent\": \"<icon><space><type>(<scope>):<space><subject><enter><body><enter><footer>\"\n                        },\n                        {\n                            \"templateName\": \"git-cz\",\n                            \"templateContent\": \"<type>(<scope>):<space><icon><space><subject><enter><body><enter><footer>\"\n                        }\n                    ]\n                }\n            }\n        },\n        \"menus\": {\n            \"scm/title\": [\n                {\n                    \"when\": \"scmProvider == git\",\n                    \"command\": \"extension.showGitCommit\",\n                    \"group\": \"navigation\"\n                }\n            ]\n        }\n    },\n    \"scripts\": {\n        \"vscode:prepublish\": \"npm run compile\",\n        \"compile\": \"tsc -p ./\",\n        \"lint\": \"eslint src --ext ts --fix\",\n        \"watch\": \"tsc -watch -p ./\",\n        \"build\": \"vsce package\",\n        \"pretest\": \"npm run compile && npm run lint\",\n        \"test\": \"node ./out/test/runTest.js\"\n    },\n    \"devDependencies\": {\n        \"@types/glob\": \"^7.1.1\",\n        \"@types/mocha\": \"^7.0.1\",\n        \"@types/node\": \"^12.11.7\",\n        \"@types/vscode\": \"^1.42.0\",\n        \"@typescript-eslint/eslint-plugin\": \"^2.18.0\",\n        \"@typescript-eslint/parser\": \"^2.18.0\",\n        \"eslint\": \"^6.8.0\",\n        \"glob\": \"^7.1.6\",\n        \"mocha\": \"^7.0.1\",\n        \"typescript\": \"^3.7.5\",\n        \"vscode-test\": \"^1.3.0\"\n    },\n    \"dependencies\": {\n        \"vsce\": \"^1.95.0\",\n        \"vscode-nls-i18n\": \"^0.2.4\"\n    }\n}"
  },
  {
    "path": "package.nls.ja.json",
    "content": "{\n    \"extension.showGitCommit.title\": \"show git commit template\",\n    \"extension.showGitCommit.placeholder\": \"コミットタイプの検索\",\n    \"extension.showGitCommit.description.placeholder\": \"コミット詳細の検索\",\n    \"extension.showGitCommit.selectTemplate.placeholder\": \"使用するコミットテンプレートを選択\",\n    \"extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription\": \"絵文字アイコンを表示するかどうか制御します。\",\n    \"extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription\": \"独自の`Git Commit Type`を構成します。\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters\": \"有効な **Subject** の文字数を制御します。デフォルト値 `20`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent\": \"現在のコミットメッセージを **Subject** に自動的に入力するかどうかを制御します。デフォルト値 `false`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates\": \"コミットテンプレートを構成します。Angularコミットテンプレートを参照。\",\n    \"extension.commitInputType.detail\": \"コミットメッセージを入力\",\n    \"extension.commitDetailType.scope.description\": \"範囲\",\n    \"extension.commitDetailType.scope.detail\": \"このコミットで影響を受けるパッケージなどを指定\",\n    \"extension.commitDetailType.subject.description\": \"概要\",\n    \"extension.commitDetailType.subject.detail\": \"コミットの概要を記述 (最大文字数: {0})\",\n    \"extension.commitDetailType.body.description\": \"詳細\",\n    \"extension.commitDetailType.body.detail\": \"提出の詳細、<br> を追加すると改行表示ができます\",\n    \"extension.commitDetailType.footer.description\": \"備考\",\n    \"extension.commitDetailType.footer.detail\": \"コミットログの内容に関連したIssueのリンクなどを記述\",\n    \"extension.commitDetailType.complete.detail\": \"コミットの編集を反映して終了\",\n    \"extension.commitDetailType.template.detail\": \"どのコミットテンプレートを使用するか選択\",\n    \"extension.commitDetailType.message.copy\": \"投稿情報をコピーする\",\n    \"extension.commitDetailType.message.copy.tip\": \"コミットメッセージがクリップボードにコピーされました！\",\n    \"extension.commitDetailType.back.detail\": \"コミットタイプ選択ページへ戻る\",\n    \"extension.commitType.init.detail\": \"プロジェクト初期化\",\n    \"extension.commitType.feat.detail\": \"新規機能追加\",\n    \"extension.commitType.fix.detail\": \"バグ修正\",\n    \"extension.commitType.docs.detail\": \"ドキュメントのみの変更\",\n    \"extension.commitType.style.detail\": \"フォーマットの変更（コードの動作に影響しないスペース、フォーマット、セミコロンなど）\",\n    \"extension.commitType.refactor.detail\": \"リファクタリングのための変更（新規機能やバグ修正を含まない）\",\n    \"extension.commitType.perf.detail\": \"パフォーマンス改善のための変更\",\n    \"extension.commitType.test.detail\": \"不足テストの追加や既存テストの修正\",\n    \"extension.commitType.build.detail\": \"ビルドシステムや外部依存に関する変更（スコープ例: gulp, broccoli, npm）\",\n    \"extension.commitType.ci.detail\": \"CI用の設定やスクリプトに関する設定（スコープ例: Travis, Circle, k8s, Docker）\",\n    \"extension.commitType.chore.detail\": \"その他の変更（ソースやテストの変更を含まない）\",\n    \"extension.commitType.revert.detail\": \"以前のコミットへ戻す\"\n}"
  },
  {
    "path": "package.nls.json",
    "content": "{\n    \"extension.showGitCommit.title\": \"show git commit template\",\n    \"extension.showGitCommit.placeholder\": \"Search Git Commit Type\",\n    \"extension.showGitCommit.description.placeholder\": \"Search Commit Description\",\n    \"extension.showGitCommit.selectTemplate.placeholder\": \"Select the template to submit for use\",\n    \"extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription\": \"Show or not show `Emoji` icons\",\n    \"extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription\": \"Add custom `Git Commit Type`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters\": \"Set the valid length of **Subject**, default `20` characters\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent\": \"Set whether to fill in the current commit message of **Subject**, default `false`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates\": \"Commit template, you can refer to Angular template settings\",\n    \"extension.commitInputType.detail\": \"Input Commit Message\",\n    \"extension.commitDetailType.scope.description\": \"Scope of Modification\",\n    \"extension.commitDetailType.scope.detail\": \"What modules are included in this revision\",\n    \"extension.commitDetailType.subject.description\": \"Overview\",\n    \"extension.commitDetailType.subject.detail\": \"Commit Overview No more than {0} characters\",\n    \"extension.commitDetailType.body.description\": \"Details\",\n    \"extension.commitDetailType.body.detail\": \"Submission details: adding <br> allows line breaks to be displayed.\",\n    \"extension.commitDetailType.footer.description\": \"Remarks\",\n    \"extension.commitDetailType.footer.detail\": \"Usually a link to fix a bug\",\n    \"extension.commitDetailType.complete.detail\": \"Finish writing the commit\",\n    \"extension.commitDetailType.template.detail\": \"Select the template to submit for use\",\n    \"extension.commitDetailType.message.copy\": \"Copy the commit message\",\n    \"extension.commitDetailType.message.copy.tip\": \"The commit message has been copied to the clipboard!\",\n    \"extension.commitDetailType.back.detail\": \"Return to the commit type selection page\",\n    \"extension.commitType.init.detail\": \"Project initialization\",\n    \"extension.commitType.feat.detail\": \"Adding new features\",\n    \"extension.commitType.fix.detail\": \"Fixing bugs\",\n    \"extension.commitType.docs.detail\": \"Modify documentation only\",\n    \"extension.commitType.style.detail\": \"Only the spaces, formatting indentation, commas, etc. were changed, not the code logic\",\n    \"extension.commitType.refactor.detail\": \"Code refactoring, no new features added or bugs fixed\",\n    \"extension.commitType.perf.detail\": \"Optimization-related, such as improving performance, experience\",\n    \"extension.commitType.test.detail\": \"Adding test cases\",\n    \"extension.commitType.build.detail\": \"Dependency-related content\",\n    \"extension.commitType.ci.detail\": \"CI configuration related e.g. changes to k8s, docker configuration files\",\n    \"extension.commitType.chore.detail\": \"Changed the build process, or added dependencies, tools, etc.\",\n    \"extension.commitType.revert.detail\": \"Rollback to the previous version\"\n}"
  },
  {
    "path": "package.nls.zh-cn.json",
    "content": "{\n    \"extension.showGitCommit.title\": \"show git commit template\",\n    \"extension.showGitCommit.placeholder\": \"搜索提交类型\",\n    \"extension.showGitCommit.description.placeholder\": \"搜索提交描述\",\n    \"extension.showGitCommit.selectTemplate.placeholder\": \"选择提交使用的模板\",\n    \"extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription\": \"是否展现 `Emoji` 图标\",\n    \"extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription\": \"自定义添加 `Git Commit Type`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters\": \"设置 **Subject** 的有效长度，默认 `20` 字符\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent\": \"设置 **Subject** 是否填充当前 Commit Message，默认 `false`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates\": \"提交模板设置，可以参考 Angular 模板设置\",\n    \"extension.commitInputType.detail\": \"请输入提交信息\",\n    \"extension.commitDetailType.scope.description\": \"修改范围\",\n    \"extension.commitDetailType.scope.detail\": \"本次修改包含哪些模块\",\n    \"extension.commitDetailType.subject.description\": \"概述\",\n    \"extension.commitDetailType.subject.detail\": \"提交概述，不超过{0}字符\",\n    \"extension.commitDetailType.body.description\": \"详情\",\n    \"extension.commitDetailType.body.detail\": \"提交详情，加 <br> 可换行显示\",\n    \"extension.commitDetailType.footer.description\": \"备注\",\n    \"extension.commitDetailType.footer.detail\": \"通常是修复 bug 的链接\",\n    \"extension.commitDetailType.complete.detail\": \"完成提交的编写\",\n    \"extension.commitDetailType.template.detail\": \"选择提交使用的模板\",\n    \"extension.commitDetailType.message.copy\": \"拷贝提交信息\",\n    \"extension.commitDetailType.message.copy.tip\": \"提交信息已复制到剪贴板！\",\n    \"extension.commitDetailType.back.detail\": \"返回提交类型选择页\",\n    \"extension.commitType.init.detail\": \"项目初始化\",\n    \"extension.commitType.feat.detail\": \"添加新特性\",\n    \"extension.commitType.fix.detail\": \"修复bug\",\n    \"extension.commitType.docs.detail\": \"仅仅修改文档\",\n    \"extension.commitType.style.detail\": \"仅仅修改了空格、格式缩进、逗号等等，不改变代码逻辑\",\n    \"extension.commitType.refactor.detail\": \"代码重构，没有加新功能或者修复bug\",\n    \"extension.commitType.perf.detail\": \"优化相关，比如提升性能、体验\",\n    \"extension.commitType.test.detail\": \"增加测试用例\",\n    \"extension.commitType.build.detail\": \"依赖相关的内容\",\n    \"extension.commitType.ci.detail\": \"ci配置相关 例如对 k8s，docker的配置文件的修改\",\n    \"extension.commitType.chore.detail\": \"改变构建流程、或者增加依赖库、工具等\",\n    \"extension.commitType.revert.detail\": \"回滚到上一个版本\"\n}"
  },
  {
    "path": "package.nls.zh-hk.json",
    "content": "{\n    \"extension.showGitCommit.title\": \"show git commit template\",\n    \"extension.showGitCommit.placeholder\": \"搜索提交類型\",\n    \"extension.showGitCommit.description.placeholder\": \"搜索提交描述\",\n    \"extension.showGitCommit.selectTemplate.placeholder\": \"選擇提交使用的模板\",\n    \"extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription\": \"是否展現 `Emoji` 圖標\",\n    \"extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription\": \"自定義增添 `Git Commit Type`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters\": \"設定 **Subject** 的有效長度，默認 `20` 字符\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent\": \"是否填充 **Subject** 的當前 Commit Message，默認 `false`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates\": \"提交模板設定，可以參考 Angular 模板設定\",\n    \"extension.commitInputType.detail\": \"請輸入提交信息\",\n    \"extension.commitDetailType.scope.description\": \"修改範圍\",\n    \"extension.commitDetailType.scope.detail\": \"本次修改包含哪些模塊\",\n    \"extension.commitDetailType.subject.description\": \"概述\",\n    \"extension.commitDetailType.subject.detail\": \"提交概述，不超過{0}字符\",\n    \"extension.commitDetailType.body.description\": \"詳情\",\n    \"extension.commitDetailType.body.detail\": \"提交詳情，加入 <br> 可換行顯示\",\n    \"extension.commitDetailType.footer.description\": \"备注備註\",\n    \"extension.commitDetailType.footer.detail\": \"通常是修復 bug 的鏈接\",\n    \"extension.commitDetailType.complete.detail\": \"完成提交的編寫\",\n    \"extension.commitDetailType.template.detail\": \"選擇提交使用的模板\",\n    \"extension.commitDetailType.message.copy\": \"拷貝提交信息\",\n    \"extension.commitDetailType.message.copy.tip\": \"提交信息已複製到剪貼板！\",\n    \"extension.commitDetailType.back.detail\": \"返回提交類型選擇頁\",\n    \"extension.commitType.init.detail\": \"項目初始化\",\n    \"extension.commitType.feat.detail\": \"添加新特性\",\n    \"extension.commitType.fix.detail\": \"修復bug\",\n    \"extension.commitType.docs.detail\": \"僅僅修改文檔\",\n    \"extension.commitType.style.detail\": \"僅僅修改了空格、格式縮進、逗號等等，不改變代碼邏輯\",\n    \"extension.commitType.refactor.detail\": \"代碼重構，沒有加新功能或者修復bug\",\n    \"extension.commitType.perf.detail\": \"優化相關，比如提升性能、體驗\",\n    \"extension.commitType.test.detail\": \"增添測試用例\",\n    \"extension.commitType.build.detail\": \"依賴相關的內容\",\n    \"extension.commitType.ci.detail\": \"ci配置相關 例如對 k8s，docker的配置文件的修改\",\n    \"extension.commitType.chore.detail\": \"改變構建流程、或者增加依賴庫、工具等\",\n    \"extension.commitType.revert.detail\": \"回滾到上一個版本\"\n}"
  },
  {
    "path": "package.nls.zh-tw.json",
    "content": "{\n    \"extension.showGitCommit.title\": \"show git commit template\",\n    \"extension.showGitCommit.placeholder\": \"搜索提交類型\",\n    \"extension.showGitCommit.description.placeholder\": \"搜索提交描述\",\n    \"extension.showGitCommit.selectTemplate.placeholder\": \"選擇提交使用的模板\",\n    \"extension.configuration.GitCommitPlugin.ShowEmoji.markdownDescription\": \"是否展現 `Emoji` 圖標\",\n    \"extension.configuration.GitCommitPlugin.CustomCommitType.markdownDescription\": \"自定義增添 `Git Commit Type`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.MaxSubjectCharacters\": \"設定 **Subject** 的有效長度，默認 `20` 字符\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.FillSubjectWithCurrent\": \"是否填充 **Subject** 的當前 Commit Message，默認 `false`\",\n    \"extension.configuration.GitCommitPlugin.GitCommitPlugin.Templates\": \"提交模板設定，可以參考 Angular 模板設定\",\n    \"extension.commitInputType.detail\": \"請輸入提交信息\",\n    \"extension.commitDetailType.scope.description\": \"修改範圍\",\n    \"extension.commitDetailType.scope.detail\": \"本次修改包含哪些模塊\",\n    \"extension.commitDetailType.subject.description\": \"概述\",\n    \"extension.commitDetailType.subject.detail\": \"提交概述，不超過{0}字符\",\n    \"extension.commitDetailType.body.description\": \"詳情\",\n    \"extension.commitDetailType.body.detail\": \"提交詳情，加入 <br> 可換行顯示\",\n    \"extension.commitDetailType.footer.description\": \"备注備註\",\n    \"extension.commitDetailType.footer.detail\": \"通常是修復 bug 的鏈接\",\n    \"extension.commitDetailType.complete.detail\": \"完成提交的編寫\",\n    \"extension.commitDetailType.template.detail\": \"選擇提交使用的模板\",\n    \"extension.commitDetailType.message.copy\": \"複製提交資訊\",\n    \"extension.commitDetailType.message.copy.tip\": \"提交資訊已複製到剪貼簿！\",\n    \"extension.commitDetailType.back.detail\": \"返回提交類型選擇頁\",\n    \"extension.commitType.init.detail\": \"項目初始化\",\n    \"extension.commitType.feat.detail\": \"添加新特性\",\n    \"extension.commitType.fix.detail\": \"修復bug\",\n    \"extension.commitType.docs.detail\": \"僅僅修改文檔\",\n    \"extension.commitType.style.detail\": \"僅僅修改了空格、格式縮進、逗號等等，不改變代碼邏輯\",\n    \"extension.commitType.refactor.detail\": \"代碼重構，沒有加新功能或者修復bug\",\n    \"extension.commitType.perf.detail\": \"優化相關，比如提升性能、體驗\",\n    \"extension.commitType.test.detail\": \"增添測試用例\",\n    \"extension.commitType.build.detail\": \"依賴相關的內容\",\n    \"extension.commitType.ci.detail\": \"ci配置相關 例如對 k8s，docker的配置文件的修改\",\n    \"extension.commitType.chore.detail\": \"改變構建流程、或者增加依賴庫、工具等\",\n    \"extension.commitType.revert.detail\": \"回滾到上一個版本\"\n}"
  },
  {
    "path": "src/config/commit-detail.ts",
    "content": "import { QuickPickItem, QuickPickOptions, workspace } from 'vscode';\nimport { localize } from 'vscode-nls-i18n';\n\n/**\n * @description git commit detail 提交信息的详情\n */\nexport interface CommitDetailType extends QuickPickItem {\n    key?: string | number;\n    isEdit?: boolean;\n}\n//最大的 subject 限制字数 Max subject characters\nexport const MaxSubjectCharacters =\n    workspace.getConfiguration('GitCommitPlugin').get<number>('MaxSubjectCharacters') || 20;\n\nexport const FillSubjectWithCurrent = workspace.getConfiguration('GitCommitPlugin').get<boolean>('FillSubjectWithCurrent') || false;\n\nexport function GetCommitDetailType() {\n    const CommitDetailType: Array<CommitDetailType> = [\n        {\n            label: '<Scope>',\n            key: 'scope',\n            description: localize('extension.commitDetailType.scope.description'),\n            detail: localize('extension.commitDetailType.scope.detail'),\n            isEdit: false,\n        },\n        {\n            label: '<Subject>',\n            key: 'subject',\n            description: localize('extension.commitDetailType.subject.description'),\n            detail: localize(\n                'extension.commitDetailType.subject.detail',\n                MaxSubjectCharacters.toString(),\n            ),\n            isEdit: false,\n        },\n        {\n            label: '<Body>',\n            key: 'body',\n            description: localize('extension.commitDetailType.body.description'),\n            detail: localize('extension.commitDetailType.body.detail'),\n            isEdit: false,\n        },\n        {\n            label: '<Footer>',\n            key: 'footer',\n            description: localize('extension.commitDetailType.footer.description'),\n            detail: localize('extension.commitDetailType.footer.detail'),\n            isEdit: false,\n        },\n        {\n            label: 'Complete',\n            key: 'complete',\n            detail: localize('extension.commitDetailType.complete.detail'),\n        },\n        {\n            label: 'Select template for commit',\n            key: 'template',\n            detail: localize('extension.commitDetailType.template.detail'),\n        },\n        {\n            label: 'Copy',\n            key: 'copy',\n            detail: localize('extension.commitDetailType.message.copy'),\n        },\n        {\n            label: 'Back',\n            key: 'back',\n            detail: localize('extension.commitDetailType.back.detail'),\n        },\n    ];\n\n    return CommitDetailType;\n}\n\nexport const CommitDetailQuickPickOptions: QuickPickOptions = {\n    matchOnDescription: true,\n    matchOnDetail: true,\n    ignoreFocusOut: true,\n};\n"
  },
  {
    "path": "src/config/commit-input.ts",
    "content": "import { InputBoxOptions } from 'vscode';\nimport { localize } from 'vscode-nls-i18n';\n\n/**\n * @description git commit input 输入提交信息的配置对象\n */\nexport interface CommitInputType extends InputBoxOptions {}\n\nexport default function GetCommitInputType() {\n    const CommitInputType: CommitInputType = {\n        placeHolder: localize('extension.commitInputType.detail'),\n        ignoreFocusOut: true,\n        prompt: '',\n        value: '',\n    };\n\n    return CommitInputType;\n}\n"
  },
  {
    "path": "src/config/commit-type.ts",
    "content": "import { workspace, QuickPickItem } from 'vscode';\nimport { localize } from 'vscode-nls-i18n';\n\n/**\n * @description git commit 提交类型\n */\nexport interface CommitType extends QuickPickItem {\n    icon?: string;\n    key?: string;\n}\n//是否展现 Emoji图标 show Emoji or not\nconst isShowEmoji = workspace\n    .getConfiguration('GitCommitPlugin')\n    .get<boolean>('ShowEmoji');\n//新增的自定义commit type add custom Commit Type\nconst CustomCommitType = workspace\n    .getConfiguration('GitCommitPlugin')\n    .get<boolean>('CustomCommitType');\n\nexport default function GetCommitTypes() {\n    let CommitType: Array<CommitType> = [\n        {\n            label: 'init',\n            key: 'init',\n            detail: localize('extension.commitType.init.detail'),\n            icon: '🎉',\n        },\n        {\n            label: 'feat',\n            key: 'feat',\n            detail: localize('extension.commitType.feat.detail'),\n            icon: '✨',\n        },\n        {\n            label: 'fix',\n            key: 'fix',\n            detail: localize('extension.commitType.fix.detail'),\n            icon: '🐞',\n        },\n        {\n            label: 'docs',\n            key: 'docs',\n            detail: localize('extension.commitType.docs.detail'),\n            icon: '📃',\n        },\n        {\n            label: 'style',\n            key: 'style',\n            detail: localize('extension.commitType.style.detail'),\n            icon: '🌈',\n        },\n        {\n            label: 'refactor',\n            key: 'refactor',\n            detail: localize('extension.commitType.refactor.detail'),\n            icon: '🦄',\n        },\n        {\n            label: 'perf',\n            key: 'perf',\n            detail: localize('extension.commitType.perf.detail'),\n            icon: '🎈',\n        },\n        {\n            label: 'test',\n            key: 'test',\n            detail: localize('extension.commitType.test.detail'),\n            icon: '🧪',\n        },\n        {\n            label: 'build',\n            key: 'build',\n            detail: localize('extension.commitType.build.detail'),\n            icon: '🔧',\n        },\n        {\n            label: 'ci',\n            key: 'ci',\n            detail: localize('extension.commitType.ci.detail'),\n            icon: '🐎',\n        },\n        {\n            label: 'chore',\n            key: 'chore',\n            detail: localize('extension.commitType.chore.detail'),\n            icon: '🐳',\n        },\n        {\n            label: 'revert',\n            key: 'revert',\n            detail: localize('extension.commitType.revert.detail'),\n            icon: '↩',\n        },\n    ];\n\n    if (Array.isArray(CustomCommitType)) {\n        CustomCommitType.forEach(item => {\n            let label = '',\n                icon = '',\n                detail = '';\n            if (typeof item === 'string') {\n                label = detail = item;\n            }\n            const resultType = {\n                label,\n                icon,\n                detail,\n            };\n            if (Object.prototype.toString.call(item) === '[object Object]') {\n                if (Reflect.has(item, 'label')) {\n                    resultType.label = item.label;\n                } else {\n                    Reflect.deleteProperty(resultType, 'label');\n                }\n                if (Reflect.has(item, 'detail')) {\n                    resultType.detail = item.detail;\n                } else {\n                    Reflect.deleteProperty(resultType, 'detail');\n                }\n                if (Reflect.has(item, 'icon')) {\n                    resultType.icon = item.icon;\n                } else {\n                    Reflect.deleteProperty(resultType, 'icon');\n                }\n            }\n\n            const target = CommitType.find(\n                type =>\n                    typeof item.key === 'string' &&\n                    item.key.length > 0 &&\n                    type.key === item.key,\n            );\n\n            if (target !== undefined) {\n                Object.assign(target, resultType);\n            } else {\n                CommitType.unshift(resultType);\n            }\n        });\n    }\n    if (!isShowEmoji) {\n        CommitType.forEach(commitType => {\n            commitType.icon = '';\n        });\n    }\n\n    if (isShowEmoji) {\n        CommitType.forEach(item => {\n            // If there is an icon display\n            if (typeof item.icon === 'string' && item.icon.length > 0) {\n                item.label = `${item.icon} ${item.label}`;\n            }\n        });\n    }\n\n    return CommitType;\n}\n"
  },
  {
    "path": "src/config/default-temp.ts",
    "content": "export const Angular =   {\n    'templateName': 'Angular',\n    'templateContent': '<icon><space><type>(<scope>):<space><subject><enter><body><enter><footer>'\n};\n\nexport const GitCz = {\n    'templateName': 'git-cz',\n    'templateContent': '<type>(<scope>):<space><icon><space><subject><enter><body><enter><footer>'\n};"
  },
  {
    "path": "src/config/template-type.ts",
    "content": "import { workspace, QuickPickItem } from 'vscode';\nimport * as defaultTemp from './default-temp';\n\n/**\n * @description git commit template 类型\n */\nexport interface CommitTemplateType extends QuickPickItem {\n    label: string;\n    detail: string;\n\ttemplateName: string;\n\ttemplateContent: string;\n    /** default template */\n    default?:boolean;\n}\nlet CommitTemplate: Array<CommitTemplateType> = new Array<CommitTemplateType>();\nconst configTemplate = workspace.getConfiguration('GitCommitPlugin').get<Array<CommitTemplateType>>('Templates');\nif (Array.isArray(configTemplate)) {\n    CommitTemplate = configTemplate.map((item, index) => {\n        return {\n            label: item.templateName,\n            detail: item.templateContent,\n            templateName: item.templateName,\n            templateContent:item.templateContent,\n            default:item.default || false\n        };\n    });\n\n}\nconst def:Array<CommitTemplateType> =  Object.values(defaultTemp).map((item)=>({\n    label: item.templateName,\n    detail: item.templateContent,\n    templateName: item.templateName,\n    templateContent:item.templateContent,\n}));\nCommitTemplate = CommitTemplate.concat(def);\nexport default CommitTemplate;"
  },
  {
    "path": "src/extension.ts",
    "content": "// The module 'vscode' contains the VS Code extensibility API\n// Import the module and reference it with the alias vscode in your code below\nimport * as vscode from 'vscode';\nimport { GitExtension } from './types/git';\nimport GetCommitTypes, { CommitType } from './config/commit-type';\nimport {\n    GetCommitDetailType,\n    CommitDetailQuickPickOptions,\n    MaxSubjectCharacters,\n    CommitDetailType,\n    FillSubjectWithCurrent,\n} from './config/commit-detail';\nimport GetCommitInputType, { CommitInputType } from './config/commit-input';\nimport CommitTemplate from './config/template-type';\nimport { Angular } from './config/default-temp';\nexport interface GitMessage {\n    [index: string]: string;\n    templateName: string;\n    templateContent: string;\n    icon: string;\n    type: string;\n    scope: string;\n    subject: string;\n    body: string;\n    footer: string;\n}\n\nimport { localize, init } from 'vscode-nls-i18n';\n\n// this method is called when your extension is activated\n// your extension is activated the very first time the command is executed\nexport async function activate(context: vscode.ExtensionContext) {\n    init(context.extensionPath);\n\n    const CommitType: Array<CommitType> = GetCommitTypes();\n    const CommitDetailType: Array<CommitDetailType> = GetCommitDetailType();\n    const CommitInputType: CommitInputType = GetCommitInputType();\n\n    //获取是否在git扩展内 Gets whether it is in the git extension\n    function getGitExtension() {\n        return vscode.extensions.getExtension<GitExtension>('vscode.git')?.activate();\n    }\n    //Commit message config\n    const message_config: GitMessage = {\n        templateName: '',\n        templateContent: '',\n        icon: '',\n        type: '',\n        scope: '',\n        subject: '',\n        body: '',\n        footer: '',\n    };\n    //清除填写信息 Clear message\n    function clearMessage() {\n        Object.keys(message_config).forEach(key => (message_config[key] = ''));\n        CommitDetailType.map(item => {\n            item.isEdit = false;\n            return item;\n        });\n    }\n    //组合信息 Portfolio information\n    function messageCombine(config: GitMessage) {\n        let result = config.templateContent || Angular.templateContent;\n        result = config.icon\n            ? result.replace(/<icon>/g, config.icon)\n            : result.replace(/<icon>/g, '');\n        result =\n            config.type !== ''\n                ? result.replace(/<type>/g, config.type)\n                : result.replace(/<type>/g, '');\n        result =\n            config.scope !== ''\n                ? result.replace(/<scope>/g, config.scope)\n                : result.replace(/\\(?<scope>\\)?/g, '');\n        result =\n            config.subject !== ''\n                ? result.replace(/<subject>/g, config.subject)\n                : result.replace(/<subject>/g, '');\n        result =\n            config.body !== ''\n                ? result.replace(/<body>/g, config.body)\n                : result.replace(/<body>/g, '');\n        result =\n            config.footer !== ''\n                ? result.replace(/<footer>/g, config.footer)\n                : result.replace(/<footer>/g, '');\n        result = result.replace(/<enter>/g, '\\n\\n');\n        result = result.replace(/<space>/g, ' ');\n        result = result.replace(/<br>/g, '\\n');\n        \n        return result.trim();\n    }\n\n    const gitExtension = await getGitExtension();\n\n    if (!gitExtension?.enabled) {\n        vscode.window.showErrorMessage(\n            'Git extensions are not currently enabled, please try again after enabled!',\n        );\n        return false;\n    }\n\n    //获取当前的 git仓库实例 Get git repo instance\n    let repo: any = gitExtension.getAPI(1).repositories[0];\n\n    //输入提交详情 Input message detail\n    const inputMessageDetail = (_key: string | number) => {\n        const _detailType = CommitDetailType.find(item => item.key === _key);\n        CommitInputType.prompt = `${_detailType?.description} 👉 ${_detailType?.detail}`;\n        CommitInputType.value = message_config[_key] || '';\n        if (_key === 'subject' && FillSubjectWithCurrent) {\n            CommitInputType.value = message_config[_key] || '';\n        }\n        vscode.window.showInputBox(CommitInputType).then(value => {\n            const _value = value || '';\n            message_config[_key] = _value;\n            _detailType && (_detailType.isEdit = true);\n            if (_key === 'subject') {\n                const input_value_length = value ? value.length : 0;\n                if (input_value_length > MaxSubjectCharacters) {\n                    vscode.window.showErrorMessage(\n                        `The commit overview is no more than ${MaxSubjectCharacters} characters but the current input is ${input_value_length} characters`,\n                        ...['ok'],\n                    );\n                    inputMessageDetail(_key);\n                    return false;\n                }\n            }\n            recursiveInputMessage(startMessageInput);\n        });\n    };\n    //是否存在模板 If has template\n    const existTemplate = () => {\n        return Array.isArray(CommitTemplate) && CommitTemplate.length > 0;\n    };\n    //拷贝提交信息 Copy commit message\n    const copyMessage = () => {\n        vscode.env.clipboard.writeText(messageCombine(message_config));\n        vscode.window.showInformationMessage(\n            localize('extension.commitDetailType.message.copy.tip'),\n            ...['ok'],\n        );\n        clearMessage();\n    };\n    //完成输入 Complete input message\n    const completeInputMessage = (select?: boolean) => {\n        vscode.commands.executeCommand('workbench.view.scm');\n        if (existTemplate() && !select) {\n            const defaultTemp = CommitTemplate.find(item => item.default);\n            if (defaultTemp !== undefined) {\n                message_config.templateName = defaultTemp.templateName;\n                message_config.templateContent = defaultTemp.templateContent;\n            }\n        }\n        repo.inputBox.value = messageCombine(message_config);\n    };\n    // 递归输入信息 Recursive input message\n    const recursiveInputMessage = (startMessageInput?: () => void) => {\n        CommitDetailQuickPickOptions.placeHolder = localize(\n            'extension.showGitCommit.description.placeholder',\n        );\n\n        const _CommitDetailType: Array<CommitDetailType> = JSON.parse(\n            JSON.stringify(CommitDetailType),\n        );\n        _CommitDetailType.map((item: any) => {\n            if (item.isEdit) {\n                item.description = `${item.description} 👍 >> ${message_config[item.key || '']\n                }`;\n            }\n            return item;\n        });\n        vscode.window\n            .showQuickPick(_CommitDetailType, CommitDetailQuickPickOptions)\n            .then(select => {\n                const label = (select && select.label) || '';\n                if (label !== '') {\n                    const _key = select?.key || 'body';\n                    if (_key === 'complete') {\n                        completeInputMessage();\n                        clearMessage();\n                        return false;\n                    }\n                    if (_key === 'back') {\n                        startMessageInput && startMessageInput();\n                        clearMessage();\n                        return false;\n                    }\n                    if (_key === 'template') {\n                        SelectTemplate();\n                        return false;\n                    }\n\n                    if (_key === 'copy') {\n                        copyMessage();\n                        return false;\n                    }\n                    inputMessageDetail(_key);\n                } else {\n                    clearMessage();\n                }\n            });\n    };\n    //开始输入 Start input\n    const startMessageInput = () => {\n        CommitDetailQuickPickOptions.placeHolder = localize(\n            'extension.showGitCommit.placeholder',\n        );\n\n        vscode.window\n            .showQuickPick(CommitType, CommitDetailQuickPickOptions)\n            .then(select => {\n                let label = (select && select.label) || '';\n                const icon = (select && select.icon) || '';\n                if (typeof icon === 'string' && icon.length > 0) {\n                    label = label.split(' ')[1];\n                }\n                message_config.type = label;\n                message_config.icon = icon;\n                if (label !== '') {\n                    recursiveInputMessage(startMessageInput);\n                }\n            });\n    };\n    //选择commit 提交的模板\n    const SelectTemplate = () => {\n        CommitDetailQuickPickOptions.placeHolder = localize(\n            'extension.showGitCommit.selectTemplate.placeholder',\n        );\n        vscode.window\n            .showQuickPick(CommitTemplate, CommitDetailQuickPickOptions)\n            .then(select => {\n                const templateName = (select && select.templateName) || '';\n                const templateContent = (select && select.templateContent) || '';\n                message_config.templateName = templateName;\n                message_config.templateContent = templateContent;\n                if (templateName !== '') {\n                    completeInputMessage(true);\n                    clearMessage();\n                }\n            });\n    };\n    // 设置 detail 信息\n    const setMessageInput = (_key: keyof GitMessage, message: string) => {\n        const _detailType = CommitDetailType.find(item => item.key === _key);\n        if(!_detailType || message.length <= 0) {return;}\n        message_config[_key] = message;\n        _detailType.isEdit = true;\n    };\n    //点击图标触发快捷选项 Click the icon to trigger shortcut options\n    let disposable = vscode.commands.registerCommand(\n        'extension.showGitCommit',\n        (uri?) => {\n            if (uri) {\n                //如果有多个repo 寻找当前的 进行填充 If there are multiple repos looking for the current to populate\n                repo = gitExtension.getAPI(1).repositories.find(repo => {\n                    const uriRoot = uri._rootUri ? uri._rootUri : uri.rootUri;\n                    return repo.rootUri.path === uriRoot?.path;\n                });\n            }\n            if (FillSubjectWithCurrent) {\n                const message = repo.inputBox.value;\n                setMessageInput('subject', message);\n            }\n            startMessageInput();\n        },\n    );\n    context.subscriptions.push(disposable);\n}\n\n// this method is called when your extension is deactivated\nexport function deactivate() { }\n"
  },
  {
    "path": "src/test/runTest.ts",
    "content": "import * as path from 'path';\n\nimport { runTests } from 'vscode-test';\n\nasync function main() {\n    try {\n        // The folder containing the Extension Manifest package.json\n        // Passed to `--extensionDevelopmentPath`\n        const extensionDevelopmentPath = path.resolve(__dirname, '../../');\n\n        // The path to test runner\n        // Passed to --extensionTestsPath\n        const extensionTestsPath = path.resolve(__dirname, './suite/index');\n\n        // Download VS Code, unzip it and run the integration test\n        await runTests({ extensionDevelopmentPath, extensionTestsPath });\n    } catch (err) {\n        console.error('Failed to run tests');\n        process.exit(1);\n    }\n}\n\nmain();\n"
  },
  {
    "path": "src/test/suite/extension.test.ts",
    "content": "import * as assert from 'assert';\n\n// You can import and use all API from the 'vscode' module\n// as well as import your extension to test it\nimport * as vscode from 'vscode';\n// import * as myExtension from '../extension';\n\nsuite('Extension Test Suite', () => {\n    vscode.window.showInformationMessage('Start all tests.');\n\n    test('Sample test', () => {\n        assert.equal(-1, [1, 2, 3].indexOf(5));\n        assert.equal(-1, [1, 2, 3].indexOf(0));\n    });\n});\n"
  },
  {
    "path": "src/test/suite/index.ts",
    "content": "import * as path from 'path';\nimport * as Mocha from 'mocha';\nimport * as glob from 'glob';\n\nexport function run(): Promise<void> {\n    // Create the mocha test\n    const mocha = new Mocha({\n        ui: 'tdd',\n    });\n    mocha.useColors(true);\n\n    const testsRoot = path.resolve(__dirname, '..');\n\n    return new Promise((c, e) => {\n        glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {\n            if (err) {\n                return e(err);\n            }\n\n            // Add files to the test suite\n            files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));\n\n            try {\n                // Run the mocha test\n                mocha.run(failures => {\n                    if (failures > 0) {\n                        e(new Error(`${failures} tests failed.`));\n                    } else {\n                        c();\n                    }\n                });\n            } catch (err) {\n                console.error(err);\n                e(err);\n            }\n        });\n    });\n}\n"
  },
  {
    "path": "src/types/git.d.ts",
    "content": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Uri, SourceControlInputBox, Event, CancellationToken } from 'vscode';\n\nexport interface Git {\n  readonly path: string;\n}\n\nexport interface InputBox {\n  value: string;\n}\n\nexport const enum RefType {\n  Head,\n  RemoteHead,\n  Tag\n}\n\nexport interface Ref {\n  readonly type: RefType;\n  readonly name?: string;\n  readonly commit?: string;\n  readonly remote?: string;\n}\n\nexport interface UpstreamRef {\n  readonly remote: string;\n  readonly name: string;\n}\n\nexport interface Branch extends Ref {\n  readonly upstream?: UpstreamRef;\n  readonly ahead?: number;\n  readonly behind?: number;\n}\n\nexport interface Commit {\n  readonly hash: string;\n  readonly message: string;\n  readonly parents: string[];\n  readonly authorEmail?: string | undefined;\n}\n\nexport interface Submodule {\n  readonly name: string;\n  readonly path: string;\n  readonly url: string;\n}\n\nexport interface Remote {\n  readonly name: string;\n  readonly fetchUrl?: string;\n  readonly pushUrl?: string;\n  readonly isReadOnly: boolean;\n}\n\nexport const enum Status {\n  INDEX_MODIFIED,\n  INDEX_ADDED,\n  INDEX_DELETED,\n  INDEX_RENAMED,\n  INDEX_COPIED,\n\n  MODIFIED,\n  DELETED,\n  UNTRACKED,\n  IGNORED,\n  INTENT_TO_ADD,\n\n  ADDED_BY_US,\n  ADDED_BY_THEM,\n  DELETED_BY_US,\n  DELETED_BY_THEM,\n  BOTH_ADDED,\n  BOTH_DELETED,\n  BOTH_MODIFIED\n}\n\nexport interface Change {\n  /**\n   * Returns either `originalUri` or `renameUri`, depending\n   * on whether this change is a rename change. When\n   * in doubt always use `uri` over the other two alternatives.\n   */\n  readonly uri: Uri;\n  readonly originalUri: Uri;\n  readonly renameUri: Uri | undefined;\n  readonly status: Status;\n}\n\nexport interface RepositoryState {\n  readonly HEAD: Branch | undefined;\n  readonly refs: Ref[];\n  readonly remotes: Remote[];\n  readonly submodules: Submodule[];\n  readonly rebaseCommit: Commit | undefined;\n\n  readonly mergeChanges: Change[];\n  readonly indexChanges: Change[];\n  readonly workingTreeChanges: Change[];\n\n  readonly onDidChange: Event<void>;\n}\n\nexport interface RepositoryUIState {\n  readonly selected: boolean;\n  readonly onDidChange: Event<void>;\n}\n\n/**\n * Log options.\n */\nexport interface LogOptions {\n  /** Max number of log entries to retrieve. If not specified, the default is 32. */\n  readonly maxEntries?: number;\n}\n\nexport interface Repository {\n  readonly rootUri: Uri;\n  readonly inputBox: InputBox;\n  readonly state: RepositoryState;\n  readonly ui: RepositoryUIState;\n\n  getConfigs(): Promise<{ key: string; value: string }[]>;\n  getConfig(key: string): Promise<string>;\n  setConfig(key: string, value: string): Promise<string>;\n  getGlobalConfig(key: string): Promise<string>;\n\n  getObjectDetails(\n    treeish: string,\n    path: string\n  ): Promise<{ mode: string; object: string; size: number }>;\n  detectObjectType(\n    object: string\n  ): Promise<{ mimetype: string; encoding?: string }>;\n  buffer(ref: string, path: string): Promise<Buffer>;\n  show(ref: string, path: string): Promise<string>;\n  getCommit(ref: string): Promise<Commit>;\n\n  clean(paths: string[]): Promise<void>;\n\n  apply(patch: string, reverse?: boolean): Promise<void>;\n  diff(cached?: boolean): Promise<string>;\n  diffWithHEAD(): Promise<Change[]>;\n  diffWithHEAD(path: string): Promise<string>;\n  diffWith(ref: string): Promise<Change[]>;\n  diffWith(ref: string, path: string): Promise<string>;\n  diffIndexWithHEAD(): Promise<Change[]>;\n  diffIndexWithHEAD(path: string): Promise<string>;\n  diffIndexWith(ref: string): Promise<Change[]>;\n  diffIndexWith(ref: string, path: string): Promise<string>;\n  diffBlobs(object1: string, object2: string): Promise<string>;\n  diffBetween(ref1: string, ref2: string): Promise<Change[]>;\n  diffBetween(ref1: string, ref2: string, path: string): Promise<string>;\n\n  hashObject(data: string): Promise<string>;\n\n  createBranch(name: string, checkout: boolean, ref?: string): Promise<void>;\n  deleteBranch(name: string, force?: boolean): Promise<void>;\n  getBranch(name: string): Promise<Branch>;\n  setBranchUpstream(name: string, upstream: string): Promise<void>;\n\n  getMergeBase(ref1: string, ref2: string): Promise<string>;\n\n  status(): Promise<void>;\n  checkout(treeish: string): Promise<void>;\n\n  addRemote(name: string, url: string): Promise<void>;\n  removeRemote(name: string): Promise<void>;\n\n  fetch(remote?: string, ref?: string, depth?: number): Promise<void>;\n  pull(unshallow?: boolean): Promise<void>;\n  push(\n    remoteName?: string,\n    branchName?: string,\n    setUpstream?: boolean\n  ): Promise<void>;\n\n  blame(path: string): Promise<string>;\n  log(options?: LogOptions): Promise<Commit[]>;\n}\n\nexport interface API {\n  readonly git: Git;\n  readonly repositories: Repository[];\n  readonly onDidOpenRepository: Event<Repository>;\n  readonly onDidCloseRepository: Event<Repository>;\n}\n\nexport interface GitExtension {\n  readonly enabled: boolean;\n  readonly onDidChangeEnablement: Event<boolean>;\n\n  /**\n   * Returns a specific API version.\n   *\n   * Throws error if git extension is disabled. You can listed to the\n   * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event\n   * to know when the extension becomes enabled/disabled.\n   *\n   * @param version Version number.\n   * @returns API instance\n   */\n  getAPI(version: 1): API;\n}\n\nexport const enum GitErrorCodes {\n  BadConfigFile = 'BadConfigFile',\n  AuthenticationFailed = 'AuthenticationFailed',\n  NoUserNameConfigured = 'NoUserNameConfigured',\n  NoUserEmailConfigured = 'NoUserEmailConfigured',\n  NoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified',\n  NotAGitRepository = 'NotAGitRepository',\n  NotAtRepositoryRoot = 'NotAtRepositoryRoot',\n  Conflict = 'Conflict',\n  StashConflict = 'StashConflict',\n  UnmergedChanges = 'UnmergedChanges',\n  PushRejected = 'PushRejected',\n  RemoteConnectionError = 'RemoteConnectionError',\n  DirtyWorkTree = 'DirtyWorkTree',\n  CantOpenResource = 'CantOpenResource',\n  GitNotFound = 'GitNotFound',\n  CantCreatePipe = 'CantCreatePipe',\n  CantAccessRemote = 'CantAccessRemote',\n  RepositoryNotFound = 'RepositoryNotFound',\n  RepositoryIsLocked = 'RepositoryIsLocked',\n  BranchNotFullyMerged = 'BranchNotFullyMerged',\n  NoRemoteReference = 'NoRemoteReference',\n  InvalidBranchName = 'InvalidBranchName',\n  BranchAlreadyExists = 'BranchAlreadyExists',\n  NoLocalChanges = 'NoLocalChanges',\n  NoStashFound = 'NoStashFound',\n  LocalChangesOverwritten = 'LocalChangesOverwritten',\n  NoUpstreamBranch = 'NoUpstreamBranch',\n  IsInSubmodule = 'IsInSubmodule',\n  WrongCase = 'WrongCase',\n  CantLockRef = 'CantLockRef',\n  CantRebaseMultipleBranches = 'CantRebaseMultipleBranches',\n  PatchDoesNotApply = 'PatchDoesNotApply',\n  NoPathFound = 'NoPathFound'\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"module\": \"commonjs\",\n\t\t\"target\": \"es6\",\n\t\t\"outDir\": \"out\",\n\t\t\"lib\": [\n\t\t\t\"es6\"\n\t\t],\n\t\t\"sourceMap\": true,\n\t\t\"rootDir\": \"src\",\n\t\t\"strict\": true   /* enable all strict type-checking options */\n\t\t/* Additional Checks */\n\t\t// \"noImplicitReturns\": true, /* Report error when not all code paths in function return a value. */\n\t\t// \"noFallthroughCasesInSwitch\": true, /* Report errors for fallthrough cases in switch statement. */\n\t\t// \"noUnusedParameters\": true,  /* Report errors on unused parameters. */\n\t},\n\t\"exclude\": [\n\t\t\"node_modules\",\n\t\t\".vscode-test\"\n\t]\n}\n"
  },
  {
    "path": "vsc-extension-quickstart.md",
    "content": "# Welcome to your VS Code Extension\n\n## What's in the folder\n\n* This folder contains all of the files necessary for your extension.\n* `package.json` - this is the manifest file in which you declare your extension and command.\n  * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.\n* `src/extension.ts` - this is the main file where you will provide the implementation of your command.\n  * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.\n  * We pass the function containing the implementation of the command as the second parameter to `registerCommand`.\n\n## Get up and running straight away\n\n* Press `F5` to open a new window with your extension loaded.\n* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`.\n* Set breakpoints in your code inside `src/extension.ts` to debug your extension.\n* Find output from your extension in the debug console.\n\n## Make changes\n\n* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`.\n* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.\n\n\n## Explore the API\n\n* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`.\n\n## Run tests\n\n* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`.\n* Press `F5` to run the tests in a new window with your extension loaded.\n* See the output of the test result in the debug console.\n* Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder.\n  * The provided test runner will only consider files matching the name pattern `**.test.ts`.\n  * You can create folders inside the `test` folder to structure your tests any way you want.\n\n## Go further\n\n * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension).\n * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace.\n * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration).\n"
  }
]