Elixir Wizards S5E11 Yair Flicker on SmartLogic’s Origin, Evolution, and Elixir Adoption Process Elixir Wizards Livestream: Brewing a Love Potion 2/12

IntellIJ Elixir v11.10.0

Changelog

Enhancements

  • Simplify onlyTemplateDateFileType
  • Add missing opcodes to Code disassembler
    • OTP 23 opcode bs_start_match4
    • Current (in-development) OTP 24 opcodes
      • make_fun3
      • init_yregs
      • recv_marker_bind
      • recv_marker_clear
      • recv_marker_clear
      • recv_marker_user
  • Log PsiElement if Call#finalArguments contain a null.
  • Suggest ASDF directories as homepaths for both Elixir and Erlang for Elixir SDKs.
  • Run ‘Dialyzer based inspections (Elixir)’ using Elixir SDK running mix dialyzer or any customized mix command.

Bug Fixes

  • Use VirtualFile#fileType instead of EEx Type::INSTANCE when looking up extensions. Since LEEx file Type is a subclass of EEx’s file Type, it calls templateDataFileTypeSet in EEx’s Type, but templateDataFileTypeSet uses INSTANCE from EEx. By using the VirtualFile#fileType instead, it will properly be EEx or LEEx based on the actual file extension and then it can be used to strip that off and find the DataTemplateLanguage, such as HTMLLanguage for .html.leex.
  • Compare max opcode in to file to max opcode number, not ordinal. Opcodes are 1-based, but the ordinal of the Kotlin Enums are 0-based, so the comparison was off-by-1 when a file had the max opcode and would be incorrectly marked as too new.
  • Don’t return null left or right infix operands in primaryArguments operation.infix.Normalized.leftOperand and .rightOperand ensures that PsiErrorElement is not returned: they can return null when there is no left or right operand. Infix.primaryArguments was not taking this into account and so could return a null as one of the primaryArguments, which broke Call.finalArguments.
  • Don’t attempt to execute elixir -e “System.version |> IO.puts” to get the version number as it requires too much of a full SDK to be built and from the Erlang paths to be correct too, which was rarely the case for ASDF. Since for Homebrew and ASDF, the directory name is the version name, this shouldn’t be a loss in naming ability. If the directory name is not a parseable version it will be of the format Elixir at <path>. This is probably more correct for installs directories that aren’t versioned as SDK versions aren’t updated if the version installed at the path changes, such as /usr/local/elixir or /opt/elixir, etc.

Installation Instructions