Comments (5)
I'll start work on this one.
from exfmt.
This looks like it will be fairly straightforward (famous last words).
However I've run into a problem. The semantic tests in Semantic.ExfmtProjectTest
fail anytime parentheses are added to zero arity function definitions.
For example, changing the macro in Exfmt.Ast.Infix
from:
defmacro infix_ops do
@infix_ops
end
to:
defmacro infix_ops() do
@infix_ops
end
produces this error:
** (Exfmt.SemanticsError) Error: The semantic meaning of the source code differs
between the input and the formatted output! We are unable
to continue as formatting may break your code.
I'll dig into this, but wanted to post this in case you knew of an easy fix.
from exfmt.
The AST produced by a zero arity function definition without parentheses:
quote do
def one do
1
end
end
{:def, [context: Elixir, import: Kernel],
[{:one, [context: Elixir], Elixir}, [do: 1]]}
differs more than I expected from the same function definition with parentheses:
quote do
def one() do
1
end
end
{:def, [context: Elixir, import: Kernel],
[{:one, [context: Elixir], []}, [do: 1]]}
The semantic check is getting tripped up by this difference.
from exfmt.
'def' is just a macro invocation, and the change is from going from a 'binding' ast to a 'call' ast, which is definitely a big change. Internally the 'def' is a macro (as might other things be too) that can accept both (design fault in my opinion...).
from exfmt.
Thanks @OvermindDL1, that's very helpful.
from exfmt.
Related Issues (20)
- Semantic violation HOT 2
- Any Elixir warnings will be inserted into the file via Neoformat HOT 12
- Align closing 'end' of anonymous functions in argument list with top-level call HOT 1
- Render parens on qualified zero arity function calls HOT 10
- @moduledoc multi-line formatting HOT 14
- Multi line `@moduledoc` formatted to one line HOT 1
- [Discussion] Group multiple use, import, alias, require calls HOT 4
- Indent assignment expressions with multi-line pipelines HOT 1
- Global install via an escript HOT 8
- [Discussion] Function argument nesting HOT 2
- SublimeText Support HOT 2
- Inconsistent spacing HOT 1
- CoC is missing a contact to report stuff HOT 1
- Installation documentation HOT 2
- Allow for single line function definitions HOT 1
- Future of ExFmt HOT 2
- mix test failed using the current master branch of elixir
- (FunctionClauseError) no function clause matching in Access.get/3 HOT 1
- Stable release ETA HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from exfmt.