Class: Parabot::LanguageDetector
- Inherits:
-
Object
- Object
- Parabot::LanguageDetector
- Defined in:
- lib/parabot/language_detector.rb
Class Method Summary collapse
- .create_full_language_config(project_root) ⇒ Object
-
.detect_with_all_languages(project_root = Dir.pwd) ⇒ Object
Class method for detecting languages with all available language configs loaded Used by init command and other contexts that need complete language detection.
Instance Method Summary collapse
- #detect_all_languages(path = project_root) ⇒ Object
-
#find_language_from_extensions(extensions) ⇒ Object
Find language from file extensions.
Class Method Details
.create_full_language_config(project_root) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/parabot/language_detector.rb', line 23 def self.create_full_language_config(project_root) # Load all available language configs config_dir = File.join(__dir__, "../../config") languages = {} Dir.glob(File.join(config_dir, "languages/*.yml")).each do |lang_file| lang_name = File.basename(lang_file, ".yml") languages[lang_name] = YAML.load_file(lang_file) end # Create a minimal config object that supports language detection Class.new do def initialize(languages, project_root) @languages = languages @project_root = project_root end attr_reader :project_root def all_language_extensions @languages.transform_values { |lang_config| lang_config["file_extensions"] } end def all_language_project_files result = {} @languages.each do |lang, lang_config| project_files = lang_config["project_files"] || [] result[lang] = project_files unless project_files.empty? end result end def detect_language_from_extensions(extensions) all_language_extensions.each do |lang, lang_extensions| next if lang_extensions.nil? return lang if (lang_extensions & extensions).any? end nil end end.new(languages, project_root) end |
.detect_with_all_languages(project_root = Dir.pwd) ⇒ Object
Class method for detecting languages with all available language configs loaded Used by init command and other contexts that need complete language detection
17 18 19 20 21 |
# File 'lib/parabot/language_detector.rb', line 17 def self.detect_with_all_languages(project_root = Dir.pwd) config = create_full_language_config(project_root) detector = new(config) detector.detect_all_languages(project_root) end |
Instance Method Details
#detect_all_languages(path = project_root) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/parabot/language_detector.rb', line 65 def detect_all_languages(path = project_root) detected_languages = Set.new # 1. Check for definitive project files first (always included) detected_languages.merge(detect_from_project_files(path)) # 2. Get extensions with counts, filter by threshold to avoid fixture noise detected_languages.merge(detect_from_extensions_with_threshold(path)) # 3. Return sorted array or [:unknown] if empty detected_languages.empty? ? [:unknown] : detected_languages.to_a.sort end |
#find_language_from_extensions(extensions) ⇒ Object
Find language from file extensions
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/parabot/language_detector.rb', line 79 def find_language_from_extensions(extensions) return nil if extensions.empty? config.all_language_extensions.each do |lang, lang_extensions| next if lang_extensions.empty? return lang.to_s if (lang_extensions & extensions).any? end nil end |