rubychan / coderay

Fast and easy syntax highlighting for selected languages, written in Ruby.
http://coderay.rubychan.de/
Other
846 stars 115 forks source link

Add an explicit method to retrieve supported languages. #210

Open MischaTheEvil opened 7 years ago

MischaTheEvil commented 7 years ago

The current way of retrieving a list of supported languages from CodeRay (using CodeRay::Scanners.list, see eg. the Stack Overflow question 'Getting the list of available languages') has two drawbacks/limitations:

  1. it includes "internal" scanners which aren't representing actual languages (debug, raydebug, scanner and potentially the default alias);
  2. it does not include language aliases.

I can think of multiple use-cases where one wants to retrieve a list of supported languages, excluding the "internal" scanners and/or including the aliases. One is for example reported as #194.

Recently, Redmine introduced a change where such a list is needed too (revisions r16501 and r16502). While it is pretty easy to "generate" it downstream (redmine.org issues #25634 and #26055), it requires CodeRay integrators to reinvent the wheel over-and-over again. As such I think it would be handy if this functionality is provided by the CodeRay API itself.

I extracted a new, generalized class method (CodeRay.supported_languages) from the Redmine core, ported it to CodeRay and added some basic test coverage. The method has two optional arguments:

  1. include_aliases (default to true);
  2. include_internals (default to false).

These defaults are taken from Redmine's use-case and, as such, may not suit everyone's needs.

MischaTheEvil commented 7 years ago

I was caught by the fact that CodeRay still supports Ruby 1.8. I have fixed the incompatibilities in the tests.