Styles-based comments, license files, tests (#1)

diff --git a/.gitignore b/.gitignore
index b4c85e8..a559c8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@
 # 
 .idea/
 bin/
+license-eye/assets/assets.gen.go
+.DS_Store
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 6403bec..6419a21 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -48,3 +48,5 @@
     - '**/go.sum'
     - 'LICENSE'
     - 'NOTICE'
+    - '**/assets.gen.go'
+    - 'assets/languages.yaml'
diff --git a/LICENSE b/LICENSE
index 261eeb9..e4b71ce 100644
--- a/LICENSE
+++ b/LICENSE
@@ -199,3 +199,21 @@
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+
+=======================================================================
+Apache SkyWalking Eyes Subcomponents:
+
+The Apache SkyWalking Eyes project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+========================================================================
+MIT licenses
+========================================================================
+
+The following components are provided under the MIT license. See project link for details.
+The text of each license is also included at licenses/LICENSE-[project].txt.
+
+    languages.yaml from GitHub: https://github.com/github/linguist/blob/master/lib/linguist/languages.yml MIT
diff --git a/README.adoc b/README.adoc
index d89afab..c67334c 100644
--- a/README.adoc
+++ b/README.adoc
@@ -5,16 +5,16 @@
 // the Apache License, Version 2.0 (the "License"); you may
 // not use this file except in compliance with the License.
 // You may obtain a copy of the License at
-// 
+//
 //     http://www.apache.org/licenses/LICENSE-2.0
-// 
+//
 // Unless required by applicable law or agreed to in writing,
 // software distributed under the License is distributed on an
 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 // KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
-// 
+//
 = SkyWalking Eyes
 
 Infra tools that are created and used by the SkyWalking Team.
diff --git a/dist/LICENSE b/dist/LICENSE
new file mode 100644
index 0000000..5cc637c
--- /dev/null
+++ b/dist/LICENSE
@@ -0,0 +1,231 @@
+                                 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:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) 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
+
+      (d) 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
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+=======================================================================
+Apache SkyWalking Eyes Subcomponents:
+
+The Apache SkyWalking Eyes project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+
+========================================================================
+Apache 2.0 licenses
+========================================================================
+
+The following components are provided under the Apache License. See project link for details.
+The text of each license is the standard Apache 2.0 license.
+    cobra v1.1.3: https://github.com/spf13/cobra Apache 2.0
+
+========================================================================
+MIT licenses
+========================================================================
+
+The following components are provided under the MIT license. See project link for details.
+The text of each license is also included at licenses/LICENSE-[project].txt.
+
+    languages.yaml from GitHub: https://github.com/github/linguist/blob/master/lib/linguist/languages.yml MIT
+    doublestar v2: https://github.com/bmatcuk/doublestar MIT
+    logrus 1.4.2: https://github.com/sirupsen/logrus MIT
+    yaml v3: https://github.com/go-yaml/yaml/blob/v3 MIT
diff --git a/dist/NOTICE b/dist/NOTICE
new file mode 100644
index 0000000..e646f51
--- /dev/null
+++ b/dist/NOTICE
@@ -0,0 +1,5 @@
+Apache SkyWalking
+Copyright 2017-2020 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/dist/licenses/LICENSE-doublestar b/dist/licenses/LICENSE-doublestar
new file mode 100644
index 0000000..2645a8b
--- /dev/null
+++ b/dist/licenses/LICENSE-doublestar
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Bob Matcuk
+
+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.
diff --git a/dist/licenses/LICENSE-linguist b/dist/licenses/LICENSE-linguist
new file mode 100644
index 0000000..acc8e6f
--- /dev/null
+++ b/dist/licenses/LICENSE-linguist
@@ -0,0 +1,22 @@
+Copyright (c) 2017 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.
diff --git a/dist/licenses/LICENSE-logrus b/dist/licenses/LICENSE-logrus
new file mode 100644
index 0000000..f090cb4
--- /dev/null
+++ b/dist/licenses/LICENSE-logrus
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Simon Eskildsen
+
+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.
diff --git a/dist/licenses/LICENSE-yaml.v3 b/dist/licenses/LICENSE-yaml.v3
new file mode 100644
index 0000000..5f6af8e
--- /dev/null
+++ b/dist/licenses/LICENSE-yaml.v3
@@ -0,0 +1,49 @@
+This project is covered by two different licenses: MIT and Apache.
+
+#### MIT License ####
+
+The following files were ported to Go from C files of libyaml, and thus
+are still covered by their original MIT license, with the additional
+copyright staring in 2011 when the project was ported over:
+
+    apic.go emitterc.go parserc.go readerc.go scannerc.go
+    writerc.go yamlh.go yamlprivateh.go
+
+Copyright (c) 2006-2010 Kirill Simonov
+Copyright (c) 2006-2011 Kirill Simonov
+
+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.
+
+### Apache License ###
+
+All the remaining project files are covered by the Apache license:
+
+Copyright (c) 2011-2019 Canonical Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/license-eye/Makefile b/license-eye/Makefile
index 4a662cd..6dd1cb2 100644
--- a/license-eye/Makefile
+++ b/license-eye/Makefile
@@ -33,6 +33,8 @@
 GO_LINT = $(GO_PATH)/bin/golangci-lint
 GO_BUILD_LDFLAGS = -X github.com/apache/skywalking-eyes/license-eye/commands.version=$(VERSION)
 
+GO_BINDATA = $(GO_PATH)/bin/go-bindata
+
 PLATFORMS := windows linux darwin
 os = $(word 1, $@)
 ARCH = amd64
@@ -40,7 +42,7 @@
 all: clean lint license test build
 
 .PHONY: lint
-lint:
+lint: codegen
 	$(GO_LINT) version || curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GO_PATH)/bin
 	$(GO_LINT) run -v ./...
 
@@ -49,11 +51,16 @@
 	$(GO_LINT) run -v --fix ./...
 
 .PHONY: license
-license: clean
+license: clean codegen
 	$(GO) run cmd/license-eye/main.go header check -c ../.licenserc.yaml
 
+.PHONY: codegen
+codegen: clean
+	$(GO_BINDATA) -v || curl -Lo $(GO_BINDATA) https://github.com/kevinburke/go-bindata/releases/download/v3.11.0/go-bindata-$(OSNAME)-amd64 && chmod +x $(GO_BINDATA)
+	$(GO_BINDATA) --nocompress --nometadata --pkg assets --ignore '.*\.go' -o "assets/assets.gen.go" assets/
+
 .PHONY: test
-test: clean lint
+test: clean codegen
 	$(GO_TEST) ./...
 	@>&2 echo "Great, all tests passed."
 
@@ -68,3 +75,4 @@
 .PHONY: clean
 clean:
 	-rm -rf bin
