Sha256: c1a606bdd29ec09faf7908bd87ca2fa8fb32072d8dea02cf2564250b5f42bceb
Contents?: true
Size: 1.79 KB
Versions: 2
Compression:
Stored size: 1.79 KB
Contents
module Linguist # A collection of simple heuristics that can be used to better analyze languages. class Heuristics ACTIVE = false # Public: Given an array of String language names, # apply heuristics against the given data and return an array # of matching languages, or nil. # # data - Array of tokens or String data to analyze. # languages - Array of language name Strings to restrict to. # # Returns an array of Languages or [] def self.find_by_heuristics(data, languages) if active? if languages.all? { |l| ["Objective-C", "C++"].include?(l) } disambiguate_c(data, languages) end if languages.all? { |l| ["Perl", "Prolog"].include?(l) } disambiguate_pl(data, languages) end if languages.all? { |l| ["TypeScript", "XML"].include?(l) } disambiguate_ts(data, languages) end end end # .h extensions are ambigious between C, C++, and Objective-C. # We want to shortcut look for Objective-C _and_ now C++ too! # # Returns an array of Languages or [] def self.disambiguate_c(data, languages) matches = [] matches << Language["Objective-C"] if data.include?("@interface") matches << Language["C++"] if data.include?("#include <cstdint>") matches end def self.disambiguate_pl(data, languages) matches = [] matches << Language["Prolog"] if data.include?(":-") matches << Language["Perl"] if data.include?("use strict") matches end def self.disambiguate_ts(data, languages) matches = [] if (data.include?("</translation>")) matches << Language["XML"] else matches << Language["TypeScript"] end matches end def self.active? !!ACTIVE end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
github-linguist-2.10.11 | lib/linguist/heuristics.rb |
github-linguist-2.10.10 | lib/linguist/heuristics.rb |