From 534531e4dd4133ff22f775b385ba488ec747cead Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Mon, 1 Feb 2021 14:30:41 +1100 Subject: feat(lsp): add references code lens (#9316) --- core/module_specifier.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'core') diff --git a/core/module_specifier.rs b/core/module_specifier.rs index e0e8719ea..a9ce57099 100644 --- a/core/module_specifier.rs +++ b/core/module_specifier.rs @@ -1,6 +1,9 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. use crate::normalize_path; +use serde::de; +use serde::Deserialize; +use serde::Deserializer; use std::env::current_dir; use std::error::Error; use std::fmt; @@ -209,9 +212,21 @@ impl PartialEq for ModuleSpecifier { } } +impl<'de> Deserialize<'de> for ModuleSpecifier { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let url_str: String = Deserialize::deserialize(deserializer)?; + ModuleSpecifier::resolve_url(&url_str).map_err(de::Error::custom) + } +} + #[cfg(test)] mod tests { use super::*; + use crate::serde_json::from_value; + use crate::serde_json::json; use std::path::Path; #[test] @@ -545,4 +560,13 @@ mod tests { ); } } + + #[test] + fn test_deserialize_module_specifier() { + let actual: ModuleSpecifier = + from_value(json!("http://deno.land/x/mod.ts")).unwrap(); + let expected = + ModuleSpecifier::resolve_url("http://deno.land/x/mod.ts").unwrap(); + assert_eq!(actual, expected); + } } -- cgit v1.2.3