IntelliJ Elixir 12.2.0
Changelog
v12.2.0
Enhancements
-
Test against support IDEA versions in CI to prevent another Find Usage regression
- 2021.2.3 FindUsageTests differ from manual testings, so don’t test 2021.2.3
- Make FindUsagesTest UsageViewTreeText work for both 2021.1.3 and other versions
- Add kernel.ex to all Find Usage Tests to ensure it doesn’t work because it can’t resolve primary element
- Add find usages for def test
Bug Fixes
-
Work-around Find Usage bug due to temporary change in JetBrains API only in versions that have that change.
- Restore old find_usages.handler.Call
-
Determine whether to resolve
FindUsageHandlerprimary element based on application build number Assume that are 213.* builds have the already resolved call. This excludes 2021.3, but not 2021.3.1, which includes the fix to restore the 2021.1.3 behaviour.
-
Fix HTML errors in
description.html. - Add card one-liner.
[Installation Instructions](https://github.com/KronicDeth/intellij-elixir/blob/v12.2.0/README.md#installation
[Elixir Wizards S7E9] Brooklyn Zelenka and The Exciting World of Edge Computing
The latest episode of Elixir Wizards is out today!
Brooklyn Zelenka, co-founder and CTO at Fission, joins us in this high level conversation about edge computing, tech equity, anti-entropy, witchcraft, and the Elixir language. https://smartlogic.io/podcast/elixir-wizards/s7e9-zelenka
[blog] My experience learning Elixir as a JavaScript developer
Not many junior devs get into Elixir but I decided to learn it just 6 months after graduating a bootcamp while building my first real project, Work Happy. No regrets.
I’ve loved it and have learned so much but not without a lot of struggles. I’ve written about my experience learning Elixir as a JavaScript developer: https://medium.com/@zahradeenie/building-work-happy-learning-elixir-part-one-f3abbfbbaea9
Build Interactive Phoenix LiveView UIs with Components
Learn how to make use of functional components to create complex Phoenix LiveView UIs.
https://blog.appsignal.com/2022/01/11/build-interactive-phoenix-liveview-uis-with-components.html
[Blog] Phoenix File Uploading via Javascript
Uploading files with Phoenix and Javascript? Stephanie Vizzi has created a step-by-step reference to guide you through the process: https://smartlogic.io/blog/phoenix-file-upload-via-javascript/
S3 Storage Provider for Elasticlunr (Elixir)
I just published an S3 storage provider for Elasticlunr. You can now store your indexes to an S3 bucket aside the Disk storage provider included in the base project.
The storage API is flexible, so writing to any storage provider (Google Cloud Storage, DB and so on) shouldn’t be a problem. it’s just a matter of grabbing the right provider or implementing one yourself.
ThinkingElixir 081: Elixir in a Burrito with Quinn and Digit
In episode 81 of Thinking Elixir, we talk with Digit and Quinn Wilton about the Burrito project. It wraps up Elixir to a single binary, enables cross-platform builds using Zig to help while also enabling NIFs! They share how the security focused software they create uses this to run in isolated environments where Elixir can’t be installed. A really cool project that can be used for things like one-off scripts to long running CLI applications with full OTP features and more. They share some of the challenges they had to overcome in creating Burrito and how it being OpenSource helps the company and their project.
Elasticlunr Query DSL
Like every other search engine, you can make more advanced search queries depending on your requirements. In the remaining part of this post, I will be highlighting the available query types provided by Elasticlunr.
Read more: https://atandarash.me/blog/elasticlunr-query-dsl
Note: This is a continuation of the introductory post
IntelliJ Elixir 12.1.0
Changelog
v12.1.0
Enhancements
- Add MacPorts SDK locations to README.
-
Add support for
**operator to lexer and parser. - Color settings for each sigil name. Both the interpolating (lower case) and literal (upper case) name use the same settings.
- Add support for stepped ranges
Bug Fixes
-
Decompile
{:|, …, …}as cons operator in Elixir Dbgi. -
Fix missing guards when decompiling Elixr DbgI clauses using special decompiler
Guards where missing because only
decompiler.appendSignaturewas used. -
Fix module.Reference.calculateDefaultRangeInElement
element.textOffsetinstead ofelement.textLengthwas used for end of range. -
Render
OtpErlangExternalFuncorrectly as remote captures (&Mod.fun/arity). Fixes decompilingEcto.Changeset.validate_number. -
Protect ExUnit configuration
ProducerfromElixirFilewithoutVirtualFile. -
Unquote.treeWalkUpno longer assumes that the final argument tounquoteis aCall. -
Fix Find Usages for call definitions
-
Don’t resolve primary Find Usages element.
The primary element passed to
FindUsageHandleris now already resolved, so resolving it again for call definitions finds usages ofdef,defmacro, etc. -
Since the element passed to
FindUsagesProvider#canFindUsageFor, definers can no longer be excluded, so remove that check.
-
Don’t resolve primary Find Usages element.
The primary element passed to
-
Don’t highlight
QuoteorSigilas normal text if part of documentation. Since the annotators will run in arbitrary order, theTextualannotator has to avoid annotating the same nodes as theModuleAttributeannotator or the colors can get interleaved. -
Put
ENTRANCEand Initial Visited Element in__module__.Resolver. - Keep searching when resolving type parameters if bitstring is encountered.
-
Fix
UnaliasedName.unaliasedNamefor atoms. -
Restore
ElixirAtom#getNameLost when parser was regenerated when Elixir <= 1.6 support was dropped in 679a9689cfe097018b9baa4e894d4550a84d7aac.
Meaningful config keys in Elixir projects
A quick reminder that using a meaningful key (eg. a module name instead of an arbitrary atom) to store configuration in Elixir is quite simple and often leads to more maintainable code.
https://craft.mirego.com/2022-01-06-meaningful-config-keys-in-elixir-projects
Passing Unknown Attributes into Your Component
On your LiveView page, you are using a custom component. You want to be able to pass HTML attributes into the component, but the component doesn’t know anything about the attributes being passed! You need a way to pass arbitrary attributes through and get them where you want them.
https://fly.io/phoenix-files/passing-unknown-attributes-into-component/
Elixir Wizards S7E8 Sigu Magwa on the Elixir Community in Kenya
The latest episode of the Elixir Wizards podcast released this morning! Check it out: https://smartlogic.io/podcast/elixir-wizards/s7e8-magwa/
Elixir Wizards S7E8 Sigu Magwa on the Elixir Community in Kenya
The latest episode of the Elixir Wizards podcast released this morning! Check it out: https://smartlogic.io/podcast/elixir-wizards/s7e8-magwa/
Using View as a way to simplify your system
Many applications introduce some kind of status to make it easier to share data.
However, more and more modules in your codebase need to be explicit about these assumptions. Views can eliminate the problematic SQL query. It’s also great way to introduce well-defined entities.
https://bartoszgorka.com/view-as-way-to-eliminate-problematic-queries
Restore LiveView State on Startup
You are storing some LiveView state in the browser. You want to retrieve that saved state as early as possible to improve the user experience.
The approach we used earlier waits for the LiveView to request the client to send the data. In your situation, you know you want the data, so why wait around to be asked for it? Can you have it automatically pushed from the client without being requested? Can you do it in a way that is reusable for other pages and other LiveViews and not just this one page?
This recipe improves the design and even makes it work for multiple LiveViews in the same application!
https://fly.io/phoenix-files/restore-liveview-state-on-startup/
ThinkingElixir 080: Waffle Making with Boris Kuznetsov
In episode 80 of Thinking Elixir, we talk with Boris Kuznetsov to learn about the Waffle library and how it is used to attach images, video, and audio to your Ecto records while also processing the attachments for thumbnails, encodings, and more. We learn about the history of the project having forked from Arc, which is no longer maintained. We cover the challenges of supporting and maintaining a library created as a fork. We talk about Second System Syndrome and the desire we often feel that it would be easier to just start over. All this and more!
New in Legendary: 65% reduction in Docker build times via Elixir releases
We introduced a new Dockerfile and CI config that uses Elixir releases and it cut our image build times by 60-70%!
Introduction to Elasticlunr
Elasticlunr is a small, full-text search library for use in the Elixir environment. It indexes JSON documents and provides a friendly search interface to retrieve documents.
The library is built for web applications that do not require the deployment complexities of popular search engines while taking advantage of the Beam capabilities.
Read more: https://atandarash.me/blog/introduction-to-elasticlunr
