Skip to content

feat: add support for getLocFromIndex and getIndexFromLoc #212

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

Draft
wants to merge 25 commits into
base: main
Choose a base branch
from

Conversation

lumirlumir
Copy link
Member

@lumirlumir lumirlumir commented May 24, 2025

Prerequisites checklist

What is the purpose of this pull request?

Hello,

In this PR, I've completed implemention of getLocFromIndex() and getIndexFromLoc().

I based the implementation on the current JavaScript SourceCode class and incorporated the fast lookup algorithm discussed in eslint/eslint#19782.

The logic of getLocFromIndex() and getIndexFromLoc() is nearly identical to that in the JavaScript SourceCode class, with the key difference being that it accounts for the lineStart and columnStart values initialized in the constructor.


lineStart and columnStart

TextSourceCodeBase should accept lineStart and columnStart, as these can vary depending on the language, and both getLocFromIndex() and getIndexFromLoc() rely on them for accurate calculations. Here are some examples:

What changes did you make? (Give an overview)

I've completed implemention of getLocFromIndex() and getIndexFromLoc().

Related Issues

fixes: #166
refs: eslint/markdown#376, eslint/css#167, eslint/json#109, eslint/eslint#19782

Is there anything you'd like reviewers to focus on?

Prerequisites

@nzakas nzakas moved this from Needs Triage to Implementing in Triage Jun 5, 2025
this.#columnStart = columnStart;

let match;
while ((match = lineEndingPattern.exec(text))) {
Copy link
Member

Choose a reason for hiding this comment

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

I think we should do this lazily. It doesn't make sense to go through this process until we know someone needs this information.

Copy link
Member

@nzakas nzakas left a comment

Choose a reason for hiding this comment

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

Thanks for taking a look at this. I left some comments throughout.

Overall, I'd like to think more about how to lazily generate the data needed. For instance, if someone calls getLocFromIndex(5), we should only generate the line endings up to index 5. If someone then calls getLocFromIndex(22), we can go on to generate line endings up to index 22.

That way, we're saving calculations until we really need them.

@lumirlumir lumirlumir marked this pull request as draft June 12, 2025 05:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Implementing
Development

Successfully merging this pull request may close these issues.

Change Request: Support getLocFromIndex() and getIndexFromLoc() methods for TextSourceCodeBase class
2 participants