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

[Ruby] Support code on same line as heredoc begin token #466

Merged
merged 1 commit into from Jun 22, 2016

Conversation

wbond
Copy link
Member

@wbond wbond commented Jun 8, 2016

This will be merged right before we ship 3115 since it uses new functionality

@FichteFoll
Copy link
Collaborator

FichteFoll commented Jun 8, 2016

clear_scopes: 2

What does this do exactly?

Edit: Seems like it also accepts a boolean.

@wbond
Copy link
Member Author

wbond commented Jun 8, 2016

It removes N scopes from the scope name stack. Or you can pass true to clear the stack altogether, as used in #467.

In this case, it clears the two scopes added by the heredoc open token so that the code on the remainder of the line doesn't get highlighted like it is part of a string.

This could be useful for string interpolation, since we can remove the general string highlighting from the interpolated part.

@FichteFoll
Copy link
Collaborator

FichteFoll commented Jun 8, 2016

I assume this works like a meta scope is only valid for the current context? I like this. I also like that we can remove the string scope from interpolated sections like this.

@wbond
Copy link
Member Author

wbond commented Jun 9, 2016

Yes, this functions like meta_scope in that it only applies to the current context.

# - include: interpolated-ruby
# - include: escaped-char

# This prevents clear_scopes from applying to the push token
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wbond what does this mean? Why is this necessary? This context seems useless to me.

I'm trying to implement clear_scopes in https://github.com/trishume/syntect and the fact that this context looks useless to me suggests I might be misunderstanding the semantics of either clear_scopes or push/pop operations.

If you could explain to me why this is necessary I would really appreciate it. Also, what is a "push token" and why would clear_scopes apply to it?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clear_scopes is implemented in the same way as meta_scope in that it applies to the match the pushed, and to the match that pops.

The match that pushed is what I mean by "push token".

Without this, clear_scopes would clear the scope from the opening heredoc token, but we don't want that. I decided not to implement clear_scopes_content since this method can be used to emulate it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok that makes sense, and in retrospect is explained in the docs, thanks for clearing up my confusion. Thanks!

@wbond wbond deleted the ruby-clear_scopes branch April 22, 2017 13:02
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

Successfully merging this pull request may close these issues.

None yet

3 participants