Skip to content

Commit 31e569e

Browse files
authored
refactor: use real_hi for evaluation range (#11549)
1 parent b083f77 commit 31e569e

File tree

126 files changed

+386
-433
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+386
-433
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/rspack_core/src/concatenated_module.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ use rspack_javascript_compiler::ast::Ast;
2626
use rspack_sources::{
2727
BoxSource, CachedSource, ConcatSource, RawStringSource, ReplaceSource, Source, SourceExt,
2828
};
29-
use rspack_util::{ext::DynHash, itoa, json_stringify, source_map::SourceMapKind, swc::join_atom};
29+
use rspack_util::{
30+
SpanExt, ext::DynHash, itoa, json_stringify, source_map::SourceMapKind, swc::join_atom,
31+
};
3032
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet, FxHasher};
3133
use swc_core::{
3234
common::{FileName, Spanned, SyntaxContext},
@@ -46,17 +48,17 @@ use crate::{
4648
CodeGenerationExportsFinalNames, CodeGenerationPublicPathAutoReplace, CodeGenerationResult,
4749
Compilation, ConcatenatedModuleIdent, ConcatenationScope, ConditionalInitFragment,
4850
ConnectionState, Context, DEFAULT_EXPORT, DependenciesBlock, DependencyId, DependencyType,
49-
ErrorSpan, ExportProvided, ExportsArgument, ExportsInfoGetter, ExportsType, FactoryMeta,
50-
GetUsedNameParam, IdentCollector, InitFragment, InitFragmentStage, LibIdentOptions,
51+
ExportProvided, ExportsArgument, ExportsInfoGetter, ExportsType, FactoryMeta, GetUsedNameParam,
52+
IdentCollector, InitFragment, InitFragmentStage, LibIdentOptions,
5153
MaybeDynamicTargetExportInfoHashKey, Module, ModuleArgument, ModuleGraph,
5254
ModuleGraphCacheArtifact, ModuleGraphConnection, ModuleIdentifier, ModuleLayer,
5355
ModuleStaticCacheArtifact, ModuleType, NAMESPACE_OBJECT_EXPORT, PrefetchExportsInfoMode, Resolve,
54-
RuntimeCondition, RuntimeGlobals, RuntimeSpec, SourceType, SpanExt, UsageState, UsedName,
55-
UsedNameItem, define_es_module_flag_statement, escape_identifier, filter_runtime,
56-
get_runtime_key, impl_source_map_config, merge_runtime_condition,
57-
merge_runtime_condition_non_false, module_update_hash, property_access, property_name,
58-
reserved_names::RESERVED_NAMES, returning_function, runtime_condition_expression,
59-
subtract_runtime_condition, to_identifier_with_escaped, to_normal_comment,
56+
RuntimeCondition, RuntimeGlobals, RuntimeSpec, SourceType, UsageState, UsedName, UsedNameItem,
57+
define_es_module_flag_statement, escape_identifier, filter_runtime, get_runtime_key,
58+
impl_source_map_config, merge_runtime_condition, merge_runtime_condition_non_false,
59+
module_update_hash, property_access, property_name, reserved_names::RESERVED_NAMES,
60+
returning_function, runtime_condition_expression, subtract_runtime_condition,
61+
to_identifier_with_escaped, to_normal_comment,
6062
};
6163

6264
type ExportsDefinitionArgs = Vec<(String, String)>;
@@ -2003,14 +2005,12 @@ impl ConcatenatedModule {
20032005
) {
20042006
Ok(res) => Program::Module(res),
20052007
Err(err) => {
2006-
let span: ErrorSpan = err.span().into();
2007-
20082008
// return empty error as we already push error to compilation.diagnostics
20092009
return Err(
20102010
rspack_error::TraceableError::from_source_file(
20112011
&fm,
2012-
span.start as usize,
2013-
span.end as usize,
2012+
err.span().real_lo() as usize,
2013+
err.span().real_hi() as usize,
20142014
"JavaScript parse error:\n".to_string(),
20152015
err.kind().msg().to_string(),
20162016
)

crates/rspack_core/src/context_module_factory.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ use tracing::instrument;
1212

1313
use crate::{
1414
BoxDependency, CompilationId, ContextElementDependency, ContextModule, ContextModuleOptions,
15-
DependencyCategory, DependencyId, DependencyType, ErrorSpan, FactoryMeta, ModuleExt,
16-
ModuleFactory, ModuleFactoryCreateData, ModuleFactoryResult, ModuleIdentifier, RawModule,
17-
ResolveArgs, ResolveContextModuleDependencies, ResolveInnerOptions,
18-
ResolveOptionsWithDependencyType, ResolveResult, Resolver, ResolverFactory, SharedPluginDriver,
19-
resolve,
15+
DependencyCategory, DependencyId, DependencyType, FactoryMeta, ModuleExt, ModuleFactory,
16+
ModuleFactoryCreateData, ModuleFactoryResult, ModuleIdentifier, RawModule, ResolveArgs,
17+
ResolveContextModuleDependencies, ResolveInnerOptions, ResolveOptionsWithDependencyType,
18+
ResolveResult, Resolver, ResolverFactory, SharedPluginDriver, resolve,
2019
};
2120

2221
#[derive(Debug)]
@@ -279,9 +278,7 @@ impl ContextModuleFactory {
279278
specifier: specifier.as_str(),
280279
dependency_type: dependency.dependency_type(),
281280
dependency_category: dependency.category(),
282-
span: dependency
283-
.range()
284-
.map(|range| ErrorSpan::new(range.start, range.end)),
281+
span: dependency.range(),
285282
resolve_options: data.resolve_options.clone(),
286283
resolve_to_context: true,
287284
optional: dependency.get_optional(),

crates/rspack_core/src/dependency/dependency_location.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ use std::{
55

66
use rspack_cacheable::cacheable;
77
use rspack_location::{DependencyLocation, RealDependencyLocation, SourcePosition};
8+
use rspack_util::SpanExt;
89

910
/// Represents a range in a dependency, typically used for tracking the span of code in a source file.
1011
/// It stores the start and end positions (as offsets) of the range, typically using base-0 indexing.
1112
#[cacheable]
12-
#[derive(Debug, Clone, Hash, Eq, PartialEq)]
13+
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
1314
pub struct DependencyRange {
1415
pub end: u32,
1516
pub start: u32,
@@ -27,8 +28,8 @@ impl From<(u32, u32)> for DependencyRange {
2728
impl From<swc_core::common::Span> for DependencyRange {
2829
fn from(span: swc_core::common::Span) -> Self {
2930
Self {
30-
start: span.lo.0.saturating_sub(1),
31-
end: span.hi.0.saturating_sub(1),
31+
start: span.real_lo(),
32+
end: span.real_hi(),
3233
}
3334
}
3435
}

crates/rspack_core/src/dependency/dependency_trait.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ pub trait Dependency:
8383
None
8484
}
8585

86-
fn range(&self) -> Option<&DependencyRange> {
86+
fn range(&self) -> Option<DependencyRange> {
8787
None
8888
}
8989

crates/rspack_core/src/dependency/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ mod loader_import;
1414
mod module_dependency;
1515
mod runtime_requirements_dependency;
1616
mod runtime_template;
17-
mod span;
1817
mod static_exports_dependency;
1918

2019
use std::sync::Arc;
@@ -39,7 +38,6 @@ pub use runtime_requirements_dependency::{
3938
pub use runtime_template::*;
4039
use rustc_hash::{FxHashMap, FxHashSet};
4140
use serde::Serialize;
42-
pub use span::SpanExt;
4341
pub use static_exports_dependency::{StaticExportsDependency, StaticExportsSpec};
4442
use swc_core::ecma::atoms::Atom;
4543

crates/rspack_core/src/dependency/module_dependency.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use dyn_clone::clone_trait_object;
22
use rspack_cacheable::cacheable_dyn;
33

44
use super::{Dependency, FactorizeInfo};
5-
use crate::{DependencyCondition, ErrorSpan};
5+
use crate::DependencyCondition;
66

77
#[cacheable_dyn]
88
pub trait ModuleDependency: Dependency {
@@ -12,16 +12,6 @@ pub trait ModuleDependency: Dependency {
1212
self.request()
1313
}
1414

15-
/// Span for precise source location.
16-
/// For example: the source node in an `ImportDeclaration`.
17-
/// This is only intended used to display better diagnostics.
18-
/// So it might not be precise as it is using [crate::Dependency::span] as the default value.
19-
fn source_span(&self) -> Option<ErrorSpan> {
20-
self
21-
.range()
22-
.map(|range| ErrorSpan::new(range.start, range.end))
23-
}
24-
2515
fn weak(&self) -> bool {
2616
self.lazy().is_some()
2717
}

crates/rspack_core/src/diagnostics.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::fmt::Display;
33
use itertools::Itertools;
44
use rspack_error::{
55
DiagnosticExt, Error, TraceableError, error, impl_diagnostic_transparent,
6-
miette::{self, Diagnostic},
6+
miette::{self, Diagnostic, diagnostic},
77
thiserror::{self, Error},
88
};
99
use rspack_util::ext::AsAny;
@@ -17,16 +17,19 @@ use crate::{BoxLoader, DependencyRange};
1717
pub struct EmptyDependency(Box<dyn Diagnostic + Send + Sync>);
1818

1919
impl EmptyDependency {
20-
pub fn new(span: DependencyRange) -> Self {
21-
Self(
20+
pub fn new(span: Option<DependencyRange>) -> Self {
21+
let err = if let Some(span) = span {
2222
TraceableError::from_lazy_file(
2323
span.start as usize,
2424
span.end as usize,
2525
"Empty dependency".to_string(),
2626
"Expected a non-empty request".to_string(),
2727
)
28-
.boxed(),
29-
)
28+
.boxed()
29+
} else {
30+
diagnostic!(code = "Empty dependency", "Expected a non-empty request").into()
31+
};
32+
Self(err)
3033
}
3134
}
3235

crates/rspack_core/src/normal_module_factory.rs

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
use std::{borrow::Cow, sync::Arc};
22

3-
use rspack_cacheable::cacheable;
43
use rspack_error::{Result, error};
54
use rspack_hook::define_hook;
65
use rspack_loader_runner::{Loader, Scheme, get_scheme};
76
use rspack_paths::Utf8PathBuf;
87
use rspack_util::MergeFrom;
98
use sugar_path::SugarPath;
10-
use swc_core::common::Span;
119
use winnow::prelude::*;
1210

1311
use crate::{
1412
AssetInlineGeneratorOptions, AssetResourceGeneratorOptions, BoxLoader, BoxModule,
1513
CompilerOptions, Context, CssAutoGeneratorOptions, CssAutoParserOptions,
16-
CssModuleGeneratorOptions, CssModuleParserOptions, Dependency, DependencyCategory,
17-
DependencyRange, FactoryMeta, FuncUseCtx, GeneratorOptions, ModuleExt, ModuleFactory,
18-
ModuleFactoryCreateData, ModuleFactoryResult, ModuleIdentifier, ModuleLayer, ModuleRuleEffect,
19-
ModuleRuleEnforce, ModuleRuleUse, ModuleRuleUseLoader, ModuleType, NormalModule,
20-
ParserAndGenerator, ParserOptions, RawModule, Resolve, ResolveArgs,
21-
ResolveOptionsWithDependencyType, ResolveResult, Resolver, ResolverFactory, ResourceData,
22-
ResourceParsedData, RunnerContext, SharedPluginDriver, diagnostics::EmptyDependency,
23-
module_rules_matcher, parse_resource, resolve, stringify_loaders_and_resource,
14+
CssModuleGeneratorOptions, CssModuleParserOptions, Dependency, DependencyCategory, FactoryMeta,
15+
FuncUseCtx, GeneratorOptions, ModuleExt, ModuleFactory, ModuleFactoryCreateData,
16+
ModuleFactoryResult, ModuleIdentifier, ModuleLayer, ModuleRuleEffect, ModuleRuleEnforce,
17+
ModuleRuleUse, ModuleRuleUseLoader, ModuleType, NormalModule, ParserAndGenerator, ParserOptions,
18+
RawModule, Resolve, ResolveArgs, ResolveOptionsWithDependencyType, ResolveResult, Resolver,
19+
ResolverFactory, ResourceData, ResourceParsedData, RunnerContext, SharedPluginDriver,
20+
diagnostics::EmptyDependency, module_rules_matcher, parse_resource, resolve,
21+
stringify_loaders_and_resource,
2422
};
2523

2624
define_hook!(NormalModuleFactoryBeforeResolve: SeriesBail(data: &mut ModuleFactoryCreateData) -> bool,tracing=false);
@@ -133,7 +131,7 @@ impl NormalModuleFactory {
133131
.expect("should be module dependency");
134132
let dependency_type = *dependency.dependency_type();
135133
let dependency_category = *dependency.category();
136-
let dependency_source_span = dependency.source_span();
134+
let dependency_range = dependency.range();
137135
let dependency_optional = dependency.get_optional();
138136

139137
let importer = data.issuer_identifier;
@@ -218,8 +216,7 @@ impl NormalModuleFactory {
218216
let second_char = request.next();
219217

220218
if first_char.is_none() {
221-
let span = dependency.source_span().unwrap_or_default();
222-
return Err(EmptyDependency::new(DependencyRange::new(span.start, span.end)).into());
219+
return Err(EmptyDependency::new(dependency.range()).into());
223220
}
224221

225222
// See: https://webpack.js.org/concepts/loaders/#inline
@@ -314,7 +311,7 @@ impl NormalModuleFactory {
314311
specifier: &resource,
315312
dependency_type: &dependency_type,
316313
dependency_category: &dependency_category,
317-
span: dependency_source_span,
314+
span: dependency_range,
318315
resolve_options: data.resolve_options.clone(),
319316
resolve_to_context: false,
320317
optional: dependency_optional,
@@ -884,32 +881,6 @@ async fn resolve_each(
884881
.ok_or_else(|| error!("Unable to resolve loader {}", l.loader))
885882
}
886883

887-
/// Using `u32` instead of `usize` to reduce memory usage,
888-
/// `u32` is 4 bytes on 64bit machine, comparing to `usize` which is 8 bytes.
889-
/// ## Warning
890-
/// [ErrorSpan] start from zero, and `Span` of `swc` start from one. see https://swc-css.netlify.app/?code=eJzLzC3ILypRSFRIK8rPVVAvSS0u0csqVgcAZaoIKg
891-
#[cacheable]
892-
#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy, Default, PartialOrd, Ord)]
893-
pub struct ErrorSpan {
894-
pub start: u32,
895-
pub end: u32,
896-
}
897-
898-
impl ErrorSpan {
899-
pub fn new(start: u32, end: u32) -> Self {
900-
Self { start, end }
901-
}
902-
}
903-
904-
impl From<Span> for ErrorSpan {
905-
fn from(span: Span) -> Self {
906-
Self {
907-
start: span.lo.0.saturating_sub(1),
908-
end: span.hi.0.saturating_sub(1),
909-
}
910-
}
911-
}
912-
913884
#[derive(Debug)]
914885
pub struct NormalModuleCreateData {
915886
pub raw_request: String,

crates/rspack_core/src/resolver/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub use self::{
2222
resolver_impl::{ResolveInnerError, ResolveInnerOptions, Resolver},
2323
};
2424
use crate::{
25-
Context, DependencyCategory, DependencyType, ErrorSpan, ModuleIdentifier, Resolve,
25+
Context, DependencyCategory, DependencyRange, DependencyType, ModuleIdentifier, Resolve,
2626
SharedPluginDriver,
2727
};
2828

@@ -43,7 +43,7 @@ pub struct ResolveArgs<'a> {
4343
pub specifier: &'a str,
4444
pub dependency_type: &'a DependencyType,
4545
pub dependency_category: &'a DependencyCategory,
46-
pub span: Option<ErrorSpan>,
46+
pub span: Option<DependencyRange>,
4747
pub resolve_options: Option<Arc<Resolve>>,
4848
pub resolve_to_context: bool,
4949
pub optional: bool,

0 commit comments

Comments
 (0)