This release looks like rainbow sherbert: everything that can be syntax highlighted is a different color in Default and Darcula scheme.
Thanks - Thanks to Alexey Poimtsev (@alec-c4 <https://github.com/alec-c4>), @swieckib <https://github.com/swieckib>, Jorg Heymans (@jorgheymans <https://github.com/jorgheymans>), Andrei Dziahel (@develop7 <https://github.com/develop7>), and Khaaliq DeJan (@MisterDeejay <https://github.com/MisterDeejay>) for reporting test cases for "Prefix operation does not have 2 children, but 1" - Thanks to @wliirl <https://github.com/wliirl>, @aCandidMind <https://github.com/aCandidMind>, Julius Beckmann (@h4cc <https://github.com/h4cc>), @developerworks <https://github.com/developerworks>, and Christoph Drießen (@cedriessen <https://github.com/cedriessen>) for reporting IntelliJ version-compatibility and build issues. - Thanks to Christoph Drießen (@cedriessen <https://github.com/cedriessen>) for pointing that all the weird loading bugs were related to ignatov/intellij-erlang#727 <https://github.com/ignatov/intellij-erlang/issues/727> and then Sergey Ignatov (@ignatov <https://github.com/ignatov>), Sergey Savenko (@deadok22 <https://github.com/deadok22>), and Nikolay Chashnikov (@chashnikov <https://github.com/chashnikov>) for helping from that issue. - Thanks to Evgen (@doctorx <https://github.com/doctorx>) for reporting that character tokens couldn't be type highlighted. - Thanks to Koziołek (@Koziolek <https://github.com/Koziolek>) and Povilas Skruibis (@povilas <https://github.com/povilas>) for reporting null argument togetDescriptiveName when trying to rename a variable. - Thanks to @wliirl <https://github.com/wliirl> for reporting a problem showing the Structure of parts of Ecto. - Thanks to Vlad Shcherbin (@VladShcherbin <https://github.com/VladShcherbin>) for encouraging me to implement additionalTextAttributes to improve the syntax highlighting - Thanks to Jorg Heymans (@jorgheymans <https://github.com/jorgheymans>) for trying to rename parameters, so that I knew there was user demand for the feature. Changelogv4.0.0 - Enhancements - #314 <https://github.com/KronicDeth/intellij-elixir/pull/314> - Call references for unqualified no argument calls that work as variables or parameters -@KronicDeth <https://github.com/KronicDeth> - Resolve and highlight parameter references - Resolve call definition clause (def(macro)?p?) parameters to themselves - Resolve call definition parameter with default to itself - Add Parameter ot Color Settings Page - Parameters in any macro with do block or keyword pair - Resolve and highlight variable references - Properly identifier variable declared in for comprehension as variable - Add Variable to Color Settings Page - Highlight bind quoted keyword key as Variable - Resolve references to earlier && operands, which handles code that matches a variable and only uses the variable on success like ((cwd = cwd()) && write_tmp_dir(cwd)) <https://github.com/elixir-lang/elixir/blob/ccf6d14e3ec2eb96090222dad6f395b5b9ab72ac/lib/elixir/lib/system.ex#L268> - Resolve variables from destructure - Detect bitstring segment options and don't treat them as variables. - Highlight bitstring segment type options as Type, the same highlight as used for@type names. - Don't generate (unresolved) references for bitstring segment options - Resolve _ to only itself, no matter how many are used to reflect that it is non-binding, while _<name> will resolve to _<name> as it does bind. - Add Ignored Variable to Color Settings Page - Reimplement module attribute renaming so that variable renaming can be implemented using a different validator for renaming (since module attribute names include the @). Non-inplace renaming should also be supported, but inplace is preferred. (There's a setting to turn off in-place renaming in JetBrains IDEs.) - operation.infix.Normalized - Normalizes leftOperand, operator, and rightOperand for an Infix operation that may have errors (in either operand). If there is an error in the operand then its normalized value is null. - Keyword key type descriptions - Default to "keyword key". - Detect bind_quoted: usage and call those "quote bound variable". - Add interfaces to unify matching of Matched and Unmatched form of operations when the code cares about the operator - And - UnaryNonNumericOperation - Add processDeclarations to support variable and parameter resolution usingPsiTreeUtil.treeWalkUp and PsiScopeProcessors - ElixirStabBody - StabOperations - Treat variables and parameters as NamedElements, so they can be Rename Refactored. - Move reused Module and Function names to org.elixir_lang.psi.name.{Module,Function} constants. - Parameter and Variable completion - #318 <https://github.com/KronicDeth/intellij-elixir/pull/318> - Highlight keyword keys (key: in key: value) that aren't quotes ("key": value or'key': value) as Atom. - @KronicDeth <https://github.com/KronicDeth> - #320 <https://github.com/KronicDeth/intellij-elixir/pull/320> - @KronicDeth <https://github.com/KronicDeth> - Show annotator applied highlights in the Preferences > Editor > Colors & Fonts > Elixir. - Errors - Alias - Braces and Operators - Bit (<< and >>) - Braces ({ and }) - Brackets ([ and ]) - Char Tokens (?) - Comma (,) - Dot (.) - Interpolation (#{ and }) - Maps and Structs - Maps (%{ and }) - Structs (%{ and } when used for struct. The Alias is still highlighted usingAlias) - Operation Sign - Parentheses (( and )) - Semicolon (;) - Calls - Function (currently only combined with Predefined to highlight Kernelfunctions. Will be used later for all function calls once function references are implemented.) - Macro (curently only combined with Predefined to highlight Kernel andKernel.SpecialForms macros. Will be used later for all macro calls once macro references are implemented.) - Predefined (Combined with Function to highlight Kernel functions. Combined with Macro to highlight Kernel and Kernel.SpecialForms macros.) - Escape Sequence - Module Attributes - Documentation (Previously Documentation Module Attributes) - Text (Previously Documentation Text) - Types - Callback (my_callback in @callback my_callback() :: :ok ormy_macro_callback in @macrocallback my_macro_callback) - Specification (my_function in @spec my_function() :: :ok ) - Type - typ and integer in @type typ :: integer - parameterized in @type parameterized(type_parameter) :: type_parameter - typtyp in @opaque typtyp :: 1..10 - typ and typtyp in @callback func(typ, typtyp) :: :ok | :fail - binary and utf8 in << "hello" :: binary, c :: utf8, x = 4 * 2 >> = "hello™1" - Type Parameters (type_parameter in @type parameterized(type_parameter) :: type_parameter) - Numbers - Binary, Decimal, Hexadecimal, and Octal Digits (Previously at top-level.) - Decimal Exponent, Mark and Separator (Previously at top-level) - Invalid Binary, Decimal, Hexadecimal, and Octal Digits (Previously at top-level.) - Non-Decimal Base Prefix (Previously at top-level.) - Obsolete Non-Decimal Base Prefix - Variables - Ignored - Parameter - Variable - Recover in expression until close of subexpression - \n - \r\n - >> - ] - } - ) - ; - -> - end - after - catch - else - rescue - Update Preferences > Editor > Colors & Fonts > Elixir example text's bitstring syntax to Elixir post-1.0.0 (Use - to separate segment options instead of a list.) - Use same algorithm for ElixirStabBody and ElixirFile because they are sequences of expressions. - Highlight atom keywords (false, nil, and true) as merge of Atom and Keyword text attributes. If both only use foreground color, Keyword wins. - Annotate QualifiableAlias as Alias. - Highlight keyword list and map keywords (<key>:) as Atom. - Add with to highlighted special forms - #322 <https://github.com/KronicDeth/intellij-elixir/pull/322> - Additional Text Attributes - @KronicDeth <https://github.com/KronicDeth> - Default text attributes for "Darcula" and "Default" themes: almost every Text Attribute Key has a unique hue for the Foreground color. - Explain how to add additionalTextAttributes to plugin.xml in CONTRIBUTING.md - Group Textual Text Attribute Keys Together: Next "Textual" group is created and "Character List", "Escape Sequence", "Sigil", and "String" are moved under the group. - Describe relations between different text attributes in COLOR_SCHEMA_DESIGN.xml, so they can be applied to different base schemes, such as applying the current Darcula additonalTextAttributes to Default. - Bug Fixes - #314 <https://github.com/KronicDeth/intellij-elixir/pull/314> - @KronicDeth <https://github.com/KronicDeth> - Don't generate module attribute references for control attributes: Module attributes that control compilation or are predefined by the standard library: @behaviour, @callback,@macrocallback, @doc, @moduledoc, @typedoc, @spec, @opaque, @type, and @typep, should not have references because their uses are unrelated. - Drop requirement that there are 2 children and only require there be 1 and assume that is the Operator. - Don't count @(...) as a module attribute usage: Module attribute declarations are defined as defmacro @(...) in Kernel and that @ should count as a function name, not a prefix for a module attribute name. - Allow null Module for Scratch File use scope - Default to "call" for Call type - Fix typo that had *Two operations using Type interface - Don't process AccessExpression declarations - #316 <https://github.com/KronicDeth/intellij-elixir/pull/316> - @KronicDeth <https://github.com/KronicDeth> - Highlight foo in @spec foo as a type, which occurs while typing a new @spec before ::can be typed. - Check if leftOperand is null even when checkLeft is true because checkLeft can betrue and leftOperand is null when the lastParent is the operand or operation as a whole, but there is an error in the unnormalized leftOperand leading to the normalizedleftOperand being null. - Check if reference is null before checking if it resolves to null when replacing module attribute usages with their value because AtNonNumericOperations can have a nullreference when they are non-referencing, like @spec. - #317 <https://github.com/KronicDeth/intellij-elixir/pull/317> - Leave normal highlighting for char tokens when highlighting types - @KronicDeth <https://github.com/KronicDeth> - #320 <https://github.com/KronicDeth/intellij-elixir/pull/320> - @KronicDeth <https://github.com/KronicDeth> - Stab operation parameter Use Scope is the stab operation. - Skip over PsiLeafElement when looking for variables because the PsiLeafElement is an error. - In a script file where the parent of a Match is a PsiFile, the Match Use Scope is the rest of the file. - Add = to Operator Signs - Skip NoParenthesesKeywords when highlighting types, which occurs when the :: has no proper right operand and the following one-liner function clause with do: is parsed as the right operand. - Skip DUMMY_BLOCK when looking for Variable, which prevents walking through errors. - Use Normalized pattern for Prefix, so that the operand is null when only the operator matches or the operand has errors. - Work-around Phoenix .ex templates that contain EEX: if <%= from EEX is detected, don't throw error when Modular can't be found. - Fix capitalization error in example text - #323 <https://github.com/KronicDeth/intellij-elixir/pull/323> - Build jps-builder using only Java 1.6 compatible .classes - @KronicDeth <https://github.com/KronicDeth> - In IntelliJ 14.1, all of openapi.jar targets Java 1.6 (with MAJOR.MINOR 50.0), but in IntelliJ 2016.1, some of openapi.jar targets only Java 1.8 (with MAJOR.MINOR 52.0), since jps-builders require parts of openapi.jar and must target Java 1.6 even for IntelliJ 2016.1, the 52.0 .classes needed to be ported into org.elixir_lang.jps.builder, so that the52.0 version in openapi.jar wouldn't be attempted to be loaded. This ended up being 5 classes: - ExecutionException - GeneralCommandLine - ParametersList - ParamsGroup - ProcessNotCreatedException Only GeneralCommandLine was used directly, all others are dependencies of it. - Incompatible Changes - #320 <https://github.com/KronicDeth/intellij-elixir/pull/320> - @KronicDeth <https://github.com/KronicDeth> - Preferences > Editor > Colors & Fonts > Elixir restructured to group together related highlights and to match grouping used for Colors & Fonts > Language Defaults and Colors & Fonts > Java. - Documentation Module Attributes renamed to Module Attributes > Documentation - Documentation Text renamed to Module Attributes > Documentation > Text - Expression Substitution Mark renamed to Braces and Operators > Interpolation. - The following are now nested under Numbers instead of being at the top-level: - Binary, Decimal, Hexadecimal, and Octal Digits - Decimal Exponent, Mark and Separator - Invalid Binary, Decimal, Hexadecimal, and Octal Digits - Non-Decimal Base Prefix - Obsolete Non-Decimal Base Prefix - #322 <https://github.com/KronicDeth/intellij-elixir/pull/322> - "Character List", "Escape Sequence", "Sigil", and "String" are moved under the new "Textual" group. - @KronicDeth <https://github.com/KronicDeth> - #324 <https://github.com/KronicDeth/intellij-elixir/pull/324> - Group Numbers subcategories and lower display name verbosity - @KronicDeth <https://github.com/KronicDeth> - "Numbers > Binary, Decimal, Hexadecimal, and Octal Digits" renamed to "Numbers > Digits > Valid" - "Numbers > Invalid Binary, Decimal, Hexadecimal, and Octal Digits" renamed to "Numbers > Digits > Invalid" - "Numbers > Non-Decimal Base Prefix" renamed to "Numbers > Base Prefix > Non-Decimal" - "Numbers > Obsolete Non-Decimal Base" renamed to "Numbers > Base Prefix > Obsolete > Non-Decimal" README UpdatesCompletionModule Attributes Module attributes declared earlier in the file can be completed whenever you type @ and some letter. If you want to see all module attributes, you can type @a, wait for the completions to appear, then delete the @ to remove the filtering to a. Parameters and Variables Parameter and variable usages can be completed whenever typing an identifier. The completions will include all variables know up from that part of the file. It can include variables from outside macros, like quote blocks. Go To Declaration Go To Declaration is a feature of JetBrains IDEs that allows you to jump from the usage of a symbol, such as a Module Alias, to its declaration, such as the defmodule call. Parameters and Variables 1. Place the cursor over a parameter or variable usage 2. Active the Go To Declaration action with one of the following: a. Cmd+B b. Select Navigate > Declaration from the menu. c. Cmd+Click If you hold Cmd and hover over the variable before clicking, it will say parameter or variable, which matches the annotation color. Find Usage Find Usage is a feature of JetBrains IDEs that allows you to find all the places a declared symbol, such a Module Alias in a defmodule, is used, including in strings and comments. Parameters and Variables 1. Place cursor over the parameter or variable declaration. 2. Active the Find Usage action with one of the following: a. i. Right-click the Alias ii. Select "Find Usages" from the context menu b. Select Edit > Find > Find Usages from the menu c. Alt+F7 RefactorRenameParameters and Variables 1. Place the cursor over the parameter or variable usage or declaration 2. Active the Rename Refactoring action with one of the following: a. i. Right-click the module attribute ii. Select Refactoring from the context menu iii. Select "Rename..." from the Refactoring submenu b. Shift+F6 3. Edit the name inline and have the declaration and usages update. *Installation* - From Github 1. Go to https://github.com/KronicDeth/intellij-elixir/releases/tag/v4.0.0 2. Download intellij-elixir.zip 3. Open your JetBrains IDE of choice (Rubymine, IntelliJ IDEA, etc) 4. Preferences > Plugins 5. Click Install plugin from disk 6. Select intellij-elixir.zip 7. Restart your IDE - From Plugin browser in Jetbrains IDE - Open your JetBrains IDE of choice (Rubymine, IntelliJ IDEA, etc) - Preferences > Plugins - Click Browse Repositories - Type Elixir in the search - Install the plugin - Restart your IDE -- You received this message because you are subscribed to the Google Groups "elixir-lang-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-talk/209f0491-b091-418d-b86c-8351c641ac83%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
