Skip to content

Commit ab9931d

Browse files
committed
Switch await to be the right side of the equality and some cleanup.
1 parent 1894a34 commit ab9931d

File tree

15 files changed

+82
-67
lines changed

15 files changed

+82
-67
lines changed

core/source/File.mint

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ module File {
4646
* It might not resolve if the user cancels the dialog.
4747
4848
{
49-
await files =
50-
File.selectMultiple("application/json")
49+
files =
50+
await File.selectMultiple("application/json")
5151
5252
Debug.log(files)
5353
}
@@ -87,8 +87,8 @@ module File {
8787
* It might not resolve if the user cancels the dialog.
8888
8989
{
90-
await file =
91-
File.select("application/json")
90+
file =
91+
await File.select("application/json")
9292
9393
Debug.log(file)
9494
}
@@ -124,8 +124,8 @@ module File {
124124
Reads the contents of the given file as a Data URL.
125125
126126
{
127-
await file =
128-
File.fromString("Some content...", "test.txt", "text/plain")
127+
file =
128+
await File.fromString("Some content...", "test.txt", "text/plain")
129129
130130
url =
131131
File.readAsDataURL(file)
@@ -151,8 +151,8 @@ module File {
151151
Reads the contents of the given file as a String.
152152
153153
{
154-
await file =
155-
File.create("Some content...", "test.txt", "text/plain")
154+
file =
155+
await File.create("Some content...", "test.txt", "text/plain")
156156
157157
url =
158158
File.readAsString(file)
@@ -178,8 +178,8 @@ module File {
178178
Prompts a save dialog for the given file.
179179
180180
{
181-
await file =
182-
File.select(*)
181+
file =
182+
await File.select(*)
183183
184184
File.download(file)
185185
}

core/source/Http.mint

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ enum Http.Error {
4545
Module for sending HTTP requests.
4646
4747
```
48-
await request =
48+
request = await
4949
"https://httpbin.org/get"
5050
|> Http.get()
5151
|> Http.send()

core/tests/tests/Http.mint

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,8 @@ component Test.Http {
261261
}
262262

263263
fun componentDidMount : Promise(Void) {
264-
await request =
265-
Http.empty()
264+
request =
265+
await Http.empty()
266266
|> Http.url(url)
267267
|> Http.method(method)
268268
|> Http.sendWithId("test")

core/tests/tests/Promise.mint

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ component Test.Promise {
22
state result : String = ""
33

44
fun resolve : Promise(Void) {
5-
await newResult =
6-
Promise.resolve("resolved")
5+
newResult =
6+
await Promise.resolve("resolved")
77

88
await next { result = newResult }
99
}
@@ -29,8 +29,8 @@ component Test.Promise2 {
2929

3030
await next { resolve = resolve }
3131

32-
await newResult =
33-
promise
32+
newResult =
33+
await promise
3434

3535
await next { result = newResult }
3636
}

spec/compilers/last_statement

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
component Main {
2+
fun render : String {
3+
x =
4+
"hello"
5+
}
6+
}
7+
--------------------------------------------------------------------------------
8+
class A extends _C {
9+
render() {
10+
return `hello`;
11+
}
12+
};
13+
14+
A.displayName = "Main";

spec/formatters/statement_with_await

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module A {
2+
fun test : Promise(String) {
3+
x=await"hello"
4+
}
5+
}
6+
--------------------------------------------------------------------------------
7+
module A {
8+
fun test : Promise(String) {
9+
x =
10+
await "hello"
11+
}
12+
}

spec/parsers/statement_spec.cr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require "../spec_helper"
22

33
describe "Statement" do
4-
subject statement(:none)
4+
subject statement
55

66
expect_ignore ""
77
expect_ignore "??"

src/ast/statement.cr

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
module Mint
22
class Ast
33
class Statement < Node
4-
enum Parent
5-
None
6-
end
7-
8-
getter target, expression, parent, await
4+
getter target, expression, await
95

106
def initialize(@expression : Expression,
11-
@parent : Parent,
127
@target : Node?,
138
@await : Bool,
149
@input : Data,

src/compilers/block.cr

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@ module Mint
1010

1111
def _compile(node : Ast::Block, for_function = false) : String
1212
statements =
13-
node.statements.select(Ast::Statement)
13+
node
14+
.statements
15+
.select(Ast::Statement)
16+
.sort_by! { |item| resolve_order.index(item) || -1 }
1417

1518
if statements.size == 1
1619
if for_function
17-
js.return(compile(statements.first))
20+
js.return(compile(statements.first, true))
1821
else
19-
compile(statements.first)
22+
compile(statements.first, true)
2023
end
2124
else
2225
compiled_statements =
23-
compile(statements.sort_by! { |item| resolve_order.index(item) || -1 })
26+
statements.map { |item| compile item, item == statements.last }
2427

2528
last =
2629
compiled_statements.pop

src/compilers/statement.cr

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
module Mint
22
class Compiler
3-
def _compile(node : Ast::Statement) : String
3+
def compile(node : Ast::Statement, last : Bool) : String
4+
if checked.includes?(node)
5+
_compile(node, last)
6+
else
7+
""
8+
end
9+
end
10+
11+
def _compile(node : Ast::Statement, last : Bool) : String
412
right = compile node.expression
513
right = "await #{right}" if node.await
614

7-
if node.parent == Ast::Statement::Parent::None && (target = node.target)
15+
if (target = node.target) && !last
816
case target
917
when Ast::Variable
1018
js.const(js.variable_of(target), right)

src/formatters/statement.cr

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ module Mint
44
expression =
55
format node.expression
66

7-
right =
8-
case node.target
9-
when Nil
10-
expression
7+
left =
8+
if node.await
9+
"await #{expression}"
1110
else
12-
target =
13-
format node.target
14-
15-
"#{target} =\n#{indent(expression)}"
11+
expression
1612
end
1713

18-
if node.await
19-
"await #{right}"
14+
case node.target
15+
when Nil
16+
left
2017
else
21-
right
18+
target =
19+
format node.target
20+
21+
"#{target} =\n#{indent(left)}"
2222
end
2323
end
2424
end

src/parsers/code_block.cr

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ module Mint
88
block(
99
opening_bracket: opening_bracket,
1010
closing_bracket: closing_bracket) do
11-
many { comment || statement(:none) }.tap do |items|
12-
raise statement_error if items.select(Ast::Statement).none?
11+
many { comment || statement }.tap do |items|
12+
raise statement_error if items.none?
1313
end
1414
end
1515

src/parsers/statement.cr

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
module Mint
22
class Parser
3-
def statement(parent : Ast::Statement::Parent, require_name : Bool = false) : Ast::Statement?
3+
def statement : Ast::Statement?
44
start do |start_position|
5-
await = keyword "await"
6-
whitespace if await
7-
85
target = start do
96
value = variable(track: false) || tuple_destructuring
107
whitespace
@@ -16,7 +13,10 @@ module Mint
1613
value
1714
end
1815

19-
next if require_name && !target
16+
whitespace
17+
await = keyword "await"
18+
19+
whitespace
2020
body = expression
2121

2222
next unless body
@@ -25,7 +25,6 @@ module Mint
2525
from: start_position,
2626
expression: body,
2727
target: target,
28-
parent: parent,
2928
await: await,
3029
to: position,
3130
input: data)

src/type_checkers/block.cr

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,14 @@ module Mint
44
statements =
55
node.statements.reject(Ast::Comment)
66

7-
async =
8-
node
9-
.statements
10-
.select(Ast::Statement)
11-
.any?(&.await)
12-
137
scope statements do
148
resolve node.statements
159
end
1610

1711
last =
1812
statements.last
1913

20-
if async
14+
if node.async?
2115
Type.new("Promise", [cache[last]] of Checkable)
2216
else
2317
cache[last]

src/type_checkers/variable.cr

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,7 @@ module Mint
3131
else
3232
case value = item[0]
3333
when Ast::Statement
34-
type = resolve value
35-
36-
if value.parent.none?
37-
type
38-
else
39-
if type.name.in?("Result", "Promise") && type.parameters.size == 2
40-
type.parameters[1]
41-
else
42-
type
43-
end
44-
end
34+
resolve value
4535
when Tuple(Ast::Node, Int32 | Array(Int32))
4636
item = value[0]
4737

0 commit comments

Comments
 (0)