Skip to content

Contiguous scope#2101

Closed
AndreasArvidsson wants to merge 41 commits intomainfrom
contiguous_scope
Closed

Contiguous scope#2101
AndreasArvidsson wants to merge 41 commits intomainfrom
contiguous_scope

Conversation

@AndreasArvidsson
Copy link
Member

@AndreasArvidsson AndreasArvidsson commented Dec 6, 2023

Fixes #1835

Now implemented as a modifier of the comment scope

I decided to implement this as a scope type instead of a modifier. Now you can say things like chuck fat comment or changed next fat alpha. This behavior of having alternatives to existing scopes is already something we started with BoundedNonWhitespaceSequenceStage albeit in a less capacity.

Checklist

  • I have added tests
  • [-] I have updated the docs and cheatsheet
  • I have not broken the cheatsheet

Copy link
Member

@pokey pokey left a comment

Choose a reason for hiding this comment

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

seems like a good implementation approach. left some comments. also, please add some tests with "next" / "previous", and be sure to test boundaries on edges of scopes and between constituent scopes

AndreasArvidsson and others added 11 commits December 6, 2023 16:21
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
…andlers/ContiguousScopeHandler.ts

Co-authored-by: Pokey Rule <755842+pokey@users.noreply.github.com>
@AndreasArvidsson
Copy link
Member Author

AndreasArvidsson commented Dec 14, 2023

@pokey @josharian The current implementation now only effects the command scope type and there is no spoken form for it.

return true;
}

const [startTarget, endTarget] = getTargetsInDocumentOrder(
Copy link
Member Author

Choose a reason for hiding this comment

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

This file is now general enough to be used with most scopes. If we wanted to we could remove a bunch of code here and rely on the fact that we only use it for comments. I could go either way.

@pokey
Copy link
Member

pokey commented Dec 14, 2023

Won't this cause adjacent multiline comments to be merged as well? eg

/*
 * foo
 */
/*
 * bar
 */

Looking at this, it feels like not a particularly big deal 😅. But figured I'd point it out as I don't think it quite matches what we discussed

@AndreasArvidsson
Copy link
Member Author

Yes unless we make this more comment specific and check for single line ranges. Ideally we would have single and multi-line as separate scopes and only use this for single line.

Or add a new predicate for contiguous scope. That is probably the best solution?

@pokey
Copy link
Member

pokey commented Dec 14, 2023

hmm so the predicate would just set a flag on the capture. I think that sounds reasonable?

@AndreasArvidsson
Copy link
Member Author

Yes exactly.

@AndreasArvidsson
Copy link
Member Author

AndreasArvidsson commented Dec 15, 2023

There is no problem really with this implementation except for the fact that in javascript there is no Tree sitter difference between block and line comments. I guess that contiguous predicate could take a boolean that requires single line ranges? Or a regex pattern?

edit: Solved with a regex pattern

Copy link
Member

@pokey pokey left a comment

Choose a reason for hiding this comment

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

left a few comments

Comment on lines +154 to +165

/**
* Returns true if the given scope type should use a contiguous scope handler.
*/
function useContiguousScopeHandler(scopeType: ScopeType): boolean {
switch (scopeType.type) {
case "comment":
return true;
default:
return false;
}
}
Copy link
Member

Choose a reason for hiding this comment

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

I thought you were using a query predicate for this now

Copy link
Member Author

Choose a reason for hiding this comment

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

We use both. I don't know how to check it at this stage. When we actually fetch the matched scope it's to late to inject this handler. Not without a lot of rewrites at least.

Copy link
Member

Choose a reason for hiding this comment

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

Sorry I'm not following how you would use both. When do you use one vs the other?

Copy link
Member Author

@AndreasArvidsson AndreasArvidsson Dec 15, 2023

Choose a reason for hiding this comment

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

This code decides to use the handler. Then the scope.contiguous is used to determine when to merge two scopes. That way we can ignore block comments.

@AndreasArvidsson AndreasArvidsson added the to discuss Plan to discuss at meet-up label Dec 15, 2023
@pokey pokey removed the to discuss Plan to discuss at meet-up label Jan 4, 2024
@AndreasArvidsson AndreasArvidsson requested a review from pokey June 14, 2024 15:35
@AndreasArvidsson AndreasArvidsson marked this pull request as draft August 1, 2024 22:30
@AndreasArvidsson AndreasArvidsson marked this pull request as ready for review April 14, 2025 12:16
@AndreasArvidsson AndreasArvidsson requested a review from a team as a code owner April 14, 2025 12:16
@AndreasArvidsson AndreasArvidsson marked this pull request as draft April 14, 2025 12:17
@AndreasArvidsson AndreasArvidsson deleted the contiguous_scope branch March 8, 2026 04:23
@AndreasArvidsson AndreasArvidsson restored the contiguous_scope branch March 8, 2026 04:23
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.

Add contiguous scope modifier

3 participants