From 124821c7e6bb138350fce2be66fb3daf37b9229e Mon Sep 17 00:00:00 2001 From: Giacomo Cavalieri Date: Wed, 11 Sep 2024 20:16:00 +0200 Subject: [PATCH] snapshot test all the things --- compiler-core/src/language_server/tests.rs | 31 +- .../src/language_server/tests/definition.rs | 662 ++++-------------- ...__goto_definition_deep_type_in_module.snap | 26 + ..._definition_external_module_constants.snap | 15 + ...nition_external_module_function_calls.snap | 15 + ...to_definition_external_module_records.snap | 19 + ...s__definition__goto_definition_import.snap | 15 + ...ition__goto_definition_import_aliased.snap | 15 + ...to_definition_import_unqualified_type.snap | 15 + ...o_definition_import_unqualified_value.snap | 15 + ..._definition_imported_module_constants.snap | 15 + ...to_definition_imported_module_records.snap | 19 + ...ition__goto_definition_local_variable.snap | 19 + ...goto_definition_module_function_calls.snap | 15 + ...definition_path_module_function_calls.snap | 15 + ...goto_definition_same_module_constants.snap | 21 + ...goto_definition_same_module_functions.snap | 25 + ...__goto_definition_same_module_records.snap | 29 + ...sts__definition__goto_definition_type.snap | 27 + ...ition__goto_definition_type_in_module.snap | 19 + ...ion__goto_definition_type_in_path_dep.snap | 19 + ..._goto_definition_unqualified_function.snap | 15 + ...unqualified_imported_module_constants.snap | 15 + ...n_unqualified_imported_module_records.snap | 19 + 24 files changed, 568 insertions(+), 532 deletions(-) create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_deep_type_in_module.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_constants.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_function_calls.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_records.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_aliased.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_type.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_value.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_constants.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_records.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_local_variable.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_module_function_calls.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_path_module_function_calls.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_constants.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_functions.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_records.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_module.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_path_dep.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_function.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_constants.snap create mode 100644 compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_records.snap diff --git a/compiler-core/src/language_server/tests.rs b/compiler-core/src/language_server/tests.rs index fdd84799e55..a379e37703b 100644 --- a/compiler-core/src/language_server/tests.rs +++ b/compiler-core/src/language_server/tests.rs @@ -16,6 +16,7 @@ use ecow::EcoString; use hexpm::version::{Range, Version}; use camino::{Utf8Path, Utf8PathBuf}; +use itertools::Itertools; use lsp_types::{Position, TextDocumentIdentifier, TextDocumentPositionParams, Url}; use crate::{ @@ -392,6 +393,34 @@ impl<'a> TestProject<'a> { } } + pub fn src_from_module_url(&self, url: Url) -> Option<&str> { + let module_name: EcoString = url + .path_segments()? + .skip_while(|segment| *segment != "src") + .skip(1) + .join("/") + .trim_end_matches(".gleam") + .into(); + + if module_name == "app" { + return Some(self.src); + } + + let find_module = |modules: &Vec<(&'a str, &'a str)>| { + modules + .iter() + .find(|(name, _)| *name == module_name) + .map(|(_, src)| *src) + }; + + find_module(&self.root_package_modules) + .or(find_module(&self.dependency_modules)) + .or(find_module(&self.test_modules)) + .or(find_module(&self.hex_modules)) + .or(find_module(&self.dev_hex_modules)) + .or(find_module(&self.indirect_hex_modules)) + } + pub fn add_module(mut self, name: &'a str, src: &'a str) -> Self { self.root_package_modules.push((name, src)); self @@ -565,7 +594,7 @@ impl<'a> TestProject<'a> { } pub fn at( - self, + &self, position: Position, executor: impl FnOnce( &mut LanguageServerEngine, diff --git a/compiler-core/src/language_server/tests/definition.rs b/compiler-core/src/language_server/tests/definition.rs index e35c4258160..5837564ab7e 100644 --- a/compiler-core/src/language_server/tests/definition.rs +++ b/compiler-core/src/language_server/tests/definition.rs @@ -2,7 +2,7 @@ use lsp_types::{GotoDefinitionParams, Location, Position, Range, Url}; use super::*; -fn definition(tester: TestProject<'_>, position: Position) -> Option { +fn definition(tester: &TestProject<'_>, position: Position) -> Option { tester.at(position, |engine, param, _| { let params = GotoDefinitionParams { text_document_position_params: param, @@ -15,106 +15,85 @@ fn definition(tester: TestProject<'_>, position: Position) -> Option { }) } +fn pretty_definition(project: TestProject<'_>, position_finder: PositionFinder) -> String { + let position = position_finder.find_position(project.src); + let location = definition(&project, position).expect("a location to jump to"); + let src = hover::show_hover( + project.src, + Range { + start: position, + end: position, + }, + position, + ); + + let destination = hover::show_hover( + project + .src_from_module_url(location.uri) + .expect("a module to jump to"), + location.range, + location.range.start, + ); + + format!("---------- Jumping from:\n{src}\n---------- Jumped to:\n{destination}") +} + +#[macro_export] +macro_rules! assert_goto { + ($src:literal, $position:expr) => { + let project = TestProject::for_source($src); + assert_goto!(project, $position); + }; + ($project:expr, $position:expr) => { + let output = pretty_definition($project, $position); + insta::assert_snapshot!(insta::internals::AutoName, output); + }; +} + #[test] fn goto_definition_local_variable() { - let code = " + assert_goto!( + " pub fn main() { let x = 1 x -}"; - - assert_eq!( - definition(TestProject::for_source(code), Position::new(3, 2)), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\app.gleam" - } else { - "/src/app.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 2, - character: 6 - }, - end: Position { - line: 2, - character: 7 - } - } - }) - ) +}", + find_position_of("x").nth_occurrence(2) + ); } #[test] fn goto_definition_same_module_constants() { - let code = " + assert_goto!( + " const x = 1 pub fn main() { x -}"; - - assert_eq!( - definition(TestProject::for_source(code), Position::new(4, 2)), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\app.gleam" - } else { - "/src/app.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 7 - } - } - }) - ) +}", + find_position_of("x").nth_occurrence(2) + ); } #[test] fn goto_definition_same_module_functions() { - let code = " + assert_goto!( + " fn add_2(x) { x + 2 } pub fn main() { add_2(1) -}"; - - assert_eq!( - definition(TestProject::for_source(code), Position::new(6, 3)), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\app.gleam" - } else { - "/src/app.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 11 - } - } - }) - ) +}", + find_position_of("add_2(1)") + ); } #[test] fn goto_definition_same_module_records() { - let code = " + assert_goto!( + " pub type Rec { Var1(Int) Var2(Int, Int) @@ -123,29 +102,9 @@ pub type Rec { pub fn main() { let a = Var1(1) let b = Var2(2, 3) -}"; - - assert_eq!( - definition(TestProject::for_source(code), Position::new(7, 11)), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\app.gleam" - } else { - "/src/app.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 2, - character: 2 - }, - end: Position { - line: 2, - character: 11 - } - } - }) - ) +}", + find_position_of("Var1(1)") + ); } #[test] @@ -157,30 +116,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), - Position::new(3, 19) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 16 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), + find_position_of("my_num") + ); } #[test] @@ -192,30 +131,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), - Position::new(3, 3) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 16 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), + find_position_of("my_num").nth_occurrence(2) + ); } #[test] @@ -227,30 +146,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub fn my_fn() { Nil }"), - Position::new(3, 19) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 14 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub fn my_fn() { Nil }"), + find_position_of("my_fn") + ); } #[test] @@ -268,30 +167,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", dep_src), - Position::new(3, 20) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 2, - character: 2 - }, - end: Position { - line: 2, - character: 11 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", dep_src), + find_position_of("Var1(1)") + ); } #[test] @@ -309,30 +188,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", dep_src), - Position::new(3, 3) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 2, - character: 2 - }, - end: Position { - line: 2, - character: 11 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", dep_src), + find_position_of("Var1(1)").under_char('a') + ); } #[test] @@ -344,30 +203,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_hex_module("example_module", "pub const my_num = 1"), - Position::new(3, 20) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\build\packages\hex\src\example_module.gleam" - } else { - "/build/packages/hex/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 16 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_hex_module("example_module", "pub const my_num = 1"), + find_position_of("my_num").under_char('u') + ); } #[test] @@ -379,31 +218,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code) - .add_hex_module("example_module", "pub fn my_fn() { Nil }"), - Position::new(3, 20) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\build\packages\hex\src\example_module.gleam" - } else { - "/build/packages/hex/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 14 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_hex_module("example_module", "pub fn my_fn() { Nil }"), + find_position_of("my_fn") + ); } #[test] @@ -571,30 +389,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_hex_module("example_module", hex_src), - Position::new(3, 20) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\build\packages\hex\src\example_module.gleam" - } else { - "/build/packages/hex/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 2, - character: 2 - }, - end: Position { - line: 2, - character: 11 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_hex_module("example_module", hex_src), + find_position_of("Var1(1)").under_char('r') + ); } #[test] @@ -606,36 +404,16 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code) - .add_dep_module("example_module", "pub fn my_fn() { Nil }"), - Position::new(3, 20) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\dep\src\example_module.gleam" - } else { - "/dep/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 14 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_dep_module("example_module", "pub fn my_fn() { Nil }"), + find_position_of("my_fn").under_char('y') + ); } #[test] fn goto_definition_type() { - let code = " + assert_goto!( + " pub type Rec { Var1(Int) Var2(Int, Int) @@ -643,29 +421,9 @@ pub type Rec { pub fn make_var() -> Rec { Var1(1) -}"; - - assert_eq!( - definition(TestProject::for_source(code), Position::new(6, 22)), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\app.gleam" - } else { - "/src/app.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 12 - } - } - }) - ) +}", + find_position_of("Rec").nth_occurrence(2) + ); } #[test] @@ -684,30 +442,10 @@ fn make_var() -> example_module.Rec { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_hex_module("example_module", hex_src), - Position::new(2, 33) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\build\packages\hex\src\example_module.gleam" - } else { - "/build/packages/hex/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 12 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_hex_module("example_module", hex_src), + find_position_of("Rec") + ); } #[test] @@ -726,30 +464,10 @@ fn make_var() -> example_module.Rec { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_dep_module("example_module", dep), - Position::new(2, 33) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\dep\src\example_module.gleam" - } else { - "/dep/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 12 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_dep_module("example_module", dep), + find_position_of("Rec") + ); } #[test] @@ -775,30 +493,10 @@ fn make_var() -> example_module.Wabble(example_module.Wibble(example_module.Wobb } "; - assert_eq!( - definition( - TestProject::for_source(code).add_hex_module("example_module", hex_src), - Position::new(2, 80) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\build\packages\hex\src\example_module.gleam" - } else { - "/build/packages/hex/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 1, - character: 0 - }, - end: Position { - line: 1, - character: 15 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_hex_module("example_module", hex_src), + find_position_of("Wobble").under_char('o') + ); } #[test] @@ -810,30 +508,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), - Position::new(1, 13) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 0 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), + find_position_of("example_module").under_char('p') + ); } #[test] @@ -845,30 +523,12 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), - Position::new(1, 29) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 0 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), + find_position_of("example") + .nth_occurrence(2) + .under_char('x') + ); } #[test] @@ -880,30 +540,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), - Position::new(1, 26) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 16 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub const my_num = 1"), + find_position_of("my_num").under_char('_') + ); } #[test] @@ -915,30 +555,10 @@ fn main() { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("wibble", "pub fn wobble() {}"), - Position::new(3, 5) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\wibble.gleam" - } else { - "/src/wibble.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 15 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("wibble", "pub fn wobble() {}"), + find_position_of("wobble").nth_occurrence(2).under_char('o') + ); } #[test] @@ -950,28 +570,8 @@ fn main() -> MyType { } "; - assert_eq!( - definition( - TestProject::for_source(code).add_module("example_module", "pub type MyType = Int"), - Position::new(1, 33) - ), - Some(Location { - uri: Url::from_file_path(Utf8PathBuf::from(if cfg!(target_family = "windows") { - r"\\?\C:\src\example_module.gleam" - } else { - "/src/example_module.gleam" - })) - .unwrap(), - range: Range { - start: Position { - line: 0, - character: 0 - }, - end: Position { - line: 0, - character: 21 - } - } - }) - ) + assert_goto!( + TestProject::for_source(code).add_module("example_module", "pub type MyType = Int"), + find_position_of("MyType").under_char('T') + ); } diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_deep_type_in_module.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_deep_type_in_module.snap new file mode 100644 index 00000000000..83c0e969f72 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_deep_type_in_module.snap @@ -0,0 +1,26 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn make_var() -> example_module.Wabble(example_module.Wibble(example_module.Wobble)) { + ↑ + example_module.Wabble(example_module.Wibble(example_module.Wobble(1))) +} + +---------- Jumped to: + +pub type Wobble { +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + Wobble(Int) +} + +pub type Wibble(a) { + Wibble(a) +} + +pub type Wabble(a) { + Wabble(a) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_constants.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_constants.snap new file mode 100644 index 00000000000..6f555feb1d7 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_constants.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.my_num + ↑ +} + +---------- Jumped to: +pub const my_num = 1 +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_function_calls.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_function_calls.snap new file mode 100644 index 00000000000..70780126236 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_function_calls.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.my_fn + ↑ +} + +---------- Jumped to: +pub fn my_fn() { Nil } +↑▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_records.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_records.snap new file mode 100644 index 00000000000..61b001e75b4 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_external_module_records.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.Var1(1) + ↑ +} + +---------- Jumped to: + +pub type Rec { + Var1(Int) + ↑▔▔▔▔▔▔▔▔ + Var2(Int, Int) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import.snap new file mode 100644 index 00000000000..7eb0b0703ae --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module + ↑ +fn main() { + example_module.my_num +} + +---------- Jumped to: +pub const my_num = 1 +↑ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_aliased.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_aliased.snap new file mode 100644 index 00000000000..d9366224813 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_aliased.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module as example + ↑ +fn main() { + example.my_num +} + +---------- Jumped to: +pub const my_num = 1 +↑ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_type.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_type.snap new file mode 100644 index 00000000000..9e28d628c9b --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_type.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module.{type MyType} + ↑ +fn main() -> MyType { + 0 +} + +---------- Jumped to: +pub type MyType = Int +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_value.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_value.snap new file mode 100644 index 00000000000..a6410ad260d --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_import_unqualified_value.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module.{my_num} + ↑ +fn main() { + my_num +} + +---------- Jumped to: +pub const my_num = 1 +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_constants.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_constants.snap new file mode 100644 index 00000000000..3b9cec0e874 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_constants.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.my_num + ↑ +} + +---------- Jumped to: +pub const my_num = 1 +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_records.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_records.snap new file mode 100644 index 00000000000..da72df92d52 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_imported_module_records.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.Var1(1) + ↑ +} + +---------- Jumped to: + +pub type Rec { + Var1(Int) + ↑▔▔▔▔▔▔▔▔ + Var2(Int, Int) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_local_variable.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_local_variable.snap new file mode 100644 index 00000000000..561eea19333 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_local_variable.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +pub fn main() { + let x = 1 + x + ↑ +} + +---------- Jumped to: + +pub fn main() { + let x = 1 + ↑ + x +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_module_function_calls.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_module_function_calls.snap new file mode 100644 index 00000000000..70780126236 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_module_function_calls.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.my_fn + ↑ +} + +---------- Jumped to: +pub fn my_fn() { Nil } +↑▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_path_module_function_calls.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_path_module_function_calls.snap new file mode 100644 index 00000000000..9e1529b7c11 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_path_module_function_calls.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn main() { + example_module.my_fn + ↑ +} + +---------- Jumped to: +pub fn my_fn() { Nil } +↑▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_constants.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_constants.snap new file mode 100644 index 00000000000..ee3fd3c6434 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_constants.snap @@ -0,0 +1,21 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +const x = 1 + +pub fn main() { + x + ↑ +} + +---------- Jumped to: + +const x = 1 +↑▔▔▔▔▔▔ + +pub fn main() { + x +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_functions.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_functions.snap new file mode 100644 index 00000000000..9c25b264609 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_functions.snap @@ -0,0 +1,25 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +fn add_2(x) { + x + 2 +} + +pub fn main() { + add_2(1) + ↑ +} + +---------- Jumped to: + +fn add_2(x) { +↑▔▔▔▔▔▔▔▔▔▔ + x + 2 +} + +pub fn main() { + add_2(1) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_records.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_records.snap new file mode 100644 index 00000000000..f63d5685ec2 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_same_module_records.snap @@ -0,0 +1,29 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +pub type Rec { + Var1(Int) + Var2(Int, Int) +} + +pub fn main() { + let a = Var1(1) + ↑ + let b = Var2(2, 3) +} + +---------- Jumped to: + +pub type Rec { + Var1(Int) + ↑▔▔▔▔▔▔▔▔ + Var2(Int, Int) +} + +pub fn main() { + let a = Var1(1) + let b = Var2(2, 3) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type.snap new file mode 100644 index 00000000000..750e004c514 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type.snap @@ -0,0 +1,27 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +pub type Rec { + Var1(Int) + Var2(Int, Int) +} + +pub fn make_var() -> Rec { + ↑ + Var1(1) +} + +---------- Jumped to: + +pub type Rec { +↑▔▔▔▔▔▔▔▔▔▔▔ + Var1(Int) + Var2(Int, Int) +} + +pub fn make_var() -> Rec { + Var1(1) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_module.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_module.snap new file mode 100644 index 00000000000..7e13dfcc7c2 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_module.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn make_var() -> example_module.Rec { + ↑ + example_module.Var1(1) +} + +---------- Jumped to: + +pub type Rec { +↑▔▔▔▔▔▔▔▔▔▔▔ + Var1(Int) + Var2(Int, Int) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_path_dep.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_path_dep.snap new file mode 100644 index 00000000000..7e13dfcc7c2 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_type_in_path_dep.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module +fn make_var() -> example_module.Rec { + ↑ + example_module.Var1(1) +} + +---------- Jumped to: + +pub type Rec { +↑▔▔▔▔▔▔▔▔▔▔▔ + Var1(Int) + Var2(Int, Int) +} diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_function.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_function.snap new file mode 100644 index 00000000000..3921084d83c --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_function.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import wibble.{wobble} +fn main() { + wobble() + ↑ +} + +---------- Jumped to: +pub fn wobble() {} +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_constants.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_constants.snap new file mode 100644 index 00000000000..c7795a1004f --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_constants.snap @@ -0,0 +1,15 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module.{my_num} +fn main() { + my_num + ↑ +} + +---------- Jumped to: +pub const my_num = 1 +↑▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_records.snap b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_records.snap new file mode 100644 index 00000000000..2adeef84610 --- /dev/null +++ b/compiler-core/src/language_server/tests/snapshots/gleam_core__language_server__tests__definition__goto_definition_unqualified_imported_module_records.snap @@ -0,0 +1,19 @@ +--- +source: compiler-core/src/language_server/tests/definition.rs +expression: output +--- +---------- Jumping from: + +import example_module.{Var1} +fn main() { + Var1(1) + ↑ +} + +---------- Jumped to: + +pub type Rec { + Var1(Int) + ↑▔▔▔▔▔▔▔▔ + Var2(Int, Int) +}