+	-rm -rf assets/*.gen.go
diff --git a/license-eye/README.adoc b/license-eye/README.adoc
index a87d34e..bf99be3 100644
--- a/license-eye/README.adoc
+++ b/license-eye/README.adoc
@@ -1,3 +1,4 @@
+//
 // Licensed to Apache Software Foundation (ASF) under one or more contributor
 // license agreements. See the NOTICE file distributed with
 // this work for additional information regarding copyright
@@ -22,7 +23,7 @@
 
 == Install
 
-[subs="attributes+",source,bash]
+[subs="attributes",source,bash]
 ----
 git clone {repo}
 cd skywalking-eyes/license-eye
@@ -31,24 +32,10 @@
 
 == Usage
 
-[source]
+[source,bash]
 ----
-$ license-eye
-
-A full-featured license guard to check and fix license headers and dependencies' licenses.
-
-Usage:
-  license-eye [command]
-
-Available Commands:
-  header      License header related commands; e.g. check, fix, etc.
-  help        Help about any command
-
-Flags:
-  -h, --help               help for license-eye
-  -v, --verbosity string   log level (debug, info, warn, error, fatal, panic (default "info")
-
-Use "license-eye [command] --help" for more information about a command.
+$ license-eye -c ./licenserc.yaml header check
+$ license-eye -c ./licenserc.yaml header fix
 ----
 
 == Configuration
@@ -59,32 +46,60 @@
 include::../.licenserc.yaml[]
 ----
 
-== Check
+== Check License Header
 
-[source]
+[source,bash]
 ----
-bin/license-eye -c testdata/.licenserc_for_test_fix.yaml header check
+$ bin/license-eye -c test/testdata/.licenserc_for_test_fix.yaml header check
 
-INFO Loading configuration from file: testdata/.licenserc_for_test.yaml serc_for_test.yaml
+INFO Loading configuration from file: test/testdata/.licenserc_for_test.yaml serc_for_test.yaml
 INFO Totally checked 23 files, valid: 8, invalid: 8, ignored: 7, fixed: 0
 ERROR The following files don't have a valid license header:
-testdata/include_test/without_license/testcase.go
-testdata/include_test/without_license/testcase.graphql
-testdata/include_test/without_license/testcase.java
-testdata/include_test/without_license/testcase.md
-testdata/include_test/without_license/testcase.py
-testdata/include_test/without_license/testcase.sh
-testdata/include_test/without_license/testcase.yaml
-testdata/include_test/without_license/testcase.yml
+test/testdata/include_test/without_license/testcase.go
+test/testdata/include_test/without_license/testcase.graphql
+test/testdata/include_test/without_license/testcase.java
+test/testdata/include_test/without_license/testcase.md
+test/testdata/include_test/without_license/testcase.py
+test/testdata/include_test/without_license/testcase.sh
+test/testdata/include_test/without_license/testcase.yaml
+test/testdata/include_test/without_license/testcase.yml
 exit status 1
 ----
 
-== Fix
+== Fix License Header
 
-[source]
+[source,bash]
 ----
-bin/license-eye -c testdata/.licenserc_for_test_fix.yaml header fix
+$ bin/license-eye -c test/testdata/.licenserc_for_test_fix.yaml header fix
 
-INFO Loading configuration from file: testdata/.licenserc_for_test_fix.yaml
+INFO Loading configuration from file: test/testdata/.licenserc_for_test_fix.yaml
 INFO Totally checked 16 files, valid: 7, invalid: 8, ignored: 1, fixed: 8
 ----
+
+== Supported File Types
+
+The `check` command theoretically supports all kinds of file types, while the supported file types of `fix` command can be found link:assets/languages.yaml[in this YAML file].
+In the YAML file, if the language has a non-empty property `comment_style_id`, and the comment style id is declared in link:assets/styles.yaml[the comment styles file], then the language is supported by `fix` command.
+
+[source,yaml]
+.link:assets/languages.yaml[tags=java]
+----
+include::assets/languages.yaml[tags=java]
+----
+
+[source,yaml]
+.link:assets/styles.yaml[tags=SlashAsterisk]
+----
+include::assets/styles.yaml[tags=SlashAsterisk]
+----
+<1> The leading characters of the starting of a block comment.
+<2> The leading characters of the middle lines of a block comment.
+<3> The leading characters of the ending line of a block comment.
+
+== Contribution
+
+If you found any file type is supported by the aforementioned configurations, feel free to link:https://github.com/apache/skywalking-eyes/pulls[open a pull request] to add the configuration into the 2 files.
+
+== License
+
+link:https://github.com/apache/skywalking/blob/master/LICENSE[Apache License 2.0]
diff --git a/license-eye/assets/languages.yaml b/license-eye/assets/languages.yaml
new file mode 100644
index 0000000..e4af70e
--- /dev/null
+++ b/license-eye/assets/languages.yaml
@@ -0,0 +1,6672 @@
+# Defines all Languages known to GitHub.
+#
+# fs_name               - Optional field. Only necessary as a replacement for the sample directory name if the
+#                         language name is not a valid filename under the Windows filesystem (e.g., if it
+#                         contains an asterisk).
+# type                  - Either data, programming, markup, prose, or nil
+# aliases               - An Array of additional aliases (implicitly
+#                         includes name.downcase)
+# ace_mode              - A String name of the Ace Mode used for highlighting whenever
+#                         a file is edited. This must match one of the filenames in http://git.io/3XO_Cg.
+#                         Use "text" if a mode does not exist.
+# codemirror_mode       - A String name of the CodeMirror Mode used for highlighting whenever a file is edited.
+#                         This must match a mode from https://git.io/vi9Fx
+# codemirror_mime_type  - A String name of the file mime type used for highlighting whenever a file is edited.
+#                         This should match the `mime` associated with the mode from https://git.io/f4SoQ
+# wrap                  - Boolean wrap to enable line wrapping (default: false)
+# extensions            - An Array of associated extensions (the first one is
+#                         considered the primary extension, the others should be
+#                         listed alphabetically)
+# filenames             - An Array of filenames commonly associated with the language
+# interpreters          - An Array of associated interpreters
+# searchable            - Boolean flag to enable searching (defaults to true)
+# language_id           - Integer used as a language-name-independent indexed field so that we can rename
+#                         languages in Linguist without reindexing all the code on GitHub. Must not be
+#                         changed for existing languages without the explicit permission of GitHub staff.
+# color                 - CSS hex color to represent the language. Only used if type is "programming" or "markup".
+# tm_scope              - The TextMate scope that represents this programming
+#                         language. This should match one of the scopes listed in
+#                         the grammars.yml file. Use "none" if there is no grammar
+#                         for this language.
+# group                 - Name of the parent language. Languages in a group are counted
+#                         in the statistics as the parent language.
+#
+# Any additions or modifications (even trivial) should have corresponding
+# test changes in `test/test_blob.rb`.
+#
+# Please keep this list alphabetized. Capitalization comes before lowercase.
+
+# Original Link: https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
+
+---
+1C Enterprise:
+  type: programming
+  color: "#814CCC"
+  extensions:
+    - ".bsl"
+    - ".os"
+  tm_scope: source.bsl
+  ace_mode: text
+  language_id: 0
+4D:
+  type: programming
+  extensions:
+    - ".4dm"
+  tm_scope: source.4dm
+  ace_mode: text
+  language_id: 577529595
+ABAP:
+  type: programming
+  color: "#E8274B"
+  extensions:
+    - ".abap"
+  tm_scope: source.abap
+  ace_mode: abap
+  language_id: 1
+ABNF:
+  type: data
+  ace_mode: text
+  extensions:
+    - ".abnf"
+  tm_scope: source.abnf
+  language_id: 429
+AGS Script:
+  type: programming
+  color: "#B9D9FF"
+  aliases:
+    - ags
+  extensions:
+    - ".asc"
+    - ".ash"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 2
+AL:
+  type: programming
+  color: "#3AA2B5"
+  extensions:
+    - ".al"
+  tm_scope: source.al
+  ace_mode: text
+  language_id: 658971832
+AMPL:
+  type: programming
+  color: "#E6EFBB"
+  extensions:
+    - ".ampl"
+    - ".mod"
+  tm_scope: source.ampl
+  ace_mode: text
+  language_id: 3
+ANTLR:
+  type: programming
+  color: "#9DC3FF"
+  extensions:
+    - ".g4"
+  tm_scope: source.antlr
+  ace_mode: text
+  language_id: 4
+API Blueprint:
+  type: markup
+  color: "#2ACCA8"
+  ace_mode: markdown
+  extensions:
+    - ".apib"
+  tm_scope: text.html.markdown.source.gfm.apib
+  language_id: 5
+APL:
+  type: programming
+  color: "#5A8164"
+  extensions:
+    - ".apl"
+    - ".dyalog"
+  interpreters:
+    - apl
+    - aplx
+    - dyalog
+  tm_scope: source.apl
+  ace_mode: text
+  codemirror_mode: apl
+  codemirror_mime_type: text/apl
+  language_id: 6
+ASL:
+  type: programming
+  ace_mode: text
+  extensions:
+    - ".asl"
+    - ".dsl"
+  tm_scope: source.asl
+  language_id: 124996147
+ASN.1:
+  type: data
+  extensions:
+    - ".asn"
+    - ".asn1"
+  tm_scope: source.asn
+  ace_mode: text
+  codemirror_mode: asn.1
+  codemirror_mime_type: text/x-ttcn-asn
+  language_id: 7
+ASP.NET:
+  type: programming
+  tm_scope: text.html.asp
+  color: "#9400ff"
+  aliases:
+    - aspx
+    - aspx-vb
+  extensions:
+    - ".asax"
+    - ".ascx"
+    - ".ashx"
+    - ".asmx"
+    - ".aspx"
+    - ".axd"
+  ace_mode: text
+  codemirror_mode: htmlembedded
+  codemirror_mime_type: application/x-aspx
+  language_id: 564186416
+ATS:
+  type: programming
+  color: "#1ac620"
+  aliases:
+    - ats2
+  extensions:
+    - ".dats"
+    - ".hats"
+    - ".sats"
+  tm_scope: source.ats
+  ace_mode: ocaml
+  language_id: 9
+ActionScript:
+  type: programming
+  tm_scope: source.actionscript.3
+  color: "#882B0F"
+  aliases:
+    - actionscript 3
+    - actionscript3
+    - as3
+  extensions:
+    - ".as"
+  ace_mode: actionscript
+  language_id: 10
+Ada:
+  type: programming
+  color: "#02f88c"
+  extensions:
+    - ".adb"
+    - ".ada"
+    - ".ads"
+  aliases:
+    - ada95
+    - ada2005
+  tm_scope: source.ada
+  ace_mode: ada
+  language_id: 11
+Adobe Font Metrics:
+  type: data
+  tm_scope: source.afm
+  extensions:
+    - ".afm"
+  aliases:
+    - acfm
+    - adobe composite font metrics
+    - adobe multiple font metrics
+    - amfm
+  ace_mode: text
+  language_id: 147198098
+Agda:
+  type: programming
+  color: "#315665"
+  extensions:
+    - ".agda"
+  tm_scope: source.agda
+  ace_mode: text
+  language_id: 12
+Alloy:
+  type: programming
+  color: "#64C800"
+  extensions:
+    - ".als"
+  tm_scope: source.alloy
+  ace_mode: text
+  language_id: 13
+Alpine Abuild:
+  type: programming
+  group: Shell
+  aliases:
+    - abuild
+    - apkbuild
+  filenames:
+    - APKBUILD
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 14
+Altium Designer:
+  type: data
+  aliases:
+    - altium
+  extensions:
+    - ".OutJob"
+    - ".PcbDoc"
+    - ".PrjPCB"
+    - ".SchDoc"
+  tm_scope: source.ini
+  ace_mode: ini
+  language_id: 187772328
+AngelScript:
+  type: programming
+  color: "#C7D7DC"
+  extensions:
+    - ".as"
+    - ".angelscript"
+  tm_scope: source.angelscript
+  ace_mode: text
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 389477596
+Ant Build System:
+  type: data
+  tm_scope: text.xml.ant
+  filenames:
+    - ant.xml
+    - build.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: application/xml
+  language_id: 15
+ApacheConf:
+  type: data
+  aliases:
+    - aconf
+    - apache
+  extensions:
+    - ".apacheconf"
+    - ".vhost"
+  filenames:
+    - ".htaccess"
+    - apache2.conf
+    - httpd.conf
+  tm_scope: source.apache-config
+  ace_mode: apache_conf
+  language_id: 16
+Apex:
+  type: programming
+  color: "#1797c0"
+  extensions:
+    - ".cls"
+  tm_scope: source.java
+  ace_mode: java
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-java
+  language_id: 17
+Apollo Guidance Computer:
+  type: programming
+  color: "#0B3D91"
+  group: Assembly
+  extensions:
+    - ".agc"
+  tm_scope: source.agc
+  ace_mode: assembly_x86
+  language_id: 18
+AppleScript:
+  type: programming
+  aliases:
+    - osascript
+  extensions:
+    - ".applescript"
+    - ".scpt"
+  interpreters:
+    - osascript
+  tm_scope: source.applescript
+  ace_mode: applescript
+  color: "#101F1F"
+  language_id: 19
+Arc:
+  type: programming
+  color: "#aa2afe"
+  extensions:
+    - ".arc"
+  tm_scope: none
+  ace_mode: text
+  language_id: 20
+AsciiDoc:
+  type: prose
+  ace_mode: asciidoc
+  wrap: true
+  extensions:
+    - ".asciidoc"
+    - ".adoc"
+    - ".asc"
+  tm_scope: text.html.asciidoc
+  language_id: 22
+  comment_style_id: DoubleSlash
+AspectJ:
+  type: programming
+  color: "#a957b0"
+  extensions:
+    - ".aj"
+  tm_scope: source.aspectj
+  ace_mode: text
+  language_id: 23
+Assembly:
+  type: programming
+  color: "#6E4C13"
+  aliases:
+    - asm
+    - nasm
+  extensions:
+    - ".asm"
+    - ".a51"
+    - ".i"
+    - ".inc"
+    - ".nasm"
+  tm_scope: source.assembly
+  ace_mode: assembly_x86
+  language_id: 24
+Asymptote:
+  type: programming
+  color: "#ff0000"
+  extensions:
+    - ".asy"
+  interpreters:
+    - asy
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-kotlin
+  language_id: 591605007
+Augeas:
+  type: programming
+  extensions:
+    - ".aug"
+  tm_scope: none
+  ace_mode: text
+  language_id: 25
+AutoHotkey:
+  type: programming
+  color: "#6594b9"
+  aliases:
+    - ahk
+  extensions:
+    - ".ahk"
+    - ".ahkl"
+  tm_scope: source.ahk
+  ace_mode: autohotkey
+  language_id: 26
+AutoIt:
+  type: programming
+  color: "#1C3552"
+  aliases:
+    - au3
+    - AutoIt3
+    - AutoItScript
+  extensions:
+    - ".au3"
+  tm_scope: source.autoit
+  ace_mode: autohotkey
+  language_id: 27
+Avro IDL:
+  type: data
+  extensions:
+    - ".avdl"
+  tm_scope: source.avro
+  ace_mode: text
+  language_id: 785497837
+Awk:
+  type: programming
+  extensions:
+    - ".awk"
+    - ".auk"
+    - ".gawk"
+    - ".mawk"
+    - ".nawk"
+  interpreters:
+    - awk
+    - gawk
+    - mawk
+    - nawk
+  tm_scope: source.awk
+  ace_mode: text
+  language_id: 28
+Ballerina:
+  type: programming
+  extensions:
+    - ".bal"
+  tm_scope: source.ballerina
+  ace_mode: text
+  color: "#FF5000"
+  language_id: 720859680
+Batchfile:
+  type: programming
+  aliases:
+    - bat
+    - batch
+    - dosbatch
+    - winbatch
+  extensions:
+    - ".bat"
+    - ".cmd"
+  tm_scope: source.batchfile
+  ace_mode: batchfile
+  color: "#C1F12E"
+  language_id: 29
+Befunge:
+  type: programming
+  extensions:
+    - ".befunge"
+  tm_scope: source.befunge
+  ace_mode: text
+  language_id: 30
+BibTeX:
+  type: markup
+  group: TeX
+  extensions:
+    - ".bib"
+    - ".bibtex"
+  tm_scope: text.bibtex
+  ace_mode: tex
+  codemirror_mode: stex
+  codemirror_mime_type: text/x-stex
+  language_id: 982188347
+Bison:
+  type: programming
+  color: "#6A463F"
+  group: Yacc
+  tm_scope: source.yacc
+  extensions:
+    - ".bison"
+  ace_mode: text
+  language_id: 31
+BitBake:
+  type: programming
+  tm_scope: none
+  extensions:
+    - ".bb"
+  ace_mode: text
+  language_id: 32
+Blade:
+  type: markup
+  color: "#f7523f"
+  extensions:
+    - ".blade"
+    - ".blade.php"
+  tm_scope: text.html.php.blade
+  ace_mode: text
+  language_id: 33
+BlitzBasic:
+  type: programming
+  aliases:
+    - b3d
+    - blitz3d
+    - blitzplus
+    - bplus
+  extensions:
+    - ".bb"
+    - ".decls"
+  tm_scope: source.blitzmax
+  ace_mode: text
+  language_id: 34
+BlitzMax:
+  type: programming
+  color: "#cd6400"
+  extensions:
+    - ".bmx"
+  aliases:
+    - bmax
+  tm_scope: source.blitzmax
+  ace_mode: text
+  language_id: 35
+Bluespec:
+  type: programming
+  extensions:
+    - ".bsv"
+  tm_scope: source.bsv
+  ace_mode: verilog
+  language_id: 36
+Boo:
+  type: programming
+  color: "#d4bec1"
+  extensions:
+    - ".boo"
+  ace_mode: text
+  tm_scope: source.boo
+  language_id: 37
+Brainfuck:
+  type: programming
+  color: "#2F2530"
+  extensions:
+    - ".b"
+    - ".bf"
+  tm_scope: source.bf
+  ace_mode: text
+  codemirror_mode: brainfuck
+  codemirror_mime_type: text/x-brainfuck
+  language_id: 38
+Brightscript:
+  type: programming
+  extensions:
+    - ".brs"
+  tm_scope: source.brightscript
+  ace_mode: text
+  language_id: 39
+Browserslist:
+  type: data
+  color: "#ffd539"
+  filenames:
+    - ".browserslistrc"
+    - browserslist
+  tm_scope: text.browserslist
+  ace_mode: text
+  language_id: 153503348
+C:
+  type: programming
+  color: "#555555"
+  extensions:
+    - ".c"
+    - ".cats"
+    - ".h"
+    - ".idc"
+  interpreters:
+    - tcc
+  tm_scope: source.c
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 41
+C#:
+  type: programming
+  ace_mode: csharp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csharp
+  tm_scope: source.cs
+  color: "#178600"
+  aliases:
+    - csharp
+  extensions:
+    - ".cs"
+    - ".cake"
+    - ".csx"
+    - ".linq"
+  language_id: 42
+C++:
+  type: programming
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  color: "#f34b7d"
+  aliases:
+    - cpp
+  extensions:
+    - ".cpp"
+    - ".c++"
+    - ".cc"
+    - ".cp"
+    - ".cxx"
+    - ".h"
+    - ".h++"
+    - ".hh"
+    - ".hpp"
+    - ".hxx"
+    - ".inc"
+    - ".inl"
+    - ".ino"
+    - ".ipp"
+    - ".re"
+    - ".tcc"
+    - ".tpp"
+  language_id: 43
+C-ObjDump:
+  type: data
+  extensions:
+    - ".c-objdump"
+  tm_scope: objdump.x86asm
+  ace_mode: assembly_x86
+  language_id: 44
+C2hs Haskell:
+  type: programming
+  group: Haskell
+  aliases:
+    - c2hs
+  extensions:
+    - ".chs"
+  tm_scope: source.haskell
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  language_id: 45
+CLIPS:
+  type: programming
+  extensions:
+    - ".clp"
+  tm_scope: source.clips
+  ace_mode: text
+  language_id: 46
+CMake:
+  type: programming
+  extensions:
+    - ".cmake"
+    - ".cmake.in"
+  filenames:
+    - CMakeLists.txt
+  tm_scope: source.cmake
+  ace_mode: text
+  codemirror_mode: cmake
+  codemirror_mime_type: text/x-cmake
+  language_id: 47
+COBOL:
+  type: programming
+  extensions:
+    - ".cob"
+    - ".cbl"
+    - ".ccp"
+    - ".cobol"
+    - ".cpy"
+  tm_scope: source.cobol
+  ace_mode: cobol
+  codemirror_mode: cobol
+  codemirror_mime_type: text/x-cobol
+  language_id: 48
+COLLADA:
+  type: data
+  extensions:
+    - ".dae"
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 49
+CSON:
+  type: data
+  color: "#244776"
+  tm_scope: source.coffee
+  ace_mode: coffee
+  codemirror_mode: coffeescript
+  codemirror_mime_type: text/x-coffeescript
+  extensions:
+    - ".cson"
+  language_id: 424
+CSS:
+  type: markup
+  tm_scope: source.css
+  ace_mode: css
+  codemirror_mode: css
+  codemirror_mime_type: text/css
+  color: "#563d7c"
+  extensions:
+    - ".css"
+  language_id: 50
+CSV:
+  type: data
+  ace_mode: text
+  tm_scope: none
+  extensions:
+    - ".csv"
+  language_id: 51
+CWeb:
+  type: programming
+  extensions:
+    - ".w"
+  tm_scope: none
+  ace_mode: text
+  language_id: 657332628
+Cabal Config:
+  type: data
+  aliases:
+    - Cabal
+  extensions:
+    - ".cabal"
+  filenames:
+    - cabal.config
+    - cabal.project
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  tm_scope: source.cabal
+  language_id: 677095381
+Cap'n Proto:
+  type: programming
+  tm_scope: source.capnp
+  extensions:
+    - ".capnp"
+  ace_mode: text
+  language_id: 52
+CartoCSS:
+  type: programming
+  aliases:
+    - Carto
+  extensions:
+    - ".mss"
+  ace_mode: text
+  tm_scope: source.css.mss
+  language_id: 53
+Ceylon:
+  type: programming
+  color: "#dfa535"
+  extensions:
+    - ".ceylon"
+  tm_scope: source.ceylon
+  ace_mode: text
+  language_id: 54
+Chapel:
+  type: programming
+  color: "#8dc63f"
+  aliases:
+    - chpl
+  extensions:
+    - ".chpl"
+  tm_scope: source.chapel
+  ace_mode: text
+  language_id: 55
+Charity:
+  type: programming
+  extensions:
+    - ".ch"
+  tm_scope: none
+  ace_mode: text
+  language_id: 56
+ChucK:
+  type: programming
+  extensions:
+    - ".ck"
+  tm_scope: source.java
+  ace_mode: java
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-java
+  language_id: 57
+Cirru:
+  type: programming
+  color: "#ccccff"
+  tm_scope: source.cirru
+  ace_mode: cirru
+  extensions:
+    - ".cirru"
+  language_id: 58
+Clarion:
+  type: programming
+  color: "#db901e"
+  ace_mode: text
+  extensions:
+    - ".clw"
+  tm_scope: source.clarion
+  language_id: 59
+Classic ASP:
+  type: programming
+  color: "#6a40fd"
+  tm_scope: text.html.asp
+  aliases:
+    - asp
+  extensions:
+    - ".asp"
+  ace_mode: text
+  language_id: 8
+Clean:
+  type: programming
+  color: "#3F85AF"
+  extensions:
+    - ".icl"
+    - ".dcl"
+  tm_scope: source.clean
+  ace_mode: text
+  language_id: 60
+Click:
+  type: programming
+  color: "#E4E6F3"
+  extensions:
+    - ".click"
+  tm_scope: source.click
+  ace_mode: text
+  language_id: 61
+Clojure:
+  type: programming
+  tm_scope: source.clojure
+  ace_mode: clojure
+  codemirror_mode: clojure
+  codemirror_mime_type: text/x-clojure
+  color: "#db5855"
+  extensions:
+    - ".clj"
+    - ".boot"
+    - ".cl2"
+    - ".cljc"
+    - ".cljs"
+    - ".cljs.hl"
+    - ".cljscm"
+    - ".cljx"
+    - ".hic"
+  filenames:
+    - riemann.config
+  language_id: 62
+Closure Templates:
+  type: markup
+  group: HTML
+  ace_mode: soy_template
+  codemirror_mode: soy
+  codemirror_mime_type: text/x-soy
+  aliases:
+    - soy
+  extensions:
+    - ".soy"
+  tm_scope: text.html.soy
+  language_id: 357046146
+Cloud Firestore Security Rules:
+  type: data
+  ace_mode: less
+  codemirror_mode: css
+  codemirror_mime_type: text/css
+  tm_scope: source.firestore
+  filenames:
+    - firestore.rules
+  language_id: 407996372
+CoNLL-U:
+  type: data
+  extensions:
+    - ".conllu"
+    - ".conll"
+  tm_scope: text.conllu
+  ace_mode: text
+  aliases:
+    - CoNLL
+    - CoNLL-X
+  language_id: 421026389
+CodeQL:
+  type: programming
+  extensions:
+    - ".ql"
+    - ".qll"
+  tm_scope: source.ql
+  ace_mode: text
+  language_id: 424259634
+  aliases:
+    - ql
+CoffeeScript:
+  type: programming
+  tm_scope: source.coffee
+  ace_mode: coffee
+  codemirror_mode: coffeescript
+  codemirror_mime_type: text/x-coffeescript
+  color: "#244776"
+  aliases:
+    - coffee
+    - coffee-script
+  extensions:
+    - ".coffee"
+    - "._coffee"
+    - ".cake"
+    - ".cjsx"
+    - ".iced"
+  filenames:
+    - Cakefile
+  interpreters:
+    - coffee
+  language_id: 63
+ColdFusion:
+  type: programming
+  ace_mode: coldfusion
+  color: "#ed2cd6"
+  aliases:
+    - cfm
+    - cfml
+    - coldfusion html
+  extensions:
+    - ".cfm"
+    - ".cfml"
+  tm_scope: text.html.cfm
+  language_id: 64
+ColdFusion CFC:
+  type: programming
+  color: "#ed2cd6"
+  group: ColdFusion
+  ace_mode: coldfusion
+  aliases:
+    - cfc
+  extensions:
+    - ".cfc"
+  tm_scope: source.cfscript
+  language_id: 65
+Common Lisp:
+  type: programming
+  tm_scope: source.lisp
+  color: "#3fb68b"
+  aliases:
+    - lisp
+  extensions:
+    - ".lisp"
+    - ".asd"
+    - ".cl"
+    - ".l"
+    - ".lsp"
+    - ".ny"
+    - ".podsl"
+    - ".sexp"
+  interpreters:
+    - lisp
+    - sbcl
+    - ccl
+    - clisp
+    - ecl
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 66
+Common Workflow Language:
+  aliases:
+    - cwl
+  type: programming
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  extensions:
+    - ".cwl"
+  interpreters:
+    - cwl-runner
+  color: "#B5314C"
+  tm_scope: source.cwl
+  language_id: 988547172
+Component Pascal:
+  type: programming
+  color: "#B0CE4E"
+  extensions:
+    - ".cp"
+    - ".cps"
+  tm_scope: source.pascal
+  aliases:
+    - delphi
+    - objectpascal
+  ace_mode: pascal
+  codemirror_mode: pascal
+  codemirror_mime_type: text/x-pascal
+  language_id: 67
+Cool:
+  type: programming
+  extensions:
+    - ".cl"
+  tm_scope: source.cool
+  ace_mode: text
+  language_id: 68
+Coq:
+  type: programming
+  extensions:
+    - ".coq"
+    - ".v"
+  tm_scope: source.coq
+  ace_mode: text
+  language_id: 69
+Cpp-ObjDump:
+  type: data
+  extensions:
+    - ".cppobjdump"
+    - ".c++-objdump"
+    - ".c++objdump"
+    - ".cpp-objdump"
+    - ".cxx-objdump"
+  tm_scope: objdump.x86asm
+  aliases:
+    - c++-objdump
+  ace_mode: assembly_x86
+  language_id: 70
+Creole:
+  type: prose
+  wrap: true
+  extensions:
+    - ".creole"
+  tm_scope: text.html.creole
+  ace_mode: text
+  language_id: 71
+Crystal:
+  type: programming
+  color: "#000100"
+  extensions:
+    - ".cr"
+  ace_mode: ruby
+  codemirror_mode: crystal
+  codemirror_mime_type: text/x-crystal
+  tm_scope: source.crystal
+  interpreters:
+    - crystal
+  language_id: 72
+Csound:
+  type: programming
+  aliases:
+    - csound-orc
+  extensions:
+    - ".orc"
+    - ".udo"
+  tm_scope: source.csound
+  ace_mode: csound_orchestra
+  language_id: 73
+Csound Document:
+  type: programming
+  aliases:
+    - csound-csd
+  extensions:
+    - ".csd"
+  tm_scope: source.csound-document
+  ace_mode: csound_document
+  language_id: 74
+Csound Score:
+  type: programming
+  aliases:
+    - csound-sco
+  extensions:
+    - ".sco"
+  tm_scope: source.csound-score
+  ace_mode: csound_score
+  language_id: 75
+Cuda:
+  type: programming
+  extensions:
+    - ".cu"
+    - ".cuh"
+  tm_scope: source.cuda-c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  color: "#3A4E3A"
+  language_id: 77
+Cycript:
+  type: programming
+  extensions:
+    - ".cy"
+  tm_scope: source.js
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: text/javascript
+  language_id: 78
+Cython:
+  type: programming
+  group: Python
+  extensions:
+    - ".pyx"
+    - ".pxd"
+    - ".pxi"
+  aliases:
+    - pyrex
+  tm_scope: source.cython
+  ace_mode: text
+  codemirror_mode: python
+  codemirror_mime_type: text/x-cython
+  language_id: 79
+D:
+  type: programming
+  color: "#ba595e"
+  extensions:
+    - ".d"
+    - ".di"
+  tm_scope: source.d
+  ace_mode: d
+  codemirror_mode: d
+  codemirror_mime_type: text/x-d
+  language_id: 80
+D-ObjDump:
+  type: data
+  extensions:
+    - ".d-objdump"
+  tm_scope: objdump.x86asm
+  ace_mode: assembly_x86
+  language_id: 81
+DIGITAL Command Language:
+  type: programming
+  aliases:
+    - dcl
+  extensions:
+    - ".com"
+  tm_scope: none
+  ace_mode: text
+  language_id: 82
+DM:
+  type: programming
+  color: "#447265"
+  extensions:
+    - ".dm"
+  aliases:
+    - byond
+  tm_scope: source.dm
+  ace_mode: c_cpp
+  language_id: 83
+DNS Zone:
+  type: data
+  extensions:
+    - ".zone"
+    - ".arpa"
+  tm_scope: text.zone_file
+  ace_mode: text
+  language_id: 84
+DTrace:
+  type: programming
+  aliases:
+    - dtrace-script
+  extensions:
+    - ".d"
+  interpreters:
+    - dtrace
+  tm_scope: source.c
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 85
+Dafny:
+  type: programming
+  color: "#FFEC25"
+  extensions:
+    - ".dfy"
+  interpreters:
+    - dafny
+  tm_scope: text.dfy.dafny
+  ace_mode: text
+  language_id: 969323346
+Darcs Patch:
+  type: data
+  aliases:
+    - dpatch
+  extensions:
+    - ".darcspatch"
+    - ".dpatch"
+  tm_scope: none
+  ace_mode: text
+  language_id: 86
+Dart:
+  type: programming
+  color: "#00B4AB"
+  extensions:
+    - ".dart"
+  interpreters:
+    - dart
+  tm_scope: source.dart
+  ace_mode: dart
+  codemirror_mode: dart
+  codemirror_mime_type: application/dart
+  language_id: 87
+DataWeave:
+  type: programming
+  color: "#003a52"
+  extensions:
+    - ".dwl"
+  ace_mode: text
+  tm_scope: source.data-weave
+  language_id: 974514097
+Dhall:
+  type: programming
+  color: "#dfafff"
+  extensions:
+    - ".dhall"
+  tm_scope: source.haskell
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  language_id: 793969321
+Diff:
+  type: data
+  extensions:
+    - ".diff"
+    - ".patch"
+  aliases:
+    - udiff
+  tm_scope: source.diff
+  ace_mode: diff
+  codemirror_mode: diff
+  codemirror_mime_type: text/x-diff
+  language_id: 88
+DirectX 3D File:
+  type: data
+  extensions:
+    - ".x"
+  ace_mode: text
+  tm_scope: none
+  language_id: 201049282
+Dockerfile:
+  type: programming
+  color: "#384d54"
+  tm_scope: source.dockerfile
+  extensions:
+    - ".dockerfile"
+  filenames:
+    - Dockerfile
+  ace_mode: dockerfile
+  codemirror_mode: dockerfile
+  codemirror_mime_type: text/x-dockerfile
+  language_id: 89
+Dogescript:
+  type: programming
+  color: "#cca760"
+  extensions:
+    - ".djs"
+  tm_scope: none
+  ace_mode: text
+  language_id: 90
+Dylan:
+  type: programming
+  color: "#6c616e"
+  extensions:
+    - ".dylan"
+    - ".dyl"
+    - ".intr"
+    - ".lid"
+  tm_scope: source.dylan
+  ace_mode: text
+  codemirror_mode: dylan
+  codemirror_mime_type: text/x-dylan
+  language_id: 91
+E:
+  type: programming
+  color: "#ccce35"
+  extensions:
+    - ".E"
+  interpreters:
+    - rune
+  tm_scope: none
+  ace_mode: text
+  language_id: 92
+EBNF:
+  type: data
+  extensions:
+    - ".ebnf"
+  tm_scope: source.ebnf
+  ace_mode: text
+  codemirror_mode: ebnf
+  codemirror_mime_type: text/x-ebnf
+  language_id: 430
+ECL:
+  type: programming
+  color: "#8a1267"
+  extensions:
+    - ".ecl"
+    - ".eclxml"
+  tm_scope: none
+  ace_mode: text
+  codemirror_mode: ecl
+  codemirror_mime_type: text/x-ecl
+  language_id: 93
+ECLiPSe:
+  type: programming
+  group: prolog
+  extensions:
+    - ".ecl"
+  tm_scope: source.prolog.eclipse
+  ace_mode: prolog
+  language_id: 94
+EJS:
+  type: markup
+  color: "#a91e50"
+  group: HTML
+  extensions:
+    - ".ejs"
+    - ".ect"
+    - ".jst"
+  tm_scope: text.html.js
+  ace_mode: ejs
+  language_id: 95
+EML:
+  type: data
+  extensions:
+    - ".eml"
+    - ".mbox"
+  tm_scope: text.eml.basic
+  ace_mode: text
+  language_id: 529653389
+EQ:
+  type: programming
+  color: "#a78649"
+  extensions:
+    - ".eq"
+  tm_scope: source.cs
+  ace_mode: csharp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csharp
+  language_id: 96
+Eagle:
+  type: data
+  extensions:
+    - ".sch"
+    - ".brd"
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 97
+Easybuild:
+  type: data
+  group: Python
+  ace_mode: python
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  tm_scope: source.python
+  extensions:
+    - ".eb"
+  language_id: 342840477
+Ecere Projects:
+  type: data
+  group: JavaScript
+  extensions:
+    - ".epj"
+  tm_scope: source.json
+  ace_mode: json
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  language_id: 98
+EditorConfig:
+  type: data
+  group: INI
+  filenames:
+    - ".editorconfig"
+  aliases:
+    - editor-config
+  ace_mode: ini
+  codemirror_mode: properties
+  codemirror_mime_type: text/x-properties
+  tm_scope: source.editorconfig
+  language_id: 96139566
+Edje Data Collection:
+  type: data
+  extensions:
+    - ".edc"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 342840478
+Eiffel:
+  type: programming
+  color: "#4d6977"
+  extensions:
+    - ".e"
+  tm_scope: source.eiffel
+  ace_mode: eiffel
+  codemirror_mode: eiffel
+  codemirror_mime_type: text/x-eiffel
+  language_id: 99
+Elixir:
+  type: programming
+  color: "#6e4a7e"
+  extensions:
+    - ".ex"
+    - ".exs"
+  tm_scope: source.elixir
+  ace_mode: elixir
+  filenames:
+    - mix.lock
+  interpreters:
+    - elixir
+  language_id: 100
+Elm:
+  type: programming
+  color: "#60B5CC"
+  extensions:
+    - ".elm"
+  tm_scope: source.elm
+  ace_mode: elm
+  codemirror_mode: elm
+  codemirror_mime_type: text/x-elm
+  language_id: 101
+Emacs Lisp:
+  type: programming
+  tm_scope: source.emacs.lisp
+  color: "#c065db"
+  aliases:
+    - elisp
+    - emacs
+  filenames:
+    - ".abbrev_defs"
+    - ".emacs"
+    - ".emacs.desktop"
+    - ".gnus"
+    - ".spacemacs"
+    - ".viper"
+    - Cask
+    - Project.ede
+    - _emacs
+    - abbrev_defs
+  extensions:
+    - ".el"
+    - ".emacs"
+    - ".emacs.desktop"
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 102
+EmberScript:
+  type: programming
+  color: "#FFF4F3"
+  extensions:
+    - ".em"
+    - ".emberscript"
+  tm_scope: source.coffee
+  ace_mode: coffee
+  codemirror_mode: coffeescript
+  codemirror_mime_type: text/x-coffeescript
+  language_id: 103
+Erlang:
+  type: programming
+  color: "#B83998"
+  extensions:
+    - ".erl"
+    - ".app.src"
+    - ".es"
+    - ".escript"
+    - ".hrl"
+    - ".xrl"
+    - ".yrl"
+  filenames:
+    - Emakefile
+    - rebar.config
+    - rebar.config.lock
+    - rebar.lock
+  tm_scope: source.erlang
+  ace_mode: erlang
+  codemirror_mode: erlang
+  codemirror_mime_type: text/x-erlang
+  interpreters:
+    - escript
+  language_id: 104
+F#:
+  type: programming
+  color: "#b845fc"
+  aliases:
+    - fsharp
+  extensions:
+    - ".fs"
+    - ".fsi"
+    - ".fsx"
+  tm_scope: source.fsharp
+  ace_mode: text
+  codemirror_mode: mllike
+  codemirror_mime_type: text/x-fsharp
+  language_id: 105
+F*:
+  fs_name: Fstar
+  type: programming
+  color: "#572e30"
+  aliases:
+    - fstar
+  extensions:
+    - ".fst"
+  tm_scope: source.fstar
+  ace_mode: text
+  language_id: 336943375
+FIGlet Font:
+  type: data
+  aliases:
+    - FIGfont
+  extensions:
+    - ".flf"
+  tm_scope: source.figfont
+  ace_mode: text
+  language_id: 686129783
+FLUX:
+  type: programming
+  color: "#88ccff"
+  extensions:
+    - ".fx"
+    - ".flux"
+  tm_scope: none
+  ace_mode: text
+  language_id: 106
+Factor:
+  type: programming
+  color: "#636746"
+  extensions:
+    - ".factor"
+  filenames:
+    - ".factor-boot-rc"
+    - ".factor-rc"
+  tm_scope: source.factor
+  ace_mode: text
+  codemirror_mode: factor
+  codemirror_mime_type: text/x-factor
+  language_id: 108
+Fancy:
+  type: programming
+  color: "#7b9db4"
+  extensions:
+    - ".fy"
+    - ".fancypack"
+  filenames:
+    - Fakefile
+  tm_scope: source.fancy
+  ace_mode: text
+  language_id: 109
+Fantom:
+  type: programming
+  color: "#14253c"
+  extensions:
+    - ".fan"
+  tm_scope: source.fan
+  ace_mode: text
+  language_id: 110
+Faust:
+  type: programming
+  color: "#c37240"
+  extensions:
+    - ".dsp"
+  tm_scope: source.faust
+  ace_mode: text
+  language_id: 622529198
+Filebench WML:
+  type: programming
+  extensions:
+    - ".f"
+  tm_scope: none
+  ace_mode: text
+  language_id: 111
+Filterscript:
+  type: programming
+  group: RenderScript
+  extensions:
+    - ".fs"
+  tm_scope: none
+  ace_mode: text
+  language_id: 112
+Formatted:
+  type: data
+  extensions:
+    - ".for"
+    - ".eam.fs"
+  tm_scope: none
+  ace_mode: text
+  language_id: 113
+Forth:
+  type: programming
+  color: "#341708"
+  extensions:
+    - ".fth"
+    - ".4th"
+    - ".f"
+    - ".for"
+    - ".forth"
+    - ".fr"
+    - ".frt"
+    - ".fs"
+  tm_scope: source.forth
+  ace_mode: forth
+  codemirror_mode: forth
+  codemirror_mime_type: text/x-forth
+  language_id: 114
+Fortran:
+  group: Fortran
+  type: programming
+  color: "#4d41b1"
+  extensions:
+    - ".f"
+    - ".f77"
+    - ".for"
+    - ".fpp"
+  tm_scope: source.fortran
+  ace_mode: text
+  codemirror_mode: fortran
+  codemirror_mime_type: text/x-fortran
+  language_id: 107
+Fortran Free Form:
+  group: Fortran
+  type: programming
+  extensions:
+    - ".f90"
+    - ".f03"
+    - ".f08"
+    - ".f95"
+  tm_scope: source.fortran.modern
+  ace_mode: text
+  codemirror_mode: fortran
+  codemirror_mime_type: text/x-fortran
+  language_id: 761352333
+FreeMarker:
+  type: programming
+  color: "#0050b2"
+  aliases:
+    - ftl
+  extensions:
+    - ".ftl"
+  tm_scope: text.html.ftl
+  ace_mode: ftl
+  language_id: 115
+Frege:
+  type: programming
+  color: "#00cafe"
+  extensions:
+    - ".fr"
+  tm_scope: source.haskell
+  ace_mode: haskell
+  language_id: 116
+Futhark:
+  type: programming
+  color: "#5f021f"
+  extensions:
+    - ".fut"
+  tm_scope: source.futhark
+  ace_mode: text
+  language_id: 97358117
+G-code:
+  type: programming
+  color: "#D08CF2"
+  extensions:
+    - ".g"
+    - ".cnc"
+    - ".gco"
+    - ".gcode"
+  tm_scope: source.gcode
+  ace_mode: gcode
+  language_id: 117
+GAML:
+  type: programming
+  color: "#FFC766"
+  extensions:
+    - ".gaml"
+  tm_scope: none
+  ace_mode: text
+  language_id: 290345951
+GAMS:
+  type: programming
+  extensions:
+    - ".gms"
+  tm_scope: none
+  ace_mode: text
+  language_id: 118
+GAP:
+  type: programming
+  extensions:
+    - ".g"
+    - ".gap"
+    - ".gd"
+    - ".gi"
+    - ".tst"
+  tm_scope: source.gap
+  ace_mode: text
+  language_id: 119
+GCC Machine Description:
+  type: programming
+  extensions:
+    - ".md"
+  tm_scope: source.lisp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 121
+GDB:
+  type: programming
+  extensions:
+    - ".gdb"
+    - ".gdbinit"
+  tm_scope: source.gdb
+  ace_mode: text
+  language_id: 122
+GDScript:
+  type: programming
+  color: "#355570"
+  extensions:
+    - ".gd"
+  tm_scope: source.gdscript
+  ace_mode: text
+  language_id: 123
+GEDCOM:
+  type: data
+  ace_mode: text
+  extensions:
+    - ".ged"
+  tm_scope: source.gedcom
+  language_id: 459577965
+GLSL:
+  type: programming
+  extensions:
+    - ".glsl"
+    - ".fp"
+    - ".frag"
+    - ".frg"
+    - ".fs"
+    - ".fsh"
+    - ".fshader"
+    - ".geo"
+    - ".geom"
+    - ".glslf"
+    - ".glslv"
+    - ".gs"
+    - ".gshader"
+    - ".shader"
+    - ".tesc"
+    - ".tese"
+    - ".vert"
+    - ".vrx"
+    - ".vsh"
+    - ".vshader"
+  tm_scope: source.glsl
+  ace_mode: glsl
+  language_id: 124
+GN:
+  type: data
+  extensions:
+    - ".gn"
+    - ".gni"
+  interpreters:
+    - gn
+  filenames:
+    - ".gn"
+  tm_scope: source.gn
+  ace_mode: python
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  language_id: 302957008
+Game Maker Language:
+  type: programming
+  color: "#71b417"
+  extensions:
+    - ".gml"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 125
+Genie:
+  type: programming
+  ace_mode: text
+  extensions:
+    - ".gs"
+  color: "#fb855d"
+  tm_scope: none
+  language_id: 792408528
+Genshi:
+  type: programming
+  extensions:
+    - ".kid"
+  tm_scope: text.xml.genshi
+  aliases:
+    - xml+genshi
+    - xml+kid
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 126
+Gentoo Ebuild:
+  type: programming
+  group: Shell
+  extensions:
+    - ".ebuild"
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 127
+Gentoo Eclass:
+  type: programming
+  group: Shell
+  extensions:
+    - ".eclass"
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 128
+Gerber Image:
+  type: data
+  aliases:
+    - rs-274x
+  extensions:
+    - ".gbr"
+    - ".gbl"
+    - ".gbo"
+    - ".gbp"
+    - ".gbs"
+    - ".gko"
+    - ".gml"
+    - ".gpb"
+    - ".gpt"
+    - ".gtl"
+    - ".gto"
+    - ".gtp"
+    - ".gts"
+    - ".sol"
+  interpreters:
+    - gerbv
+    - gerbview
+  tm_scope: source.gerber
+  ace_mode: text
+  language_id: 404627610
+Gettext Catalog:
+  type: prose
+  searchable: false
+  aliases:
+    - pot
+  extensions:
+    - ".po"
+    - ".pot"
+  tm_scope: source.po
+  ace_mode: text
+  language_id: 129
+Gherkin:
+  type: programming
+  extensions:
+    - ".feature"
+    - ".story"
+  tm_scope: text.gherkin.feature
+  aliases:
+    - cucumber
+  ace_mode: text
+  color: "#5B2063"
+  language_id: 76
+Git Attributes:
+  type: data
+  group: INI
+  aliases:
+    - gitattributes
+  filenames:
+    - ".gitattributes"
+  tm_scope: source.gitattributes
+  ace_mode: gitignore
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 956324166
+Git Config:
+  type: data
+  group: INI
+  aliases:
+    - gitconfig
+    - gitmodules
+  extensions:
+    - ".gitconfig"
+  filenames:
+    - ".gitconfig"
+    - ".gitmodules"
+  ace_mode: ini
+  codemirror_mode: properties
+  codemirror_mime_type: text/x-properties
+  tm_scope: source.gitconfig
+  language_id: 807968997
+Glyph:
+  type: programming
+  color: "#c1ac7f"
+  extensions:
+    - ".glf"
+  tm_scope: source.tcl
+  ace_mode: tcl
+  codemirror_mode: tcl
+  codemirror_mime_type: text/x-tcl
+  language_id: 130
+Glyph Bitmap Distribution Format:
+  type: data
+  extensions:
+    - ".bdf"
+  tm_scope: source.bdf
+  ace_mode: text
+  language_id: 997665271
+Gnuplot:
+  type: programming
+  color: "#f0a9f0"
+  extensions:
+    - ".gp"
+    - ".gnu"
+    - ".gnuplot"
+    - ".p"
+    - ".plot"
+    - ".plt"
+  interpreters:
+    - gnuplot
+  tm_scope: source.gnuplot
+  ace_mode: text
+  language_id: 131
+Go:
+  type: programming
+  color: "#00ADD8"
+  aliases:
+    - golang
+  extensions:
+    - ".go"
+  tm_scope: source.go
+  ace_mode: golang
+  codemirror_mode: go
+  codemirror_mime_type: text/x-go
+  language_id: 132
+  comment_style_id: DoubleSlash
+Golo:
+  type: programming
+  color: "#88562A"
+  extensions:
+    - ".golo"
+  tm_scope: source.golo
+  ace_mode: text
+  language_id: 133
+Gosu:
+  type: programming
+  color: "#82937f"
+  extensions:
+    - ".gs"
+    - ".gst"
+    - ".gsx"
+    - ".vark"
+  tm_scope: source.gosu.2
+  ace_mode: text
+  language_id: 134
+Grace:
+  type: programming
+  extensions:
+    - ".grace"
+  tm_scope: source.grace
+  ace_mode: text
+  language_id: 135
+Gradle:
+  type: data
+  extensions:
+    - ".gradle"
+  tm_scope: source.groovy.gradle
+  ace_mode: text
+  language_id: 136
+Grammatical Framework:
+  type: programming
+  aliases:
+    - gf
+  extensions:
+    - ".gf"
+  color: "#ff0000"
+  tm_scope: source.gf
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  language_id: 137
+Graph Modeling Language:
+  type: data
+  extensions:
+    - ".gml"
+  tm_scope: none
+  ace_mode: text
+  language_id: 138
+GraphQL:
+  type: data
+  color: "#e10098"
+  extensions:
+    - ".graphql"
+    - ".gql"
+    - ".graphqls"
+  tm_scope: source.graphql
+  ace_mode: text
+  language_id: 139
+Graphviz (DOT):
+  type: data
+  tm_scope: source.dot
+  extensions:
+    - ".dot"
+    - ".gv"
+  ace_mode: text
+  language_id: 140
+Groovy:
+  type: programming
+  tm_scope: source.groovy
+  ace_mode: groovy
+  codemirror_mode: groovy
+  codemirror_mime_type: text/x-groovy
+  color: "#e69f56"
+  extensions:
+    - ".groovy"
+    - ".grt"
+    - ".gtpl"
+    - ".gvy"
+  interpreters:
+    - groovy
+  filenames:
+    - Jenkinsfile
+  language_id: 142
+Groovy Server Pages:
+  type: programming
+  group: Groovy
+  aliases:
+    - gsp
+    - java server page
+  extensions:
+    - ".gsp"
+  tm_scope: text.html.jsp
+  ace_mode: jsp
+  codemirror_mode: htmlembedded
+  codemirror_mime_type: application/x-jsp
+  language_id: 143
+HAProxy:
+  type: data
+  extensions:
+    - ".cfg"
+  filenames:
+    - haproxy.cfg
+  tm_scope: source.haproxy-config
+  ace_mode: text
+  language_id: 366607477
+HCL:
+  type: programming
+  extensions:
+    - ".hcl"
+    - ".nomad"
+    - ".tf"
+    - ".tfvars"
+    - ".workflow"
+  aliases:
+    - HashiCorp Configuration Language
+    - terraform
+  ace_mode: ruby
+  codemirror_mode: ruby
+  codemirror_mime_type: text/x-ruby
+  tm_scope: source.terraform
+  language_id: 144
+HLSL:
+  type: programming
+  extensions:
+    - ".hlsl"
+    - ".cginc"
+    - ".fx"
+    - ".fxh"
+    - ".hlsli"
+  ace_mode: text
+  tm_scope: source.hlsl
+  language_id: 145
+HTML:
+  type: markup
+  tm_scope: text.html.basic
+  ace_mode: html
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  color: "#e34c26"
+  aliases:
+    - xhtml
+  extensions:
+    - ".html"
+    - ".htm"
+    - ".html.hl"
+    - ".inc"
+    - ".st"
+    - ".xht"
+    - ".xhtml"
+  language_id: 146
+HTML+Django:
+  type: markup
+  tm_scope: text.html.django
+  group: HTML
+  extensions:
+    - ".jinja"
+    - ".j2"
+    - ".jinja2"
+    - ".njk"
+  aliases:
+    - django
+    - html+django/jinja
+    - html+jinja
+    - htmldjango
+    - njk
+    - nunjucks
+  ace_mode: django
+  codemirror_mode: django
+  codemirror_mime_type: text/x-django
+  language_id: 147
+HTML+ECR:
+  type: markup
+  tm_scope: text.html.ecr
+  group: HTML
+  aliases:
+    - ecr
+  extensions:
+    - ".ecr"
+  ace_mode: text
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  language_id: 148
+HTML+EEX:
+  type: markup
+  tm_scope: text.html.elixir
+  group: HTML
+  aliases:
+    - eex
+    - leex
+  extensions:
+    - ".eex"
+    - ".html.leex"
+  ace_mode: text
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  language_id: 149
+HTML+ERB:
+  type: markup
+  tm_scope: text.html.erb
+  group: HTML
+  aliases:
+    - erb
+    - rhtml
+    - html+ruby
+  extensions:
+    - ".erb"
+    - ".erb.deface"
+    - ".rhtml"
+  ace_mode: text
+  codemirror_mode: htmlembedded
+  codemirror_mime_type: application/x-erb
+  language_id: 150
+HTML+PHP:
+  type: markup
+  tm_scope: text.html.php
+  group: HTML
+  extensions:
+    - ".phtml"
+  ace_mode: php
+  codemirror_mode: php
+  codemirror_mime_type: application/x-httpd-php
+  language_id: 151
+HTML+Razor:
+  type: markup
+  tm_scope: text.html.cshtml
+  group: HTML
+  aliases:
+    - razor
+  extensions:
+    - ".cshtml"
+    - ".razor"
+  ace_mode: razor
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  language_id: 479039817
+HTTP:
+  type: data
+  extensions:
+    - ".http"
+  tm_scope: source.httpspec
+  ace_mode: text
+  codemirror_mode: http
+  codemirror_mime_type: message/http
+  language_id: 152
+HXML:
+  type: data
+  ace_mode: text
+  extensions:
+    - ".hxml"
+  tm_scope: source.hxml
+  language_id: 786683730
+Hack:
+  type: programming
+  ace_mode: php
+  codemirror_mode: php
+  codemirror_mime_type: application/x-httpd-php
+  extensions:
+    - ".hack"
+    - ".hh"
+    - ".hhi"
+    - ".php"
+  tm_scope: source.hack
+  color: "#878787"
+  language_id: 153
+Haml:
+  type: markup
+  color: "#ece2a9"
+  extensions:
+    - ".haml"
+    - ".haml.deface"
+  tm_scope: text.haml
+  ace_mode: haml
+  codemirror_mode: haml
+  codemirror_mime_type: text/x-haml
+  language_id: 154
+Handlebars:
+  type: markup
+  color: "#f7931e"
+  aliases:
+    - hbs
+    - htmlbars
+  extensions:
+    - ".handlebars"
+    - ".hbs"
+  tm_scope: text.html.handlebars
+  ace_mode: handlebars
+  language_id: 155
+Harbour:
+  type: programming
+  color: "#0e60e3"
+  extensions:
+    - ".hb"
+  tm_scope: source.harbour
+  ace_mode: text
+  language_id: 156
+Haskell:
+  type: programming
+  color: "#5e5086"
+  extensions:
+    - ".hs"
+    - ".hs-boot"
+    - ".hsc"
+  interpreters:
+    - runghc
+    - runhaskell
+    - runhugs
+  tm_scope: source.haskell
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  language_id: 157
+Haxe:
+  type: programming
+  ace_mode: haxe
+  codemirror_mode: haxe
+  codemirror_mime_type: text/x-haxe
+  color: "#df7900"
+  extensions:
+    - ".hx"
+    - ".hxsl"
+  tm_scope: source.hx
+  language_id: 158
+HiveQL:
+  type: programming
+  extensions:
+    - ".q"
+    - ".hql"
+  color: "#dce200"
+  tm_scope: source.hql
+  ace_mode: sql
+  language_id: 931814087
+HolyC:
+  type: programming
+  color: "#ffefaf"
+  extensions:
+    - ".hc"
+  tm_scope: source.hc
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 928121743
+Hy:
+  type: programming
+  ace_mode: text
+  color: "#7790B2"
+  extensions:
+    - ".hy"
+  interpreters:
+    - hy
+  aliases:
+    - hylang
+  tm_scope: source.hy
+  language_id: 159
+HyPhy:
+  type: programming
+  ace_mode: text
+  extensions:
+    - ".bf"
+  tm_scope: none
+  language_id: 160
+IDL:
+  type: programming
+  color: "#a3522f"
+  extensions:
+    - ".pro"
+    - ".dlm"
+  tm_scope: source.idl
+  ace_mode: text
+  codemirror_mode: idl
+  codemirror_mime_type: text/x-idl
+  language_id: 161
+IGOR Pro:
+  type: programming
+  color: "#0000cc"
+  extensions:
+    - ".ipf"
+  aliases:
+    - igor
+    - igorpro
+  tm_scope: source.igor
+  ace_mode: text
+  language_id: 162
+INI:
+  type: data
+  extensions:
+    - ".ini"
+    - ".cfg"
+    - ".dof"
+    - ".lektorproject"
+    - ".prefs"
+    - ".pro"
+    - ".properties"
+  filenames:
+    - buildozer.spec
+  tm_scope: source.ini
+  aliases:
+    - dosini
+  ace_mode: ini
+  codemirror_mode: properties
+  codemirror_mime_type: text/x-properties
+  language_id: 163
+IRC log:
+  type: data
+  aliases:
+    - irc
+    - irc logs
+  extensions:
+    - ".irclog"
+    - ".weechatlog"
+  tm_scope: none
+  ace_mode: text
+  codemirror_mode: mirc
+  codemirror_mime_type: text/mirc
+  language_id: 164
+Idris:
+  type: programming
+  color: "#b30000"
+  extensions:
+    - ".idr"
+    - ".lidr"
+  ace_mode: text
+  tm_scope: source.idris
+  language_id: 165
+Ignore List:
+  type: data
+  group: INI
+  aliases:
+    - ignore
+    - gitignore
+    - git-ignore
+  extensions:
+    - ".gitignore"
+  filenames:
+    - ".atomignore"
+    - ".babelignore"
+    - ".bzrignore"
+    - ".coffeelintignore"
+    - ".cvsignore"
+    - ".dockerignore"
+    - ".eslintignore"
+    - ".gitignore"
+    - ".nodemonignore"
+    - ".npmignore"
+    - ".prettierignore"
+    - ".stylelintignore"
+    - ".vscodeignore"
+    - gitignore-global
+    - gitignore_global
+  ace_mode: gitignore
+  tm_scope: source.gitignore
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 74444240
+Inform 7:
+  type: programming
+  wrap: true
+  extensions:
+    - ".ni"
+    - ".i7x"
+  tm_scope: source.inform7
+  aliases:
+    - i7
+    - inform7
+  ace_mode: text
+  language_id: 166
+Inno Setup:
+  type: programming
+  extensions:
+    - ".iss"
+    - ".isl"
+  tm_scope: source.inno
+  ace_mode: text
+  language_id: 167
+Io:
+  type: programming
+  color: "#a9188d"
+  extensions:
+    - ".io"
+  interpreters:
+    - io
+  tm_scope: source.io
+  ace_mode: io
+  language_id: 168
+Ioke:
+  type: programming
+  color: "#078193"
+  extensions:
+    - ".ik"
+  interpreters:
+    - ioke
+  tm_scope: source.ioke
+  ace_mode: text
+  language_id: 169
+Isabelle:
+  type: programming
+  color: "#FEFE00"
+  extensions:
+    - ".thy"
+  tm_scope: source.isabelle.theory
+  ace_mode: text
+  language_id: 170
+Isabelle ROOT:
+  type: programming
+  group: Isabelle
+  filenames:
+    - ROOT
+  tm_scope: source.isabelle.root
+  ace_mode: text
+  language_id: 171
+J:
+  type: programming
+  color: "#9EEDFF"
+  extensions:
+    - ".ijs"
+  interpreters:
+    - jconsole
+  tm_scope: source.j
+  ace_mode: text
+  language_id: 172
+JFlex:
+  type: programming
+  color: "#DBCA00"
+  group: Lex
+  extensions:
+    - ".flex"
+    - ".jflex"
+  tm_scope: source.jflex
+  ace_mode: text
+  language_id: 173
+JSON:
+  type: data
+  tm_scope: source.json
+  ace_mode: json
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  searchable: false
+  extensions:
+    - ".json"
+    - ".avsc"
+    - ".geojson"
+    - ".gltf"
+    - ".har"
+    - ".ice"
+    - ".JSON-tmLanguage"
+    - ".jsonl"
+    - ".mcmeta"
+    - ".tfstate"
+    - ".tfstate.backup"
+    - ".topojson"
+    - ".webapp"
+    - ".webmanifest"
+    - ".yy"
+    - ".yyp"
+  filenames:
+    - ".arcconfig"
+    - ".htmlhintrc"
+    - ".tern-config"
+    - ".tern-project"
+    - ".watchmanconfig"
+    - composer.lock
+    - mcmod.info
+  language_id: 174
+JSON with Comments:
+  type: data
+  group: JSON
+  tm_scope: source.js
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: text/javascript
+  aliases:
+    - jsonc
+  extensions:
+    - ".jsonc"
+    - ".sublime-build"
+    - ".sublime-commands"
+    - ".sublime-completions"
+    - ".sublime-keymap"
+    - ".sublime-macro"
+    - ".sublime-menu"
+    - ".sublime-mousemap"
+    - ".sublime-project"
+    - ".sublime-settings"
+    - ".sublime-theme"
+    - ".sublime-workspace"
+    - ".sublime_metrics"
+    - ".sublime_session"
+  filenames:
+    - ".babelrc"
+    - ".eslintrc.json"
+    - ".jscsrc"
+    - ".jshintrc"
+    - ".jslintrc"
+    - devcontainer.json
+    - jsconfig.json
+    - language-configuration.json
+    - tsconfig.json
+    - tslint.json
+  language_id: 423
+JSON5:
+  type: data
+  extensions:
+    - ".json5"
+  tm_scope: source.js
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  language_id: 175
+JSONLD:
+  type: data
+  extensions:
+    - ".jsonld"
+  tm_scope: source.js
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  language_id: 176
+JSONiq:
+  color: "#40d47e"
+  type: programming
+  ace_mode: jsoniq
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  extensions:
+    - ".jq"
+  tm_scope: source.jq
+  language_id: 177
+JSX:
+  type: programming
+  group: JavaScript
+  extensions:
+    - ".jsx"
+  tm_scope: source.js.jsx
+  ace_mode: javascript
+  codemirror_mode: jsx
+  codemirror_mime_type: text/jsx
+  language_id: 178
+Jasmin:
+  type: programming
+  ace_mode: java
+  extensions:
+    - ".j"
+  tm_scope: source.jasmin
+  language_id: 180
+# tag::java[]
+Java:
+  type: programming
+  tm_scope: source.java
+  ace_mode: java
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-java
+  color: "#b07219"
+  extensions:
+    - ".java"
+  language_id: 181
+  comment_style_id: SlashAsterisk # <1>
+# end::java[]
+Java Properties:
+  type: data
+  extensions:
+    - ".properties"
+  tm_scope: source.java-properties
+  ace_mode: properties
+  codemirror_mode: properties
+  codemirror_mime_type: text/x-properties
+  language_id: 519377561
+Java Server Pages:
+  type: programming
+  group: Java
+  aliases:
+    - jsp
+  extensions:
+    - ".jsp"
+  tm_scope: text.html.jsp
+  ace_mode: jsp
+  codemirror_mode: htmlembedded
+  codemirror_mime_type: application/x-jsp
+  language_id: 182
+JavaScript:
+  type: programming
+  tm_scope: source.js
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: text/javascript
+  color: "#f1e05a"
+  aliases:
+    - js
+    - node
+  extensions:
+    - ".js"
+    - "._js"
+    - ".bones"
+    - ".cjs"
+    - ".es"
+    - ".es6"
+    - ".frag"
+    - ".gs"
+    - ".jake"
+    - ".jsb"
+    - ".jscad"
+    - ".jsfl"
+    - ".jsm"
+    - ".jss"
+    - ".mjs"
+    - ".njs"
+    - ".pac"
+    - ".sjs"
+    - ".ssjs"
+    - ".xsjs"
+    - ".xsjslib"
+  filenames:
+    - Jakefile
+  interpreters:
+    - chakra
+    - d8
+    - gjs
+    - js
+    - node
+    - nodejs
+    - qjs
+    - rhino
+    - v8
+    - v8-shell
+  language_id: 183
+JavaScript+ERB:
+  type: programming
+  tm_scope: source.js
+  group: JavaScript
+  extensions:
+    - ".js.erb"
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: application/javascript
+  language_id: 914318960
+Jison:
+  type: programming
+  group: Yacc
+  extensions:
+    - ".jison"
+  tm_scope: source.jison
+  ace_mode: text
+  language_id: 284531423
+Jison Lex:
+  type: programming
+  group: Lex
+  extensions:
+    - ".jisonlex"
+  tm_scope: source.jisonlex
+  ace_mode: text
+  language_id: 406395330
+Jolie:
+  type: programming
+  extensions:
+    - ".ol"
+    - ".iol"
+  interpreters:
+    - jolie
+  color: "#843179"
+  ace_mode: text
+  tm_scope: source.jolie
+  language_id: 998078858
+Jsonnet:
+  color: "#0064bd"
+  type: programming
+  ace_mode: text
+  extensions:
+    - ".jsonnet"
+    - ".libsonnet"
+  tm_scope: source.jsonnet
+  language_id: 664885656
+Julia:
+  type: programming
+  extensions:
+    - ".jl"
+  interpreters:
+    - julia
+  color: "#a270ba"
+  tm_scope: source.julia
+  ace_mode: julia
+  codemirror_mode: julia
+  codemirror_mime_type: text/x-julia
+  language_id: 184
+Jupyter Notebook:
+  type: markup
+  ace_mode: json
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  tm_scope: source.json
+  color: "#DA5B0B"
+  extensions:
+    - ".ipynb"
+  filenames:
+    - Notebook
+  aliases:
+    - IPython Notebook
+  language_id: 185
+KRL:
+  type: programming
+  color: "#28430A"
+  extensions:
+    - ".krl"
+  tm_scope: none
+  ace_mode: text
+  language_id: 186
+Kaitai Struct:
+  type: programming
+  aliases:
+    - ksy
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  color: "#773b37"
+  extensions:
+    - ".ksy"
+  tm_scope: source.yaml
+  language_id: 818804755
+KiCad Layout:
+  type: data
+  aliases:
+    - pcbnew
+  extensions:
+    - ".kicad_pcb"
+    - ".kicad_mod"
+    - ".kicad_wks"
+  filenames:
+    - fp-lib-table
+  tm_scope: source.pcb.sexp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 187
+KiCad Legacy Layout:
+  type: data
+  extensions:
+    - ".brd"
+  tm_scope: source.pcb.board
+  ace_mode: text
+  language_id: 140848857
+KiCad Schematic:
+  type: data
+  aliases:
+    - eeschema schematic
+  extensions:
+    - ".sch"
+  tm_scope: source.pcb.schematic
+  ace_mode: text
+  language_id: 622447435
+Kit:
+  type: markup
+  ace_mode: html
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  extensions:
+    - ".kit"
+  tm_scope: text.html.basic
+  language_id: 188
+Kotlin:
+  type: programming
+  color: "#F18E33"
+  extensions:
+    - ".kt"
+    - ".ktm"
+    - ".kts"
+  tm_scope: source.kotlin
+  ace_mode: text
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-kotlin
+  language_id: 189
+LFE:
+  type: programming
+  color: "#4C3023"
+  extensions:
+    - ".lfe"
+  tm_scope: source.lisp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 190
+LLVM:
+  type: programming
+  extensions:
+    - ".ll"
+  tm_scope: source.llvm
+  ace_mode: text
+  color: "#185619"
+  language_id: 191
+LOLCODE:
+  type: programming
+  extensions:
+    - ".lol"
+  color: "#cc9900"
+  tm_scope: none
+  ace_mode: text
+  language_id: 192
+LSL:
+  type: programming
+  tm_scope: source.lsl
+  ace_mode: lsl
+  extensions:
+    - ".lsl"
+    - ".lslp"
+  interpreters:
+    - lsl
+  color: "#3d9970"
+  language_id: 193
+LTspice Symbol:
+  type: data
+  extensions:
+    - ".asy"
+  tm_scope: source.ltspice.symbol
+  ace_mode: text
+  codemirror_mode: spreadsheet
+  codemirror_mime_type: text/x-spreadsheet
+  language_id: 1013566805
+LabVIEW:
+  type: programming
+  extensions:
+    - ".lvproj"
+    - ".lvlib"
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 194
+Lark:
+  type: data
+  group: EBNF
+  color: "#0b130f"
+  extensions:
+    - ".lark"
+  tm_scope: source.lark
+  ace_mode: text
+  codemirror_mode: ebnf
+  codemirror_mime_type: text/x-ebnf
+  language_id: 758480799
+Lasso:
+  type: programming
+  color: "#999999"
+  extensions:
+    - ".lasso"
+    - ".las"
+    - ".lasso8"
+    - ".lasso9"
+  tm_scope: file.lasso
+  aliases:
+    - lassoscript
+  ace_mode: text
+  language_id: 195
+Latte:
+  type: markup
+  color: "#f2a542"
+  extensions:
+    - ".latte"
+  tm_scope: text.html.smarty
+  ace_mode: smarty
+  codemirror_mode: smarty
+  codemirror_mime_type: text/x-smarty
+  language_id: 196
+Lean:
+  type: programming
+  extensions:
+    - ".lean"
+    - ".hlean"
+  tm_scope: source.lean
+  ace_mode: text
+  language_id: 197
+Less:
+  type: markup
+  color: "#1d365d"
+  extensions:
+    - ".less"
+  tm_scope: source.css.less
+  ace_mode: less
+  codemirror_mode: css
+  codemirror_mime_type: text/css
+  language_id: 198
+Lex:
+  type: programming
+  color: "#DBCA00"
+  aliases:
+    - flex
+  extensions:
+    - ".l"
+    - ".lex"
+  filenames:
+    - Lexer.x
+    - lexer.x
+  tm_scope: source.lex
+  ace_mode: text
+  language_id: 199
+LilyPond:
+  type: programming
+  extensions:
+    - ".ly"
+    - ".ily"
+  tm_scope: source.lilypond
+  ace_mode: text
+  language_id: 200
+Limbo:
+  type: programming
+  extensions:
+    - ".b"
+    - ".m"
+  tm_scope: none
+  ace_mode: text
+  language_id: 201
+Linker Script:
+  type: data
+  extensions:
+    - ".ld"
+    - ".lds"
+    - ".x"
+  filenames:
+    - ld.script
+  tm_scope: none
+  ace_mode: text
+  language_id: 202
+Linux Kernel Module:
+  type: data
+  extensions:
+    - ".mod"
+  tm_scope: none
+  ace_mode: text
+  language_id: 203
+Liquid:
+  type: markup
+  extensions:
+    - ".liquid"
+  tm_scope: text.html.liquid
+  ace_mode: liquid
+  language_id: 204
+Literate Agda:
+  type: programming
+  group: Agda
+  extensions:
+    - ".lagda"
+  tm_scope: none
+  ace_mode: text
+  language_id: 205
+Literate CoffeeScript:
+  type: programming
+  tm_scope: source.litcoffee
+  group: CoffeeScript
+  ace_mode: text
+  wrap: true
+  aliases:
+    - litcoffee
+  extensions:
+    - ".litcoffee"
+    - ".coffee.md"
+  language_id: 206
+Literate Haskell:
+  type: programming
+  group: Haskell
+  aliases:
+    - lhaskell
+    - lhs
+  extensions:
+    - ".lhs"
+  tm_scope: text.tex.latex.haskell
+  ace_mode: text
+  codemirror_mode: haskell-literate
+  codemirror_mime_type: text/x-literate-haskell
+  language_id: 207
+LiveScript:
+  type: programming
+  color: "#499886"
+  aliases:
+    - live-script
+    - ls
+  extensions:
+    - ".ls"
+    - "._ls"
+  filenames:
+    - Slakefile
+  tm_scope: source.livescript
+  ace_mode: livescript
+  codemirror_mode: livescript
+  codemirror_mime_type: text/x-livescript
+  language_id: 208
+Logos:
+  type: programming
+  extensions:
+    - ".xm"
+    - ".x"
+    - ".xi"
+  ace_mode: text
+  tm_scope: source.logos
+  language_id: 209
+Logtalk:
+  type: programming
+  extensions:
+    - ".lgt"
+    - ".logtalk"
+  tm_scope: source.logtalk
+  ace_mode: text
+  language_id: 210
+LookML:
+  type: programming
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  color: "#652B81"
+  extensions:
+    - ".lookml"
+    - ".model.lkml"
+    - ".view.lkml"
+  tm_scope: source.yaml
+  language_id: 211
+LoomScript:
+  type: programming
+  extensions:
+    - ".ls"
+  tm_scope: source.loomscript
+  ace_mode: text
+  language_id: 212
+Lua:
+  type: programming
+  tm_scope: source.lua
+  ace_mode: lua
+  codemirror_mode: lua
+  codemirror_mime_type: text/x-lua
+  color: "#000080"
+  extensions:
+    - ".lua"
+    - ".fcgi"
+    - ".nse"
+    - ".p8"
+    - ".pd_lua"
+    - ".rbxs"
+    - ".rockspec"
+    - ".wlua"
+  filenames:
+    - ".luacheckrc"
+  interpreters:
+    - lua
+  language_id: 213
+M:
+  type: programming
+  aliases:
+    - mumps
+  extensions:
+    - ".mumps"
+    - ".m"
+  ace_mode: text
+  codemirror_mode: mumps
+  codemirror_mime_type: text/x-mumps
+  language_id: 214
+  tm_scope: none
+M4:
+  type: programming
+  extensions:
+    - ".m4"
+  tm_scope: source.m4
+  ace_mode: text
+  language_id: 215
+M4Sugar:
+  type: programming
+  group: M4
+  aliases:
+    - autoconf
+  extensions:
+    - ".m4"
+  filenames:
+    - configure.ac
+  tm_scope: source.m4
+  ace_mode: text
+  language_id: 216
+MATLAB:
+  type: programming
+  color: "#e16737"
+  aliases:
+    - octave
+  extensions:
+    - ".matlab"
+    - ".m"
+  tm_scope: source.matlab
+  ace_mode: matlab
+  codemirror_mode: octave
+  codemirror_mime_type: text/x-octave
+  language_id: 225
+MAXScript:
+  type: programming
+  color: "#00a6a6"
+  extensions:
+    - ".ms"
+    - ".mcr"
+  tm_scope: source.maxscript
+  ace_mode: text
+  language_id: 217
+MLIR:
+  type: programming
+  color: "#5EC8DB"
+  extensions:
+    - ".mlir"
+  tm_scope: source.mlir
+  ace_mode: text
+  language_id: 448253929
+MQL4:
+  type: programming
+  color: "#62A8D6"
+  extensions:
+    - ".mq4"
+    - ".mqh"
+  tm_scope: source.mql5
+  ace_mode: c_cpp
+  language_id: 426
+MQL5:
+  type: programming
+  color: "#4A76B8"
+  extensions:
+    - ".mq5"
+    - ".mqh"
+  tm_scope: source.mql5
+  ace_mode: c_cpp
+  language_id: 427
+MTML:
+  type: markup
+  color: "#b7e1f4"
+  extensions:
+    - ".mtml"
+  tm_scope: text.html.basic
+  ace_mode: html
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  language_id: 218
+MUF:
+  type: programming
+  group: Forth
+  extensions:
+    - ".muf"
+    - ".m"
+  tm_scope: none
+  ace_mode: forth
+  codemirror_mode: forth
+  codemirror_mime_type: text/x-forth
+  language_id: 219
+Macaulay2:
+  type: programming
+  extensions:
+    - ".m2"
+  aliases:
+    - m2
+  interpreters:
+    - M2
+  ace_mode: text
+  tm_scope: source.m2
+  color: "#d8ffff"
+  language_id: 34167825
+Makefile:
+  type: programming
+  color: "#427819"
+  aliases:
+    - bsdmake
+    - make
+    - mf
+  extensions:
+    - ".mak"
+    - ".d"
+    - ".make"
+    - ".mk"
+    - ".mkfile"
+  filenames:
+    - BSDmakefile
+    - GNUmakefile
+    - Kbuild
+    - Makefile
+    - Makefile.am
+    - Makefile.boot
+    - Makefile.frag
+    - Makefile.in
+    - Makefile.inc
+    - Makefile.wat
+    - makefile
+    - makefile.sco
+    - mkfile
+  interpreters:
+    - make
+  tm_scope: source.makefile
+  ace_mode: makefile
+  codemirror_mode: cmake
+  codemirror_mime_type: text/x-cmake
+  language_id: 220
+Mako:
+  type: programming
+  extensions:
+    - ".mako"
+    - ".mao"
+  tm_scope: text.html.mako
+  ace_mode: text
+  language_id: 221
+Markdown:
+  type: prose
+  color: "#083fa1"
+  aliases:
+    - pandoc
+  ace_mode: markdown
+  codemirror_mode: gfm
+  codemirror_mime_type: text/x-gfm
+  wrap: true
+  extensions:
+    - ".md"
+    - ".markdown"
+    - ".mdown"
+    - ".mdwn"
+    - ".mdx"
+    - ".mkd"
+    - ".mkdn"
+    - ".mkdown"
+    - ".ronn"
+    - ".workbook"
+  filenames:
+    - contents.lr
+  tm_scope: source.gfm
+  language_id: 222
+  comment_style_id: AngleBracket
+Marko:
+  type: markup
+  color: "#42bff2"
+  tm_scope: text.marko
+  extensions:
+    - ".marko"
+  aliases:
+    - markojs
+  ace_mode: text
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  language_id: 932782397
+Mask:
+  type: markup
+  color: "#f97732"
+  ace_mode: mask
+  extensions:
+    - ".mask"
+  tm_scope: source.mask
+  language_id: 223
+Mathematica:
+  type: programming
+  extensions:
+    - ".mathematica"
+    - ".cdf"
+    - ".m"
+    - ".ma"
+    - ".mt"
+    - ".nb"
+    - ".nbp"
+    - ".wl"
+    - ".wlt"
+  aliases:
+    - mma
+  tm_scope: source.mathematica
+  ace_mode: text
+  codemirror_mode: mathematica
+  codemirror_mime_type: text/x-mathematica
+  language_id: 224
+Maven POM:
+  type: data
+  tm_scope: text.xml.pom
+  filenames:
+    - pom.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 226
+Max:
+  type: programming
+  color: "#c4a79c"
+  aliases:
+    - max/msp
+    - maxmsp
+  extensions:
+    - ".maxpat"
+    - ".maxhelp"
+    - ".maxproj"
+    - ".mxt"
+    - ".pat"
+  tm_scope: source.json
+  ace_mode: json
+  codemirror_mode: javascript
+  codemirror_mime_type: application/json
+  language_id: 227
+MediaWiki:
+  type: prose
+  wrap: true
+  extensions:
+    - ".mediawiki"
+    - ".wiki"
+  tm_scope: text.html.mediawiki
+  ace_mode: text
+  language_id: 228
+Mercury:
+  type: programming
+  color: "#ff2b2b"
+  ace_mode: prolog
+  interpreters:
+    - mmi
+  extensions:
+    - ".m"
+    - ".moo"
+  tm_scope: source.mercury
+  language_id: 229
+Meson:
+  type: programming
+  color: "#007800"
+  filenames:
+    - meson.build
+    - meson_options.txt
+  tm_scope: source.meson
+  ace_mode: text
+  language_id: 799141244
+Metal:
+  type: programming
+  color: "#8f14e9"
+  extensions:
+    - ".metal"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 230
+Microsoft Developer Studio Project:
+  type: data
+  extensions:
+    - ".dsp"
+  tm_scope: none
+  ace_mode: text
+  language_id: 800983837
+MiniD:
+  type: programming
+  searchable: false
+  extensions:
+    - ".minid"
+  tm_scope: none
+  ace_mode: text
+  language_id: 231
+Mirah:
+  type: programming
+  color: "#c7a938"
+  extensions:
+    - ".druby"
+    - ".duby"
+    - ".mirah"
+  tm_scope: source.ruby
+  ace_mode: ruby
+  codemirror_mode: ruby
+  codemirror_mime_type: text/x-ruby
+  language_id: 232
+Modelica:
+  type: programming
+  extensions:
+    - ".mo"
+  tm_scope: source.modelica
+  ace_mode: text
+  codemirror_mode: modelica
+  codemirror_mime_type: text/x-modelica
+  language_id: 233
+Modula-2:
+  type: programming
+  extensions:
+    - ".mod"
+  tm_scope: source.modula2
+  ace_mode: text
+  language_id: 234
+Modula-3:
+  type: programming
+  extensions:
+    - ".i3"
+    - ".ig"
+    - ".m3"
+    - ".mg"
+  color: "#223388"
+  ace_mode: text
+  tm_scope: source.modula-3
+  language_id: 564743864
+Module Management System:
+  type: programming
+  extensions:
+    - ".mms"
+    - ".mmk"
+  filenames:
+    - descrip.mmk
+    - descrip.mms
+  tm_scope: none
+  ace_mode: text
+  language_id: 235
+Monkey:
+  type: programming
+  extensions:
+    - ".monkey"
+    - ".monkey2"
+  ace_mode: text
+  tm_scope: source.monkey
+  language_id: 236
+Moocode:
+  type: programming
+  extensions:
+    - ".moo"
+  tm_scope: none
+  ace_mode: text
+  language_id: 237
+MoonScript:
+  type: programming
+  extensions:
+    - ".moon"
+  interpreters:
+    - moon
+  tm_scope: source.moonscript
+  ace_mode: text
+  language_id: 238
+Motorola 68K Assembly:
+  type: programming
+  group: Assembly
+  aliases:
+    - m68k
+  extensions:
+    - ".asm"
+    - ".i"
+    - ".inc"
+    - ".s"
+    - ".x68"
+  tm_scope: source.m68k
+  ace_mode: assembly_x86
+  language_id: 477582706
+Muse:
+  type: prose
+  extensions:
+    - ".muse"
+  tm_scope: text.muse
+  ace_mode: text
+  wrap: true
+  language_id: 474864066
+  aliases:
+    - amusewiki
+    - emacs muse
+Mustache:
+  type: markup
+  group: HTML
+  extensions:
+    - ".mustache"
+  tm_scope: text.html.smarty
+  ace_mode: smarty
+  codemirror_mode: smarty
+  codemirror_mime_type: text/x-smarty
+  language_id: 638334590
+Myghty:
+  type: programming
+  extensions:
+    - ".myt"
+  tm_scope: none
+  ace_mode: text
+  language_id: 239
+NASL:
+  type: programming
+  extensions:
+    - ".nasl"
+    - ".inc"
+  tm_scope: source.nasl
+  ace_mode: text
+  language_id: 171666519
+NCL:
+  type: programming
+  color: "#28431f"
+  extensions:
+    - ".ncl"
+  tm_scope: source.ncl
+  ace_mode: text
+  language_id: 240
+NEON:
+  type: data
+  extensions:
+    - ".neon"
+  tm_scope: source.neon
+  ace_mode: text
+  aliases:
+    - nette object notation
+    - ne-on
+  language_id: 481192983
+NL:
+  type: data
+  extensions:
+    - ".nl"
+  tm_scope: none
+  ace_mode: text
+  language_id: 241
+NPM Config:
+  type: data
+  group: INI
+  aliases:
+    - npmrc
+  filenames:
+    - ".npmrc"
+  tm_scope: source.ini.npmrc
+  ace_mode: text
+  language_id: 685022663
+NSIS:
+  type: programming
+  extensions:
+    - ".nsi"
+    - ".nsh"
+  tm_scope: source.nsis
+  ace_mode: text
+  codemirror_mode: nsis
+  codemirror_mime_type: text/x-nsis
+  language_id: 242
+NWScript:
+  type: programming
+  color: "#111522"
+  extensions:
+    - ".nss"
+  tm_scope: source.c.nwscript
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 731233819
+Nearley:
+  type: programming
+  ace_mode: text
+  color: "#990000"
+  extensions:
+    - ".ne"
+    - ".nearley"
+  tm_scope: source.ne
+  language_id: 521429430
+Nemerle:
+  type: programming
+  color: "#3d3c6e"
+  extensions:
+    - ".n"
+  tm_scope: source.nemerle
+  ace_mode: text
+  language_id: 243
+NetLinx:
+  type: programming
+  color: "#0aa0ff"
+  extensions:
+    - ".axs"
+    - ".axi"
+  tm_scope: source.netlinx
+  ace_mode: text
+  language_id: 244
+NetLinx+ERB:
+  type: programming
+  color: "#747faa"
+  extensions:
+    - ".axs.erb"
+    - ".axi.erb"
+  tm_scope: source.netlinx.erb
+  ace_mode: text
+  language_id: 245
+NetLogo:
+  type: programming
+  color: "#ff6375"
+  extensions:
+    - ".nlogo"
+  tm_scope: source.lisp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 246
+NewLisp:
+  type: programming
+  color: "#87AED7"
+  extensions:
+    - ".nl"
+    - ".lisp"
+    - ".lsp"
+  interpreters:
+    - newlisp
+  tm_scope: source.lisp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 247
+Nextflow:
+  type: programming
+  ace_mode: groovy
+  tm_scope: source.nextflow
+  color: "#3ac486"
+  extensions:
+    - ".nf"
+  filenames:
+    - nextflow.config
+  interpreters:
+    - nextflow
+  language_id: 506780613
+Nginx:
+  type: data
+  extensions:
+    - ".nginx"
+    - ".nginxconf"
+    - ".vhost"
+  filenames:
+    - nginx.conf
+  tm_scope: source.nginx
+  aliases:
+    - nginx configuration file
+  ace_mode: text
+  codemirror_mode: nginx
+  codemirror_mime_type: text/x-nginx-conf
+  language_id: 248
+Nim:
+  type: programming
+  color: "#ffc200"
+  extensions:
+    - ".nim"
+    - ".nim.cfg"
+    - ".nimble"
+    - ".nimrod"
+    - ".nims"
+  filenames:
+    - nim.cfg
+  ace_mode: text
+  tm_scope: source.nim
+  language_id: 249
+Ninja:
+  type: data
+  tm_scope: source.ninja
+  extensions:
+    - ".ninja"
+  ace_mode: text
+  language_id: 250
+Nit:
+  type: programming
+  color: "#009917"
+  extensions:
+    - ".nit"
+  tm_scope: source.nit
+  ace_mode: text
+  language_id: 251
+Nix:
+  type: programming
+  color: "#7e7eff"
+  extensions:
+    - ".nix"
+  aliases:
+    - nixos
+  tm_scope: source.nix
+  ace_mode: nix
+  language_id: 252
+Nu:
+  type: programming
+  color: "#c9df40"
+  aliases:
+    - nush
+  extensions:
+    - ".nu"
+  filenames:
+    - Nukefile
+  tm_scope: source.nu
+  ace_mode: scheme
+  codemirror_mode: scheme
+  codemirror_mime_type: text/x-scheme
+  interpreters:
+    - nush
+  language_id: 253
+NumPy:
+  type: programming
+  color: "#9C8AF9"
+  group: Python
+  extensions:
+    - ".numpy"
+    - ".numpyw"
+    - ".numsc"
+  tm_scope: none
+  ace_mode: text
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  language_id: 254
+OCaml:
+  type: programming
+  ace_mode: ocaml
+  codemirror_mode: mllike
+  codemirror_mime_type: text/x-ocaml
+  color: "#3be133"
+  extensions:
+    - ".ml"
+    - ".eliom"
+    - ".eliomi"
+    - ".ml4"
+    - ".mli"
+    - ".mll"
+    - ".mly"
+  interpreters:
+    - ocaml
+    - ocamlrun
+    - ocamlscript
+  tm_scope: source.ocaml
+  language_id: 255
+ObjDump:
+  type: data
+  extensions:
+    - ".objdump"
+  tm_scope: objdump.x86asm
+  ace_mode: assembly_x86
+  language_id: 256
+Object Data Instance Notation:
+  type: data
+  extensions:
+    - ".odin"
+  tm_scope: source.odin-ehr
+  ace_mode: text
+  language_id: 985227236
+ObjectScript:
+  type: programming
+  extensions:
+    - ".cls"
+  language_id: 202735509
+  tm_scope: source.objectscript
+  color: "#424893"
+  ace_mode: text
+Objective-C:
+  type: programming
+  tm_scope: source.objc
+  color: "#438eff"
+  aliases:
+    - obj-c
+    - objc
+    - objectivec
+  extensions:
+    - ".m"
+    - ".h"
+  ace_mode: objectivec
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-objectivec
+  language_id: 257
+Objective-C++:
+  type: programming
+  tm_scope: source.objc++
+  color: "#6866fb"
+  aliases:
+    - obj-c++
+    - objc++
+    - objectivec++
+  extensions:
+    - ".mm"
+  ace_mode: objectivec
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-objectivec
+  language_id: 258
+Objective-J:
+  type: programming
+  color: "#ff0c5a"
+  aliases:
+    - obj-j
+    - objectivej
+    - objj
+  extensions:
+    - ".j"
+    - ".sj"
+  tm_scope: source.js.objj
+  ace_mode: text
+  language_id: 259
+Odin:
+  type: programming
+  color: "#60AFFE"
+  aliases:
+    - odinlang
+    - odin-lang
+  extensions:
+    - ".odin"
+  tm_scope: source.odin
+  ace_mode: text
+  language_id: 889244082
+Omgrofl:
+  type: programming
+  extensions:
+    - ".omgrofl"
+  color: "#cabbff"
+  tm_scope: none
+  ace_mode: text
+  language_id: 260
+Opa:
+  type: programming
+  extensions:
+    - ".opa"
+  tm_scope: source.opa
+  ace_mode: text
+  language_id: 261
+Opal:
+  type: programming
+  color: "#f7ede0"
+  extensions:
+    - ".opal"
+  tm_scope: source.opal
+  ace_mode: text
+  language_id: 262
+Open Policy Agent:
+  type: programming
+  ace_mode: text
+  extensions:
+    - ".rego"
+  language_id: 840483232
+  tm_scope: source.rego
+OpenCL:
+  type: programming
+  group: C
+  extensions:
+    - ".cl"
+    - ".opencl"
+  tm_scope: source.c
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 263
+OpenEdge ABL:
+  type: programming
+  aliases:
+    - progress
+    - openedge
+    - abl
+  extensions:
+    - ".p"
+    - ".cls"
+    - ".w"
+  tm_scope: source.abl
+  ace_mode: text
+  language_id: 264
+OpenQASM:
+  type: programming
+  extensions:
+    - ".qasm"
+  color: "#AA70FF"
+  tm_scope: source.qasm
+  ace_mode: text
+  language_id: 153739399
+OpenRC runscript:
+  type: programming
+  group: Shell
+  aliases:
+    - openrc
+  interpreters:
+    - openrc-run
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 265
+OpenSCAD:
+  type: programming
+  extensions:
+    - ".scad"
+  tm_scope: source.scad
+  ace_mode: scad
+  language_id: 266
+OpenStep Property List:
+  type: data
+  extensions:
+    - ".plist"
+    - ".glyphs"
+  tm_scope: source.plist
+  ace_mode: text
+  language_id: 598917541
+OpenType Feature File:
+  type: data
+  aliases:
+    - AFDKO
+  extensions:
+    - ".fea"
+  tm_scope: source.opentype
+  ace_mode: text
+  language_id: 374317347
+Org:
+  type: prose
+  wrap: true
+  extensions:
+    - ".org"
+  tm_scope: none
+  ace_mode: text
+  language_id: 267
+Ox:
+  type: programming
+  extensions:
+    - ".ox"
+    - ".oxh"
+    - ".oxo"
+  tm_scope: source.ox
+  ace_mode: text
+  language_id: 268
+Oxygene:
+  type: programming
+  color: "#cdd0e3"
+  extensions:
+    - ".oxygene"
+  tm_scope: none
+  ace_mode: text
+  language_id: 269
+Oz:
+  type: programming
+  color: "#fab738"
+  extensions:
+    - ".oz"
+  tm_scope: source.oz
+  ace_mode: text
+  codemirror_mode: oz
+  codemirror_mime_type: text/x-oz
+  language_id: 270
+P4:
+  type: programming
+  color: "#7055b5"
+  extensions:
+    - ".p4"
+  tm_scope: source.p4
+  ace_mode: text
+  language_id: 348895984
+PHP:
+  type: programming
+  tm_scope: text.html.php
+  ace_mode: php
+  codemirror_mode: php
+  codemirror_mime_type: application/x-httpd-php
+  color: "#4F5D95"
+  extensions:
+    - ".php"
+    - ".aw"
+    - ".ctp"
+    - ".fcgi"
+    - ".inc"
+    - ".php3"
+    - ".php4"
+    - ".php5"
+    - ".phps"
+    - ".phpt"
+  filenames:
+    - ".php"
+    - ".php_cs"
+    - ".php_cs.dist"
+    - Phakefile
+  interpreters:
+    - php
+  aliases:
+    - inc
+  language_id: 272
+PLSQL:
+  type: programming
+  ace_mode: sql
+  codemirror_mode: sql
+  codemirror_mime_type: text/x-plsql
+  tm_scope: none
+  color: "#dad8d8"
+  extensions:
+    - ".pls"
+    - ".bdy"
+    - ".ddl"
+    - ".fnc"
+    - ".pck"
+    - ".pkb"
+    - ".pks"
+    - ".plb"
+    - ".plsql"
+    - ".prc"
+    - ".spc"
+    - ".sql"
+    - ".tpb"
+    - ".tps"
+    - ".trg"
+    - ".vw"
+  language_id: 273
+PLpgSQL:
+  type: programming
+  ace_mode: pgsql
+  codemirror_mode: sql
+  codemirror_mime_type: text/x-sql
+  tm_scope: source.sql
+  extensions:
+    - ".pgsql"
+    - ".sql"
+  language_id: 274
+POV-Ray SDL:
+  type: programming
+  aliases:
+    - pov-ray
+    - povray
+  extensions:
+    - ".pov"
+    - ".inc"
+  tm_scope: source.pov-ray sdl
+  ace_mode: text
+  language_id: 275
+Pan:
+  type: programming
+  color: "#cc0000"
+  extensions:
+    - ".pan"
+  tm_scope: source.pan
+  ace_mode: text
+  language_id: 276
+Papyrus:
+  type: programming
+  color: "#6600cc"
+  extensions:
+    - ".psc"
+  tm_scope: source.papyrus.skyrim
+  ace_mode: text
+  language_id: 277
+Parrot:
+  type: programming
+  color: "#f3ca0a"
+  extensions:
+    - ".parrot"
+  tm_scope: none
+  ace_mode: text
+  language_id: 278
+Parrot Assembly:
+  group: Parrot
+  type: programming
+  aliases:
+    - pasm
+  extensions:
+    - ".pasm"
+  interpreters:
+    - parrot
+  tm_scope: none
+  ace_mode: text
+  language_id: 279
+Parrot Internal Representation:
+  group: Parrot
+  tm_scope: source.parrot.pir
+  type: programming
+  aliases:
+    - pir
+  extensions:
+    - ".pir"
+  interpreters:
+    - parrot
+  ace_mode: text
+  language_id: 280
+Pascal:
+  type: programming
+  color: "#E3F171"
+  extensions:
+    - ".pas"
+    - ".dfm"
+    - ".dpr"
+    - ".inc"
+    - ".lpr"
+    - ".pascal"
+    - ".pp"
+  interpreters:
+    - instantfpc
+  tm_scope: source.pascal
+  ace_mode: pascal
+  codemirror_mode: pascal
+  codemirror_mime_type: text/x-pascal
+  language_id: 281
+Pawn:
+  type: programming
+  color: "#dbb284"
+  extensions:
+    - ".pwn"
+    - ".inc"
+    - ".sma"
+  tm_scope: source.pawn
+  ace_mode: text
+  language_id: 271
+Pep8:
+  type: programming
+  color: "#C76F5B"
+  extensions:
+    - ".pep"
+  ace_mode: text
+  tm_scope: source.pep8
+  language_id: 840372442
+Perl:
+  type: programming
+  tm_scope: source.perl
+  ace_mode: perl
+  codemirror_mode: perl
+  codemirror_mime_type: text/x-perl
+  color: "#0298c3"
+  extensions:
+    - ".pl"
+    - ".al"
+    - ".cgi"
+    - ".fcgi"
+    - ".perl"
+    - ".ph"
+    - ".plx"
+    - ".pm"
+    - ".psgi"
+    - ".t"
+  filenames:
+    - Makefile.PL
+    - Rexfile
+    - ack
+    - cpanfile
+  interpreters:
+    - cperl
+    - perl
+  aliases:
+    - cperl
+  language_id: 282
+Pic:
+  type: markup
+  group: Roff
+  tm_scope: source.pic
+  extensions:
+    - ".pic"
+    - ".chem"
+  ace_mode: text
+  codemirror_mode: troff
+  codemirror_mime_type: text/troff
+  language_id: 425
+Pickle:
+  type: data
+  extensions:
+    - ".pkl"
+  tm_scope: none
+  ace_mode: text
+  language_id: 284
+PicoLisp:
+  type: programming
+  extensions:
+    - ".l"
+  interpreters:
+    - picolisp
+    - pil
+  tm_scope: source.lisp
+  ace_mode: lisp
+  language_id: 285
+PigLatin:
+  type: programming
+  color: "#fcd7de"
+  extensions:
+    - ".pig"
+  tm_scope: source.pig_latin
+  ace_mode: text
+  language_id: 286
+Pike:
+  type: programming
+  color: "#005390"
+  extensions:
+    - ".pike"
+    - ".pmod"
+  interpreters:
+    - pike
+  tm_scope: source.pike
+  ace_mode: text
+  language_id: 287
+PlantUML:
+  type: data
+  extensions:
+    - ".puml"
+    - ".iuml"
+    - ".plantuml"
+  tm_scope: source.wsd
+  ace_mode: text
+  language_id: 833504686
+Pod:
+  type: prose
+  ace_mode: perl
+  codemirror_mode: perl
+  codemirror_mime_type: text/x-perl
+  wrap: true
+  extensions:
+    - ".pod"
+  interpreters:
+    - perl
+  tm_scope: none
+  language_id: 288
+Pod 6:
+  type: prose
+  ace_mode: perl
+  tm_scope: source.raku
+  wrap: true
+  extensions:
+    - ".pod"
+    - ".pod6"
+  interpreters:
+    - perl6
+  language_id: 155357471
+PogoScript:
+  type: programming
+  color: "#d80074"
+  extensions:
+    - ".pogo"
+  tm_scope: source.pogoscript
+  ace_mode: text
+  language_id: 289
+Pony:
+  type: programming
+  extensions:
+    - ".pony"
+  tm_scope: source.pony
+  ace_mode: text
+  language_id: 290
+PostCSS:
+  type: markup
+  tm_scope: source.postcss
+  group: CSS
+  extensions:
+    - ".pcss"
+    - ".postcss"
+  ace_mode: text
+  language_id: 262764437
+PostScript:
+  type: markup
+  color: "#da291c"
+  extensions:
+    - ".ps"
+    - ".eps"
+    - ".epsi"
+    - ".pfa"
+  tm_scope: source.postscript
+  aliases:
+    - postscr
+  ace_mode: text
+  language_id: 291
+PowerBuilder:
+  type: programming
+  color: "#8f0f8d"
+  extensions:
+    - ".pbt"
+    - ".sra"
+    - ".sru"
+    - ".srw"
+  tm_scope: none
+  ace_mode: text
+  language_id: 292
+PowerShell:
+  type: programming
+  color: "#012456"
+  tm_scope: source.powershell
+  ace_mode: powershell
+  codemirror_mode: powershell
+  codemirror_mime_type: application/x-powershell
+  aliases:
+    - posh
+    - pwsh
+  extensions:
+    - ".ps1"
+    - ".psd1"
+    - ".psm1"
+  interpreters:
+    - pwsh
+  language_id: 293
+Prisma:
+  type: data
+  color: "#0c344b"
+  extensions:
+    - ".prisma"
+  tm_scope: source.prisma
+  ace_mode: text
+  language_id: 499933428
+Processing:
+  type: programming
+  color: "#0096D8"
+  extensions:
+    - ".pde"
+  tm_scope: source.processing
+  ace_mode: text
+  language_id: 294
+Proguard:
+  type: data
+  extensions:
+    - ".pro"
+  tm_scope: none
+  ace_mode: text
+  language_id: 716513858
+Prolog:
+  type: programming
+  color: "#74283c"
+  extensions:
+    - ".pl"
+    - ".pro"
+    - ".prolog"
+    - ".yap"
+  interpreters:
+    - swipl
+    - yap
+  tm_scope: source.prolog
+  ace_mode: prolog
+  language_id: 295
+Propeller Spin:
+  type: programming
+  color: "#7fa2a7"
+  extensions:
+    - ".spin"
+  tm_scope: source.spin
+  ace_mode: text
+  language_id: 296
+Protocol Buffer:
+  type: data
+  aliases:
+    - protobuf
+    - Protocol Buffers
+  extensions:
+    - ".proto"
+  tm_scope: source.protobuf
+  ace_mode: protobuf
+  codemirror_mode: protobuf
+  codemirror_mime_type: text/x-protobuf
+  language_id: 297
+Public Key:
+  type: data
+  extensions:
+    - ".asc"
+    - ".pub"
+  tm_scope: none
+  ace_mode: text
+  codemirror_mode: asciiarmor
+  codemirror_mime_type: application/pgp
+  language_id: 298
+Pug:
+  type: markup
+  color: "#a86454"
+  extensions:
+    - ".jade"
+    - ".pug"
+  tm_scope: text.jade
+  ace_mode: jade
+  codemirror_mode: pug
+  codemirror_mime_type: text/x-pug
+  language_id: 179
+Puppet:
+  type: programming
+  color: "#302B6D"
+  extensions:
+    - ".pp"
+  filenames:
+    - Modulefile
+  ace_mode: text
+  codemirror_mode: puppet
+  codemirror_mime_type: text/x-puppet
+  tm_scope: source.puppet
+  language_id: 299
+Pure Data:
+  type: data
+  extensions:
+    - ".pd"
+  tm_scope: none
+  ace_mode: text
+  language_id: 300
+PureBasic:
+  type: programming
+  color: "#5a6986"
+  extensions:
+    - ".pb"
+    - ".pbi"
+  tm_scope: none
+  ace_mode: text
+  language_id: 301
+PureScript:
+  type: programming
+  color: "#1D222D"
+  extensions:
+    - ".purs"
+  tm_scope: source.purescript
+  ace_mode: haskell
+  codemirror_mode: haskell
+  codemirror_mime_type: text/x-haskell
+  language_id: 302
+Python:
+  type: programming
+  tm_scope: source.python
+  ace_mode: python
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  color: "#3572A5"
+  extensions:
+    - ".py"
+    - ".cgi"
+    - ".fcgi"
+    - ".gyp"
+    - ".gypi"
+    - ".lmi"
+    - ".py3"
+    - ".pyde"
+    - ".pyi"
+    - ".pyp"
+    - ".pyt"
+    - ".pyw"
+    - ".rpy"
+    - ".smk"
+    - ".spec"
+    - ".tac"
+    - ".wsgi"
+    - ".xpy"
+  filenames:
+    - ".gclient"
+    - DEPS
+    - SConscript
+    - SConstruct
+    - Snakefile
+    - wscript
+  interpreters:
+    - python
+    - python2
+    - python3
+  aliases:
+    - python3
+    - rusthon
+  language_id: 303
+  comment_style_id: Hashtag
+Python console:
+  type: programming
+  group: Python
+  searchable: false
+  aliases:
+    - pycon
+  tm_scope: text.python.console
+  ace_mode: text
+  language_id: 428
+Python traceback:
+  type: data
+  group: Python
+  searchable: false
+  extensions:
+    - ".pytb"
+  tm_scope: text.python.traceback
+  ace_mode: text
+  language_id: 304
+Q#:
+  type: programming
+  extensions:
+    - ".qs"
+  aliases:
+    - qsharp
+  color: "#fed659"
+  ace_mode: text
+  tm_scope: source.qsharp
+  language_id: 697448245
+QML:
+  type: programming
+  color: "#44a51c"
+  extensions:
+    - ".qml"
+    - ".qbs"
+  tm_scope: source.qml
+  ace_mode: text
+  language_id: 305
+QMake:
+  type: programming
+  extensions:
+    - ".pro"
+    - ".pri"
+  interpreters:
+    - qmake
+  tm_scope: source.qmake
+  ace_mode: text
+  language_id: 306
+Qt Script:
+  type: programming
+  ace_mode: javascript
+  codemirror_mode: javascript
+  codemirror_mime_type: text/javascript
+  extensions:
+    - ".qs"
+  filenames:
+    - installscript.qs
+    - toolchain_installscript.qs
+  color: "#00b841"
+  tm_scope: source.js
+  language_id: 558193693
+Quake:
+  type: programming
+  filenames:
+    - m3makefile
+    - m3overrides
+  color: "#882233"
+  ace_mode: text
+  tm_scope: source.quake
+  language_id: 375265331
+R:
+  type: programming
+  color: "#198CE7"
+  aliases:
+    - R
+    - Rscript
+    - splus
+  extensions:
+    - ".r"
+    - ".rd"
+    - ".rsx"
+  filenames:
+    - ".Rprofile"
+    - expr-dist
+  interpreters:
+    - Rscript
+  tm_scope: source.r
+  ace_mode: r
+  codemirror_mode: r
+  codemirror_mime_type: text/x-rsrc
+  language_id: 307
+RAML:
+  type: markup
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  tm_scope: source.yaml
+  color: "#77d9fb"
+  extensions:
+    - ".raml"
+  language_id: 308
+RDoc:
+  type: prose
+  ace_mode: rdoc
+  wrap: true
+  extensions:
+    - ".rdoc"
+  tm_scope: text.rdoc
+  language_id: 309
+REALbasic:
+  type: programming
+  extensions:
+    - ".rbbas"
+    - ".rbfrm"
+    - ".rbmnu"
+    - ".rbres"
+    - ".rbtbar"
+    - ".rbuistate"
+  tm_scope: source.vbnet
+  ace_mode: text
+  language_id: 310
+REXX:
+  type: programming
+  aliases:
+    - arexx
+  extensions:
+    - ".rexx"
+    - ".pprx"
+    - ".rex"
+  interpreters:
+    - regina
+    - rexx
+  tm_scope: source.rexx
+  ace_mode: text
+  language_id: 311
+RMarkdown:
+  type: prose
+  wrap: true
+  ace_mode: markdown
+  codemirror_mode: gfm
+  codemirror_mime_type: text/x-gfm
+  extensions:
+    - ".rmd"
+  tm_scope: source.gfm
+  language_id: 313
+RPC:
+  type: programming
+  aliases:
+    - rpcgen
+    - oncrpc
+    - xdr
+  ace_mode: c_cpp
+  extensions:
+    - ".x"
+  tm_scope: source.c
+  language_id: 1031374237
+RPM Spec:
+  type: data
+  tm_scope: source.rpm-spec
+  extensions:
+    - ".spec"
+  aliases:
+    - specfile
+  ace_mode: text
+  codemirror_mode: rpm
+  codemirror_mime_type: text/x-rpm-spec
+  language_id: 314
+RUNOFF:
+  type: markup
+  color: "#665a4e"
+  extensions:
+    - ".rnh"
+    - ".rno"
+  wrap: true
+  tm_scope: text.runoff
+  ace_mode: text
+  language_id: 315
+Racket:
+  type: programming
+  color: "#3c5caa"
+  extensions:
+    - ".rkt"
+    - ".rktd"
+    - ".rktl"
+    - ".scrbl"
+  interpreters:
+    - racket
+  tm_scope: source.racket
+  ace_mode: lisp
+  language_id: 316
+Ragel:
+  type: programming
+  color: "#9d5200"
+  extensions:
+    - ".rl"
+  aliases:
+    - ragel-rb
+    - ragel-ruby
+  tm_scope: none
+  ace_mode: text
+  language_id: 317
+Raku:
+  type: programming
+  color: "#0000fb"
+  extensions:
+    - ".6pl"
+    - ".6pm"
+    - ".nqp"
+    - ".p6"
+    - ".p6l"
+    - ".p6m"
+    - ".pl"
+    - ".pl6"
+    - ".pm"
+    - ".pm6"
+    - ".t"
+  interpreters:
+    - perl6
+    - raku
+    - rakudo
+  aliases:
+    - perl6
+    - perl-6
+  tm_scope: source.raku
+  ace_mode: perl
+  codemirror_mode: perl
+  codemirror_mime_type: text/x-perl
+  language_id: 283
+Rascal:
+  type: programming
+  color: "#fffaa0"
+  extensions:
+    - ".rsc"
+  tm_scope: source.rascal
+  ace_mode: text
+  language_id: 173616037
+Raw token data:
+  type: data
+  aliases:
+    - raw
+  extensions:
+    - ".raw"
+  tm_scope: none
+  ace_mode: text
+  language_id: 318
+ReScript:
+  type: programming
+  color: "#ed5051"
+  ace_mode: rust
+  codemirror_mode: rust
+  codemirror_mime_type: text/x-rustsrc
+  extensions:
+    - ".res"
+  interpreters:
+    - ocaml
+  tm_scope: source.rescript
+  language_id: 501875647
+Readline Config:
+  type: data
+  group: INI
+  aliases:
+    - inputrc
+    - readline
+  filenames:
+    - ".inputrc"
+    - inputrc
+  tm_scope: source.inputrc
+  ace_mode: text
+  language_id: 538732839
+Reason:
+  type: programming
+  color: "#ff5847"
+  ace_mode: rust
+  codemirror_mode: rust
+  codemirror_mime_type: text/x-rustsrc
+  extensions:
+    - ".re"
+    - ".rei"
+  tm_scope: source.reason
+  language_id: 869538413
+Rebol:
+  type: programming
+  color: "#358a5b"
+  extensions:
+    - ".reb"
+    - ".r"
+    - ".r2"
+    - ".r3"
+    - ".rebol"
+  ace_mode: text
+  tm_scope: source.rebol
+  language_id: 319
+Red:
+  type: programming
+  color: "#f50000"
+  extensions:
+    - ".red"
+    - ".reds"
+  aliases:
+    - red/system
+  tm_scope: source.red
+  ace_mode: text
+  language_id: 320
+Redcode:
+  type: programming
+  extensions:
+    - ".cw"
+  tm_scope: none
+  ace_mode: text
+  language_id: 321
+Regular Expression:
+  type: data
+  extensions:
+    - ".regexp"
+    - ".regex"
+  aliases:
+    - regexp
+    - regex
+  ace_mode: text
+  tm_scope: source.regexp
+  language_id: 363378884
+Ren'Py:
+  type: programming
+  aliases:
+    - renpy
+  color: "#ff7f7f"
+  extensions:
+    - ".rpy"
+  tm_scope: source.renpy
+  ace_mode: python
+  language_id: 322
+RenderScript:
+  type: programming
+  extensions:
+    - ".rs"
+    - ".rsh"
+  tm_scope: none
+  ace_mode: text
+  language_id: 323
+Rich Text Format:
+  type: markup
+  extensions:
+    - ".rtf"
+  tm_scope: text.rtf
+  ace_mode: text
+  language_id: 51601661
+Ring:
+  type: programming
+  color: "#2D54CB"
+  extensions:
+    - ".ring"
+  tm_scope: source.ring
+  ace_mode: text
+  language_id: 431
+Riot:
+  type: markup
+  color: "#A71E49"
+  ace_mode: html
+  extensions:
+    - ".riot"
+  tm_scope: text.html.riot
+  language_id: 878396783
+RobotFramework:
+  type: programming
+  extensions:
+    - ".robot"
+  tm_scope: text.robot
+  ace_mode: text
+  language_id: 324
+Roff:
+  type: markup
+  color: "#ecdebe"
+  extensions:
+    - ".roff"
+    - ".1"
+    - ".1in"
+    - ".1m"
+    - ".1x"
+    - ".2"
+    - ".3"
+    - ".3in"
+    - ".3m"
+    - ".3p"
+    - ".3pm"
+    - ".3qt"
+    - ".3x"
+    - ".4"
+    - ".5"
+    - ".6"
+    - ".7"
+    - ".8"
+    - ".9"
+    - ".l"
+    - ".man"
+    - ".mdoc"
+    - ".me"
+    - ".ms"
+    - ".n"
+    - ".nr"
+    - ".rno"
+    - ".tmac"
+  filenames:
+    - eqnrc
+    - mmn
+    - mmt
+    - troffrc
+    - troffrc-end
+  tm_scope: text.roff
+  aliases:
+    - groff
+    - man
+    - manpage
+    - man page
+    - man-page
+    - mdoc
+    - nroff
+    - troff
+  wrap: true
+  ace_mode: text
+  codemirror_mode: troff
+  codemirror_mime_type: text/troff
+  language_id: 141
+Roff Manpage:
+  type: markup
+  group: Roff
+  extensions:
+    - ".1"
+    - ".1in"
+    - ".1m"
+    - ".1x"
+    - ".2"
+    - ".3"
+    - ".3in"
+    - ".3m"
+    - ".3p"
+    - ".3pm"
+    - ".3qt"
+    - ".3x"
+    - ".4"
+    - ".5"
+    - ".6"
+    - ".7"
+    - ".8"
+    - ".9"
+    - ".man"
+    - ".mdoc"
+  wrap: true
+  tm_scope: text.roff
+  ace_mode: text
+  codemirror_mode: troff
+  codemirror_mime_type: text/troff
+  language_id: 612669833
+Rouge:
+  type: programming
+  ace_mode: clojure
+  codemirror_mode: clojure
+  codemirror_mime_type: text/x-clojure
+  color: "#cc0088"
+  extensions:
+    - ".rg"
+  tm_scope: source.clojure
+  language_id: 325
+Ruby:
+  type: programming
+  tm_scope: source.ruby
+  ace_mode: ruby
+  codemirror_mode: ruby
+  codemirror_mime_type: text/x-ruby
+  color: "#701516"
+  aliases:
+    - jruby
+    - macruby
+    - rake
+    - rb
+    - rbx
+  extensions:
+    - ".rb"
+    - ".builder"
+    - ".eye"
+    - ".fcgi"
+    - ".gemspec"
+    - ".god"
+    - ".jbuilder"
+    - ".mspec"
+    - ".pluginspec"
+    - ".podspec"
+    - ".rabl"
+    - ".rake"
+    - ".rbi"
+    - ".rbuild"
+    - ".rbw"
+    - ".rbx"
+    - ".ru"
+    - ".ruby"
+    - ".spec"
+    - ".thor"
+    - ".watchr"
+  interpreters:
+    - ruby
+    - macruby
+    - rake
+    - jruby
+    - rbx
+  filenames:
+    - ".irbrc"
+    - ".pryrc"
+    - ".simplecov"
+    - Appraisals
+    - Berksfile
+    - Brewfile
+    - Buildfile
+    - Capfile
+    - Dangerfile
+    - Deliverfile
+    - Fastfile
+    - Gemfile
+    - Gemfile.lock
+    - Guardfile
+    - Jarfile
+    - Mavenfile
+    - Podfile
+    - Puppetfile
+    - Rakefile
+    - Snapfile
+    - Thorfile
+    - Vagrantfile
+    - buildfile
+  language_id: 326
+Rust:
+  type: programming
+  color: "#dea584"
+  extensions:
+    - ".rs"
+    - ".rs.in"
+  tm_scope: source.rust
+  ace_mode: rust
+  codemirror_mode: rust
+  codemirror_mime_type: text/x-rustsrc
+  language_id: 327
+SAS:
+  type: programming
+  color: "#B34936"
+  extensions:
+    - ".sas"
+  tm_scope: source.sas
+  ace_mode: text
+  codemirror_mode: sas
+  codemirror_mime_type: text/x-sas
+  language_id: 328
+SCSS:
+  type: markup
+  color: "#c6538c"
+  tm_scope: source.css.scss
+  ace_mode: scss
+  codemirror_mode: css
+  codemirror_mime_type: text/x-scss
+  extensions:
+    - ".scss"
+  language_id: 329
+SMT:
+  type: programming
+  extensions:
+    - ".smt2"
+    - ".smt"
+  interpreters:
+    - boolector
+    - cvc4
+    - mathsat5
+    - opensmt
+    - smtinterpol
+    - smt-rat
+    - stp
+    - verit
+    - yices2
+    - z3
+  tm_scope: source.smt
+  ace_mode: text
+  language_id: 330
+SPARQL:
+  type: data
+  tm_scope: source.sparql
+  ace_mode: text
+  codemirror_mode: sparql
+  codemirror_mime_type: application/sparql-query
+  extensions:
+    - ".sparql"
+    - ".rq"
+  language_id: 331
+SQF:
+  type: programming
+  color: "#3F3F3F"
+  extensions:
+    - ".sqf"
+    - ".hqf"
+  tm_scope: source.sqf
+  ace_mode: text
+  language_id: 332
+SQL:
+  type: data
+  tm_scope: source.sql
+  ace_mode: sql
+  codemirror_mode: sql
+  codemirror_mime_type: text/x-sql
+  extensions:
+    - ".sql"
+    - ".cql"
+    - ".ddl"
+    - ".inc"
+    - ".mysql"
+    - ".prc"
+    - ".tab"
+    - ".udf"
+    - ".viw"
+  language_id: 333
+SQLPL:
+  type: programming
+  ace_mode: sql
+  codemirror_mode: sql
+  codemirror_mime_type: text/x-sql
+  tm_scope: source.sql
+  extensions:
+    - ".sql"
+    - ".db2"
+  language_id: 334
+SRecode Template:
+  type: markup
+  color: "#348a34"
+  tm_scope: source.lisp
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  extensions:
+    - ".srt"
+  language_id: 335
+SSH Config:
+  type: data
+  group: INI
+  filenames:
+    - ssh-config
+    - ssh_config
+    - sshconfig
+    - sshconfig.snip
+    - sshd-config
+    - sshd_config
+  ace_mode: text
+  tm_scope: source.ssh-config
+  language_id: 554920715
+STON:
+  type: data
+  group: Smalltalk
+  extensions:
+    - ".ston"
+  tm_scope: source.smalltalk
+  ace_mode: text
+  language_id: 336
+SVG:
+  type: data
+  color: "#ff9900"
+  extensions:
+    - ".svg"
+  tm_scope: text.xml.svg
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 337
+SWIG:
+  type: programming
+  extensions:
+    - ".i"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 1066250075
+Sage:
+  type: programming
+  extensions:
+    - ".sage"
+    - ".sagews"
+  tm_scope: source.python
+  ace_mode: python
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  language_id: 338
+SaltStack:
+  type: programming
+  color: "#646464"
+  aliases:
+    - saltstate
+    - salt
+  extensions:
+    - ".sls"
+  tm_scope: source.yaml.salt
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  language_id: 339
+Sass:
+  type: markup
+  color: "#a53b70"
+  tm_scope: source.sass
+  extensions:
+    - ".sass"
+  ace_mode: sass
+  codemirror_mode: sass
+  codemirror_mime_type: text/x-sass
+  language_id: 340
+Scala:
+  type: programming
+  tm_scope: source.scala
+  ace_mode: scala
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-scala
+  color: "#c22d40"
+  extensions:
+    - ".scala"
+    - ".kojo"
+    - ".sbt"
+    - ".sc"
+  interpreters:
+    - scala
+  language_id: 341
+Scaml:
+  group: HTML
+  type: markup
+  extensions:
+    - ".scaml"
+  tm_scope: source.scaml
+  ace_mode: text
+  language_id: 342
+Scheme:
+  type: programming
+  color: "#1e4aec"
+  extensions:
+    - ".scm"
+    - ".sch"
+    - ".sld"
+    - ".sls"
+    - ".sps"
+    - ".ss"
+  interpreters:
+    - scheme
+    - guile
+    - bigloo
+    - chicken
+    - csi
+    - gosh
+    - r6rs
+  tm_scope: source.scheme
+  ace_mode: scheme
+  codemirror_mode: scheme
+  codemirror_mime_type: text/x-scheme
+  language_id: 343
+Scilab:
+  type: programming
+  extensions:
+    - ".sci"
+    - ".sce"
+    - ".tst"
+  tm_scope: source.scilab
+  ace_mode: text
+  language_id: 344
+Self:
+  type: programming
+  color: "#0579aa"
+  extensions:
+    - ".self"
+  tm_scope: none
+  ace_mode: text
+  language_id: 345
+ShaderLab:
+  type: programming
+  extensions:
+    - ".shader"
+  ace_mode: text
+  tm_scope: source.shaderlab
+  language_id: 664257356
+Shell:
+  type: programming
+  color: "#89e051"
+  aliases:
+    - sh
+    - shell-script
+    - bash
+    - zsh
+  extensions:
+    - ".sh"
+    - ".bash"
+    - ".bats"
+    - ".cgi"
+    - ".command"
+    - ".env"
+    - ".fcgi"
+    - ".ksh"
+    - ".sh.in"
+    - ".tmux"
+    - ".tool"
+    - ".zsh"
+  filenames:
+    - ".bash_aliases"
+    - ".bash_history"
+    - ".bash_logout"
+    - ".bash_profile"
+    - ".bashrc"
+    - ".cshrc"
+    - ".env"
+    - ".env.example"
+    - ".flaskenv"
+    - ".login"
+    - ".profile"
+    - ".zlogin"
+    - ".zlogout"
+    - ".zprofile"
+    - ".zshenv"
+    - ".zshrc"
+    - 9fs
+    - PKGBUILD
+    - bash_aliases
+    - bash_logout
+    - bash_profile
+    - bashrc
+    - cshrc
+    - gradlew
+    - login
+    - man
+    - profile
+    - zlogin
+    - zlogout
+    - zprofile
+    - zshenv
+    - zshrc
+  interpreters:
+    - ash
+    - bash
+    - dash
+    - ksh
+    - mksh
+    - pdksh
+    - rc
+    - sh
+    - zsh
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 346
+  comment_style_id: Hashtag
+ShellSession:
+  type: programming
+  extensions:
+    - ".sh-session"
+  aliases:
+    - bash session
+    - console
+  tm_scope: text.shell-session
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 347
+Shen:
+  type: programming
+  color: "#120F14"
+  extensions:
+    - ".shen"
+  tm_scope: source.shen
+  ace_mode: text
+  language_id: 348
+Sieve:
+  type: programming
+  tm_scope: source.sieve
+  ace_mode: text
+  extensions:
+    - ".sieve"
+  codemirror_mode: sieve
+  codemirror_mime_type: application/sieve
+  language_id: 208976687
+Slash:
+  type: programming
+  color: "#007eff"
+  extensions:
+    - ".sl"
+  tm_scope: text.html.slash
+  ace_mode: text
+  language_id: 349
+Slice:
+  type: programming
+  color: "#003fa2"
+  tm_scope: source.slice
+  ace_mode: text
+  extensions:
+    - ".ice"
+  language_id: 894641667
+Slim:
+  type: markup
+  color: "#2b2b2b"
+  extensions:
+    - ".slim"
+  tm_scope: text.slim
+  ace_mode: text
+  codemirror_mode: slim
+  codemirror_mime_type: text/x-slim
+  language_id: 350
+SmPL:
+  type: programming
+  extensions:
+    - ".cocci"
+  aliases:
+    - coccinelle
+  ace_mode: text
+  tm_scope: source.smpl
+  color: "#c94949"
+  language_id: 164123055
+Smali:
+  type: programming
+  extensions:
+    - ".smali"
+  ace_mode: text
+  tm_scope: source.smali
+  language_id: 351
+Smalltalk:
+  type: programming
+  color: "#596706"
+  extensions:
+    - ".st"
+    - ".cs"
+  aliases:
+    - squeak
+  tm_scope: source.smalltalk
+  ace_mode: text
+  codemirror_mode: smalltalk
+  codemirror_mime_type: text/x-stsrc
+  language_id: 352
+Smarty:
+  type: programming
+  extensions:
+    - ".tpl"
+  ace_mode: smarty
+  codemirror_mode: smarty
+  codemirror_mime_type: text/x-smarty
+  tm_scope: text.html.smarty
+  language_id: 353
+Solidity:
+  type: programming
+  color: "#AA6746"
+  ace_mode: text
+  tm_scope: source.solidity
+  extensions:
+    - ".sol"
+  language_id: 237469032
+SourcePawn:
+  type: programming
+  color: "#f69e1d"
+  aliases:
+    - sourcemod
+  extensions:
+    - ".sp"
+    - ".inc"
+  tm_scope: source.sourcepawn
+  ace_mode: text
+  language_id: 354
+Spline Font Database:
+  type: data
+  extensions:
+    - ".sfd"
+  tm_scope: text.sfd
+  ace_mode: yaml
+  language_id: 767169629
+Squirrel:
+  type: programming
+  color: "#800000"
+  extensions:
+    - ".nut"
+  tm_scope: source.c++
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-c++src
+  language_id: 355
+Stan:
+  type: programming
+  color: "#b2011d"
+  extensions:
+    - ".stan"
+  ace_mode: text
+  tm_scope: source.stan
+  language_id: 356
+Standard ML:
+  type: programming
+  color: "#dc566d"
+  aliases:
+    - sml
+  extensions:
+    - ".ml"
+    - ".fun"
+    - ".sig"
+    - ".sml"
+  tm_scope: source.ml
+  ace_mode: text
+  codemirror_mode: mllike
+  codemirror_mime_type: text/x-ocaml
+  language_id: 357
+Starlark:
+  type: programming
+  tm_scope: source.python
+  ace_mode: python
+  codemirror_mode: python
+  codemirror_mime_type: text/x-python
+  color: "#76d275"
+  extensions:
+    - ".bzl"
+  filenames:
+    - BUCK
+    - BUILD
+    - BUILD.bazel
+    - Tiltfile
+    - WORKSPACE
+  aliases:
+    - bazel
+    - bzl
+  language_id: 960266174
+Stata:
+  type: programming
+  extensions:
+    - ".do"
+    - ".ado"
+    - ".doh"
+    - ".ihlp"
+    - ".mata"
+    - ".matah"
+    - ".sthlp"
+  tm_scope: source.stata
+  ace_mode: text
+  language_id: 358
+Stylus:
+  type: markup
+  color: "#ff6347"
+  extensions:
+    - ".styl"
+  tm_scope: source.stylus
+  ace_mode: stylus
+  language_id: 359
+SubRip Text:
+  type: data
+  extensions:
+    - ".srt"
+  ace_mode: text
+  tm_scope: text.srt
+  language_id: 360
+SugarSS:
+  type: markup
+  tm_scope: source.css.postcss.sugarss
+  group: CSS
+  extensions:
+    - ".sss"
+  ace_mode: text
+  language_id: 826404698
+SuperCollider:
+  type: programming
+  color: "#46390b"
+  extensions:
+    - ".sc"
+    - ".scd"
+  interpreters:
+    - sclang
+    - scsynth
+  tm_scope: source.supercollider
+  ace_mode: text
+  language_id: 361
+Svelte:
+  type: markup
+  color: "#ff3e00"
+  tm_scope: source.svelte
+  ace_mode: html
+  codemirror_mode: htmlmixed
+  codemirror_mime_type: text/html
+  extensions:
+    - ".svelte"
+  language_id: 928734530
+Swift:
+  type: programming
+  color: "#ffac45"
+  extensions:
+    - ".swift"
+  tm_scope: source.swift
+  ace_mode: text
+  codemirror_mode: swift
+  codemirror_mime_type: text/x-swift
+  language_id: 362
+SystemVerilog:
+  type: programming
+  color: "#DAE1C2"
+  extensions:
+    - ".sv"
+    - ".svh"
+    - ".vh"
+  tm_scope: source.systemverilog
+  ace_mode: verilog
+  codemirror_mode: verilog
+  codemirror_mime_type: text/x-systemverilog
+  language_id: 363
+TI Program:
+  type: programming
+  ace_mode: text
+  color: "#A0AA87"
+  extensions:
+    - ".8xp"
+    - ".8xk"
+    - ".8xk.txt"
+    - ".8xp.txt"
+  language_id: 422
+  tm_scope: none
+TLA:
+  type: programming
+  extensions:
+    - ".tla"
+  tm_scope: source.tla
+  ace_mode: text
+  language_id: 364
+TOML:
+  type: data
+  extensions:
+    - ".toml"
+  filenames:
+    - Cargo.lock
+    - Gopkg.lock
+    - poetry.lock
+  tm_scope: source.toml
+  ace_mode: toml
+  codemirror_mode: toml
+  codemirror_mime_type: text/x-toml
+  language_id: 365
+TSQL:
+  type: programming
+  extensions:
+    - ".sql"
+  ace_mode: sql
+  tm_scope: source.tsql
+  language_id: 918334941
+TSV:
+  type: data
+  ace_mode: text
+  tm_scope: source.generic-db
+  extensions:
+    - ".tsv"
+  language_id: 1035892117
+TSX:
+  type: programming
+  group: TypeScript
+  extensions:
+    - ".tsx"
+  tm_scope: source.tsx
+  ace_mode: javascript
+  codemirror_mode: jsx
+  codemirror_mime_type: text/jsx
+  language_id: 94901924
+TXL:
+  type: programming
+  extensions:
+    - ".txl"
+  tm_scope: source.txl
+  ace_mode: text
+  language_id: 366
+Tcl:
+  type: programming
+  color: "#e4cc98"
+  extensions:
+    - ".tcl"
+    - ".adp"
+    - ".tm"
+  filenames:
+    - owh
+    - starfield
+  interpreters:
+    - tclsh
+    - wish
+  tm_scope: source.tcl
+  ace_mode: tcl
+  codemirror_mode: tcl
+  codemirror_mime_type: text/x-tcl
+  language_id: 367
+Tcsh:
+  type: programming
+  group: Shell
+  extensions:
+    - ".tcsh"
+    - ".csh"
+  interpreters:
+    - tcsh
+    - csh
+  tm_scope: source.shell
+  ace_mode: sh
+  codemirror_mode: shell
+  codemirror_mime_type: text/x-sh
+  language_id: 368
+TeX:
+  type: markup
+  color: "#3D6117"
+  ace_mode: tex
+  codemirror_mode: stex
+  codemirror_mime_type: text/x-stex
+  tm_scope: text.tex.latex
+  wrap: true
+  aliases:
+    - latex
+  extensions:
+    - ".tex"
+    - ".aux"
+    - ".bbx"
+    - ".cbx"
+    - ".cls"
+    - ".dtx"
+    - ".ins"
+    - ".lbx"
+    - ".ltx"
+    - ".mkii"
+    - ".mkiv"
+    - ".mkvi"
+    - ".sty"
+    - ".toc"
+  language_id: 369
+Tea:
+  type: markup
+  extensions:
+    - ".tea"
+  tm_scope: source.tea
+  ace_mode: text
+  language_id: 370
+Terra:
+  type: programming
+  extensions:
+    - ".t"
+  color: "#00004c"
+  tm_scope: source.terra
+  ace_mode: lua
+  codemirror_mode: lua
+  codemirror_mime_type: text/x-lua
+  interpreters:
+    - lua
+  language_id: 371
+Texinfo:
+  type: prose
+  wrap: true
+  extensions:
+    - ".texinfo"
+    - ".texi"
+    - ".txi"
+  ace_mode: text
+  tm_scope: text.texinfo
+  interpreters:
+    - makeinfo
+  language_id: 988020015
+Text:
+  type: prose
+  wrap: true
+  aliases:
+    - fundamental
+  extensions:
+    - ".txt"
+    - ".fr"
+    - ".nb"
+    - ".ncl"
+    - ".no"
+  filenames:
+    - COPYING
+    - COPYING.regex
+    - COPYRIGHT.regex
+    - FONTLOG
+    - INSTALL
+    - INSTALL.mysql
+    - LICENSE
+    - LICENSE.mysql
+    - NEWS
+    - README.1ST
+    - README.me
+    - README.mysql
+    - README.nss
+    - click.me
+    - delete.me
+    - go.mod
+    - go.sum
+    - keep.me
+    - package.mask
+    - package.use.mask
+    - package.use.stable.mask
+    - read.me
+    - readme.1st
+    - test.me
+    - use.mask
+    - use.stable.mask
+  tm_scope: none
+  ace_mode: text
+  language_id: 372
+Textile:
+  type: prose
+  ace_mode: textile
+  codemirror_mode: textile
+  codemirror_mime_type: text/x-textile
+  wrap: true
+  extensions:
+    - ".textile"
+  tm_scope: none
+  language_id: 373
+Thrift:
+  type: programming
+  tm_scope: source.thrift
+  extensions:
+    - ".thrift"
+  ace_mode: text
+  language_id: 374
+Turing:
+  type: programming
+  color: "#cf142b"
+  extensions:
+    - ".t"
+    - ".tu"
+  tm_scope: source.turing
+  ace_mode: text
+  language_id: 375
+Turtle:
+  type: data
+  extensions:
+    - ".ttl"
+  tm_scope: source.turtle
+  ace_mode: text
+  codemirror_mode: turtle
+  codemirror_mime_type: text/turtle
+  language_id: 376
+Twig:
+  type: markup
+  color: "#c1d026"
+  extensions:
+    - ".twig"
+  tm_scope: text.html.twig
+  ace_mode: twig
+  codemirror_mode: twig
+  codemirror_mime_type: text/x-twig
+  language_id: 377
+Type Language:
+  type: data
+  aliases:
+    - tl
+  extensions:
+    - ".tl"
+  tm_scope: source.tl
+  ace_mode: text
+  language_id: 632765617
+TypeScript:
+  type: programming
+  color: "#2b7489"
+  aliases:
+    - ts
+  interpreters:
+    - deno
+    - ts-node
+  extensions:
+    - ".ts"
+  tm_scope: source.ts
+  ace_mode: typescript
+  codemirror_mode: javascript
+  codemirror_mime_type: application/typescript
+  language_id: 378
+Unified Parallel C:
+  type: programming
+  color: "#4e3617"
+  group: C
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  extensions:
+    - ".upc"
+  tm_scope: source.c
+  language_id: 379
+Unity3D Asset:
+  type: data
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  extensions:
+    - ".anim"
+    - ".asset"
+    - ".mask"
+    - ".mat"
+    - ".meta"
+    - ".prefab"
+    - ".unity"
+  tm_scope: source.yaml
+  language_id: 380
+Unix Assembly:
+  type: programming
+  group: Assembly
+  extensions:
+    - ".s"
+    - ".ms"
+  tm_scope: source.x86
+  ace_mode: assembly_x86
+  language_id: 120
+Uno:
+  type: programming
+  color: "#9933cc"
+  extensions:
+    - ".uno"
+  ace_mode: csharp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csharp
+  tm_scope: source.cs
+  language_id: 381
+UnrealScript:
+  type: programming
+  color: "#a54c4d"
+  extensions:
+    - ".uc"
+  tm_scope: source.java
+  ace_mode: java
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-java
+  language_id: 382
+UrWeb:
+  type: programming
+  aliases:
+    - Ur/Web
+    - Ur
+  extensions:
+    - ".ur"
+    - ".urs"
+  tm_scope: source.ur
+  ace_mode: text
+  language_id: 383
+V:
+  type: programming
+  color: "#4f87c4"
+  aliases:
+    - vlang
+  extensions:
+    - ".v"
+  tm_scope: source.v
+  ace_mode: golang
+  codemirror_mode: go
+  codemirror_mime_type: text/x-go
+  language_id: 603371597
+VBA:
+  type: programming
+  color: "#867db1"
+  extensions:
+    - ".bas"
+    - ".cls"
+    - ".frm"
+    - ".frx"
+    - ".vba"
+  tm_scope: source.vbnet
+  aliases:
+    - vb6
+    - visual basic 6
+    - visual basic for applications
+  ace_mode: text
+  codemirror_mode: vb
+  codemirror_mime_type: text/x-vb
+  language_id: 399230729
+VBScript:
+  type: programming
+  color: "#15dcdc"
+  extensions:
+    - ".vbs"
+  tm_scope: source.vbnet
+  ace_mode: text
+  codemirror_mode: vbscript
+  codemirror_mime_type: text/vbscript
+  language_id: 408016005
+VCL:
+  type: programming
+  color: "#148AA8"
+  extensions:
+    - ".vcl"
+  tm_scope: source.varnish.vcl
+  ace_mode: text
+  language_id: 384
+VHDL:
+  type: programming
+  color: "#adb2cb"
+  extensions:
+    - ".vhdl"
+    - ".vhd"
+    - ".vhf"
+    - ".vhi"
+    - ".vho"
+    - ".vhs"
+    - ".vht"
+    - ".vhw"
+  tm_scope: source.vhdl
+  ace_mode: vhdl
+  codemirror_mode: vhdl
+  codemirror_mime_type: text/x-vhdl
+  language_id: 385
+Vala:
+  type: programming
+  color: "#fbe5cd"
+  extensions:
+    - ".vala"
+    - ".vapi"
+  tm_scope: source.vala
+  ace_mode: vala
+  language_id: 386
+Verilog:
+  type: programming
+  color: "#b2b7f8"
+  extensions:
+    - ".v"
+    - ".veo"
+  tm_scope: source.verilog
+  ace_mode: verilog
+  codemirror_mode: verilog
+  codemirror_mime_type: text/x-verilog
+  language_id: 387
+Vim Help File:
+  type: prose
+  aliases:
+    - vimhelp
+  extensions:
+    - ".txt"
+  tm_scope: text.vim-help
+  ace_mode: text
+  language_id: 508563686
+Vim Snippet:
+  type: markup
+  aliases:
+    - SnipMate
+    - UltiSnip
+    - UltiSnips
+    - NeoSnippet
+  extensions:
+    - ".snip"
+    - ".snippet"
+    - ".snippets"
+  tm_scope: source.vim-snippet
+  ace_mode: text
+  language_id: 81265970
+Vim script:
+  type: programming
+  color: "#199f4b"
+  tm_scope: source.viml
+  aliases:
+    - vim
+    - viml
+    - nvim
+  extensions:
+    - ".vim"
+    - ".vba"
+    - ".vmb"
+  filenames:
+    - ".exrc"
+    - ".gvimrc"
+    - ".nvimrc"
+    - ".vimrc"
+    - _vimrc
+    - gvimrc
+    - nvimrc
+    - vimrc
+  ace_mode: text
+  language_id: 388
+Visual Basic .NET:
+  type: programming
+  color: "#945db7"
+  extensions:
+    - ".vb"
+    - ".vbhtml"
+  aliases:
+    - visual basic
+    - vbnet
+    - vb .net
+    - vb.net
+  tm_scope: source.vbnet
+  ace_mode: text
+  codemirror_mode: vb
+  codemirror_mime_type: text/x-vb
+  language_id: 389
+Volt:
+  type: programming
+  color: "#1F1F1F"
+  extensions:
+    - ".volt"
+  tm_scope: source.d
+  ace_mode: d
+  codemirror_mode: d
+  codemirror_mime_type: text/x-d
+  language_id: 390
+Vue:
+  type: markup
+  color: "#2c3e50"
+  extensions:
+    - ".vue"
+  tm_scope: text.html.vue
+  ace_mode: html
+  language_id: 391
+Wavefront Material:
+  type: data
+  extensions:
+    - ".mtl"
+  tm_scope: source.wavefront.mtl
+  ace_mode: text
+  language_id: 392
+Wavefront Object:
+  type: data
+  extensions:
+    - ".obj"
+  tm_scope: source.wavefront.obj
+  ace_mode: text
+  language_id: 393
+Web Ontology Language:
+  type: data
+  extensions:
+    - ".owl"
+  tm_scope: text.xml
+  ace_mode: xml
+  language_id: 394
+WebAssembly:
+  type: programming
+  color: "#04133b"
+  extensions:
+    - ".wast"
+    - ".wat"
+  aliases:
+    - wast
+    - wasm
+  tm_scope: source.webassembly
+  ace_mode: lisp
+  codemirror_mode: commonlisp
+  codemirror_mime_type: text/x-common-lisp
+  language_id: 956556503
+WebIDL:
+  type: programming
+  extensions:
+    - ".webidl"
+  tm_scope: source.webidl
+  ace_mode: text
+  codemirror_mode: webidl
+  codemirror_mime_type: text/x-webidl
+  language_id: 395
+WebVTT:
+  type: data
+  wrap: true
+  extensions:
+    - ".vtt"
+  tm_scope: source.vtt
+  ace_mode: text
+  language_id: 658679714
+Wget Config:
+  type: data
+  group: INI
+  aliases:
+    - wgetrc
+  filenames:
+    - ".wgetrc"
+  tm_scope: source.wgetrc
+  ace_mode: text
+  language_id: 668457123
+Windows Registry Entries:
+  type: data
+  extensions:
+    - ".reg"
+  tm_scope: source.reg
+  ace_mode: ini
+  codemirror_mode: properties
+  codemirror_mime_type: text/x-properties
+  language_id: 969674868
+Wollok:
+  type: programming
+  color: "#a23738"
+  extensions:
+    - ".wlk"
+  ace_mode: text
+  tm_scope: source.wollok
+  language_id: 632745969
+World of Warcraft Addon Data:
+  type: data
+  extensions:
+    - ".toc"
+  tm_scope: source.toc
+  ace_mode: text
+  language_id: 396
+X BitMap:
+  type: data
+  group: C
+  aliases:
+    - xbm
+  extensions:
+    - ".xbm"
+  ace_mode: c_cpp
+  tm_scope: source.c
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 782911107
+X Font Directory Index:
+  type: data
+  filenames:
+    - encodings.dir
+    - fonts.alias
+    - fonts.dir
+    - fonts.scale
+  tm_scope: source.fontdir
+  ace_mode: text
+  language_id: 208700028
+X PixMap:
+  type: data
+  group: C
+  aliases:
+    - xpm
+  extensions:
+    - ".xpm"
+    - ".pm"
+  ace_mode: c_cpp
+  tm_scope: source.c
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 781846279
+X10:
+  type: programming
+  aliases:
+    - xten
+  ace_mode: text
+  extensions:
+    - ".x10"
+  color: "#4B6BEF"
+  tm_scope: source.x10
+  language_id: 397
+XC:
+  type: programming
+  color: "#99DA07"
+  extensions:
+    - ".xc"
+  tm_scope: source.xc
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 398
+XCompose:
+  type: data
+  filenames:
+    - ".XCompose"
+    - XCompose
+    - xcompose
+  tm_scope: config.xcompose
+  ace_mode: text
+  language_id: 225167241
+XML:
+  type: data
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  aliases:
+    - rss
+    - xsd
+    - wsdl
+  extensions:
+    - ".xml"
+    - ".adml"
+    - ".admx"
+    - ".ant"
+    - ".axml"
+    - ".builds"
+    - ".ccproj"
+    - ".ccxml"
+    - ".clixml"
+    - ".cproject"
+    - ".cscfg"
+    - ".csdef"
+    - ".csl"
+    - ".csproj"
+    - ".ct"
+    - ".depproj"
+    - ".dita"
+    - ".ditamap"
+    - ".ditaval"
+    - ".dll.config"
+    - ".dotsettings"
+    - ".filters"
+    - ".fsproj"
+    - ".fxml"
+    - ".glade"
+    - ".gml"
+    - ".gmx"
+    - ".grxml"
+    - ".gst"
+    - ".iml"
+    - ".ivy"
+    - ".jelly"
+    - ".jsproj"
+    - ".kml"
+    - ".launch"
+    - ".mdpolicy"
+    - ".mjml"
+    - ".mm"
+    - ".mod"
+    - ".mxml"
+    - ".natvis"
+    - ".ncl"
+    - ".ndproj"
+    - ".nproj"
+    - ".nuspec"
+    - ".odd"
+    - ".osm"
+    - ".pkgproj"
+    - ".pluginspec"
+    - ".proj"
+    - ".props"
+    - ".ps1xml"
+    - ".psc1"
+    - ".pt"
+    - ".rdf"
+    - ".res"
+    - ".resx"
+    - ".rss"
+    - ".sch"
+    - ".scxml"
+    - ".sfproj"
+    - ".shproj"
+    - ".srdf"
+    - ".storyboard"
+    - ".sublime-snippet"
+    - ".targets"
+    - ".tml"
+    - ".ts"
+    - ".tsx"
+    - ".ui"
+    - ".urdf"
+    - ".ux"
+    - ".vbproj"
+    - ".vcxproj"
+    - ".vsixmanifest"
+    - ".vssettings"
+    - ".vstemplate"
+    - ".vxml"
+    - ".wixproj"
+    - ".workflow"
+    - ".wsdl"
+    - ".wsf"
+    - ".wxi"
+    - ".wxl"
+    - ".wxs"
+    - ".x3d"
+    - ".xacro"
+    - ".xaml"
+    - ".xib"
+    - ".xlf"
+    - ".xliff"
+    - ".xmi"
+    - ".xml.dist"
+    - ".xproj"
+    - ".xsd"
+    - ".xspec"
+    - ".xul"
+    - ".zcml"
+  filenames:
+    - ".classpath"
+    - ".cproject"
+    - ".project"
+    - App.config
+    - NuGet.config
+    - Settings.StyleCop
+    - Web.Debug.config
+    - Web.Release.config
+    - Web.config
+    - packages.config
+  language_id: 399
+  comment_style_id: AngleBracket
+XML Property List:
+  type: data
+  group: XML
+  extensions:
+    - ".plist"
+    - ".stTheme"
+    - ".tmCommand"
+    - ".tmLanguage"
+    - ".tmPreferences"
+    - ".tmSnippet"
+    - ".tmTheme"
+  tm_scope: text.xml.plist
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 75622871
+XPages:
+  type: data
+  extensions:
+    - ".xsp-config"
+    - ".xsp.metadata"
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 400
+XProc:
+  type: programming
+  extensions:
+    - ".xpl"
+    - ".xproc"
+  tm_scope: text.xml
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  language_id: 401
+XQuery:
+  type: programming
+  color: "#5232e7"
+  extensions:
+    - ".xquery"
+    - ".xq"
+    - ".xql"
+    - ".xqm"
+    - ".xqy"
+  ace_mode: xquery
+  codemirror_mode: xquery
+  codemirror_mime_type: application/xquery
+  tm_scope: source.xq
+  language_id: 402
+XS:
+  type: programming
+  extensions:
+    - ".xs"
+  tm_scope: source.c
+  ace_mode: c_cpp
+  codemirror_mode: clike
+  codemirror_mime_type: text/x-csrc
+  language_id: 403
+XSLT:
+  type: programming
+  aliases:
+    - xsl
+  extensions:
+    - ".xslt"
+    - ".xsl"
+  tm_scope: text.xml.xsl
+  ace_mode: xml
+  codemirror_mode: xml
+  codemirror_mime_type: text/xml
+  color: "#EB8CEB"
+  language_id: 404
+Xojo:
+  type: programming
+  extensions:
+    - ".xojo_code"
+    - ".xojo_menu"
+    - ".xojo_report"
+    - ".xojo_script"
+    - ".xojo_toolbar"
+    - ".xojo_window"
+  tm_scope: source.xojo
+  ace_mode: text
+  language_id: 405
+Xtend:
+  type: programming
+  extensions:
+    - ".xtend"
+  tm_scope: source.xtend
+  ace_mode: text
+  language_id: 406
+YAML:
+  type: data
+  color: "#cb171e"
+  tm_scope: source.yaml
+  aliases:
+    - yml
+  extensions:
+    - ".yml"
+    - ".mir"
+    - ".reek"
+    - ".rviz"
+    - ".sublime-syntax"
+    - ".syntax"
+    - ".yaml"
+    - ".yaml-tmlanguage"
+    - ".yaml.sed"
+    - ".yml.mysql"
+  filenames:
+    - ".clang-format"
+    - ".clang-tidy"
+    - ".gemrc"
+    - glide.lock
+    - yarn.lock
+  ace_mode: yaml
+  codemirror_mode: yaml
+  codemirror_mime_type: text/x-yaml
+  language_id: 407
+YANG:
+  type: data
+  extensions:
+    - ".yang"
+  tm_scope: source.yang
+  ace_mode: text
+  language_id: 408
+YARA:
+  type: programming
+  color: "#220000"
+  ace_mode: text
+  extensions:
+    - ".yar"
+    - ".yara"
+  tm_scope: source.yara
+  language_id: 805122868
+YASnippet:
+  type: markup
+  aliases:
+    - snippet
+    - yas
+  color: "#32AB90"
+  extensions:
+    - ".yasnippet"
+  tm_scope: source.yasnippet
+  ace_mode: text
+  language_id: 378760102
+Yacc:
+  type: programming
+  extensions:
+    - ".y"
+    - ".yacc"
+    - ".yy"
+  tm_scope: source.yacc
+  ace_mode: text
+  color: "#4B6C4B"
+  language_id: 409
+ZAP:
+  type: programming
+  color: "#0d665e"
+  extensions:
+    - ".zap"
+    - ".xzap"
+  tm_scope: source.zap
+  ace_mode: text
+  language_id: 952972794
+ZIL:
+  type: programming
+  color: "#dc75e5"
+  extensions:
+    - ".zil"
+    - ".mud"
+  tm_scope: source.zil
+  ace_mode: text
+  language_id: 973483626
+Zeek:
+  type: programming
+  aliases:
+    - bro
+  extensions:
+    - ".zeek"
+    - ".bro"
+  tm_scope: source.zeek
+  ace_mode: text
+  language_id: 40
+ZenScript:
+  type: programming
+  color: "#00BCD1"
+  extensions:
+    - ".zs"
+  tm_scope: source.zenscript
+  ace_mode: text
+  language_id: 494938890
+Zephir:
+  type: programming
+  color: "#118f9e"
+  extensions:
+    - ".zep"
+  tm_scope: source.php.zephir
+  ace_mode: php
+  language_id: 410
+Zig:
+  type: programming
+  color: "#ec915c"
+  extensions:
+    - ".zig"
+  tm_scope: source.zig
+  ace_mode: text
+  language_id: 646424281
+Zimpl:
+  type: programming
+  extensions:
+    - ".zimpl"
+    - ".zmpl"
+    - ".zpl"
+  tm_scope: none
+  ace_mode: text
+  language_id: 411
+cURL Config:
+  type: data
+  group: INI
+  aliases:
+    - curlrc
+  filenames:
+    - ".curlrc"
+    - _curlrc
+  tm_scope: source.curlrc
+  ace_mode: text
+  language_id: 992375436
+desktop:
+  type: data
+  extensions:
+    - ".desktop"
+    - ".desktop.in"
+  tm_scope: source.desktop
+  ace_mode: text
+  language_id: 412
+dircolors:
+  type: data
+  extensions:
+    - ".dircolors"
+  filenames:
+    - ".dir_colors"
+    - ".dircolors"
+    - DIR_COLORS
+    - _dir_colors
+    - _dircolors
+    - dir_colors
+  tm_scope: source.dircolors
+  ace_mode: text
+  language_id: 691605112
+eC:
+  type: programming
+  color: "#913960"
+  extensions:
+    - ".ec"
+    - ".eh"
+  tm_scope: source.c.ec
+  ace_mode: text
+  language_id: 413
+edn:
+  type: data
+  ace_mode: clojure
+  codemirror_mode: clojure
+  codemirror_mime_type: text/x-clojure
+  extensions:
+    - ".edn"
+  tm_scope: source.clojure
+  language_id: 414
+fish:
+  type: programming
+  group: Shell
+  interpreters:
+    - fish
+  extensions:
+    - ".fish"
+  tm_scope: source.fish
+  ace_mode: text
+  language_id: 415
+mIRC Script:
+  type: programming
+  color: "#3d57c3"
+  extensions:
+    - ".mrc"
+  tm_scope: source.msl
+  ace_mode: text
+  language_id: 517654727
+mcfunction:
+  type: programming
+  color: "#E22837"
+  extensions:
+    - ".mcfunction"
+  tm_scope: source.mcfunction
+  ace_mode: text
+  language_id: 462488745
+mupad:
+  type: programming
+  extensions:
+    - ".mu"
+  tm_scope: source.mupad
+  ace_mode: text
+  language_id: 416
+nanorc:
+  type: data
+  group: INI
+  extensions:
+    - ".nanorc"
+  filenames:
+    - ".nanorc"
+    - nanorc
+  tm_scope: source.nanorc
+  ace_mode: text
+  language_id: 775996197
+nesC:
+  type: programming
+  color: "#94B0C7"
+  extensions:
+    - ".nc"
+  ace_mode: text
+  tm_scope: source.nesc
+  language_id: 417
+ooc:
+  type: programming
+  color: "#b0b77e"
+  extensions:
+    - ".ooc"
+  tm_scope: source.ooc
+  ace_mode: text
+  language_id: 418
+q:
+  type: programming
+  extensions:
+    - ".q"
+  tm_scope: source.q
+  ace_mode: text
+  color: "#0040cd"
+  language_id: 970539067
+reStructuredText:
+  type: prose
+  wrap: true
+  aliases:
+    - rst
+  extensions:
+    - ".rst"
+    - ".rest"
+    - ".rest.txt"
+    - ".rst.txt"
+  tm_scope: text.restructuredtext
+  ace_mode: text
+  codemirror_mode: rst
+  codemirror_mime_type: text/x-rst
+  language_id: 419
+sed:
+  type: programming
+  color: "#64b970"
+  extensions:
+    - ".sed"
+  interpreters:
+    - gsed
+    - minised
+    - sed
+    - ssed
+  ace_mode: text
+  tm_scope: source.sed
+  language_id: 847830017
+wdl:
+  type: programming
+  color: "#42f1f4"
+  extensions:
+    - ".wdl"
+  tm_scope: source.wdl
+  ace_mode: text
+  language_id: 374521672
+wisp:
+  type: programming
+  ace_mode: clojure
+  codemirror_mode: clojure
+  codemirror_mime_type: text/x-clojure
+  color: "#7582D1"
+  extensions:
+    - ".wisp"
+  tm_scope: source.clojure
+  language_id: 420
+xBase:
+  type: programming
+  color: "#403a40"
+  aliases:
+    - advpl
+    - clipper
+    - foxpro
+  extensions:
+    - ".prg"
+    - ".ch"
+    - ".prw"
+  tm_scope: source.harbour
+  ace_mode: text
+  language_id: 421
diff --git a/license-eye/assets/styles.yaml b/license-eye/assets/styles.yaml
new file mode 100644
index 0000000..deb64a5
--- /dev/null
+++ b/license-eye/assets/styles.yaml
@@ -0,0 +1,40 @@
+#
+# Licensed to Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# Apache Software Foundation (ASF) licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+- id: DoubleSlash
+  start: '//'
+  middle: ~
+  end: ~
+
+- id: Hashtag
+  start: '#'
+  middle: ~
+  end: ~
+  skip: '^#!'
+
+- id: AngleBracket
+  start: '<!--'
+  middle: '  ~'
+  end: '-->'
+
+# tag::SlashAsterisk[]
+- id: SlashAsterisk
+  start: '/*'           # <1>
+  middle: ' *'          # <2>
+  end: ' */'            # <3>
+# end::SlashAsterisk[]
diff --git a/license-eye/commands/header/fix.go b/license-eye/commands/header/fix.go
index 0bc6047..b65069f 100644
--- a/license-eye/commands/header/fix.go
+++ b/license-eye/commands/header/fix.go
@@ -1,3 +1,4 @@
+//
 // Licensed to Apache Software Foundation (ASF) under one or more contributor
 // license agreements. See the NOTICE file distributed with
 // this work for additional information regarding copyright
@@ -24,8 +25,6 @@
 	"github.com/apache/skywalking-eyes/license-eye/internal/logger"
 	"github.com/apache/skywalking-eyes/license-eye/pkg/config"
 	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header/fix"
-
 	"github.com/spf13/cobra"
 )
 
@@ -47,7 +46,7 @@
 
 		var errors []string
 		for _, file := range result.Failure {
-			if err := fix.Fix(file, &config.Header, &result); err != nil {
+			if err := header.Fix(file, &config.Header, &result); err != nil {
 				errors = append(errors, err.Error())
 			}
 		}
diff --git a/license-eye/go.sum b/license-eye/go.sum
index 40b819b..59737cb 100644
--- a/license-eye/go.sum
+++ b/license-eye/go.sum
@@ -16,6 +16,7 @@
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/apache/skywalking-eyes v0.0.0-20201221094504-6a06cc7bcc31 h1:Bc/I5QMp74IjLbTGlfAGabjjlFRr0nTlF5F04/WaE/k=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
diff --git a/license-eye/pkg/comments/config.go b/license-eye/pkg/comments/config.go
new file mode 100644
index 0000000..8b2db6f
--- /dev/null
+++ b/license-eye/pkg/comments/config.go
@@ -0,0 +1,122 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package comments
+
+import (
+	"fmt"
+	"strings"
+
+	"github.com/apache/skywalking-eyes/license-eye/assets"
+	"gopkg.in/yaml.v3"
+)
+
+type CommentStyle struct {
+	ID     string `yaml:"id"`
+	Start  string `yaml:"start"`
+	Middle string `yaml:"middle"`
+	End    string `yaml:"end"`
+}
+
+func (style *CommentStyle) Validate() error {
+	if style.Start == "" || strings.TrimSpace(style.Start) == "" {
+		return fmt.Errorf("comment style 'start' cannot be empty")
+	}
+	return nil
+}
+
+func (style *CommentStyle) Finalize() {
+	if style.Middle == "" {
+		style.Middle = style.Start
+	}
+	if style.End == "" {
+		style.End = style.Start
+	}
+}
+
+type Language struct {
+	Type           string   `yaml:"type"`
+	Extensions     []string `yaml:"extensions"`
+	Filenames      []string `yaml:"filenames"`
+	CommentStyleID string   `yaml:"comment_style_id"`
+}
+
+var languages map[string]Language
+var comments = make(map[string]CommentStyle)
+var commentStyles = make(map[string]CommentStyle)
+
+func init() {
+	initLanguages()
+
+	initCommentStyles()
+
+	for _, lang := range languages {
+		for _, extension := range lang.Extensions {
+			if lang.CommentStyleID == "" {
+				continue
+			}
+			commentStyles[extension] = comments[lang.CommentStyleID]
+		}
+		for _, filename := range lang.Filenames {
+			if lang.CommentStyleID == "" {
+				continue
+			}
+			commentStyles[filename] = comments[lang.CommentStyleID]
+		}
+	}
+}
+
+func initLanguages() {
+	content, err := assets.Asset("assets/languages.yaml")
+	if err != nil {
+		panic(fmt.Errorf("should never happen: %w", err))
+	}
+
+	if err := yaml.Unmarshal(content, &languages); err != nil {
+		panic(err)
+	}
+
+	for s, language := range languages {
+		languages[s] = language
+	}
+}
+
+func initCommentStyles() {
+	content, err := assets.Asset("assets/styles.yaml")
+	if err != nil {
+		panic(fmt.Errorf("should never happen: %w", err))
+	}
+
+	var styles []CommentStyle
+	if err = yaml.Unmarshal(content, &styles); err != nil {
+		panic(err)
+	}
+
+	for _, style := range styles {
+		style.Finalize()
+		comments[style.ID] = style
+	}
+}
+
+func FileCommentStyle(filename string) *CommentStyle {
+	for extension, style := range commentStyles {
+		if strings.HasSuffix(filename, extension) {
+			return &style
+		}
+	}
+	return nil
+}
diff --git a/license-eye/pkg/comments/config_test.go b/license-eye/pkg/comments/config_test.go
new file mode 100644
index 0000000..ae3367f
--- /dev/null
+++ b/license-eye/pkg/comments/config_test.go
@@ -0,0 +1,65 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package comments
+
+import "testing"
+
+func TestConfig(t *testing.T) {
+	if len(languages) == 0 {
+		t.Fail()
+	}
+}
+
+func TestLanguages(t *testing.T) {
+	tests := []struct {
+		lang      string
+		extension string
+	}{
+		{lang: "Java", extension: ".java"},
+		{lang: "Python", extension: ".py"},
+		{lang: "JavaScript", extension: ".js"},
+	}
+	for _, test := range tests {
+		t.Run(test.lang, func(t *testing.T) {
+			for _, extension := range languages[test.lang].Extensions {
+				if extension == test.extension {
+					return
+				}
+			}
+			t.Fail()
+		})
+	}
+}
+
+func TestCommentStyle(t *testing.T) {
+	tests := []struct {
+		filename       string
+		commentStyleID string
+	}{
+		{filename: "Test.java", commentStyleID: "SlashAsterisk"},
+		{filename: "Test.py", commentStyleID: "Hashtag"},
+	}
+	for _, test := range tests {
+		t.Run(test.filename, func(t *testing.T) {
+			if style := FileCommentStyle(test.filename); test.commentStyleID != style.ID {
+				t.Logf("Extension = %v, Comment style = %v", test.filename, style.ID)
+				t.Fail()
+			}
+		})
+	}
+}
diff --git a/license-eye/pkg/header/check.go b/license-eye/pkg/header/check.go
index 7efe45e..a0541e6 100644
--- a/license-eye/pkg/header/check.go
+++ b/license-eye/pkg/header/check.go
@@ -29,7 +29,7 @@
 	"github.com/bmatcuk/doublestar/v2"
 )
 
