summaryrefslogtreecommitdiff
path: root/cli/lsp/analysis.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/analysis.rs')
-rw-r--r--cli/lsp/analysis.rs89
1 files changed, 39 insertions, 50 deletions
diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs
index aae67f87a..17fdf5d4c 100644
--- a/cli/lsp/analysis.rs
+++ b/cli/lsp/analysis.rs
@@ -29,9 +29,6 @@ use regex::Regex;
use std::cmp::Ordering;
use std::collections::HashMap;
use std::fmt;
-use std::rc::Rc;
-use swc_common::Loc;
-use swc_common::SourceMap;
use swc_common::DUMMY_SP;
use swc_ecmascript::ast as swc_ast;
use swc_ecmascript::visit::Node;
@@ -287,13 +284,7 @@ pub fn parse_module(
source: &str,
media_type: &MediaType,
) -> Result<ast::ParsedModule, AnyError> {
- let source_map = Rc::new(swc_common::SourceMap::default());
- ast::parse_with_source_map(
- &specifier.to_string(),
- source,
- media_type,
- source_map,
- )
+ ast::parse(&specifier.to_string(), source, media_type)
}
// TODO(@kitsonk) a lot of this logic is duplicated in module_graph.rs in
@@ -310,7 +301,7 @@ pub fn analyze_dependencies(
// Parse leading comments for supported triple slash references.
for comment in parsed_module.get_leading_comments().iter() {
if let Some((ts_reference, span)) = parse_ts_reference(comment) {
- let loc = parsed_module.source_map.lookup_char_pos(span.lo);
+ let loc = parsed_module.get_location(span.lo);
match ts_reference {
TypeScriptReference::Path(import) => {
let dep = dependencies.entry(import.clone()).or_default();
@@ -320,11 +311,11 @@ pub fn analyze_dependencies(
dep.maybe_code_specifier_range = Some(Range {
start: Position {
line: (loc.line - 1) as u32,
- character: loc.col_display as u32,
+ character: loc.col as u32,
},
end: Position {
line: (loc.line - 1) as u32,
- character: (loc.col_display + import.chars().count() + 2) as u32,
+ character: (loc.col + import.chars().count() + 2) as u32,
},
});
}
@@ -341,11 +332,11 @@ pub fn analyze_dependencies(
dep.maybe_type_specifier_range = Some(Range {
start: Position {
line: (loc.line - 1) as u32,
- character: loc.col_display as u32,
+ character: loc.col as u32,
},
end: Position {
line: (loc.line - 1) as u32,
- character: (loc.col_display + import.chars().count() + 2) as u32,
+ character: (loc.col + import.chars().count() + 2) as u32,
},
});
}
@@ -368,7 +359,7 @@ pub fn analyze_dependencies(
(
resolve_import(deno_types, specifier, maybe_import_map),
deno_types.clone(),
- parsed_module.source_map.lookup_char_pos(span.lo)
+ parsed_module.get_location(span.lo)
)
})
} else {
@@ -377,20 +368,16 @@ pub fn analyze_dependencies(
let dep = dependencies.entry(desc.specifier.to_string()).or_default();
dep.is_dynamic = desc.is_dynamic;
- let start = parsed_module
- .source_map
- .lookup_char_pos(desc.specifier_span.lo);
- let end = parsed_module
- .source_map
- .lookup_char_pos(desc.specifier_span.hi);
+ let start = parsed_module.get_location(desc.specifier_span.lo);
+ let end = parsed_module.get_location(desc.specifier_span.hi);
let range = Range {
start: Position {
line: (start.line - 1) as u32,
- character: start.col_display as u32,
+ character: start.col as u32,
},
end: Position {
line: (end.line - 1) as u32,
- character: end.col_display as u32,
+ character: end.col as u32,
},
};
dep.maybe_code_specifier_range = Some(range);
@@ -402,11 +389,11 @@ pub fn analyze_dependencies(
dep.maybe_type_specifier_range = Some(Range {
start: Position {
line: (loc.line - 1) as u32,
- character: (loc.col_display + 1) as u32,
+ character: (loc.col + 1) as u32,
},
end: Position {
line: (loc.line - 1) as u32,
- character: (loc.col_display + 1 + specifier.chars().count()) as u32,
+ character: (loc.col + 1 + specifier.chars().count()) as u32,
},
});
dep.maybe_type = Some(resolved_dependency);
@@ -971,16 +958,19 @@ fn prepend_whitespace(content: String, line_content: Option<String>) -> String {
}
}
-/// Get LSP range from the provided SWC start and end locations.
-fn get_range_from_loc(start: &Loc, end: &Loc) -> lsp::Range {
+/// Get LSP range from the provided start and end locations.
+fn get_range_from_location(
+ start: &ast::Location,
+ end: &ast::Location,
+) -> lsp::Range {
lsp::Range {
start: lsp::Position {
line: (start.line - 1) as u32,
- character: start.col_display as u32,
+ character: start.col as u32,
},
end: lsp::Position {
line: (end.line - 1) as u32,
- character: end.col_display as u32,
+ character: end.col as u32,
},
}
}
@@ -1029,16 +1019,16 @@ impl DependencyRanges {
}
}
-struct DependencyRangeCollector {
+struct DependencyRangeCollector<'a> {
import_ranges: DependencyRanges,
- source_map: Rc<SourceMap>,
+ parsed_module: &'a ast::ParsedModule,
}
-impl DependencyRangeCollector {
- pub fn new(source_map: Rc<SourceMap>) -> Self {
+impl<'a> DependencyRangeCollector<'a> {
+ pub fn new(parsed_module: &'a ast::ParsedModule) -> Self {
Self {
import_ranges: DependencyRanges::default(),
- source_map,
+ parsed_module,
}
}
@@ -1047,16 +1037,16 @@ impl DependencyRangeCollector {
}
}
-impl Visit for DependencyRangeCollector {
+impl<'a> Visit for DependencyRangeCollector<'a> {
fn visit_import_decl(
&mut self,
node: &swc_ast::ImportDecl,
_parent: &dyn Node,
) {
- let start = self.source_map.lookup_char_pos(node.src.span.lo);
- let end = self.source_map.lookup_char_pos(node.src.span.hi);
+ let start = self.parsed_module.get_location(node.src.span.lo);
+ let end = self.parsed_module.get_location(node.src.span.hi);
self.import_ranges.0.push(DependencyRange {
- range: narrow_range(get_range_from_loc(&start, &end)),
+ range: narrow_range(get_range_from_location(&start, &end)),
specifier: node.src.value.to_string(),
});
}
@@ -1067,10 +1057,10 @@ impl Visit for DependencyRangeCollector {
_parent: &dyn Node,
) {
if let Some(src) = &node.src {
- let start = self.source_map.lookup_char_pos(src.span.lo);
- let end = self.source_map.lookup_char_pos(src.span.hi);
+ let start = self.parsed_module.get_location(src.span.lo);
+ let end = self.parsed_module.get_location(src.span.hi);
self.import_ranges.0.push(DependencyRange {
- range: narrow_range(get_range_from_loc(&start, &end)),
+ range: narrow_range(get_range_from_location(&start, &end)),
specifier: src.value.to_string(),
});
}
@@ -1081,10 +1071,10 @@ impl Visit for DependencyRangeCollector {
node: &swc_ast::ExportAll,
_parent: &dyn Node,
) {
- let start = self.source_map.lookup_char_pos(node.src.span.lo);
- let end = self.source_map.lookup_char_pos(node.src.span.hi);
+ let start = self.parsed_module.get_location(node.src.span.lo);
+ let end = self.parsed_module.get_location(node.src.span.hi);
self.import_ranges.0.push(DependencyRange {
- range: narrow_range(get_range_from_loc(&start, &end)),
+ range: narrow_range(get_range_from_location(&start, &end)),
specifier: node.src.value.to_string(),
});
}
@@ -1094,10 +1084,10 @@ impl Visit for DependencyRangeCollector {
node: &swc_ast::TsImportType,
_parent: &dyn Node,
) {
- let start = self.source_map.lookup_char_pos(node.arg.span.lo);
- let end = self.source_map.lookup_char_pos(node.arg.span.hi);
+ let start = self.parsed_module.get_location(node.arg.span.lo);
+ let end = self.parsed_module.get_location(node.arg.span.hi);
self.import_ranges.0.push(DependencyRange {
- range: narrow_range(get_range_from_loc(&start, &end)),
+ range: narrow_range(get_range_from_location(&start, &end)),
specifier: node.arg.value.to_string(),
});
}
@@ -1108,8 +1098,7 @@ impl Visit for DependencyRangeCollector {
pub fn analyze_dependency_ranges(
parsed_module: &ast::ParsedModule,
) -> Result<DependencyRanges, AnyError> {
- let mut collector =
- DependencyRangeCollector::new(parsed_module.source_map.clone());
+ let mut collector = DependencyRangeCollector::new(parsed_module);
parsed_module
.module
.visit_with(&swc_ast::Invalid { span: DUMMY_SP }, &mut collector);