Open atomiks opened 6 years ago
this is missing a scope
This is tracked in https://github.com/atom/language-javascript/issues/618
Bracket matcher doesn't match JSX tags, but it does in language-babel
This is tracked in https://github.com/atom/bracket-matcher/issues/355
Opened a PR for some of the others. Arrow functions and -
in negative constant literals I am not sure about.
I've updated the OP in accordance with the PR merge and separately tracked issues.
The two that need addressing is the arrow function styling for classes and standalone functions. I'll update the issue if I find anything else missing
The two cases that are not yet addressed are not possible without feature additions to Atom. The arrow function and its name are considered siblings in the parsed tree-sitter hierarchy, and there's no way to isolate (e.g.) "identifier with arrow-function as its next sibling" in a grammar, as @maxbrunsfeld described here. This would also be useful for highlighting foo
as a function in the code let obj = { foo: () => {} }
and its equivalents.
This is less of a need with modern JS syntactic niceties; hell, I remember when IE would leak memory if you used named function expressions. But arrow functions in class property bodies will remain popular as a way of binding this
to the class instance, so I don't think it's something we can avoid altogether.
So the underlying request here is to "extend[] our AST-based highlighting system to support non-local relationships," in @maxbrunsfeld's words. I'd like to create a ticket for this, but I'm not sure which repo it belongs in. Can someone point me in the right direction?
Prerequisites
Description
Comparing the new
language-javascript
using tree-sitter grammar andlanguage-babel
using the old system, I'm noticing many missing features, to the point where I can't use it yet but would like to. I hope that this list will help you improve the current highlighting.[x] ✅ Missing function parameters scope. However in
language-babel
arrow functions whose parameters spread multiple lines don't get highlighted (nor the function name)[x] ✅ Object property access
obj.property
is not differentiated from declaration, i.e.obj = { property: '' }
. Inlanguage-babel
, it seems to usesyntax--unquoted
for the object property.[x] ✅ Missing
jsx.component
to style components differently from classes[x] ✅ Add a spread-syntax scope. I like to enbolden and add a shadow to that specific operator
[x] ✅ Missing a dom syntax scope, i.e. for
window
,document
,navigator
, etc, and a console scope forconsole
[ ]
const func = () => {}
- the function name is not scoped as a function.[ ] The class properties proposal (arrow functions in classes) are not scoped as functions, e.g.
[ ] Missing a
method
scope if a function was called on an object likethis.func()
instead of simplyfunc()
~I think the
-
in negative numbers should be part of the number scope, as inlanguage-babel
~ (doesn't really matter)~
this
is missing a scope:~ (tracked in #618)~Bracket matcher doesn't match JSX tags, but it does in
language-babel
~ (tracked in separate repo)Versions
1.32.2