-const CommentChars = "/*#- !~'\""
+const CommentChars = "/*#- !~'\"(){}"
 
 // Check checks the license headers of the specified paths/globs.
 func Check(config *ConfigHeader, result *Result) error {
diff --git a/license-eye/pkg/header/fix.go b/license-eye/pkg/header/fix.go
new file mode 100644
index 0000000..a710106
--- /dev/null
+++ b/license-eye/pkg/header/fix.go
@@ -0,0 +1,94 @@
+//
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package header
+
+import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"strings"
+
+	"github.com/apache/skywalking-eyes/license-eye/internal/logger"
+	"github.com/apache/skywalking-eyes/license-eye/pkg/comments"
+)
+
+// Fix adds the configured license header to the given file.
+func Fix(file string, config *ConfigHeader, result *Result) error {
+	var r Result
+	if err := CheckFile(file, config, &r); err != nil || !r.HasFailure() {
+		logger.Log.Warnln("Try to fix a valid file, do nothing:", file)
+		return err
+	}
+
+	style := comments.FileCommentStyle(file)
+
+	if style == nil {
+		return fmt.Errorf("unsupported file: %v", file)
+	}
+
+	if err := InsertComment(file, style, config, result); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func InsertComment(file string, style *comments.CommentStyle, config *ConfigHeader, result *Result) error {
+	stat, err := os.Stat(file)
+	if err != nil {
+		return err
+	}
+
+	content, err := ioutil.ReadFile(file)
+	if err != nil {
+		return err
+	}
+
+	lines, err := generateLicenseHeader(style, config)
+	if err != nil {
+		return err
+	}
+
+	if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil {
+		return err
+	}
+
+	result.Fix(file)
+
+	return nil
+}
+
+// TODO: tackle with shebang and xml declaration
+func generateLicenseHeader(style *comments.CommentStyle, config *ConfigHeader) (string, error) {
+	if err := style.Validate(); err != nil {
+		return "", err
+	}
+
+	middleLines := strings.Split(config.License, "\n")
+	for i, line := range middleLines {
+		middleLines[i] = fmt.Sprintf("%v %v", style.Middle, line)
+	}
+
+	lines := fmt.Sprintf("%v\n%v\n", style.Start, strings.Join(middleLines, "\n"))
+	if style.End != style.Middle {
+		lines += style.End
+	}
+
+	return lines, nil
+}
diff --git a/license-eye/pkg/header/fix/angle_bracket.go b/license-eye/pkg/header/fix/angle_bracket.go
deleted file mode 100644
index 1b11bb1..0000000
--- a/license-eye/pkg/header/fix/angle_bracket.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package fix
-
-import (
-	"fmt"
-	"io/ioutil"
-	"os"
-	"reflect"
-	"strings"
-
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-)
-
-// AngleBracket adds the configured license header to files whose comment starts with <!--.
-func AngleBracket(file string, config *header.ConfigHeader, result *header.Result) error {
-	stat, err := os.Stat(file)
-	if err != nil {
-		return err
-	}
-
-	content, err := ioutil.ReadFile(file)
-	if err != nil {
-		return err
-	}
-
-	if len(content) > 5 && !reflect.DeepEqual(content[0:5], []byte("<?xml")) { // doesn't contains xml declaration
-		lines := "<!--\n  ~ " + strings.Join(strings.Split(config.License, "\n"), "\n  ~ ") + "\n-->\n"
-
-		if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil {
-			return err
-		}
-
-		result.Fix(file)
-	} else {
-		// TODO: tackle with the "xml declaration"
-		return fmt.Errorf("xml with xml declaration is not supported yet")
-	}
-
-	return nil
-}
diff --git a/license-eye/pkg/header/fix/double_slash.go b/license-eye/pkg/header/fix/double_slash.go
deleted file mode 100644
index 2c7d634..0000000
--- a/license-eye/pkg/header/fix/double_slash.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package fix
-
-import (
-	"io/ioutil"
-	"os"
-	"strings"
-
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-)
-
-// DoubleSlash adds the configured license header to files whose comment starts with //.
-func DoubleSlash(file string, config *header.ConfigHeader, result *header.Result) error {
-	stat, err := os.Stat(file)
-	if err != nil {
-		return err
-	}
-
-	content, err := ioutil.ReadFile(file)
-	if err != nil {
-		return err
-	}
-
-	lines := "// " + strings.Join(strings.Split(config.License, "\n"), "\n// ") + "\n"
-
-	if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil {
-		return err
-	}
-
-	result.Fix(file)
-
-	return nil
-}
diff --git a/license-eye/pkg/header/fix/fix.go b/license-eye/pkg/header/fix/fix.go
deleted file mode 100644
index 579969b..0000000
--- a/license-eye/pkg/header/fix/fix.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package fix
-
-import (
-	"fmt"
-	"strings"
-
-	"github.com/apache/skywalking-eyes/license-eye/internal/logger"
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-)
-
-var suffixToFunc = map[string]func(string, *header.ConfigHeader, *header.Result) error{
-	".go":   DoubleSlash,
-	".adoc": DoubleSlash,
-
-	".py":        Hashtag, // TODO: tackle shebang
-	".sh":        Hashtag, // TODO: tackle shebang
-	".yml":       Hashtag,
-	".yaml":      Hashtag,
-	".graphql":   Hashtag,
-	"Makefile":   Hashtag,
-	"Dockerfile": Hashtag,
-	".gitignore": Hashtag,
-
-	".md": AngleBracket,
-
-	".java": SlashAsterisk,
-}
-
-// Fix adds the configured license header to the given file.
-func Fix(file string, config *header.ConfigHeader, result *header.Result) error {
-	var r header.Result
-	if err := header.CheckFile(file, config, &r); err != nil || !r.HasFailure() {
-		logger.Log.Warnln("Try to fix a valid file, returning:", file)
-		return err
-	}
-
-	for suffix, fixFunc := range suffixToFunc {
-		if strings.HasSuffix(file, suffix) {
-			return fixFunc(file, config, result)
-		}
-	}
-
-	return fmt.Errorf("file type is unsupported yet: %v", file)
-}
diff --git a/license-eye/pkg/header/fix/hashtag.go b/license-eye/pkg/header/fix/hashtag.go
deleted file mode 100644
index f467b18..0000000
--- a/license-eye/pkg/header/fix/hashtag.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package fix
-
-import (
-	"io/ioutil"
-	"os"
-	"reflect"
-	"strings"
-
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-)
-
-// Hashtag adds the configured license header to the files whose comment starts with #.
-func Hashtag(file string, config *header.ConfigHeader, result *header.Result) error {
-	stat, err := os.Stat(file)
-	if err != nil {
-		return err
-	}
-
-	content, err := ioutil.ReadFile(file)
-	if err != nil {
-		return err
-	}
-
-	if len(content) >= 3 && !reflect.DeepEqual(content[0:3], []byte("#! ")) || len(content) < 3 { // doesn't contains shebang
-		lines := "# " + strings.Join(strings.Split(config.License, "\n"), "\n# ") + "\n"
-
-		if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil {
-			return err
-		}
-
-		result.Fix(file)
-	}
-
-	return nil
-}
diff --git a/license-eye/pkg/header/fix/slash_asterisk.go b/license-eye/pkg/header/fix/slash_asterisk.go
deleted file mode 100644
index 5a92209..0000000
--- a/license-eye/pkg/header/fix/slash_asterisk.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package fix
-
-import (
-	"io/ioutil"
-	"os"
-	"strings"
-
-	"github.com/apache/skywalking-eyes/license-eye/pkg/header"
-)
-
-// SlashAsterisk adds the configured license header to files whose comment starts with /**.
-func SlashAsterisk(file string, config *header.ConfigHeader, result *header.Result) error {
-	stat, err := os.Stat(file)
-	if err != nil {
-		return err
-	}
-
-	content, err := ioutil.ReadFile(file)
-	if err != nil {
-		return err
-	}
-
-	lines := "/*\n * " + strings.Join(strings.Split(config.License, "\n"), "\n * ") + "\n */\n"
-
-	if err := ioutil.WriteFile(file, append([]byte(lines), content...), stat.Mode()); err != nil {
-		return err
-	}
-
-	result.Fix(file)
-
-	return nil
-}
diff --git a/license-eye/pkg/header/fix_test.go b/license-eye/pkg/header/fix_test.go
new file mode 100644
index 0000000..a3ea449
--- /dev/null
+++ b/license-eye/pkg/header/fix_test.go
@@ -0,0 +1,91 @@
+package header
+
+import (
+	"testing"
+
+	"github.com/apache/skywalking-eyes/license-eye/pkg/comments"
+)
+
+var config = &ConfigHeader{
+	License: `
+Licensed to Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+Apache Software Foundation (ASF) licenses this file to you under
+the Apache License, Version 2.0 (the "License"); you may
+not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+`,
+}
+
+func Test(t *testing.T) {
+	tests := []struct {
+		filename string
+		comments string
+	}{
+		{
+			filename: "Test.java",
+			comments: `/* 
+ * Licensed to Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * Apache Software Foundation (ASF) licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+`,
+		},
+		{
+			filename: "Test.py",
+			comments: `#
+# Licensed to Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# Apache Software Foundation (ASF) licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#  http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# 
+#
+`,
+		},
+	}
+	for _, test := range tests {
+		t.Run(test.filename, func(t *testing.T) {
+			style := comments.FileCommentStyle(test.filename)
+			if c, err := generateLicenseHeader(style, config); err != nil && c != test.comments {
+				t.Log("Actual:", c)
+				t.Log("Expected:", test.comments)
+				t.Logf("Middle:'%v'\n", style.Middle)
+				t.Log(err)
+				t.Fail()
+			}
+		})
+	}
+}
diff --git a/license-eye/testdata/.licenserc_for_test_check.yaml b/license-eye/test/testdata/.licenserc_for_test_check.yaml
similarity index 100%
rename from license-eye/testdata/.licenserc_for_test_check.yaml
rename to license-eye/test/testdata/.licenserc_for_test_check.yaml
diff --git a/license-eye/testdata/.licenserc_for_test_fix.yaml b/license-eye/test/testdata/.licenserc_for_test_fix.yaml
similarity index 100%
rename from license-eye/testdata/.licenserc_for_test_fix.yaml
rename to license-eye/test/testdata/.licenserc_for_test_fix.yaml
diff --git a/license-eye/testdata/exclude_test/directories/testcase.go b/license-eye/test/testdata/exclude_test/directories/testcase.go
similarity index 100%
rename from license-eye/testdata/exclude_test/directories/testcase.go
rename to license-eye/test/testdata/exclude_test/directories/testcase.go
diff --git a/license-eye/testdata/exclude_test/extensions/testcase.json b/license-eye/test/testdata/exclude_test/extensions/testcase.json
similarity index 100%
rename from license-eye/testdata/exclude_test/extensions/testcase.json
rename to license-eye/test/testdata/exclude_test/extensions/testcase.json
diff --git a/license-eye/testdata/exclude_test/extensions/testcase.md b/license-eye/test/testdata/exclude_test/extensions/testcase.md
similarity index 100%
rename from license-eye/testdata/exclude_test/extensions/testcase.md
rename to license-eye/test/testdata/exclude_test/extensions/testcase.md
diff --git a/license-eye/testdata/exclude_test/extensions/testcase.xml b/license-eye/test/testdata/exclude_test/extensions/testcase.xml
similarity index 100%
rename from license-eye/testdata/exclude_test/extensions/testcase.xml
rename to license-eye/test/testdata/exclude_test/extensions/testcase.xml
diff --git a/license-eye/testdata/include_test/with_license/testcase.go b/license-eye/test/testdata/include_test/with_license/testcase.go
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.go
rename to license-eye/test/testdata/include_test/with_license/testcase.go
diff --git a/license-eye/testdata/include_test/with_license/testcase.graphql b/license-eye/test/testdata/include_test/with_license/testcase.graphql
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.graphql
rename to license-eye/test/testdata/include_test/with_license/testcase.graphql
diff --git a/license-eye/testdata/include_test/with_license/testcase.java b/license-eye/test/testdata/include_test/with_license/testcase.java
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.java
rename to license-eye/test/testdata/include_test/with_license/testcase.java
diff --git a/license-eye/testdata/include_test/with_license/testcase.py b/license-eye/test/testdata/include_test/with_license/testcase.py
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.py
rename to license-eye/test/testdata/include_test/with_license/testcase.py
diff --git a/license-eye/testdata/include_test/with_license/testcase.sh b/license-eye/test/testdata/include_test/with_license/testcase.sh
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.sh
rename to license-eye/test/testdata/include_test/with_license/testcase.sh
diff --git a/license-eye/testdata/include_test/with_license/testcase.yaml b/license-eye/test/testdata/include_test/with_license/testcase.yaml
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.yaml
rename to license-eye/test/testdata/include_test/with_license/testcase.yaml
diff --git a/license-eye/testdata/include_test/with_license/testcase.yml b/license-eye/test/testdata/include_test/with_license/testcase.yml
similarity index 100%
rename from license-eye/testdata/include_test/with_license/testcase.yml
rename to license-eye/test/testdata/include_test/with_license/testcase.yml
diff --git a/license-eye/testdata/include_test/without_license/testcase.go b/license-eye/test/testdata/include_test/without_license/testcase.go
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.go
rename to license-eye/test/testdata/include_test/without_license/testcase.go
diff --git a/license-eye/testdata/include_test/without_license/testcase.graphql b/license-eye/test/testdata/include_test/without_license/testcase.graphql
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.graphql
rename to license-eye/test/testdata/include_test/without_license/testcase.graphql
diff --git a/license-eye/testdata/include_test/without_license/testcase.java b/license-eye/test/testdata/include_test/without_license/testcase.java
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.java
rename to license-eye/test/testdata/include_test/without_license/testcase.java
diff --git a/license-eye/testdata/include_test/without_license/testcase.md b/license-eye/test/testdata/include_test/without_license/testcase.md
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.md
rename to license-eye/test/testdata/include_test/without_license/testcase.md
diff --git a/license-eye/testdata/include_test/without_license/testcase.py b/license-eye/test/testdata/include_test/without_license/testcase.py
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.py
rename to license-eye/test/testdata/include_test/without_license/testcase.py
diff --git a/license-eye/testdata/include_test/without_license/testcase.sh b/license-eye/test/testdata/include_test/without_license/testcase.sh
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.sh
rename to license-eye/test/testdata/include_test/without_license/testcase.sh
diff --git a/license-eye/testdata/include_test/without_license/testcase.yaml b/license-eye/test/testdata/include_test/without_license/testcase.yaml
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.yaml
rename to license-eye/test/testdata/include_test/without_license/testcase.yaml
diff --git a/license-eye/testdata/include_test/without_license/testcase.yml b/license-eye/test/testdata/include_test/without_license/testcase.yml
similarity index 100%
rename from license-eye/testdata/include_test/without_license/testcase.yml
rename to license-eye/test/testdata/include_test/without_license/testcase.yml