mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98b99e38bb | ||
|
|
d8e3bec499 | ||
|
|
7c759d4d29 | ||
|
|
41d438b47e | ||
|
|
41911d6921 | ||
|
|
dca18d77cb | ||
|
|
040af5dad2 | ||
|
|
4867c49bd9 | ||
|
|
a354eddf4b | ||
|
|
9b78c533a5 | ||
|
|
090ea576b9 | ||
|
|
6a2d33a4b3 | ||
|
|
2c62da7834 | ||
|
|
0145a0adb2 | ||
|
|
473282d64c | ||
|
|
c2c068e9db | ||
|
|
13d1f662d1 | ||
|
|
bdd57f58a0 | ||
|
|
b1bcabd6e6 | ||
|
|
e128c3fa82 | ||
|
|
efac9fe750 | ||
|
|
2b8545a8fa | ||
|
|
b275b5d728 | ||
|
|
1f46cfafa7 | ||
|
|
b1dcdf3418 | ||
|
|
4bfd65deb8 | ||
|
|
61102812a0 | ||
|
|
580cfce7fb | ||
|
|
f1383d7a45 | ||
|
|
e4ce5bfe39 | ||
|
|
6ed64f25a2 | ||
|
|
114a331106 | ||
|
|
a167f852dd | ||
|
|
b428bce126 | ||
|
|
e62d0e19a5 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -677,3 +677,6 @@
|
|||||||
[submodule "vendor/grammars/X10"]
|
[submodule "vendor/grammars/X10"]
|
||||||
path = vendor/grammars/X10
|
path = vendor/grammars/X10
|
||||||
url = git@github.com:x10-lang/x10-highlighting.git
|
url = git@github.com:x10-lang/x10-highlighting.git
|
||||||
|
[submodule "vendor/grammars/language-babel"]
|
||||||
|
path = vendor/grammars/language-babel
|
||||||
|
url = https://github.com/gandm/language-babel
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect:
|
The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect:
|
||||||
|
|
||||||
0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
|
0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
|
||||||
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
|
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
|
||||||
|
|||||||
137
bin/git-linguist
Executable file
137
bin/git-linguist
Executable file
@@ -0,0 +1,137 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'linguist'
|
||||||
|
require 'rugged'
|
||||||
|
require 'optparse'
|
||||||
|
require 'json'
|
||||||
|
require 'tmpdir'
|
||||||
|
require 'zlib'
|
||||||
|
|
||||||
|
class GitLinguist
|
||||||
|
def initialize(path, commit_oid, incremental = true)
|
||||||
|
@repo_path = path
|
||||||
|
@commit_oid = commit_oid
|
||||||
|
@incremental = incremental
|
||||||
|
end
|
||||||
|
|
||||||
|
def linguist
|
||||||
|
if @commit_oid.nil?
|
||||||
|
raise "git-linguist must be called with a specific commit OID to perform language computation"
|
||||||
|
end
|
||||||
|
repo = Linguist::Repository.new(rugged, @commit_oid)
|
||||||
|
|
||||||
|
if @incremental && stats = load_language_stats
|
||||||
|
old_commit_oid, old_stats = stats
|
||||||
|
|
||||||
|
# A cache with NULL oid means that we want to froze
|
||||||
|
# these language stats in place and stop computing
|
||||||
|
# them (for performance reasons)
|
||||||
|
return old_stats if old_commit_oid == NULL_OID
|
||||||
|
repo.load_existing_stats(old_commit_oid, old_stats)
|
||||||
|
end
|
||||||
|
|
||||||
|
result = yield repo
|
||||||
|
|
||||||
|
save_language_stats(@commit_oid, repo.cache)
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_language_stats
|
||||||
|
version, oid, stats = load_cache
|
||||||
|
if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats
|
||||||
|
[oid, stats]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def save_language_stats(oid, stats)
|
||||||
|
cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats]
|
||||||
|
write_cache(cache)
|
||||||
|
end
|
||||||
|
|
||||||
|
def clear_language_stats
|
||||||
|
File.unlink(cache_file)
|
||||||
|
end
|
||||||
|
|
||||||
|
def disable_language_stats
|
||||||
|
save_language_stats(NULL_OID, {})
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
NULL_OID = ("0" * 40).freeze
|
||||||
|
|
||||||
|
LANGUAGE_STATS_CACHE = 'language-stats.cache'
|
||||||
|
LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}"
|
||||||
|
|
||||||
|
def rugged
|
||||||
|
@rugged ||= Rugged::Repository.bare(@repo_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def cache_file
|
||||||
|
File.join(@repo_path, LANGUAGE_STATS_CACHE)
|
||||||
|
end
|
||||||
|
|
||||||
|
def write_cache(object)
|
||||||
|
return unless File.directory? @repo_path
|
||||||
|
|
||||||
|
begin
|
||||||
|
tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil)
|
||||||
|
File.open(tmp_path, "wb") do |f|
|
||||||
|
marshal = Marshal.dump(object)
|
||||||
|
f.write(Zlib::Deflate.deflate(marshal))
|
||||||
|
end
|
||||||
|
|
||||||
|
File.rename(tmp_path, cache_file)
|
||||||
|
rescue => e
|
||||||
|
(File.unlink(tmp_path) rescue nil)
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_cache
|
||||||
|
marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) }
|
||||||
|
Marshal.load(marshal)
|
||||||
|
rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def git_linguist(args)
|
||||||
|
incremental = true
|
||||||
|
commit = nil
|
||||||
|
|
||||||
|
parser = OptionParser.new do |opts|
|
||||||
|
opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable"
|
||||||
|
|
||||||
|
opts.on("-f", "--force", "Force a full rescan") { incremental = false }
|
||||||
|
opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v}
|
||||||
|
end
|
||||||
|
|
||||||
|
parser.parse!(args)
|
||||||
|
|
||||||
|
git_dir = `git rev-parse --git-dir`.strip
|
||||||
|
raise "git-linguist must be ran in a Git repository" unless $?.success?
|
||||||
|
wrapper = GitLinguist.new(git_dir, commit, incremental)
|
||||||
|
|
||||||
|
case args.pop
|
||||||
|
when "stats"
|
||||||
|
wrapper.linguist do |linguist|
|
||||||
|
puts JSON.dump(linguist.languages)
|
||||||
|
end
|
||||||
|
when "breakdown"
|
||||||
|
wrapper.linguist do |linguist|
|
||||||
|
puts JSON.dump(linguist.breakdown_by_file)
|
||||||
|
end
|
||||||
|
when "dump-cache"
|
||||||
|
puts JSON.dump(wrapper.load_language_stats)
|
||||||
|
when "clear"
|
||||||
|
wrapper.clear_language_stats
|
||||||
|
when "disable"
|
||||||
|
wrapper.disable_language_stats
|
||||||
|
else
|
||||||
|
$stderr.print(parser.help)
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
git_linguist(ARGV)
|
||||||
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
|
|||||||
s.homepage = "https://github.com/github/linguist"
|
s.homepage = "https://github.com/github/linguist"
|
||||||
s.license = "MIT"
|
s.license = "MIT"
|
||||||
|
|
||||||
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb']
|
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE']
|
||||||
s.executables << 'linguist'
|
s.executables = ['linguist', 'git-linguist']
|
||||||
|
|
||||||
s.add_dependency 'charlock_holmes', '~> 0.7.3'
|
s.add_dependency 'charlock_holmes', '~> 0.7.3'
|
||||||
s.add_dependency 'escape_utils', '~> 1.1.0'
|
s.add_dependency 'escape_utils', '~> 1.1.0'
|
||||||
|
|||||||
@@ -314,6 +314,9 @@ vendor/grammars/json.tmbundle:
|
|||||||
- source.json
|
- source.json
|
||||||
vendor/grammars/kotlin-sublime-package:
|
vendor/grammars/kotlin-sublime-package:
|
||||||
- source.Kotlin
|
- source.Kotlin
|
||||||
|
vendor/grammars/language-babel/:
|
||||||
|
- source.js.jsx
|
||||||
|
- source.regexp.babel
|
||||||
vendor/grammars/language-clojure:
|
vendor/grammars/language-clojure:
|
||||||
- source.clojure
|
- source.clojure
|
||||||
vendor/grammars/language-coffee-script:
|
vendor/grammars/language-coffee-script:
|
||||||
|
|||||||
@@ -241,22 +241,26 @@ module Linguist
|
|||||||
return lines[0].include?("Code generated by")
|
return lines[0].include?("Code generated by")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp']
|
||||||
|
|
||||||
# Internal: Is the blob a C++, Java or Python source file generated by the
|
# Internal: Is the blob a C++, Java or Python source file generated by the
|
||||||
# Protocol Buffer compiler?
|
# Protocol Buffer compiler?
|
||||||
#
|
#
|
||||||
# Returns true of false.
|
# Returns true of false.
|
||||||
def generated_protocol_buffer?
|
def generated_protocol_buffer?
|
||||||
return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname)
|
return false unless PROTOBUF_EXTENSIONS.include?(extname)
|
||||||
return false unless lines.count > 1
|
return false unless lines.count > 1
|
||||||
|
|
||||||
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
|
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp']
|
||||||
|
|
||||||
# Internal: Is the blob generated by Apache Thrift compiler?
|
# Internal: Is the blob generated by Apache Thrift compiler?
|
||||||
#
|
#
|
||||||
# Returns true or false
|
# Returns true or false
|
||||||
def generated_apache_thrift?
|
def generated_apache_thrift?
|
||||||
return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname)
|
return false unless APACHE_THRIFT_EXTENSIONS.include?(extname)
|
||||||
return false unless lines.count > 1
|
return false unless lines.count > 1
|
||||||
|
|
||||||
return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
|
return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
|
||||||
|
|||||||
@@ -56,7 +56,8 @@ module Linguist
|
|||||||
|
|
||||||
# Internal: Check if this heuristic matches the candidate languages.
|
# Internal: Check if this heuristic matches the candidate languages.
|
||||||
def matches?(filename)
|
def matches?(filename)
|
||||||
@extensions.any? { |ext| filename.downcase.end_with?(ext) }
|
filename = filename.downcase
|
||||||
|
@extensions.any? { |ext| filename.end_with?(ext) }
|
||||||
end
|
end
|
||||||
|
|
||||||
# Internal: Perform the heuristic
|
# Internal: Perform the heuristic
|
||||||
@@ -65,7 +66,7 @@ module Linguist
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Common heuristics
|
# Common heuristics
|
||||||
ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronized|selector|implementation)\b/
|
ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/
|
||||||
|
|
||||||
disambiguate ".asc" do |data|
|
disambiguate ".asc" do |data|
|
||||||
if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
|
if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
# Use "text" if a mode does not exist.
|
# Use "text" if a mode does not exist.
|
||||||
# wrap - Boolean wrap to enable line wrapping (default: false)
|
# wrap - Boolean wrap to enable line wrapping (default: false)
|
||||||
# extensions - An Array of associated extensions (the first one is
|
# extensions - An Array of associated extensions (the first one is
|
||||||
# considered the primary extension)
|
# considered the primary extension, the others should be
|
||||||
|
# listed alphabetically)
|
||||||
# interpreters - An Array of associated interpreters
|
# interpreters - An Array of associated interpreters
|
||||||
# searchable - Boolean flag to enable searching (defaults to true)
|
# searchable - Boolean flag to enable searching (defaults to true)
|
||||||
# search_term - Deprecated: Some languages maybe indexed under a
|
# search_term - Deprecated: Some languages maybe indexed under a
|
||||||
@@ -1367,6 +1368,7 @@ Haml:
|
|||||||
Handlebars:
|
Handlebars:
|
||||||
type: markup
|
type: markup
|
||||||
color: "#01a9d6"
|
color: "#01a9d6"
|
||||||
|
group: HTML
|
||||||
aliases:
|
aliases:
|
||||||
- hbs
|
- hbs
|
||||||
- htmlbars
|
- htmlbars
|
||||||
@@ -1545,7 +1547,9 @@ JSON:
|
|||||||
searchable: false
|
searchable: false
|
||||||
extensions:
|
extensions:
|
||||||
- .json
|
- .json
|
||||||
|
- .geojson
|
||||||
- .lock
|
- .lock
|
||||||
|
- .topojson
|
||||||
filenames:
|
filenames:
|
||||||
- .jshintrc
|
- .jshintrc
|
||||||
- composer.lock
|
- composer.lock
|
||||||
@@ -1573,6 +1577,14 @@ JSONiq:
|
|||||||
- .jq
|
- .jq
|
||||||
tm_scope: source.jq
|
tm_scope: source.jq
|
||||||
|
|
||||||
|
JSX:
|
||||||
|
type: programming
|
||||||
|
group: JavaScript
|
||||||
|
extensions:
|
||||||
|
- .jsx
|
||||||
|
tm_scope: source.js.jsx
|
||||||
|
ace_mode: javascript
|
||||||
|
|
||||||
Jade:
|
Jade:
|
||||||
group: HTML
|
group: HTML
|
||||||
type: markup
|
type: markup
|
||||||
@@ -1626,7 +1638,6 @@ JavaScript:
|
|||||||
- .jsfl
|
- .jsfl
|
||||||
- .jsm
|
- .jsm
|
||||||
- .jss
|
- .jss
|
||||||
- .jsx
|
|
||||||
- .njs
|
- .njs
|
||||||
- .pac
|
- .pac
|
||||||
- .sjs
|
- .sjs
|
||||||
@@ -2127,7 +2138,7 @@ Myghty:
|
|||||||
|
|
||||||
NCL:
|
NCL:
|
||||||
type: programming
|
type: programming
|
||||||
color: #28431f
|
color: "#28431f"
|
||||||
extensions:
|
extensions:
|
||||||
- .ncl
|
- .ncl
|
||||||
tm_scope: source.ncl
|
tm_scope: source.ncl
|
||||||
|
|||||||
@@ -4,7 +4,11 @@ require 'rugged'
|
|||||||
|
|
||||||
module Linguist
|
module Linguist
|
||||||
class LazyBlob
|
class LazyBlob
|
||||||
GIT_ATTR = ['linguist-documentation', 'linguist-language', 'linguist-vendored']
|
GIT_ATTR = ['linguist-documentation',
|
||||||
|
'linguist-language',
|
||||||
|
'linguist-vendored',
|
||||||
|
'linguist-generated']
|
||||||
|
|
||||||
GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
|
GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
|
||||||
GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
|
GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
|
||||||
|
|
||||||
@@ -31,14 +35,6 @@ module Linguist
|
|||||||
name, GIT_ATTR, GIT_ATTR_FLAGS)
|
name, GIT_ATTR, GIT_ATTR_FLAGS)
|
||||||
end
|
end
|
||||||
|
|
||||||
def vendored?
|
|
||||||
if attr = git_attributes['linguist-vendored']
|
|
||||||
return boolean_attribute(attr)
|
|
||||||
else
|
|
||||||
return super
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def documentation?
|
def documentation?
|
||||||
if attr = git_attributes['linguist-documentation']
|
if attr = git_attributes['linguist-documentation']
|
||||||
boolean_attribute(attr)
|
boolean_attribute(attr)
|
||||||
@@ -47,6 +43,22 @@ module Linguist
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def generated?
|
||||||
|
if attr = git_attributes['linguist-generated']
|
||||||
|
boolean_attribute(attr)
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def vendored?
|
||||||
|
if attr = git_attributes['linguist-vendored']
|
||||||
|
return boolean_attribute(attr)
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def language
|
def language
|
||||||
return @language if defined?(@language)
|
return @language if defined?(@language)
|
||||||
|
|
||||||
@@ -67,6 +79,10 @@ module Linguist
|
|||||||
@size
|
@size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cleanup!
|
||||||
|
@data.clear if @data
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
# Returns true if the attribute is present and not the string "false".
|
# Returns true if the attribute is present and not the string "false".
|
||||||
|
|||||||
@@ -126,12 +126,13 @@ module Linguist
|
|||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
MAX_TREE_SIZE = 100_000
|
||||||
|
|
||||||
def compute_stats(old_commit_oid, cache = nil)
|
def compute_stats(old_commit_oid, cache = nil)
|
||||||
|
return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE
|
||||||
|
|
||||||
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
|
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
|
||||||
|
|
||||||
read_index
|
read_index
|
||||||
|
|
||||||
diff = Rugged::Tree.diff(repository, old_tree, current_tree)
|
diff = Rugged::Tree.diff(repository, old_tree, current_tree)
|
||||||
|
|
||||||
# Clear file map and fetch full diff if any .gitattributes files are changed
|
# Clear file map and fetch full diff if any .gitattributes files are changed
|
||||||
@@ -157,9 +158,12 @@ module Linguist
|
|||||||
|
|
||||||
blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
|
blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
|
||||||
|
|
||||||
next unless blob.include_in_language_stats?
|
if blob.include_in_language_stats?
|
||||||
file_map[new] = [blob.language.group.name, blob.size]
|
file_map[new] = [blob.language.group.name, blob.size]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
blob.cleanup!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
file_map
|
file_map
|
||||||
|
|||||||
@@ -266,6 +266,7 @@
|
|||||||
|
|
||||||
# Test fixtures
|
# Test fixtures
|
||||||
- ^[Tt]ests?/fixtures/
|
- ^[Tt]ests?/fixtures/
|
||||||
|
- ^[Ss]pecs?/fixtures/
|
||||||
|
|
||||||
# PhoneGap/Cordova
|
# PhoneGap/Cordova
|
||||||
- (^|/)cordova([^.]*)\.js$
|
- (^|/)cordova([^.]*)\.js$
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
module Linguist
|
module Linguist
|
||||||
VERSION = "4.5.15"
|
VERSION = "4.6.3"
|
||||||
end
|
end
|
||||||
|
|||||||
82
samples/JSON/geo.geojson
Normal file
82
samples/JSON/geo.geojson
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"type": "FeatureCollection",
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Australia Post - North Ryde BC",
|
||||||
|
"geo": [-33.787792, 151.13288],
|
||||||
|
"streetAddress": "11 Waterloo Road",
|
||||||
|
"addressLocality": "Macquarie Park",
|
||||||
|
"addressRegion": "New South Wales",
|
||||||
|
"addressCountry": "Australia",
|
||||||
|
"postalCode": "2113"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"type": "Point",
|
||||||
|
"coordinates": [151.13288, -33.787792, 0]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "George Weston Foods Limited",
|
||||||
|
"geo": [-37.8263884, 144.9105381],
|
||||||
|
"streetAddress": "Level 3, 187 Todd Road",
|
||||||
|
"addressLocality": "Port Melbourne",
|
||||||
|
"addressRegion": "Victoria",
|
||||||
|
"addressCountry": "Australia",
|
||||||
|
"postalCode": "3207"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"type": "Polygon",
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[144.9097088901841, -37.82622654171794, 0],
|
||||||
|
[144.9099724266943, -37.82679388891783, 0],
|
||||||
|
[144.9110127325916, -37.82651526396403, 0],
|
||||||
|
[144.9112227645738, -37.82655667152123, 0],
|
||||||
|
[144.9113739439796, -37.82618552508767, 0],
|
||||||
|
[144.9112740633105, -37.82615750100924, 0],
|
||||||
|
[144.9111355846674, -37.82584493693527, 0],
|
||||||
|
[144.9097088901841, -37.82622654171794, 0]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "George Weston Foods Limited",
|
||||||
|
"geo": [-37.05202791502396, 144.2085614999388],
|
||||||
|
"streetAddress": "67 Richards Road",
|
||||||
|
"addressLocality": "Castlemaine",
|
||||||
|
"addressRegion": "Victoria",
|
||||||
|
"addressCountry": "Australia",
|
||||||
|
"postalCode": "3450"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"type": "Polygon",
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[144.2052428913937, -37.04906391287216, 0],
|
||||||
|
[144.205540392692, -37.05049727485623, 0],
|
||||||
|
[144.2059800881858, -37.05066835966983, 0],
|
||||||
|
[144.206490656024, -37.05279538900776, 0],
|
||||||
|
[144.2064525845008, -37.05366195881602, 0],
|
||||||
|
[144.2084322301922, -37.0538920493147, 0],
|
||||||
|
[144.2084811895712, -37.05266519735124, 0],
|
||||||
|
[144.2079784002005, -37.05041270555773, 0],
|
||||||
|
[144.2074017905817, -37.04817406993293, 0],
|
||||||
|
[144.2061363939852, -37.04834972871226, 0],
|
||||||
|
[144.2052428913937, -37.04906391287216, 0]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1
samples/JSON/switzerland.topojson
Normal file
1
samples/JSON/switzerland.topojson
Normal file
File diff suppressed because one or more lines are too long
23
samples/JSX/sample.jsx
Normal file
23
samples/JSX/sample.jsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const React = require('react')
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
render: function() {
|
||||||
|
let {feeds, log} = this.props;
|
||||||
|
|
||||||
|
log.info(feeds);
|
||||||
|
return <div className="feed-list">
|
||||||
|
<h3>News Feed's</h3>
|
||||||
|
<ul>
|
||||||
|
{feeds.map(function(feed) {
|
||||||
|
return <li key={feed.name} className={feed.fetched ? 'loaded' : 'loading'}>
|
||||||
|
{feed.data && feed.data.length > 0 ?
|
||||||
|
<span>{feed.name} <span className='light'>({feed.data.length})</span></span>
|
||||||
|
: 'feed.name' }
|
||||||
|
</li>
|
||||||
|
})}
|
||||||
|
</ul>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
});
|
||||||
16
samples/Objective-C/Siesta.h
Normal file
16
samples/Objective-C/Siesta.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// Siesta.h
|
||||||
|
// Siesta
|
||||||
|
//
|
||||||
|
// Created by Paul on 2015/6/14.
|
||||||
|
// Copyright © 2015 Bust Out Solutions. MIT license.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
//! Project version number for Siesta.
|
||||||
|
FOUNDATION_EXPORT double SiestaVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for Siesta.
|
||||||
|
FOUNDATION_EXPORT const unsigned char SiestaVersionString[];
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ class TestPedantic < Minitest::Test
|
|||||||
assert_sorted LANGUAGES.keys
|
assert_sorted LANGUAGES.keys
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_extensions_are_sorted
|
def test_nonprimary_extensions_are_sorted
|
||||||
LANGUAGES.each do |name, language|
|
LANGUAGES.each do |name, language|
|
||||||
extensions = language['extensions']
|
extensions = language['extensions']
|
||||||
assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
|
assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
|
||||||
|
|||||||
@@ -111,4 +111,14 @@ class TestRepository < Minitest::Test
|
|||||||
refute_predicate readme, :documentation?
|
refute_predicate readme, :documentation?
|
||||||
assert_predicate arduino, :documentation?
|
assert_predicate arduino, :documentation?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_linguist_override_generated?
|
||||||
|
attr_commit = "351c1cc8fd57340839bdb400d7812332af80e9bd"
|
||||||
|
repo = linguist_repo(attr_commit).read_index
|
||||||
|
|
||||||
|
rakefile = Linguist::LazyBlob.new(rugged_repository, attr_commit, "Rakefile")
|
||||||
|
|
||||||
|
# overridden .gitattributes
|
||||||
|
assert rakefile.generated?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
1
vendor/grammars/language-babel
vendored
Submodule
1
vendor/grammars/language-babel
vendored
Submodule
Submodule vendor/grammars/language-babel added at c79ac8979c
2
vendor/grammars/language-javascript
vendored
2
vendor/grammars/language-javascript
vendored
Submodule vendor/grammars/language-javascript updated: c5c381e378...7b14bbb041
Reference in New Issue
Block a user