From 2beb450df613e6d34186571f6379f1212c970666 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Mon, 10 Feb 2014 18:10:20 +0100 Subject: [PATCH 01/10] Support of the .pro file extension for Prolog. --- lib/linguist/heuristics.rb | 13 ++++++ lib/linguist/languages.yml | 1 + samples/Prolog/logic-problem.pro | 68 ++++++++++++++++++++++++++++++++ test/test_heuristics.rb | 12 ++++++ 4 files changed, 94 insertions(+) create mode 100644 samples/Prolog/logic-problem.pro diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index a3de46e9..95232f9b 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -22,6 +22,9 @@ module Linguist if languages.all? { |l| ["ECL", "Prolog"].include?(l) } disambiguate_ecl(data, languages) end + if languages.all? { |l| ["IDL", "Prolog"].include?(l) } + disambiguate_pro(data, languages) + end if languages.all? { |l| ["TypeScript", "XML"].include?(l) } disambiguate_ts(data, languages) end @@ -56,6 +59,16 @@ module Linguist matches end + def self.disambiguate_pro(data, languages) + matches = [] + if (data.include?(":-")) + matches << Language["Prolog"] + else + matches << Language["IDL"] + end + matches + end + def self.disambiguate_ts(data, languages) matches = [] if (data.include?("")) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 6c692b9b..82cc4be4 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1325,6 +1325,7 @@ Prolog: extensions: - .ecl - .pl + - .pro Protocol Buffer: type: markup diff --git a/samples/Prolog/logic-problem.pro b/samples/Prolog/logic-problem.pro new file mode 100644 index 00000000..b70120bf --- /dev/null +++ b/samples/Prolog/logic-problem.pro @@ -0,0 +1,68 @@ +/** + * Question 1.1 + * combiner(+Buddies, -Pairs) + */ +combiner([], []). +combiner([First|Buddies], Pairs):- + make_pairs(First, Buddies, Pairs1), + combiner(Buddies, Pairs2), + concat(Pairs1, Pairs2, Pairs). + +/** + * make_pairs(+Buddy, +Buddies, -Pairs) + */ +make_pairs(Buddy, [], []). +make_pairs(Buddy, [First|Buddies], [(Buddy, First)|Pairs]):- + make_pairs(Buddy, Buddies, Pairs). + +/** + * concat(+X, +Y, ?T) + */ +concat([], Y, Y). +concat([P|R], Y, [P|T]):- + concat(R, Y, T). + + +/** + * Question 1.2 + * extraire(+AllPossiblePairs, +NbPairs, -Tp, -RemainingPairs) + */ +extraire(AllPossiblePairs, 0, [], AllPossiblePairs). +extraire([PossiblePair|AllPossiblePairs], NbPairs, [PossiblePair|Tp], NewRemainingPairs):- + NbPairs > 0, + NewNbPairs is NbPairs - 1, + extraire(AllPossiblePairs, NewNbPairs, Tp, RemainingPairs), + not(pair_in_array(PossiblePair, Tp)), + delete_pair(RemainingPairs, PossiblePair, NewRemainingPairs). +extraire([PossiblePair|AllPossiblePairs], NbPairs, Tp, [PossiblePair|RemainingPairs]):- + NbPairs > 0, + extraire(AllPossiblePairs, NbPairs, Tp, RemainingPairs), + pair_in_array(PossiblePair, Tp). + +/** + * delete_pair(+Pairs, +Pair, -PairsWithoutPair) + */ +delete_pair([], _, []). +delete_pair([Pair|Pairs], Pair, Pairs):-!. +delete_pair([FirstPair|Pairs], Pair, [FirstPair|PairsWithoutPair]):- + delete_pair(Pairs, Pair, PairsWithoutPair). + +/** + * pair_in_array(+Pair, +Pairs) + */ +pair_in_array((A, B), [(C, D)|Pairs]):- + (A == C ; B == D ; A == D ; B == C), + !. +pair_in_array(Pair, [FirstPair|Pairs]):- + pair_in_array(Pair, Pairs). + + +/** + * Question 1.3 + * les_tps(+Buddies, -Tps) + */ +les_tps(Buddies, Tps):- + combiner(Buddies, PossiblePairs), + length(Buddies, NbBuddies), + NbPairs is integer(NbBuddies / 2), + findall(Tp, extraire(PossiblePairs, NbPairs, Tp, _), Tps). diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 0c1a07ff..a1daf2a6 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -63,6 +63,18 @@ class TestHeuristcs < Test::Unit::TestCase assert_equal Language["ECL"], results.first end + def test_pro_prolog_by_heuristics + languages = ["IDL", "Prolog"] + results = Heuristics.disambiguate_pro(fixture("Prolog/logic-problem.pro"), languages) + assert_equal Language["Prolog"], results.first + end + + def test_pro_idl_by_heuristics + languages = ["IDL", "Prolog"] + results = Heuristics.disambiguate_pro(fixture("IDL/mg_acosh.pro"), languages) + assert_equal Language["IDL"], results.first + end + def test_ts_typescript_by_heuristics languages = ["TypeScript", "XML"] results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages) From 4b28fdbc4dc635ec132ed8ce72662db626e473ee Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 14 Oct 2014 08:45:49 -0500 Subject: [PATCH 02/10] Removing beta label --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index cdf9d960..bafcd96e 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "3.3.0.b1" + VERSION = "3.3.0" end From a954a6465e06ff90b3e6046179a584f52eae085f Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 14 Oct 2014 09:29:45 -0500 Subject: [PATCH 03/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f3a0a13b..3fba928a 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ If you are the current maintainer of this gem: 0. Ensure that tests are green: `bundle exec rake test` 0. Bump gem version in `lib/linguist/version.rb`. For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985). 0. Make a PR to github/linguist. For example, [#1238](https://github.com/github/linguist/pull/1238). - 0. Build a local gem: `gem build github-linguist.gemspec` + 0. Build a local gem: `bundle exec rake build_gem` 0. Testing: 0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem 0. Install the new gem locally From 4b46bcf64929c6d43d7b635232392b7670d582cb Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Mon, 13 Oct 2014 15:07:42 -0400 Subject: [PATCH 04/10] Add TextMate scopes for Sass/SCSS files --- lib/linguist/languages.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 20c98a49..b538bef2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2084,6 +2084,7 @@ SAS: SCSS: type: markup + tm_scope: source.scss group: CSS ace_mode: scss extensions: @@ -2124,6 +2125,7 @@ Sage: Sass: type: markup + tm_scope: source.sass group: CSS extensions: - .sass From 7cb8357f73f8569680deac539b6c19fa407853f7 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Tue, 14 Oct 2014 10:21:08 -0400 Subject: [PATCH 05/10] Add a TextMate scope for YAML --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index b538bef2..b8ea883d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2600,6 +2600,7 @@ Xtend: YAML: type: data + tm_scope: source.yaml aliases: - yml extensions: From 43cc701ac33ae934a5faf2b280f4e96d5b512de6 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Tue, 14 Oct 2014 10:34:01 -0400 Subject: [PATCH 06/10] Add a TextMate scope for JSON --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index b8ea883d..8402ce3d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1102,6 +1102,7 @@ J: JSON: type: data + tm_scope: source.json group: JavaScript ace_mode: json searchable: false From 15ec37d4bcb1378c42b8d03baf8a367322ada768 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Tue, 14 Oct 2014 10:34:08 -0400 Subject: [PATCH 07/10] Add a TextMate scope for Objective-C++ --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8402ce3d..aef43fd0 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1588,6 +1588,7 @@ Objective-C: Objective-C++: type: programming + tm_scope: source.objc++ color: "#4886FC" aliases: - obj-c++ From d7fe0cc5c71947da4284c47af422e17d02e68fdf Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Tue, 14 Oct 2014 10:40:08 -0400 Subject: [PATCH 08/10] Add TextMate scopes for HTML variants --- lib/linguist/languages.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index aef43fd0..4de0081d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -949,6 +949,7 @@ HTML: HTML+Django: type: markup + tm_scope: text.html.django group: HTML lexer: HTML+Django/Jinja extensions: @@ -957,6 +958,7 @@ HTML+Django: HTML+ERB: type: markup + tm_scope: text.html.erb group: HTML lexer: RHTML aliases: @@ -967,6 +969,7 @@ HTML+ERB: HTML+PHP: type: markup + tm_scope: text.html.php group: HTML extensions: - .phtml From 9092dfdc7fa94695d06cc2fe9453426b1d5e24da Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Tue, 14 Oct 2014 10:50:39 -0400 Subject: [PATCH 09/10] Add a TextMate scope for Literate CoffeeScript --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 4de0081d..de1f5229 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1297,6 +1297,7 @@ Literate Agda: Literate CoffeeScript: type: programming + tm_scope: source.litcoffee group: CoffeeScript lexer: Text only ace_mode: markdown From 848a1cc1e5e08c27670a3781139ae265ce537804 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 14 Oct 2014 10:06:38 -0500 Subject: [PATCH 10/10] Minor bump --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index bafcd96e..2edc3c5a 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "3.3.0" + VERSION = "3.3.1" end