mirror of
https://github.com/latex-lsp/texlab.git
synced 2025-07-07 21:25:32 +00:00
parent
78d2b25860
commit
3949b5afe6
2 changed files with 26 additions and 6 deletions
|
@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
|
||||
- Show inlay hints for label references ([#753](https://github.com/latex-lsp/texlab/issues/753))
|
||||
|
||||
## [5.8.0] - 2023-07-30
|
||||
|
||||
### Added
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
use base_db::{
|
||||
semantics::tex::LabelKind,
|
||||
util::{render_label, RenderedObject},
|
||||
semantics::tex::{Label, LabelKind},
|
||||
util::{queries, render_label, RenderedLabel, RenderedObject},
|
||||
DocumentData,
|
||||
};
|
||||
|
||||
use super::InlayHintBuilder;
|
||||
|
||||
pub(super) fn find_hints(builder: &mut InlayHintBuilder) -> Option<()> {
|
||||
let DocumentData::Tex(data) = &builder.document.data else { return None };
|
||||
let DocumentData::Tex(data) = &builder.document.data else {
|
||||
return None;
|
||||
};
|
||||
|
||||
let range = builder.range;
|
||||
for label in data
|
||||
.semantics
|
||||
.labels
|
||||
.iter()
|
||||
.filter(|label| label.kind == LabelKind::Definition)
|
||||
.filter(|label| label.name.range.intersect(range).is_some())
|
||||
{
|
||||
let Some(rendered) = render_label(builder.workspace, &builder.project, label) else { continue };
|
||||
let Some(number) = &rendered.number else { continue };
|
||||
let Some(rendered) = find_and_render(builder, &label.name.text) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let Some(number) = &rendered.number else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let text = match &rendered.object {
|
||||
RenderedObject::Section { prefix, .. } => {
|
||||
|
@ -39,3 +45,11 @@ pub(super) fn find_hints(builder: &mut InlayHintBuilder) -> Option<()> {
|
|||
|
||||
Some(())
|
||||
}
|
||||
|
||||
fn find_and_render<'a>(builder: &InlayHintBuilder<'a>, name: &str) -> Option<RenderedLabel<'a>> {
|
||||
let project = &builder.project;
|
||||
queries::objects_with_name::<Label>(project, name)
|
||||
.map(|(_, label)| label)
|
||||
.find(|label| label.kind == LabelKind::Definition)
|
||||
.and_then(|label| render_label(builder.workspace, project, label))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue