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

feat(c_sharp): add indent query #5344

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

vlada-dudr
Copy link

I have been using it for some months now and seems to mostly work ok.

Comment on lines +59 to +60
(if_statement (block "{" @indent.branch))
(if_statement alternative: (if_statement) @indent.dedent)
Copy link
Member

@lucario387 lucario387 Sep 2, 2023

Choose a reason for hiding this comment

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

The if_statement should be similar enough to C that I suggest you can use the C's indent queries version, with nodes modification (i.e. (compound_statement) -> (block))

Copy link
Author

Choose a reason for hiding this comment

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

I remember I was looking onto C's version, but I understood only like half of it, so i did this, which I undestand. I think there is subtle difference in tree for C and C#. I generally had hard time to debug the thing so I ended up with kind of first working solution.

Copy link
Member

@lucario387 lucario387 left a comment

Choose a reason for hiding this comment

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

Edit: Consider this obsolete.

@vlada-dudr
Copy link
Author

Can you point, how to run the tests? I could probably add some of them to make it easier to debug. I was looking into CONTRIBUTING but didn't see any pointer. And the script in scrips/run_test.sh expects presence of some non existing files...

@lucario387
Copy link
Member

lucario387 commented Sep 2, 2023

Can you point, how to run the tests

For this PR, you'll need to add example c_sharp files to tests/indent/c_sharp/, create that dir if it doesn't exist.

For running those file, you also need to create a tests/indent/c_sharp_spec.lua. You can use other *_spec.lua files in tests/indent as a reference point.

@vlada-dudr
Copy link
Author

That's the part which I understood, but I have no clue how to run the thing

@lucario387
Copy link
Member

oh, just be inside the git repo, and do a ./scripts/run_tests.sh indent/c_sharp_spec.lua and see the result

@clason
Copy link
Contributor

clason commented Sep 2, 2023

No, you also need to have plenary installed and in your standard runtimepath.

(I've said it before; I'll say it again: the test infrastructure is a pain point and needs to be streamlined.)

@vlada-dudr
Copy link
Author

Thanks @clason, that's the missing part - I expected that test machinery would grab it itself, if it needs it

(nullable_directive)
(pragma_directive)
(undef_directive)
] @indent.zero
Copy link
Member

@theHamsta theHamsta Sep 2, 2023

Choose a reason for hiding this comment

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

Can you add some tests? At least there should be some test files on how this is expected to work.

Copy link
Author

Choose a reason for hiding this comment

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

Yeah, I started writing something. But I probably don't get how it is supposed to work. I managed to start the test. I wrote some example files. But no matter what I put in those files, whole_file always passes. I'd expect it to fail when the file isn't indented in harmony with the query. newline fails sometimes, but obviously puts different indetation compared to == on such line. So, is it for testing opening new line and indentation triggers? Or just one of them?

@KiLLeRRaT
Copy link

I've been using this and my if blocks do some funny stuff.

Pipes added to make tabs visible.

Orig:

if (name == "john")
{
|  name = "sam";
}

Format using 3==. Adds a tab infront of { which it shouldn't.

if (name == "john")
|  {
|  name = "sam";
}

Same story with my try blocks, except it adds a tab infront of { and }
Orig:

try
{
|  name = "harry";
}

Becomes:

try
|  {
|  name = "harry";
|  }

Any ideas?

@vlada-dudr
Copy link
Author

Hm, that's wierd. It works for me. Don't you have so syntax error before this snippet?

I have to figure out how to create some reasonable tests. I will take me some time though.

@lucario387
Copy link
Member

I have to figure out how to create some reasonable tests

In most cases, just a normal C# file will suffice. Don't bloat it up. I think for this around 100-200 lines may be enough. Double that if you want to test for multiple cases (braces on newline/eol, else after }, else in newline, ...)

@vlada-dudr
Copy link
Author

Yeah, I want to do mostly some tricky cases. I was struggling to make the testing machine work - i'd expect the whole_file thing takes file, tries to reindent it and passes if nothing changed. Sadly I was unable to break it - it always passed.

@lucario387
Copy link
Member

lucario387 commented Sep 14, 2023

i'd expect the whole_file thing takes file, tries to reindent it and passes if nothing changed

That is what it does, and what it expects to be

Sadly I was unable to break it - it always passed.

Which should mean you've done a great job 🎉

@vlada-dudr
Copy link
Author

vlada-dudr commented Sep 14, 2023

Which should mean you've done a great job 🎉

I wish you are right :-D Well, first thing I did was to test the test - put something really off to see what i get back... And got success. So I went ahead and tried to break tests for other languages - always passed, so either it is broken, or my setup is wonky.

@lucario387
Copy link
Member

lucario387 commented Sep 14, 2023

You can publish the tests and let the CI/me test it as well.

@KiLLeRRaT
Copy link

Hm, that's wierd. It works for me. Don't you have so syntax error before this snippet?

I have to figure out how to create some reasonable tests. I will take me some time though.

No syntax errors here :)

@clason clason added the indent Issues or PRs about indentation queries or module label Feb 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
indent Issues or PRs about indentation queries or module
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants