JavaScriptPrettier icon indicating copy to clipboard operation
JavaScriptPrettier copied to clipboard

Only update lines that have changed

Open neoGeneva opened this issue 6 years ago • 6 comments

At the moment if there's a single change made by prettier in a file then the whole files text is replaced, that means every line is shown as changed in VS, and for large files the syntax highlighting takes a little while to re-parse the file which can be a little jarring.

It'd be better if only the changed lines were updated, if possible.

neoGeneva avatar Jan 27 '19 22:01 neoGeneva

That would be a really difficult optimization to make. Prettier doesn't give the information we would need to do this, so we'd have to format with prettier, then diff the current contents with that (using some other diff tool) to figure out what lines changed and then swap out those lines.

I like the idea. Sounds like it would be painful to implement

On Sun, Jan 27, 2019, 5:21 PM Philip Cox <[email protected] wrote:

At the moment if there's a single change made by prettier in a file then the whole files text is replaced, that means every line is shown as changed in VS, and for large files the syntax highlighting takes a little while to re-parse the file which can be a little jarring.

It'd be better if only the changed lines were updated, if possible.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/madskristensen/JavaScriptPrettier/issues/26, or mute the thread https://github.com/notifications/unsubscribe-auth/AA77xaqXijlAzlT2Nt-kHmK06XVxIX_cks5vHiZmgaJpZM4aU-TV .

tommck avatar Jan 27 '19 22:01 tommck

Well there's certainly plenty of diffing libraries in NuGet, though it might be a bit of work figuring out which one performs the best, and produces the best results. There's lots on NPM as well, it might turn out it's easier to do the diff on the Node side of things.

I am unsure of how you'd apply the changes back into the VS text editor, I'm no very familiar with it, but I'm assuming there's a cursor you can use to use to select and delete / change code.

Though maybe I'm oversimplifying the problem, I might give fork this repo and see what happens.

neoGeneva avatar Jan 27 '19 23:01 neoGeneva

So here's a quick proof on concept, I haven't tested it with many edge cases (single line files or whatever), and I just picked the first NuGet package without any weird dependencies, and I'm guessing doing a bunch of TextBuffer.CreateEdit() / Apply() isn't super efficient.

But I don't think it'd take much to finish it up if others think there's value in it.

https://github.com/neoGeneva/JavaScriptPrettier/commit/df890855302f7e49c170bbb44e4e2eb3fd2b91e0

neoGeneva avatar Jan 28 '19 02:01 neoGeneva

I don't know those editor apis, but they might still work fine. No idea.

On Sun, Jan 27, 2019, 9:45 PM Philip Cox <[email protected] wrote:

So here's a quick proof on concept, I haven't tested it with many edge cases (single line files or whatever), and I just picked the first NuGet package without any weird dependencies, and I'm guessing doing a bunch of TextBuffer.CreateEdit() / Apply() isn't super efficient.

But I don't think it'd take much to finish it up if others think there's value in it.

neoGeneva@df89085 https://github.com/neoGeneva/JavaScriptPrettier/commit/df890855302f7e49c170bbb44e4e2eb3fd2b91e0

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/madskristensen/JavaScriptPrettier/issues/26#issuecomment-457983150, or mute the thread https://github.com/notifications/unsubscribe-auth/AA77xQtCz6lrU1aCRvFaxOsyh1QIWscSks5vHmRkgaJpZM4aU-TV .

tommck avatar Jan 28 '19 12:01 tommck

@madskristensen would you be cool adding reference to a 3rd party library like in @neoGeneva's code referenced above?

tommck avatar Jun 10 '19 14:06 tommck

Okay, I know bumps aren't kosher, but it's been a year, so @madskristensen whaddya think?

ruffin-- avatar Aug 27 '20 19:08 ruffin--