Skip to content

Commit f3b9038

Browse files
committed
Add method to explicitly retrieve supported languages.
1 parent 368a28e commit f3b9038

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

lib/coderay.rb

+14
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,20 @@ def get_scanner_options options
279279
options.fetch :scanner_options, {}
280280
end
281281

282+
# Provide a list of supported code languages.
283+
#
284+
# Returns a hash of symbols.
285+
def supported_languages(include_aliases=true, include_internals=false)
286+
languages = CodeRay::Scanners.list
287+
if include_aliases == true
288+
languages += CodeRay::Scanners.plugin_hash.keys.map(&:to_sym)
289+
end
290+
if include_internals == false
291+
languages -= %w(debug default raydebug scanner).map(&:to_sym)
292+
end
293+
return languages
294+
end
295+
282296
end
283297

284298
end

test/functional/basic.rb

+34
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,40 @@ def test_list_of_scanners
155155
assert CodeRay::Scanners.list.include?(:text)
156156
end
157157

158+
def test_supported_languages_should_return_array_of_symbols
159+
assert_kind_of(Array, CodeRay.supported_languages)
160+
assert_kind_of(Symbol, CodeRay.supported_languages.first)
161+
end
162+
163+
def test_supported_languages_should_include_languages
164+
assert_includes CodeRay.supported_languages, :ruby
165+
end
166+
167+
def test_supported_languages_without_arguments_should_include_aliases_and_exclude_internals
168+
assert_includes CodeRay.supported_languages, :javascript
169+
refute_includes CodeRay.supported_languages, :debug
170+
end
171+
172+
def test_supported_languages_with_arguments_should_include_aliases_and_exclude_internals
173+
assert_includes CodeRay.supported_languages(true, false), :javascript
174+
refute_includes CodeRay.supported_languages(true, false), :debug
175+
end
176+
177+
def test_supported_languages_with_arguments_should_exclude_aliases_and_include_internals
178+
refute_includes CodeRay.supported_languages(false, true), :javascript
179+
assert_includes CodeRay.supported_languages(false, true), :debug
180+
end
181+
182+
def test_supported_languages_with_arguments_should_include_aliases_and_internals
183+
assert_includes CodeRay.supported_languages(true, true), :javascript
184+
assert_includes CodeRay.supported_languages(true, true), :debug
185+
end
186+
187+
def test_supported_languages_with_arguments_should_exclude_aliases_and_internals
188+
refute_includes CodeRay.supported_languages(false, false), :javascript
189+
refute_includes CodeRay.supported_languages(false, false), :debug
190+
end
191+
158192
def test_token_kinds
159193
assert_kind_of Hash, CodeRay::TokenKinds
160194
for kind, css_class in CodeRay::TokenKinds

0 commit comments

Comments
 (0)