Skip to content

Commit f7dc3b6

Browse files
fruno-bulaxlpil
authored andcommitted
🐛 Traverse alternative patterns when finding node
1 parent a45fef4 commit f7dc3b6

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,16 @@
328328

329329
([Surya Rose](https://github.com/GearsDatapacks))
330330

331+
- You can now go to definition, rename, etc. from alternative patterns!
332+
```gleam
333+
case wibble {
334+
Wibble | Wobble -> 0
335+
// ^- Previously you could not trigger actions from here
336+
}
337+
338+
```
339+
([fruno](https://github.com/fruno-bulax))
340+
331341
### Formatter
332342

333343
- The formatter now removes needless multiple negations that are safe to remove.

compiler-core/src/ast.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,6 +1617,12 @@ impl TypedClause {
16171617
self.pattern
16181618
.iter()
16191619
.find_map(|p| p.find_node(byte_index))
1620+
.or_else(|| {
1621+
self.alternative_patterns
1622+
.iter()
1623+
.flat_map(|p| p.iter())
1624+
.find_map(|p| p.find_node(byte_index))
1625+
})
16201626
.or_else(|| self.then.find_node(byte_index))
16211627
}
16221628

compiler-core/src/language_server/tests/definition.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,3 +874,22 @@ const my_constant = wibble.Wibble(10)
874874
find_position_of("= wibble").under_char('w')
875875
);
876876
}
877+
878+
#[test]
879+
fn goto_definition_from_alternative_pattern() {
880+
assert_goto!(
881+
"
882+
type Wibble {
883+
Wibble
884+
Wobble
885+
}
886+
887+
fn warble(wibble: Wibble) {
888+
case wibble {
889+
Wibble | Wobble -> 0
890+
}
891+
}
892+
",
893+
find_position_of("Wobble ->")
894+
);
895+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
source: compiler-core/src/language_server/tests/definition.rs
3+
expression: output
4+
---
5+
----- Jumping from `src/app.gleam`
6+
7+
type Wibble {
8+
Wibble
9+
Wobble
10+
}
11+
12+
fn warble(wibble: Wibble) {
13+
case wibble {
14+
Wibble | Wobble -> 0
15+
16+
}
17+
}
18+
19+
----- Jumped to `src/app.gleam`
20+
21+
type Wibble {
22+
Wibble
23+
Wobble
24+
↑▔▔▔▔▔
25+
}
26+
27+
fn warble(wibble: Wibble) {
28+
case wibble {
29+
Wibble | Wobble -> 0
30+
}
31+
}

0 commit comments

Comments
 (0)