Compare commits

...

14 Commits

Author SHA1 Message Date
Arfon Smith
afb6041104 Merge pull request #1592 from github/vmg/tmscopes
Vmg/tmscopes
2014-10-14 09:07:02 -05:00
Arfon Smith
4b28fdbc4d Removing beta label 2014-10-14 08:45:49 -05:00
Arfon Smith
4f14db10ea Merge pull request #933 from pchaigno/pro
Support of the .pro file extension for Prolog.
2014-10-13 14:57:19 -05:00
Arfon Smith
98e348ba5f Minor docs update fixes #1581 2014-10-13 14:48:50 -05:00
Arfon Smith
a69b20c1a4 Minor docs update #fixes 1581 2014-10-13 14:48:04 -05:00
Vicent Marti
9275e5240f Bump version 2014-10-13 17:50:57 +02:00
Vicent Marti
7dcc3b3edf Add tm_scope to the BlobHelper 2014-10-13 17:19:38 +02:00
Vicent Marti
6e872c11b6 Pass tm_scope overrides 2014-10-13 17:19:38 +02:00
Vicent Marti
e5b6001759 Add support for TextMate scopes 2014-10-13 17:19:38 +02:00
Arfon Smith
769f1b8658 Merge pull request #1587 from github/linguist-3.2.1
Linguist v3.2.1
2014-10-13 09:47:52 -05:00
Arfon Smith
5814b61356 Linguist v3.2.1 2014-10-13 09:47:02 -05:00
Paul Chaignon
f59cf24a82 Merge branch 'master' into pro 2014-09-25 10:23:21 -04:00
Paul Chaignon
d94bffb198 Merge branch 'master' of https://github.com/github/linguist into pro 2014-02-21 16:49:46 +01:00
Paul Chaignon
2beb450df6 Support of the .pro file extension for Prolog. 2014-02-10 18:10:20 +01:00
8 changed files with 166 additions and 17 deletions

View File

