Skip to content

Commit 5d2038d

Browse files
authored
Add source code location to all named entities (#302)
1 parent d6c66e5 commit 5d2038d

36 files changed

+1046
-561
lines changed

vhdl_lang/src/analysis/analyze.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ pub(super) struct AnalyzeContext<'a, 't> {
154154
// - for example when doing 'use library.all' the file is sensitive to adding/removing
155155
// anything from library
156156
current_unit: UnitId,
157+
source: Source,
157158
pub(super) arena: &'a Arena,
158159
uses: RefCell<FnvHashSet<UnitId>>,
159160
missing_unit: RefCell<FnvHashSet<(Symbol, Symbol, Option<Symbol>)>>,
@@ -165,6 +166,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
165166
pub fn new(
166167
root: &'a DesignRoot,
167168
current_unit: &UnitId,
169+
source: Source,
168170
arena: &'a Arena,
169171
ctx: &'t dyn TokenAccess,
170172
) -> AnalyzeContext<'a, 't> {
@@ -179,6 +181,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
179181
),
180182
root,
181183
current_unit: current_unit.clone(),
184+
source,
182185
arena,
183186
uses: RefCell::new(FnvHashSet::default()),
184187
missing_unit: RefCell::new(FnvHashSet::default()),
@@ -470,4 +473,8 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
470473
None
471474
}
472475
}
476+
477+
pub fn source(&self) -> Source {
478+
self.source.clone()
479+
}
473480
}

vhdl_lang/src/analysis/concurrent.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::ast::*;
1111
use crate::data::error_codes::ErrorCode;
1212
use crate::data::*;
1313
use crate::named_entity::*;
14+
use crate::{HasTokenSpan, TokenSpan};
1415
use analyze::*;
1516
use target::AssignmentType;
1617

@@ -43,13 +44,15 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
4344
diagnostics: &mut dyn DiagnosticHandler,
4445
) -> FatalResult {
4546
for statement in statements.iter_mut() {
47+
let span = statement.span();
4648
if let Some(ref mut label) = statement.label.tree {
4749
let ent = self.arena.explicit(
4850
label.name(),
4951
parent,
5052
AnyEntKind::Concurrent(statement.statement.item.label_typ()),
5153
Some(label.pos(self.ctx)),
52-
None,
54+
span,
55+
Some(self.source()),
5356
);
5457
statement.label.decl.set(ent.id());
5558
scope.add(ent, diagnostics);
@@ -61,7 +64,8 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
6164
Related::None,
6265
AnyEntKind::Concurrent(statement.statement.item.label_typ()),
6366
None,
64-
None,
67+
span,
68+
Some(self.source()),
6569
);
6670
statement.label.decl.set(ent.id());
6771
}
@@ -77,6 +81,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
7781
statement: &mut LabeledConcurrentStatement,
7882
diagnostics: &mut dyn DiagnosticHandler,
7983
) -> FatalResult {
84+
let src_span = statement.span();
8085
match statement.statement.item {
8186
ConcurrentStatement::Block(ref mut block) => {
8287
if let Some(ref mut guard_condition) = block.guard_condition {
@@ -143,11 +148,12 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
143148
self.arena,
144149
parent,
145150
AnyEntKind::LoopParameter(typ),
146-
None,
151+
src_span,
152+
Some(self.source()),
147153
),
148154
diagnostics,
149155
);
150-
self.analyze_generate_body(&nested, parent, body, diagnostics)?;
156+
self.analyze_generate_body(&nested, parent, body, src_span, diagnostics)?;
151157
}
152158
ConcurrentStatement::IfGenerate(ref mut gen) => {
153159
let Conditionals {
@@ -158,11 +164,11 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
158164
let Conditional { condition, item } = conditional;
159165
self.boolean_expr(scope, condition, diagnostics)?;
160166
let nested = scope.nested();
161-
self.analyze_generate_body(&nested, parent, item, diagnostics)?;
167+
self.analyze_generate_body(&nested, parent, item, src_span, diagnostics)?;
162168
}
163169
if let Some(ref mut else_item) = else_item {
164170
let nested = scope.nested();
165-
self.analyze_generate_body(&nested, parent, else_item, diagnostics)?;
171+
self.analyze_generate_body(&nested, parent, else_item, src_span, diagnostics)?;
166172
}
167173
}
168174
ConcurrentStatement::CaseGenerate(ref mut gen) => {
@@ -184,7 +190,7 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
184190
} = alternative;
185191
self.choice_with_ttyp(scope, ctyp, choices, diagnostics)?;
186192
let nested = scope.nested();
187-
self.analyze_generate_body(&nested, parent, item, diagnostics)?;
193+
self.analyze_generate_body(&nested, parent, item, src_span, diagnostics)?;
188194
}
189195
}
190196
ConcurrentStatement::Instance(ref mut instance) => {
@@ -232,13 +238,14 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
232238
scope: &Scope<'a>,
233239
parent: EntRef<'a>,
234240
body: &mut GenerateBody,
241+
span: TokenSpan,
235242
diagnostics: &mut dyn DiagnosticHandler,
236243
) -> FatalResult {
237244
let GenerateBody {
238245
alternative_label,
239246
decl,
240247
statements,
241-
end_label_pos: _,
248+
..
242249
} = body;
243250

244251
let mut inner_parent = parent;
@@ -248,7 +255,8 @@ impl<'a, 't> AnalyzeContext<'a, 't> {
248255
self.arena,
249256
parent,
250257
AnyEntKind::Concurrent(Some(Concurrent::Generate)),
251-
None,
258+
span,
259+
Some(self.source()),
252260
);
253261
scope.add(ent, diagnostics);
254262
inner_parent = ent;

0 commit comments

Comments
 (0)