mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Adding basic script for adding language_id fields to languages.yml
This commit is contained in:
		| @@ -33,6 +33,7 @@ To add support for a new language: | |||||||
|   0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`. |   0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`. | ||||||
|   0. Download the license for the grammar: `script/licensed`. Be careful to only commit the file for the new grammar, as this script may update licenses for other grammars as well. |   0. Download the license for the grammar: `script/licensed`. Be careful to only commit the file for the new grammar, as this script may update licenses for other grammars as well. | ||||||
| 0. Add samples for your language to the [samples directory][samples] in the correct subdirectory. | 0. Add samples for your language to the [samples directory][samples] in the correct subdirectory. | ||||||
|  | 0. Add a `language_id` for your language. See `script/set-language-ids` for more information. **You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:** | ||||||
| 0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. | 0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. | ||||||
|  |  | ||||||
| In addition, if your new language defines an extension that's already listed in [`languages.yml`][languages] (such as `.foo`) then sometimes a few more steps will need to be taken: | In addition, if your new language defines an extension that's already listed in [`languages.yml`][languages] (such as `.foo`) then sometimes a few more steps will need to be taken: | ||||||
| @@ -84,7 +85,7 @@ Linguist is maintained with :heart: by: | |||||||
| - @arfon (GitHub Staff) | - @arfon (GitHub Staff) | ||||||
| - @larsbrinkhoff | - @larsbrinkhoff | ||||||
| - @pchaigno | - @pchaigno | ||||||
|   |  | ||||||
| As Linguist is a production dependency for GitHub we have a couple of workflow restrictions: | As Linguist is a production dependency for GitHub we have a couple of workflow restrictions: | ||||||
|  |  | ||||||
| - Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub member of staff | - Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub member of staff | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										82
									
								
								script/set-language-ids
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										82
									
								
								script/set-language-ids
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | #!/usr/bin/env ruby | ||||||
|  | require 'yaml' | ||||||
|  | require 'pry' | ||||||
|  |  | ||||||
|  | header = <<-EOF | ||||||
|  | # Defines all Languages known to GitHub. | ||||||
|  | # | ||||||
|  | # 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. | ||||||
|  | # 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) | ||||||
|  | # interpreters      - An Array of associated interpreters | ||||||
|  | # searchable        - Boolean flag to enable searching (defaults to true) | ||||||
|  | # search_term       - Deprecated: Some languages may be indexed under a | ||||||
|  | #                     different alias. Avoid defining new exceptions. | ||||||
|  | # 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. | ||||||
|  | # 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. | ||||||
|  |  | ||||||
|  | EOF | ||||||
|  |  | ||||||
|  | generated = true if ARGV[0] == "--force" | ||||||
|  | update = true if ARGV[0] == "--update" | ||||||
|  |  | ||||||
|  | if generated | ||||||
|  |   puts "You're regenerating all of the language_id attributes for all Linguist " | ||||||
|  |   puts "languages defined in languages.yml. This is almost certainly NOT what" | ||||||
|  |   puts "you meant to do!" | ||||||
|  |  | ||||||
|  |   language_index = 0 | ||||||
|  |  | ||||||
|  |   languages = YAML.load(File.read("lib/linguist/languages.yml")) | ||||||
|  |   languages.each do |name, vals| | ||||||
|  |     vals.merge!('language_id' => language_index) | ||||||
|  |     language_index += 1 | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   File.write("lib/linguist/languages.yml", header + YAML.dump(languages)) | ||||||
|  | elsif update | ||||||
|  |   puts "Adding new language_id attributes to languages.yml that don't have one set" | ||||||
|  |   languages = YAML.load(File.read("lib/linguist/languages.yml")) | ||||||
|  |  | ||||||
|  |   # First grab the maximum language_id | ||||||
|  |   language_ids = [] | ||||||
|  |   languages.each { |name, vals| language_ids << vals['language_id'] if vals.has_key?('language_id')} | ||||||
|  |   max_language_id = language_ids.max | ||||||
|  |   puts "Current maximum language_id is #{max_language_id}" | ||||||
|  |  | ||||||
|  |   missing_count = 0 | ||||||
|  |   language_index = max_language_id | ||||||
|  |  | ||||||
|  |   languages.each do |name, vals| | ||||||
|  |     unless vals.has_key?('language_id') | ||||||
|  |       language_index += 1 | ||||||
|  |       missing_count += 1 | ||||||
|  |       vals.merge!('language_id' => language_index) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   File.write("lib/linguist/languages.yml", header + YAML.dump(languages)) | ||||||
|  |   puts "Updated language_id attributes for #{missing_count} languages" | ||||||
|  | else | ||||||
|  |   puts "Whatever you want me to do, I can't figure it out. Giving up..." | ||||||
|  | end | ||||||
		Reference in New Issue
	
	Block a user