From 144655f2c5917a6ab184d1aa620c4efeb9c52a21 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 20 Jul 2012 16:54:49 -0500 Subject: [PATCH] Require explicit primary_extension --- lib/linguist/language.rb | 11 ++-- lib/linguist/languages.yml | 108 ++++++++++++++++++++++++++++++++++++- test/test_language.rb | 1 - 3 files changed, 109 insertions(+), 11 deletions(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index a06c59f0..de1d36f6 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -239,7 +239,9 @@ module Linguist @overrides = attributes[:overrides] || [] @filenames = attributes[:filenames] || [] - @primary_extension = attributes[:primary_extension] || default_primary_extension || extensions.first + unless @primary_extension = attributes[:primary_extension] + raise ArgumentError, "#{@name} is missing primary extension" + end # Prepend primary extension unless its already included if primary_extension && !extensions.include?(primary_extension) @@ -376,13 +378,6 @@ module Linguist name.downcase.gsub(/\s/, '-') end - # Internal: Get default primary extension. - # - # Returns the extension String. - def default_primary_extension - extensions.first - end - # Public: Get Language group # # Returns a Language diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index facde300..b7b7197e 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -12,8 +12,9 @@ # ace_mode - A String name of Ace Mode (if available) # extension - An Array of associated extensions # primary_extension - A String for the main extension associated with -# the langauge. (defaults to extensions.first). -# Must be unique. +# the language. Must be unique. Used when a Language is picked +# from a dropdown and we need to automatically choose an +# extension. # overrides - An Array of extensions that takes precedence over conflicts # searchable - Boolean flag to enable searching (defaults to true) # search_term - Deprecated: Some languages maybe indexed under a @@ -50,12 +51,14 @@ ActionScript: search_term: as3 aliases: - as3 + primary_extension: .as extensions: - .as Ada: type: programming color: "#02f88c" + primary_extension: .adb extensions: - .adb - .ads @@ -81,6 +84,7 @@ Arc: type: programming color: "#ca2afe" lexer: Text only + primary_extension: .arc extensions: - .arc @@ -88,6 +92,7 @@ Arduino: type: programming color: "#bd79d1" lexer: C++ + primary_extension: .ino extensions: - .ino @@ -98,11 +103,13 @@ Assembly: search_term: nasm aliases: - nasm + primary_extension: .asm extensions: - .asm Augeas: type: programming + primary_extension: .aug extensions: - .aug @@ -112,6 +119,7 @@ AutoHotkey: color: "#6594b9" aliases: - ahk + primary_extension: .ahk extensions: - .ahk @@ -127,26 +135,31 @@ Batchfile: - .cmd Befunge: + primary_extension: .befunge extensions: - .befunge BlitzMax: + primary_extension: .bmx extensions: - .bmx Boo: type: programming color: "#d4bec1" + primary_extension: .boo extensions: - .boo Brainfuck: + primary_extension: .b extensions: - .b - .bf Bro: type: programming + primary_extension: .bro extensions: - .bro @@ -168,6 +181,7 @@ C#: color: "#5a25a2" aliases: - csharp + primary_extension: .cs extensions: - .cs @@ -195,6 +209,7 @@ C++: C-ObjDump: type: data lexer: c-objdump + primary_extension: .c-objdump extensions: - .c-objdump @@ -204,10 +219,12 @@ C2hs Haskell: group: Haskell aliases: - c2hs + primary_extension: .chs extensions: - .chs CMake: + primary_extension: .cmake extensions: - .cmake - .cmake.in @@ -216,6 +233,7 @@ CMake: CSS: ace_mode: css + primary_extension: .css extensions: - .css @@ -223,11 +241,13 @@ Ceylon: type: programming lexer: Text only primary_extension: .ceylon + primary_extension: .ceylon extensions: - .ceylon ChucK: lexer: Java + primary_extension: .ck extensions: - .ck @@ -285,6 +305,7 @@ Coq: Cpp-ObjDump: type: data lexer: cpp-objdump + primary_extension: .cppobjdump extensions: - .cppobjdump - .c++objdump @@ -292,6 +313,7 @@ Cpp-ObjDump: Cucumber: lexer: Gherkin + primary_extension: .feature extensions: - .feature @@ -307,6 +329,7 @@ Cython: D: type: programming color: "#fcd46d" + primary_extension: .d extensions: - .d - .di @@ -314,6 +337,7 @@ D: D-ObjDump: type: data lexer: d-objdump + primary_extension: .d-objdump extensions: - .d-objdump @@ -321,12 +345,14 @@ Darcs Patch: search_term: dpatch aliases: - dpatch + primary_extension: .darcspatch extensions: - .darcspatch - .dpatch Dart: type: programming + primary_extension: .dart extensions: - .dart @@ -350,6 +376,7 @@ DCPU-16 ASM: - dasm16 Diff: + primary_extension: .diff extensions: - .diff - .patch @@ -357,6 +384,7 @@ Diff: Dylan: type: programming color: "#3ebc27" + primary_extension: .dylan extensions: - .dylan @@ -364,6 +392,7 @@ Ecere Projects: type: data group: JavaScript lexer: JSON + primary_extension: .epj extensions: - .epj @@ -371,6 +400,7 @@ Eiffel: type: programming lexer: Text only color: "#946d57" + primary_extension: .e extensions: - .e @@ -407,6 +437,7 @@ F#: lexer: FSharp color: "#b845fc" search_term: ocaml + primary_extension: .fs extensions: - .fs - .fsi @@ -438,6 +469,7 @@ FORTRAN: Factor: type: programming color: "#636746" + primary_extension: .factor extensions: - .factor @@ -454,6 +486,7 @@ Fancy: Fantom: type: programming color: "#dbded5" + primary_extension: .fan extensions: - .fan @@ -466,18 +499,21 @@ GAS: - .s Genshi: + primary_extension: .kid extensions: - .kid Gentoo Ebuild: group: Shell lexer: Bash + primary_extension: .ebuild extensions: - .ebuild Gentoo Eclass: group: Shell lexer: Bash + primary_extension: .eclass extensions: - .eclass @@ -486,6 +522,7 @@ Gettext Catalog: searchable: false aliases: - pot + primary_extension: .po extensions: - .po - .pot @@ -493,6 +530,7 @@ Gettext Catalog: Go: type: programming color: "#8d04eb" + primary_extension: .go extensions: - .go @@ -535,6 +573,7 @@ Groovy Server Pages: - .gsp aliases: - gsp + primary_extension: .gsp extensions: - .gsp @@ -551,6 +590,7 @@ HTML+Django: type: markup group: HTML lexer: HTML+Django/Jinja + primary_extension: .mustache # TODO: This is incorrect extensions: - .mustache @@ -566,6 +606,7 @@ HTML+ERB: HTML+PHP: type: markup group: HTML + primary_extension: .phtml extensions: - .phtml @@ -574,6 +615,7 @@ HaXe: lexer: haXe ace_mode: haxe color: "#346d51" + primary_extension: .hx extensions: - .hx - .hxml @@ -582,12 +624,14 @@ HaXe: Haml: group: HTML type: markup + primary_extension: .haml extensions: - .haml Haskell: type: programming color: "#29b544" + primary_extension: .hs extensions: - .hs - .hsc @@ -599,6 +643,7 @@ INI: - .ini - .prefs - .properties + primary_extension: .ini filenames: - .gitconfig @@ -607,18 +652,21 @@ IRC log: search_term: irc aliases: - irc + primary_extension: .irclog extensions: - .weechatlog Io: type: programming color: "#a9188d" + primary_extension: .io extensions: - .io Ioke: type: programming color: "#078193" + primary_extension: .ik extensions: - .ik @@ -627,6 +675,7 @@ JSON: group: JavaScript ace_mode: json searchable: false + primary_extension: .json extensions: - .json @@ -634,6 +683,7 @@ Java: type: programming ace_mode: java color: "#b07219" + primary_extension: .java extensions: - .java - .pde @@ -644,6 +694,7 @@ Java Server Pages: search_term: jsp aliases: - jsp + primary_extension: .jsp extensions: - .jsp @@ -672,17 +723,20 @@ JavaScript: Julia: type: programming + primary_extension: .jl extensions: - .jl Kotlin: type: programming + primary_extension: .kt extensions: - .kt - .ktm - .kts LLVM: + primary_extension: .ll extensions: - .ll @@ -699,11 +753,13 @@ Literate Haskell: search_term: lhs aliases: - lhs + primary_extension: .lhs extensions: - .lhs Logtalk: type: programming + primary_extension: .lgt extensions: - .lgt @@ -711,6 +767,7 @@ Lua: type: programming ace_mode: lua color: "#fa1fa1" + primary_extension: .lua extensions: - .lua - .nse @@ -719,12 +776,14 @@ Makefile: extensions: - .mak - .mk + primary_extension: .mak filenames: - makefile - Makefile - GNUmakefile Mako: + primary_extension: .mako extensions: - .mako - .mao @@ -753,6 +812,7 @@ Max/MSP: type: programming color: "#ce279c" lexer: Text only + primary_extension: .mxt extensions: - .mxt @@ -765,6 +825,7 @@ Mirah: lexer: Ruby search_term: ruby color: "#c7a938" + primary_extension: .druby extensions: - .duby - .mir @@ -772,22 +833,26 @@ Mirah: Moocode: lexer: MOOCode + primary_extension: .moo extensions: - .moo Myghty: + primary_extension: .myt extensions: - .myt Nemerle: type: programming color: "#0d3c6e" + primary_extension: .n extensions: - .n Nimrod: type: programming color: "#37775b" + primary_extension: .nim extensions: - .nim - .nimrod @@ -798,6 +863,7 @@ Nu: color: "#c9df40" aliases: - nush + primary_extension: .nu extensions: - .nu filenames: @@ -825,6 +891,7 @@ OCaml: ObjDump: type: data lexer: objdump + primary_extension: .objdump extensions: - .objdump @@ -842,12 +909,14 @@ Objective-C: Objective-J: type: programming color: "#ff0c5a" + primary_extension: .j extensions: - .j - .sj Opa: type: programming + primary_extension: .opa extensions: - .opa @@ -855,6 +924,7 @@ OpenCL: type: programming group: C lexer: C + primary_extension: .cl extensions: - .cl @@ -873,6 +943,7 @@ PHP: type: programming ace_mode: php color: "#6e03c1" + primary_extension: .php extensions: - .aw - .ctp @@ -897,6 +968,7 @@ Parrot Internal Representation: lexer: Text only aliases: - pir + primary_extension: .pir extensions: - .pir @@ -906,6 +978,7 @@ Parrot Assembly: lexer: Text only aliases: - pasm + primary_extension: .pasm extensions: - .pasm @@ -933,6 +1006,7 @@ PowerShell: ace_mode: powershell aliases: - posh + primary_extension: .ps1 extensions: - .ps1 - .psm1 @@ -949,6 +1023,7 @@ Prolog: Puppet: type: programming color: "#cc5555" + primary_extension: .pp extensions: - .pp filenames: @@ -958,6 +1033,7 @@ Pure Data: type: programming color: "#91de79" lexer: Text only + primary_extension: .pd extensions: - .pd @@ -979,6 +1055,7 @@ Python traceback: group: Python lexer: Python Traceback searchable: false + primary_extension: .pytb extensions: - .pytb @@ -996,6 +1073,7 @@ R: RHTML: type: markup group: HTML + primary_extension: .rhtml extensions: - .rhtml @@ -1014,6 +1092,7 @@ Raw token data: search_term: raw aliases: - raw + primary_extension: .raw extensions: - .raw @@ -1029,6 +1108,7 @@ Rebol: - .rebol Redcode: + primary_extension: .cw extensions: - .cw @@ -1070,6 +1150,7 @@ Rust: type: programming color: "#dea584" lexer: Text only + primary_extension: .rs extensions: - .rs @@ -1077,6 +1158,7 @@ SCSS: type: markup group: CSS ace_mode: scss + primary_extension: .scss extensions: - .scss @@ -1084,6 +1166,7 @@ SQL: type: data ace_mode: sql searchable: false + primary_extension: .sql extensions: - .sql @@ -1091,12 +1174,14 @@ Sage: type: programming lexer: Python group: Python + primary_extension: .sage extensions: - .sage Sass: type: markup group: CSS + primary_extension: .sass extensions: - .sass @@ -1130,6 +1215,7 @@ Self: type: programming color: "#0579aa" lexer: Text only + primary_extension: .self extensions: - .self @@ -1161,10 +1247,12 @@ Shell: Smalltalk: type: programming color: "#596706" + primary_extension: .st extensions: - .st Smarty: + primary_extension: .tpl extensions: - .tpl @@ -1182,12 +1270,14 @@ SuperCollider: type: programming color: "#46390b" lexer: Text only + primary_extension: .sc extensions: - .sc Tcl: type: programming color: "#e4cc98" + primary_extension: .tcl extensions: - .tcl @@ -1215,6 +1305,7 @@ TeX: Tea: type: markup + primary_extension: .tea extensions: - .tea @@ -1222,6 +1313,7 @@ Text: type: data lexer: Text only ace_mode: text + primary_extension: .txt extensions: - .txt @@ -1229,6 +1321,7 @@ Textile: type: markup lexer: Text only ace_mode: textile + primary_extension: .textile extensions: - .textile @@ -1247,6 +1340,7 @@ Twig: type: markup group: PHP lexer: HTML+Django/Jinja + primary_extension: .twig extensions: - .twig @@ -1254,6 +1348,7 @@ VHDL: type: programming lexer: vhdl color: "#543978" + primary_extension: .vhdl extensions: - .vhd - .vhdl @@ -1261,6 +1356,7 @@ VHDL: Vala: type: programming color: "#ee7d06" + primary_extension: .vala extensions: - .vala - .vapi @@ -1271,6 +1367,7 @@ Verilog: color: "#848bf3" overrides: - .v + primary_extension: .v extensions: - .v @@ -1280,6 +1377,7 @@ VimL: search_term: vim aliases: - vim + primary_extension: .vim extensions: - .vim filenames: @@ -1331,6 +1429,7 @@ XML: XQuery: type: programming color: "#2700e2" + primary_extension: .xquery extensions: - .xq - .xqm @@ -1339,12 +1438,14 @@ XQuery: XS: lexer: C + primary_extension: .xs extensions: - .xs XSLT: type: markup group: XML + primary_extension: .xslt extensions: - .xslt @@ -1367,6 +1468,7 @@ eC: mupad: lexer: MuPAD + primary_extension: .mu extensions: - .mu @@ -1374,6 +1476,7 @@ ooc: type: programming lexer: Ooc color: "#b0b77e" + primary_extension: .ooc extensions: - .ooc @@ -1382,6 +1485,7 @@ reStructuredText: search_term: rst aliases: - rst + primary_extension: .rst extensions: - .rst - .rest diff --git a/test/test_language.rb b/test/test_language.rb index 1b33f0ae..1ca7116f 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -369,7 +369,6 @@ class TestLanguage < Test::Unit::TestCase def test_eql assert Language['Ruby'].eql?(Language['Ruby']) assert !Language['Ruby'].eql?(Language['Python']) - assert !Language['Ruby'].eql?(Language.new(:name => 'Ruby')) end