Comments (2)
It looks like this snippet straight up parses to something without the id
at all:
macro f(x)
{% p x %} # => class Foo; property = 1; end
end
f(class Foo
property id: Int32? = 1
end)
from crystal.
So it turns out the parser is very lax when detecting valid assignment targets. In particular, Crystal::Parser#can_be_assigned?
accepts far more Call
nodes than #multi_assign_target?
, so all the following lines have a similar issue:
foo() = 1 # => foo = 1
foo(x: 1) = 2 # => foo = 2
foo.[](1) = 2 # => foo[1] = 2
foo.[](x: 1) = 2 # => foo[x: 1] = 2
foo.[](&.bar) = 2 # => foo.[]=(2, &.bar)
foo x: 1 = 2 # => foo = 2
# these type names are also valid regular code
foo x: T? = 1 # => foo = 1
foo x: {T} = 1 # => foo = 1
foo x: {y: T} = 1 # => foo = 1
But note:
foo x: T = 1 # => foo(x: T = 1)
foo x: T[1] = 1 # => foo(x: T[1] = 1)
foo x: T* = 1 # Error: unexpected token: "="
The lines that involve parentheses should definitely be syntax errors.
from crystal.
Related Issues (20)
- Nilable `Proc` types inside libs
- Cannot return `Proc`s from top-level funs
- `ReferenceStorage(T)` is always atomic even when `T` isn't HOT 1
- Add `crystal tool method_types` for listing method parameter types HOT 4
- Passing nil to Addrinfo.getaddrinfo gives unexpected error message HOT 1
- Package installation fails on Windows due to missing SQLite3 .lib files HOT 2
- `File#truncate` raises `File::AccessDeniedError` on Windows when file was opened in append mode HOT 3
- Cache compiler results for tools
- Include more types in `crystal tool hierarchy` HOT 9
- `close_on_exec` on Windows HOT 2
- Pointer equality for `Slice` HOT 4
- Forbid variable assignment in function call HOT 4
- Captured block parameter not recognised when used inside macro HOT 2
- Internal error when using `sizeof` as generic type argument in inferred ivar type
- ECR escape sequences do not work with `-`
- Customizing or hiding `Benchmark.ips`'s output format HOT 3
- Adding a Difference method to the Math module HOT 2
- Visit the Time.local in the macro. HOT 3
- Add Makefile support `--mcpu=native` as override FLAGS to permit build crystal compiler can enable this option optional for a better performance. HOT 4
- Compiler should Emit Warning/Notes when Deduced Type Differs from Annotated Type. HOT 1
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 crystal.