

Ask HN: "Smart" VCS with a built-in interpreter? - mofey

Has there ever been developed a VCS that tracks changes on a semantic level? For example, if you change a variable name, then a "smart VCS" doesn't treat it as character updates, but rather as refactoring of a field.
======
nostrademons
I've heard that Darcs had a plugin that did this, but it was hella slow (like
much of the rest of Darcs).

It's generally a very hard problem to go from a series of character updates
back to a semantic update. A lot of people say "Well, just parse the source
code before check-in, diff the parse trees, and store the parsed
representation." The problem is that a lot of information is discarded when
you go from flat text to parse trees. Comments, whitespace, linebreaks, code-
formatting, etc. What happens if you rename a variable, this makes the line
grow longer than 80 characters, and that forces you to add a linebreak and
reindent the lines following it? That's trivial for a human to do, fairly hard
for an automated refactoring tool (trust me on this ;-)), and nearly
impossible to reverse in a manner that preserves the original formatting
intent.

~~~
mofey
I use indentation provided by IntelliJ and it has always helped me indent _my_
code.

------
burgerbrain
What sort of enhanced user experience do you see this providing? Automated
change summaries?

~~~
mofey
\- More meaningful information about a particular commit.

\- Robustness of versioning. Certain types of errors will become extinct. For
example, refactoring will update a variable in all 10 places instead of 9/10.

\- VCS can take on tasks of an integration server. The VCS now will be able to
make sure that your project "compiles" before accepting a commit.

The real motivation behind this would be to make branch management easier,
since the VCS has now more information.

