Ask HN: Looking for a tool

4 points by szatkus 7 years ago

I'm not even sure what to type in Google.

Let's say I have a commit. I want a tool which analyzes codebase and show all places in code which could be affected by this commit. For example if I change a function X the tool will show all places which depends on a result of the function.

I guess that in Java it could be doable because of its strict nature. Is there anything like this? Or it's an idea for a side-project?

gvisoc 7 years ago

That particular sub-area of static analysis is called (change) impact analysis. If you google that you'll find several tools, but many of those results are a couple of years old, or framework-specific. Take a look and good luck.

remyp 7 years ago

Good test coverage goes a long way towards solving this problem.

BjoernKW 7 years ago

It's called static analysis, which given JavaScript's dynamic nature obviously doesn't work as well as with statically-typed languages like Java. However, IntelliJ IDEA or WebStorm offer decent analysis tools for JavaScript as well. In IntelliJ IDEA "Find usages" is the name of the feature you're looking for.

  • szatkus 7 years ago

    I don't have IntelliJ right now, but as far as I remember this function shows only line where selected method is called. I meant something more sophisticated, every piece fo code that could be affected by this.

    Example:

        int x = obj.something();
        unrelated.doSomethingElse();
        return x * x;
    
    If I change something() method IntelliJ will show only the first line, even though the third one is affected by the change as well.
    • BjoernKW 7 years ago

      I see. Like a trace of properties affected by a change. That's definitely possible using static analysis during a pre-commit hook.

      You're right IntelliJ IDEA doesn't provide that feature out-of-the-box. SonarLint does something like this but only for specific patterns (or rather anti-patterns). I don't know about a general purpose tool that does this though.

  • meric 7 years ago

    It's theoretically possible in JavaScript I think - you can trace the usage of the function return through variable assignment statements, insertions into arrays, etc. Not easy but not impossible?

paradite 7 years ago

You can definitely write a tool to do it for JavaScript.

Sublime text has something similar that gives you the usages of a function when you hover over its name. Its not as 100 percent accurate as strict static code analysis, but it works pretty well for function names that are not duplicated everywhere.

stephenr 7 years ago

What language is your project? Jetbrains IDEs have static analysis based "find usage" for dynamic languages like php.

rawland 7 years ago

  grep -inr 'X'
Can be expanded via regex, awk, etc...
  • tehlike 7 years ago

    No. What if its a nested call?