Open-source Deep Dive: Hound A hook for handling very large lists with Phoenix Live View

IntelliJ Elixir v11.9.1

Changelog

v11.9.1

Bug Fixes

  • Fix syntax highlighting stopping due to decompiling of Kernel failing caused by bugs introduced in #1834. Syntax highlighting could fail part way through a file when Kernel needed to be decompiled to resolve parts of the syntax. This would lead to the file to be colored above a certain point, but then the default gray after that point.

    • Connect compiled stubs to decompiled source by name/arity. Previously, when the decompiler didn’t use the Docs, it was guaranteed that the PsiCompiled stubs would correlate, in-order, with the decompiled source call definitions, and so mirrors could be set by matching up the list of them in order. Since the Docs doesn’t have to correspond to and doesn’t correspond to the binary precisely for some BEAMs, most importantly, Elixir.Kernel.beam, the PsiCompiled stub and decompiled source is now matched by name and arity. This means some mirrors are missed, but no errors are produced.
    • Allow decompile source to map to entire arity range Since the decompile source from Docs can have default arguments the call definition clauses can have an arity range and not just a fixed arity, so all arities in the range need to be mappable to PsiCompiled functions.
    • Use correct macro for signature from Docs. Ensures that defmacro is used for macros instead of hard-coding def as in #1834.
    • Use ~S””” for docs from Docs chunk. The docs from the Docs chunk may contain interpolation in the code samples or #{ in regex examples, but these should not be treated as an interpolation start as the Docs format does not support interpolation. Anything that looks like interpolation in the docs text was actually escaped in the original docs, so also escape it here by using S”””, which turns off interpolation.
    • Log an error if Code function can’t be matched to decompiled source. Unlike the old InvalidMirrorException, this won’t be an exception and the binary <-> decompile will still work for the other functions/macros in the file, so it will be a more graceful degradation.
  • Fix missed references to DepsWatcher as project component DepsWatcher was converted to a Project Listener in #1844 to support installing the plugin from the Marketplace without reloading, but some references to DepsWatcher were still trying to get its instance for project using project.getComponent(), which would now return null.

  • Target Java 1.8 for JPS compatibility. JPS (JetBrains Project System) is the API used to allow External Builders, like mix to build projects.

  • Fix matching unquote(ATOM) call definitions to compiled function by using the argument tounquote when calculating the name of the call definition clause if possible. Needed to match anonymous function names that are unquoted because they contain / to separate the outer function name from the anonymous function naming convention.

  • Don’t use Docs signature for MacroNameArity that is an operator or unquoted The signatures for operators and unquoted don’t produce valid code that can be parsed.

  • Don’t use signatures for __struct__ functions. The signatures for the __struct__ functions are like %Module{}, but that’s not parseable, so bypass the signatures with a specialized SignatureOverride decompiler that matches the actual code in defstruct.

  • Don’t indent empty lines from Docs for @moduledoc and @doc to match the formatter output.

  • Fix capitalization of Docs @moduledoc @moduleDoc -> @moduledoc

Installation Instructions