Comments (16)
It's just the grammar at the moment -- it would definitely be better without. Just simply removing the period raises 36 reduce/reduce errors. If you can figure out a refactor to the grammar that allows it, I'd be glad to take the patch.
from coffeescript.
Well, python's list comprehensions surround it with []'s, which makes sense as the result is always an array. Perhaps you can just do this?
from coffeescript.
(This is also done by Haskell, ML and other languages with comprehensions)
from coffeescript.
We could do that, but it would be no better than a period, wouldn't be very CoffeeScript-y, and would muck up the multiline array comprehensions proposed in the other issue. Better for the single liner just to lose the period, if we can fix the grammar.
from coffeescript.
Hm, examining the grammar, i think the r/r's come from this:
IN PureExpression
The PureExpression seems to be contained, but then if you had an expression like this:
for x in "hi" + for y in "za" if true
You could parse it as either:
for x in ("hi" + for y in "za") if true
or:
for x in ("hi" + (for y in "za" if true))
Any ideas on fixes?
from coffeescript.
The reason behind this problem is that PureExpression can still be a full Expression provided it includes an operator. If you made PureExpressions not include operators, this problem would be solved.
from coffeescript.
Alternatively (perhaps better), make operators only take PureExpressions.
The downside of this is that this is necessary:
3 + (if a then b else c)
# not this
3 + if a then b else c
from coffeescript.
If you resolve this, could we get while as an expression as well?
from coffeescript.
So, tried this, and there's nothing too insurmountable about the grammar, but it does introduce a nasty ambiguity that parses wrong under the current precedence rules. Filters on the comprehensions get parsed as postfix if clauses instead:
highlight(row) for row, i in table if i % 2 is 0
Parses as:
(highlight(row) for row, i in table) if i % 2 is 0
Instead of:
(highlight(row) for row, i in table if i % 2 is 0)
from coffeescript.
Couldn't this be solved by changing "if" to a different keyword in a comprehension?
from coffeescript.
Yes, yes it could -- perhaps filter
.
from coffeescript.
how about "where"?
for row in table where row isnt null
from coffeescript.
Even better.
from coffeescript.
or 'when' to mirror the case statement ?
from coffeescript.
Better yet -- I'll change it.
from coffeescript.
This is now fixed on master, with significant whitespace. Use when
to specify the filter over the array comprehension.
from coffeescript.
Related Issues (20)
- Unnecessary `splice` ref added for Array destructuring with rest element not in last position HOT 4
- Bug: Re-ordered nested non-end BindingRestElement doesn't get transpiled HOT 1
- CoffeeScript is fantastic, please donβt give it up HOT 1
- How to imitate `let` behavior in loops? HOT 5
- Proposal: Alternative file extension HOT 1
- Bug: Excessive variable and shallow copy for leading or middle rest parameter
- Proposal: Introduce `let` statement. HOT 6
- Proposal: Document Existential Operator Assignment
- Site issue: code blocks twitch on hover HOT 2
- Proposal: cake command should support ES6 modules HOT 2
- Need help understanding class member meanings HOT 1
- CLI `npm` `scripts` and input `.coffee` file/s as last argument conflicting with `--watch` HOT 2
- Bug: wrong code is transpiled for function call without parentheses HOT 2
- Proposal: Add end word to close method or class HOT 2
- Bug: Invalid indentation allowed after `do`
- Bug: Remove checkShebangLine multi arguments check HOT 1
- feature_request(html): backend CoffeeScript compilation inside HTML files HOT 3
- Bug: yield cannot be used in do -> expressions reliably? HOT 5
- [not an issue] An embeddable playground for CoffeeScript HOT 1
- Please help HOT 2
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 coffeescript.