sheharyarn

sheharyarn

I would really like to see Syntax Highlighting support for Elixir on Stackoverflow. Someone already created a topic on Meta StackExchange but since SE relies on an external syntax highlighting tool (Google’s code-prettify), there hasn’t been any work to support Elixir (even though an issue was also opened there over a year ago).

I’m interested in making this happen (as someone who spends 5+ hours daily on SO - especially in the Elixir tag). So my questions are:

  • How do I get started in adding Elixir support to code-prettify?
  • How do I represent Elixir constructs that need to be highlighted?
  • And should I even send in a pull request? There seems to be minimal activity in the project, and many pull requests haven’t been merged or closed for a while.

Showing Posts 1 to 10

nietaki

nietaki

I was thinking about the same thing and slowly started looking into that. It seems like the syntax highlighting definitions for erlang or Scala aren’t really that complicated, and I would argue Scala has a more ambiguous syntax than Elixir.

It also seems like the code-prettify project is still pretty alive and they do accept PRs, so that’s all looking good.

Is there a good place to get Elixir’s grammar or something similar? It would probably help make the highlighter more comprehensive.

tyro

tyro

In the Elixir issue for code-prettify (here), they link to the atom editor elixir grammar (here) which looks quite useful.

nietaki

nietaki

I looked into how the google-prettify works and prepared a plugin for elixir that seems to be working. Now I could use you guys’ help making sure it’s nice and robust.

Here’s how you can try it out: I put an editable example in the live-preview branch of my fork of the repo. Clone it and open it in a browser or go to rawgit and you can play around with the source code and see how the prettifier behaves.

Let me know what you think! Please point out what needs improving.

Notes:

  • The main things that can be broken is probably false positives on some classes. For example 1_000 is a correct integer, but 1__000 isn’t and shouldn’t be highlighted like one.
  • Things to be treated as “keywords” in Elixir are a bit of a judgement call, since most of the functionality is implemented with macros. I used my gut on this one - let me know if you think any constructs should (not) be treated as keywords but are(n’t).
  • Before I submit a PR to the main fork I’ll want to add some unit tests for the elixir prettifier - I just wanted to get some feedback first.
  • If you want to submit some changes to the prettifier in my fork, submit it to the lang-elixir branch - the live preview is just a utility and won’t be included in the PR for the main project.
  • I’m not sure what class the sigils should be highlighted as - they’re currently being coloured the same as atoms, because it’s consistent with the highlighting I have in my main editor.
  • I don’t think it’s worth it to support highlighting inside string interpolation - It would probably be more trouble than it’s worth using their createSimpleLexer
OvermindDL1

OvermindDL1

As long as their lexer is not something stupid like regex it should not be hard.

I really really hate the idiotic highlighting libraries that think everything can be lexed with regex, morons…

nietaki

nietaki

Don’t look in the source then :slight_smile: It is what it is though, as long as it makes the StackOverflow questions/answers more readable, I’m a happy person.

nietaki

nietaki

I have tried the highlighting with some more code and ironed out some issues. An updated interactive demo still available on rawgit.

I’m aiming to write some tests and submit a PR this weekend, so if you have any feedback, speak up :wink:

nietaki

nietaki

It feels like I’m mostly talking to myself here, but here’s the PR for the Elixir support: Add Elixir language support by nietaki · Pull Request #478 · googlearchive/code-prettify · GitHub

OvermindDL1

OvermindDL1

Cool, better syntax highlighting on popular syntax highlighters, even if the syntax highlighter itself is stupidly made in regex but nothing you can do about that, is still a great help due to the visibility! :slight_smile:

notriddle

notriddle

Breaks when I type this in:

"I love me some #{ "string" <> "y" } interpolation"

It might not support hilighting inside string interpolation, but it should at least ignore quotes inside of an interpolated part, so it doesn’t just look wrong.

notriddle

notriddle

Your example here:

%{foo: :bar, "yes, this compiles": :"also an atom"}

Both of them are atoms; :“also an atom” and :“yes, this compiles” are both atoms. Your syntax hilighter thinks that “yes, this compiles” is a string.

iex(1)> %{ "yes, this compiles": :"also an atom" } |> Enum.map(fn {key, val} -> is_atom key end)
[true]

Where Next? Top

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2977 92995 915
New
AstonJ
The obligatory hello world thread! Who are you and where are you from? :stuck_out_tongue:
4616 55835 594
New
caslu
I want to open this thread for you all to discuss and help those who really like Ash but are still hesitant to use it in a real project. ...
New
arcanemachine
I was working on an Ecto migration and I needed a timestamp. So, for the nth time, I looked up the different data types for timestamps, a...
New
alexslade
Fly’s CEO posted this recently - Turn And Face The Strange · The Fly Blog It says that Fly is going all-in on sprites, which is a worry ...
New
Herve37
We’re evaluating API mocking tools for OpenAPI-based projects and would love to hear what other teams are using. We’re particularly inte...
New
matt-savvy
Is there a word for the ~> symbol used in Version strings? Do you also just call it a Squiggle Arrow™ ?!
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews