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:
parent
54eb930e8c
commit
a5111fbc4d
8 changed files with 70 additions and 8 deletions
|
@ -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)));
|
||||
|
|
|
@ -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(),
|
||||
))
|
||||
|
|
|
@ -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?;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
export const someString: string;
|
|
@ -0,0 +1 @@
|
|||
export { someString } from "./import.mjs";
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "@denotest/types-nested-js-dts",
|
||||
"version": "1.0.0",
|
||||
"types": "./index.d.mts"
|
||||
}
|
Loading…
Add table
Reference in a new issue