@@ -32,33 +32,57 @@ The Language stats bar that you see on every repository is built by aggregating
The repository stats API, accessed through `#languages`, can be used on a directory:
***API UPDATE***
Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist requires a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`.
```ruby
project = Linguist::Repository.from_directory(".")
project.language.name #=> "Ruby"
project.languages #=> { "Ruby" => 0.98, "Shell" => 0.02 }
require 'rugged'
require 'linguist'
repo = Rugged::Repository.new('.')
project = Linguist::Repository.new(repo, repo.head.target_id)
project.language #=> "Ruby"
project.languages #=> { "Ruby" => 119387 }
```
These stats are also printed out by the `linguist` binary. You can use the
`--breakdown` flag, and the binary will also output the breakdown of files by language.
You can try running `linguist` on the `lib/` directory in this repository itself:
You can try running `linguist` on the root directory in this repository itself:
$ bundle exec linguist lib/ --breakdown
$ bundle exec linguist --breakdown
100.00% Ruby
Ruby:
linguist/blob_helper.rb
linguist/classifier.rb
linguist/file_blob.rb
linguist/generated.rb
linguist/heuristics.rb
linguist/language.rb
linguist/md5.rb
linguist/repository.rb
linguist/samples.rb
linguist/tokenizer.rb
linguist.rb
Gemfile
Rakefile
bin/linguist
github-linguist.gemspec
lib/linguist.rb
lib/linguist/blob_helper.rb
lib/linguist/classifier.rb
lib/linguist/file_blob.rb
lib/linguist/generated.rb
lib/linguist/heuristics.rb
lib/linguist/language.rb
lib/linguist/lazy_blob.rb
lib/linguist/md5.rb
lib/linguist/repository.rb
lib/linguist/samples.rb
lib/linguist/tokenizer.rb
lib/linguist/version.rb
test/test_blob.rb
test/test_classifier.rb
test/test_heuristics.rb
test/test_language.rb
test/test_md5.rb
test/test_pedantic.rb
test/test_repository.rb
test/test_samples.rb
test/test_tokenizer.rb
#### Ignore vendored files

View File

@@ -321,6 +321,11 @@ module Linguist
language ? language.lexer : Pygments::Lexer.find_by_name('Text only')
end
# Internal: Get the TextMate compatible scope for the blob
def tm_scope
language && language.tm_scope
end
# Public: Highlight syntax of blob
#
# options - A Hash of options (defaults to {})

View File

@@ -19,6 +19,9 @@ module Linguist
if languages.all? { |l| ["ECL", "Prolog"].include?(l) }
result = disambiguate_ecl(data, languages)
end
if languages.all? { |l| ["IDL", "Prolog"].include?(l) }
result = disambiguate_pro(data, languages)
end
if languages.all? { |l| ["Common Lisp", "OpenCL"].include?(l) }
result = disambiguate_cl(data, languages)
end
@@ -51,6 +54,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?("</translation>"))

View File

@@ -290,6 +290,16 @@ module Linguist
@lexer = Pygments::Lexer.find_by_name(attributes[:lexer] || name) ||
raise(ArgumentError, "#{@name} is missing lexer")
@tm_scope = attributes[:tm_scope] || begin
context = case @type
when :data, :markup, :prose
'text'
when :programming, nil
'source'
end
"#{context}.#{@name.downcase}"
end
@ace_mode = attributes[:ace_mode]
@wrap = attributes[:wrap] || false
@@ -363,6 +373,11 @@ module Linguist
# Returns the Lexer
attr_reader :lexer
# Public: Get the name of a TextMate-compatible scope
#
# Returns the scope
attr_reader :tm_scope
# Public: Get Ace mode
#
# Examples
@@ -564,6 +579,7 @@ module Linguist
:type => options['type'],
:aliases => options['aliases'],
:lexer => options['lexer'],
:tm_scope => options['tm_scope'],
:ace_mode => options['ace_mode'],
:wrap => options['wrap'],
:group_name => options['group'],

View File

@@ -83,6 +83,7 @@ ATS:
ActionScript:
type: programming
lexer: ActionScript 3
tm_scope: source.actionscript.3
color: "#e3491a"
search_term: as3
aliases:
@@ -282,6 +283,7 @@ C:
C#:
type: programming
ace_mode: csharp
tm_scope: source.cs
search_term: csharp
color: "#178600"
aliases:
@@ -411,6 +413,7 @@ Clojure:
CoffeeScript:
type: programming
tm_scope: source.coffee
ace_mode: coffee
color: "#244776"
aliases:
@@ -453,6 +456,7 @@ ColdFusion CFC:
Common Lisp:
type: programming
tm_scope: source.lisp
color: "#3fb68b"
aliases:
- lisp
@@ -648,6 +652,7 @@ Elm:
Emacs Lisp:
type: programming
lexer: Common Lisp
tm_scope: source.lisp
color: "#c065db"
aliases:
- elisp
@@ -932,6 +937,7 @@ Groovy Server Pages:
HTML:
type: markup
tm_scope: text.html.basic
ace_mode: html
aliases:
- xhtml
@@ -1158,6 +1164,7 @@ Java Server Pages:
JavaScript:
type: programming
tm_scope: source.js
ace_mode: javascript
color: "#f1e05a"
aliases:
@@ -1569,6 +1576,7 @@ ObjDump:
Objective-C:
type: programming
tm_scope: source.objc
color: "#438eff"
aliases:
- obj-c
@@ -1669,6 +1677,7 @@ PAWN:
PHP:
type: programming
tm_scope: text.html.php
ace_mode: php
color: "#4F5D95"
extensions:
@@ -1820,6 +1829,7 @@ Prolog:
extensions:
- .pl
- .ecl
- .pro
- .prolog
Propeller Spin:
@@ -2089,6 +2099,7 @@ SQF:
SQL:
type: data
tm_scope: source.sql
ace_mode: sql
extensions:
- .sql

View File

@@ -1,3 +1,3 @@
module Linguist
VERSION = "3.2.0"
VERSION = "3.3.0"
end

View File

@@ -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).

View File

@@ -65,6 +65,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)