Comments (13)
Instead it would probably make more sense to allow use of custom queries, though I am not sure if that is already possible to do?
That is already possible.
This has to be defined for every language? Can it be generalized? I think the else
is a very important piece of context.
from nvim-treesitter-context.
This looks like C, does it?
Generally this plugin just uses the hierarchical tree structure that the treesitter parser for the language provides. For example with python or rust, this works fine.
You can inspect what the parser provides using the :InspectTree
(in a recent neovim version).
So my hunch would be that this should actually be an issue / request to the treesitter C parser.
from nvim-treesitter-context.
thanks syphar
No it is a cc file. I copy it as a c file, the else
part is not shown either.
:InspectTree
shows below info.
I notice that alternative: (else_clause) ; [23:7 - 49:5]
corresponds to the else
branch, so will treesitter-context handle the alternative: (else_clause)
?
(preproc_include) ; [1:1 - 2:0]
path: (string_literal) ; [1:10 - 18]
(string_content) ; [1:11 - 17]
(function_definition) ; [3:1 - 51:1]
type: (primitive_type) ; [3:1 - 3]
declarator: (function_declarator) ; [3:5 - 10]
declarator: (identifier) ; [3:5 - 8]
parameters: (parameter_list) ; [3:9 - 10]
body: (compound_statement) ; [3:12 - 51:1]
(if_statement) ; [4:5 - 49:5]
condition: (condition_clause) ; [4:8 - 17]
value: (binary_expression) ; [4:10 - 15]
left: (number_literal) ; [4:10 - 10]
right: (number_literal) ; [4:15 - 15]
consequence: (compound_statement) ; [4:19 - 23:5]
(expression_statement) ; [5:9 - 14]
(assignment_expression) ; [5:9 - 13]
left: (user_defined_literal) ; [5:9 - 9]
(number_literal) ; [5:9 - 9]
(literal_suffix) ; [5:10 - 9]
right: (number_literal) ; [5:13 - 13]
(expression_statement) ; [6:9 - 14]
(assignment_expression) ; [6:9 - 13]
left: (user_defined_literal) ; [6:9 - 9]
(number_literal) ; [6:9 - 9]
(literal_suffix) ; [6:10 - 9]
right: (number_literal) ; [6:13 - 13]
(expression_statement) ; [7:9 - 14]
(assignment_expression) ; [7:9 - 13]
left: (user_defined_literal) ; [7:9 - 9]
(number_literal) ; [7:9 - 9]
(literal_suffix) ; [7:10 - 9]
right: (number_literal) ; [7:13 - 13]
(expression_statement) ; [8:9 - 14]
(assignment_expression) ; [8:9 - 13]
left: (user_defined_literal) ; [8:9 - 9]
(number_literal) ; [8:9 - 9]
(literal_suffix) ; [8:10 - 9]
right: (number_literal) ; [8:13 - 13]
(expression_statement) ; [9:9 - 14]
(assignment_expression) ; [9:9 - 13]
left: (user_defined_literal) ; [9:9 - 9]
(number_literal) ; [9:9 - 9]
(literal_suffix) ; [9:10 - 9]
right: (number_literal) ; [9:13 - 13]
(expression_statement) ; [10:9 - 14]
(assignment_expression) ; [10:9 - 13]
left: (user_defined_literal) ; [10:9 - 9]
(number_literal) ; [10:9 - 9]
(literal_suffix) ; [10:10 - 9]
right: (number_literal) ; [10:13 - 13]
(expression_statement) ; [11:9 - 14]
(assignment_expression) ; [11:9 - 13]
left: (user_defined_literal) ; [11:9 - 9]
(number_literal) ; [11:9 - 9]
(literal_suffix) ; [11:10 - 9]
right: (number_literal) ; [11:13 - 13]
(expression_statement) ; [12:9 - 14]
(assignment_expression) ; [12:9 - 13]
left: (user_defined_literal) ; [12:9 - 9]
(number_literal) ; [12:9 - 9]
(literal_suffix) ; [12:10 - 9]
right: (number_literal) ; [12:13 - 13]
(expression_statement) ; [13:9 - 14]
(assignment_expression) ; [13:9 - 13]
left: (user_defined_literal) ; [13:9 - 9]
(number_literal) ; [13:9 - 9]
(literal_suffix) ; [13:10 - 9]
right: (number_literal) ; [13:13 - 13]
(expression_statement) ; [14:9 - 14]
(assignment_expression) ; [14:9 - 13]
left: (user_defined_literal) ; [14:9 - 9]
(number_literal) ; [14:9 - 9]
(literal_suffix) ; [14:10 - 9]
right: (number_literal) ; [14:13 - 13]
(expression_statement) ; [15:9 - 14]
(assignment_expression) ; [15:9 - 13]
left: (user_defined_literal) ; [15:9 - 9]
(number_literal) ; [15:9 - 9]
(literal_suffix) ; [15:10 - 9]
right: (number_literal) ; [15:13 - 13]
(expression_statement) ; [16:9 - 14]
(assignment_expression) ; [16:9 - 13]
left: (user_defined_literal) ; [16:9 - 9]
(number_literal) ; [16:9 - 9]
(literal_suffix) ; [16:10 - 9]
right: (number_literal) ; [16:13 - 13]
(expression_statement) ; [17:9 - 14]
(assignment_expression) ; [17:9 - 13]
left: (user_defined_literal) ; [17:9 - 9]
(number_literal) ; [17:9 - 9]
(literal_suffix) ; [17:10 - 9]
right: (number_literal) ; [17:13 - 13]
(expression_statement) ; [18:9 - 14]
(assignment_expression) ; [18:9 - 13]
left: (user_defined_literal) ; [18:9 - 9]
(number_literal) ; [18:9 - 9]
(literal_suffix) ; [18:10 - 9]
right: (number_literal) ; [18:13 - 13]
(expression_statement) ; [19:9 - 14]
(assignment_expression) ; [19:9 - 13]
left: (user_defined_literal) ; [19:9 - 9]
(number_literal) ; [19:9 - 9]
(literal_suffix) ; [19:10 - 9]
right: (number_literal) ; [19:13 - 13]
(expression_statement) ; [20:9 - 14]
(assignment_expression) ; [20:9 - 13]
left: (user_defined_literal) ; [20:9 - 9]
(number_literal) ; [20:9 - 9]
(literal_suffix) ; [20:10 - 9]
right: (number_literal) ; [20:13 - 13]
(expression_statement) ; [21:9 - 14]
(assignment_expression) ; [21:9 - 13]
left: (user_defined_literal) ; [21:9 - 9]
(number_literal) ; [21:9 - 9]
(literal_suffix) ; [21:10 - 9]
right: (number_literal) ; [21:13 - 13]
(expression_statement) ; [22:9 - 14]
(assignment_expression) ; [22:9 - 13]
left: (user_defined_literal) ; [22:9 - 9]
(number_literal) ; [22:9 - 9]
(literal_suffix) ; [22:10 - 9]
right: (number_literal) ; [22:13 - 13]
alternative: (else_clause) ; [23:7 - 49:5]
(compound_statement) ; [23:12 - 49:5]
(expression_statement) ; [24:9 - 14]
(assignment_expression) ; [24:9 - 13]
left: (user_defined_literal) ; [24:9 - 9]
(number_literal) ; [24:9 - 9]
(literal_suffix) ; [24:10 - 9]
right: (number_literal) ; [24:13 - 13]
(expression_statement) ; [25:9 - 14]
(assignment_expression) ; [25:9 - 13]
left: (user_defined_literal) ; [25:9 - 9]
(number_literal) ; [25:9 - 9]
(literal_suffix) ; [25:10 - 9]
right: (number_literal) ; [25:13 - 13]
(expression_statement) ; [26:9 - 14]
(assignment_expression) ; [26:9 - 13]
left: (user_defined_literal) ; [26:9 - 9]
(number_literal) ; [26:9 - 9]
(literal_suffix) ; [26:10 - 9]
right: (number_literal) ; [26:13 - 13]
(expression_statement) ; [27:9 - 14]
(assignment_expression) ; [27:9 - 13]
left: (user_defined_literal) ; [27:9 - 9]
(number_literal) ; [27:9 - 9]
(literal_suffix) ; [27:10 - 9]
right: (number_literal) ; [27:13 - 13]
(expression_statement) ; [28:9 - 14]
(assignment_expression) ; [28:9 - 13]
left: (user_defined_literal) ; [28:9 - 9]
(number_literal) ; [28:9 - 9]
(literal_suffix) ; [28:10 - 9]
right: (number_literal) ; [28:13 - 13]
(expression_statement) ; [29:9 - 14]
(assignment_expression) ; [29:9 - 13]
left: (user_defined_literal) ; [29:9 - 9]
(number_literal) ; [29:9 - 9]
(literal_suffix) ; [29:10 - 9]
right: (number_literal) ; [29:13 - 13]
(expression_statement) ; [30:9 - 14]
(assignment_expression) ; [30:9 - 13]
left: (user_defined_literal) ; [30:9 - 9]
(number_literal) ; [30:9 - 9]
(literal_suffix) ; [30:10 - 9]
right: (number_literal) ; [30:13 - 13]
(expression_statement) ; [31:9 - 14]
(assignment_expression) ; [31:9 - 13]
left: (user_defined_literal) ; [31:9 - 9]
(number_literal) ; [31:9 - 9]
(literal_suffix) ; [31:10 - 9]
right: (number_literal) ; [31:13 - 13]
(expression_statement) ; [32:9 - 14]
(assignment_expression) ; [32:9 - 13]
left: (user_defined_literal) ; [32:9 - 9]
(number_literal) ; [32:9 - 9]
(literal_suffix) ; [32:10 - 9]
right: (number_literal) ; [32:13 - 13]
(expression_statement) ; [33:9 - 14]
(assignment_expression) ; [33:9 - 13]
left: (user_defined_literal) ; [33:9 - 9]
(number_literal) ; [33:9 - 9]
(literal_suffix) ; [33:10 - 9]
right: (number_literal) ; [33:13 - 13]
(expression_statement) ; [34:9 - 14]
(assignment_expression) ; [34:9 - 13]
left: (user_defined_literal) ; [34:9 - 9]
(number_literal) ; [34:9 - 9]
(literal_suffix) ; [34:10 - 9]
right: (number_literal) ; [34:13 - 13]
(expression_statement) ; [35:9 - 14]
(assignment_expression) ; [35:9 - 13]
left: (user_defined_literal) ; [35:9 - 9]
(number_literal) ; [35:9 - 9]
(literal_suffix) ; [35:10 - 9]
right: (number_literal) ; [35:13 - 13]
(expression_statement) ; [36:9 - 14]
(assignment_expression) ; [36:9 - 13]
left: (user_defined_literal) ; [36:9 - 9]
(number_literal) ; [36:9 - 9]
(literal_suffix) ; [36:10 - 9]
right: (number_literal) ; [36:13 - 13]
(expression_statement) ; [37:9 - 14]
(assignment_expression) ; [37:9 - 13]
left: (user_defined_literal) ; [37:9 - 9]
(number_literal) ; [37:9 - 9]
(literal_suffix) ; [37:10 - 9]
right: (number_literal) ; [37:13 - 13]
(expression_statement) ; [38:9 - 14]
(assignment_expression) ; [38:9 - 13]
left: (user_defined_literal) ; [38:9 - 9]
(number_literal) ; [38:9 - 9]
(literal_suffix) ; [38:10 - 9]
right: (number_literal) ; [38:13 - 13]
(expression_statement) ; [39:9 - 14]
(assignment_expression) ; [39:9 - 13]
left: (user_defined_literal) ; [39:9 - 9]
(number_literal) ; [39:9 - 9]
(literal_suffix) ; [39:10 - 9]
right: (number_literal) ; [39:13 - 13]
(expression_statement) ; [40:9 - 14]
(assignment_expression) ; [40:9 - 13]
left: (user_defined_literal) ; [40:9 - 9]
(number_literal) ; [40:9 - 9]
(literal_suffix) ; [40:10 - 9]
right: (number_literal) ; [40:13 - 13]
(expression_statement) ; [41:9 - 14]
(assignment_expression) ; [41:9 - 13]
left: (user_defined_literal) ; [41:9 - 9]
(number_literal) ; [41:9 - 9]
(literal_suffix) ; [41:10 - 9]
right: (number_literal) ; [41:13 - 13]
(expression_statement) ; [42:9 - 14]
(assignment_expression) ; [42:9 - 13]
left: (user_defined_literal) ; [42:9 - 9]
(number_literal) ; [42:9 - 9]
(literal_suffix) ; [42:10 - 9]
right: (number_literal) ; [42:13 - 13]
(expression_statement) ; [43:9 - 14]
(assignment_expression) ; [43:9 - 13]
left: (user_defined_literal) ; [43:9 - 9]
(number_literal) ; [43:9 - 9]
(literal_suffix) ; [43:10 - 9]
right: (number_literal) ; [43:13 - 13]
(expression_statement) ; [44:9 - 14]
(assignment_expression) ; [44:9 - 13]
left: (user_defined_literal) ; [44:9 - 9]
(number_literal) ; [44:9 - 9]
(literal_suffix) ; [44:10 - 9]
right: (number_literal) ; [44:13 - 13]
(expression_statement) ; [45:9 - 14]
(assignment_expression) ; [45:9 - 13]
left: (user_defined_literal) ; [45:9 - 9]
(number_literal) ; [45:9 - 9]
(literal_suffix) ; [45:10 - 9]
right: (number_literal) ; [45:13 - 13]
(expression_statement) ; [46:9 - 14]
(assignment_expression) ; [46:9 - 13]
left: (user_defined_literal) ; [46:9 - 9]
(number_literal) ; [46:9 - 9]
(literal_suffix) ; [46:10 - 9]
right: (number_literal) ; [46:13 - 13]
(expression_statement) ; [47:9 - 14]
(assignment_expression) ; [47:9 - 13]
left: (user_defined_literal) ; [47:9 - 9]
(number_literal) ; [47:9 - 9]
(literal_suffix) ; [47:10 - 9]
right: (number_literal) ; [47:13 - 13]
(expression_statement) ; [48:9 - 14]
(assignment_expression) ; [48:9 - 13]
left: (user_defined_literal) ; [48:9 - 9]
(number_literal) ; [48:9 - 9]
(literal_suffix) ; [48:10 - 9]
right: (number_literal) ; [48:13 - 13]
(return_statement) ; [50:5 - 13]
(number_literal) ; [50:12 - 12]
from nvim-treesitter-context.
The queries for C (and thus C++ since it inherits the C queries and adds a few more) don't seem to contain anything catching else if
or else
, but this seems to be the case for most (all?) languages.
(I wrote a wrong solution before, see update.)
UPDATE: The above doesn't work as I expected. I have made a fork and tested a bit now. I think that replacing the if_statement
query with
(if_statement
consequence: (_) @context.end
) @context
(else_clause
(_) @context.end
) @context
behaves more like what I would expect. This caputures else if
and if
as I would expect:
from nvim-treesitter-context.
thanks Danielkonge. The behavior in your screenshot is just as what I expected.
from nvim-treesitter-context.
Note: If you want to always include {
if you ever put it on the next line instead of the end of the current line, then you need slightly more complicated queries.
(if_statement
consequence: (_ "{" (_) @context.end)
) @context
(else_clause
(_ "{" (_) @context.end)
) @context
or
(if_statement
consequence: (_ "{" @context.final)
) @context
(else_clause
(_ "{" @context.final)
) @context
seems to work fine for that.
With the formatting of my previous comment, these queries behave the same.
from nvim-treesitter-context.
Hi Danielkonge, I am wondering if you will pull your new context.scm code to pull request ?
Frankly speaking I am not that familiar with the syntax of scm file ...
from nvim-treesitter-context.
Hi Danielkonge, I am wondering if you will pull your new context.scm code to pull request ? Frankly speaking I am not that familiar with the syntax of scm file ...
I can make a pull request that includes the else
statements like in my pictures, but we should probably have some general consensus for what to include. Should the {
always be included here?
from nvim-treesitter-context.
Hi Danielkonge, I personally perfer the "Previous queries" in your comment, i.e., NOT to always include {
. Maybe we can even have an option to turn it on/off to "always in include the {
?
from nvim-treesitter-context.
Hi Danielkonge, I personally perfer the "Previous queries" in your comment, i.e., NOT to always include
{
. Maybe we can even have an option to turn it on/off to "always in include the{
?
To have an option like that is probably not worth it to try to implement and maintain just for c. Instead it would probably make more sense to allow use of custom queries, though I am not sure if that is already possible to do?
Also, I have made a pull request now.
from nvim-treesitter-context.
Instead it would probably make more sense to allow use of custom queries, though I am not sure if that is already possible to do?
That is already possible.
from nvim-treesitter-context.
You'd have to dig into the code and investigate.
from nvim-treesitter-context.
Else now appears to be shown.
from nvim-treesitter-context.
Related Issues (20)
- Unable to load context query for c_sharp HOT 6
- Crash on empty first line when number line is on (markdown) HOT 3
- No context causes negative height HOT 1
- I wish that pluggin work on popup window HOT 2
- Applying parsers to additional filetypes HOT 3
- Parenthesis not highlighted in context HOT 1
- C_sharp scm file broken again HOT 1
- Allow jumping to nearest context with go_to_context()
- #make-range! support HOT 2
- Regression: some other things are broken at startup with `syntax on` HOT 1
- Markdown headers aren't highlighted in the context window HOT 2
- OCaml support doesn't work HOT 2
- Hidden files accidentally added? HOT 1
- C++ multiline Lambda use as context - similar to if? HOT 1
- Language specific patterns are ignored HOT 1
- How to prevent trimming of the context as I scroll up? HOT 5
- Suggestion: Highlight Similarities to VSCode's Sticky Scroll and JetBrains' Sticky Lines in README
- Context doesn't work automatically, needs manual enabling HOT 9
- Filter blank and comment-only lines from context view HOT 2
- FR: show depth in signcolumn
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nvim-treesitter-context.