Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Could the API for CodeRay.scan(dataset, :python).term also allow for some variant that works on the file extension? (e. g. "rb" for ruby files, "py" or python files etc..) #218

Open
ghost opened this issue Oct 29, 2017 · 0 comments

Comments

@ghost
Copy link

ghost commented Oct 29, 2017

Hello korny,

Sorry for so many reports :D - I am using coderay quite a lot.

I have a "cat" wrapper in ruby, that displays file content. I want
to be able to just pass the file extension name into coderay and
have it colourize the colourized content (before printing the
result on the commandline). This is not, strictly speaking, what
cat is doing, but I found for my use cases it's simpler if I just
"cat foobar.py" and have coderay put out python-colourized
content on the commandline. :D

The current API that I use is this one here:

dataset = CodeRay.scan(dataset, :python).term

In this context, the dataset variable was simply the content
of the local file at hand, usualy obtained via:

dataset = File.read(path_here)

Or something like that.

Now I was trying to see if this API can be simplified. For example,
I would like to avoid having to use symbols such as :python or
:ruby, if that is possible. So I was thinking "coderay perhaps
supports an API that works with the extension name".

So in this context, .py and .rb and so forth. Most of my files are
standard and use such extension names.

Unfortunately, coderay does not support this.

I tried via '.py' which should indicate the file extension but
coderay issued an error:

/Programs/Ruby/2.4.2/lib/ruby/gems/2.4.0/gems/coderay-1.1.2/lib/coderay/helpers/plugin_host.rb:212:in `validate_id': Invalid id given: .py (ArgumentError)

I also tried with 'py' instead, which may be the one that
one gets via File.extname(path).delete('.') for instance
but this also does not work.

Now finally I come to my suggestion:

  • Do you think it would be possible or useful to have a
    way for coderay to infer automatically what a user wants
    to use, based on the file extension? That way I could
    just push in the name of the extension, and coderay
    can internally find the proper Symbol identifier for
    that (such as :ruby or :python). That way it would also be
    backwards compatible of course.

Another API may be fine, but I think it may be better if
the currently existing variant is extended. It does not
have to be a String to the current API of the method,
by the way, it could also be a hash. Then I could pass
a hash with a key such as:

variable_holding_the_extension_name = File.extname(input_path)
extension_name: variable_holding_the_extension_name

Or something similar to the above.

If an unsupported extension is passed, an error could be raised,
with a message such as:

"unsupported extension name: for the currently supported
programming languages names, see: coderay --supported"

or something appropriate.

I am not sure if this would be useful or not or whether you would
want coderay to support this, since it may be only me and nobody
else who wants this. Please feel free to close this at any moment
in time - coderay is great, I use it for commandline colourizing all
the time. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

0 participants