0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

fix(cli): use CliNodeResolver::resolve() for managed node_modules (#23902)

This commit is contained in:
Nayeem Rahman 2024-05-21 17:54:15 +01:00 committed by GitHub
parent 54eb930e8c
commit a5111fbc4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 70 additions and 8 deletions

View file

@ -29,7 +29,6 @@ use deno_core::ModuleSpecifier;
use deno_graph::source::ResolutionMode;
use deno_graph::Resolution;
use deno_runtime::deno_node;
use deno_runtime::deno_node::NodeResolutionMode;
use deno_semver::jsr::JsrPackageReqReference;
use deno_semver::npm::NpmPackageReqReference;
use deno_semver::package::PackageReq;
@ -1295,11 +1294,7 @@ impl Documents {
}
if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) {
return self.resolver.npm_to_file_url(
&npm_ref,
referrer,
NodeResolutionMode::Types,
);
return self.resolver.npm_to_file_url(&npm_ref, referrer);
}
let Some(doc) = self.get(specifier) else {
return Some((specifier.clone(), MediaType::from_specifier(specifier)));

View file

@ -229,7 +229,6 @@ impl LspResolver {
&self,
req_ref: &NpmPackageReqReference,
referrer: &ModuleSpecifier,
mode: NodeResolutionMode,
) -> Option<(ModuleSpecifier, MediaType)> {
let node_resolver = self.node_resolver.as_ref()?;
Some(NodeResolution::into_specifier_and_media_type(
@ -238,7 +237,7 @@ impl LspResolver {
req_ref,
&PermissionsContainer::allow_all(),
referrer,
mode,
NodeResolutionMode::Types,
)
.ok(),
))

View file

@ -677,6 +677,18 @@ impl Resolver for CliGraphResolver {
}
}
}
} else if referrer.scheme() == "file" {
if let Some(node_resolver) = &self.node_resolver {
let node_result = node_resolver.resolve_if_in_npm_package(
specifier,
referrer,
to_node_mode(mode),
&PermissionsContainer::allow_all(),
);
if let Some(Ok(Some(res))) = node_result {
return Ok(res.into_url());
}
}
}
let specifier = result?;

View file

@ -7188,6 +7188,55 @@ fn lsp_npm_completions_auto_import_and_quick_fix_no_import_map() {
client.shutdown();
}
// Regression test for https://github.com/denoland/deno/issues/23895.
#[test]
fn lsp_npm_types_nested_js_dts() {
let context = TestContextBuilder::new()
.use_http_server()
.use_temp_cwd()
.build();
let temp_dir = context.temp_dir();
let file = source_file(
temp_dir.path().join("file.ts"),
r#"
import { someString } from "npm:@denotest/types-nested-js-dts";
const someNumber: number = someString;
console.log(someNumber);
"#,
);
let mut client = context.new_lsp_command().build();
client.initialize_default();
client.write_request(
"workspace/executeCommand",
json!({
"command": "deno.cache",
"arguments": [[], file.uri()],
}),
);
let diagnostics = client.did_open_file(&file);
assert_eq!(
json!(diagnostics.all()),
json!([
{
"range": {
"start": {
"line": 2,
"character": 12,
},
"end": {
"line": 2,
"character": 22,
},
},
"severity": 1,
"code": 2322,
"source": "deno-ts",
"message": "Type 'string' is not assignable to type 'number'.",
},
])
);
}
#[test]
fn lsp_completions_using_decl() {
let context = TestContextBuilder::new().use_temp_cwd().build();

View file

@ -0,0 +1 @@
export const someString: string;

View file

@ -0,0 +1 @@
export { someString } from "./import.mjs";

View file

@ -0,0 +1,5 @@
{
"name": "@denotest/types-nested-js-dts",
"version": "1.0.0",
"types": "./index.d.mts"
}