IntelliJ Elixir - Elixir plugin for JetBrain's IntelliJ Platform

Version 11.12.0

:heart: Sponsor
Historical One-time/Monthly Donations:

Stat Amount
Minimum $1.00
Median $6.25
Mean $12.52
Maximum $200.00

Thanks

Changelog

v11.12.0

Bug Fixes

  • #1988 - @KronicDeth
    • Only descend into modular children of modular for Module scope. Prevents recursion loops on use calls.
    • Don’t search for unquoted variable value variable is value for do:.
    • Protect from IndexNotReady in resolver.Module.multiResolveProject.
    • Stop walking unquoted variable that resolves to a parameter.
    • Walk case in __using__ to find quote in any clause. Fixes resolving test macro from use PowerAssert
    • Resolve functions declared in quote’s scope when block injected with unquote(block).
      Fixes resolving field, timestamps, and index in schema for use Yacto.Schema as it makes the block see the import Yacto.Schema above unquote(block) in the quote in schema(..., do: block).
  • #1990 - @KronicDeth
    • Convert MissingSDK errors for Dialyzer into Notifications.
  • #1993 - @KronicDeth
    • Log element in psi.scope.Type instead of using TODO()
      Error will still be reported, but there will be enough information to triage and since true is returned now it won’t stop the type resolving from working.
  • #1994 - @KronicDeth
    • Add missing mix deps options to non-path influencing list:
      • env
      • manager
      • repo
      • sparse
      • submodules
      • system_env
  • #1995 - @hurricup]
    • Fix incorrect OuterElementType in eex.lexer.TemplateData.
      The EEX IElementType needs to use OuterLanguageElementType instead of the direct eex.psi.TokenType.
  • #1996 - @KronicDeth
    • Run QualifiedAlias#text in runReadAction for QualifiedAlias#name
  • #1997 - @KronicDeth
    • Return null Chunk instead of throwing IOException when read incomplete.
      Incomplete reads happen often due to incomplete writes to the file system being read in. As such, they shouldn’t generate error reports and instead should be silently ignored.
  • #1999 - @KronicDeth
    • Implement beam.FileEditor#getFile to fix DeprecatedMethodException as the default implementation is now deprecated and requires an explicit implementation.
    • Use TabbedPaneWrapper.AsJBTabs instead of JBTabbedPane for “BEAM Chunks” tabs.
      I’m not sure why JBTabbedPane stopped showing its labels sometime in the 2020.X IDE version series, but by debugging when “BEAM Chunks” name was retrieved I found that the bottom tabs used TabbedPaneWrapper.asJBTabs. Using that, the labels reappeared.
  • #2000 - @KronicDeth
    • Don’t require Alias qualifier to be a PsiNamedElement.
      It can be an ElixirAtom and getting the reference will still work.
  • #2001 - @KronicDeth
    • Any.isDecompiled for CallDefinitionHead.

Enhancements

  • #1988 - @KronicDeth
    • Find Deps in function calls in the deps() list.

    • Dep.putPath from a variable.

    • Treat Memoize defmemo as def and defmemop as defp.

    • Resolve exception/1 and message/1 to defexception.

    • Resolve to callbacks when searching in any module.

    • Support arity intervals for unquote_splicing in parameters

      Functions defined with unquote_splicing, such as Ecto.Schema.__schema/2:

      for clauses <- Ecto.Schema.__schema__(fields, field_sources, assocs, embeds),
          {args, body} <- clauses do
        def __schema__(unquote_splicing(args)), do: unquote(body)
      end
      

      Need to have their arity not be the number of PsiElements in the parentheses. Any call to unquote_splicing(...) can end up have 0 to infinite parameters, so it means when one is saw, the range of minimum...maximum should change to an open interval of minimum.... This required changing IntRange resolvedFinalArityChange() to ArityInterval resolvedFinalArityInterval() on all Calls, which was a large change. It also meant changing a lot of ArityRange types to ArityInterval, and NameArityRange to NameArityInterval, which influenced the variable names.

      Since all Calls support ArityIntervals now and not just special forms and Ecto DSLs, exportArity is changed to always state the ResolveState, so that the special form changes can be integrated for all callers.

      The actual implementation of CallImpl.resolvedFinalArityRange is changes to fold over the ArityInterval:

      • Normal arguments increase the minimum and maximum.
      • Default arguments increase only the maximum.
      • unquote_splicing changes the maximum to null to indicate the interval is half open.

Installation Instructions

7 Likes