Add layout hints
This commit is contained in:
parent
379a7c7c59
commit
10c1968ea2
1 changed files with 53 additions and 0 deletions
|
@ -16,6 +16,7 @@ use crate::parser::source::Token;
|
|||
use crate::parser::state::RuleState;
|
||||
use crate::parser::state::Scope;
|
||||
use ariadne::Fmt;
|
||||
use lsp::hints::Hints;
|
||||
use mlua::Error::BadArgument;
|
||||
use mlua::Function;
|
||||
use mlua::Lua;
|
||||
|
@ -581,6 +582,10 @@ impl RegexRule for LayoutRule {
|
|||
Some(last) => last,
|
||||
};
|
||||
|
||||
if let Some(hints) = Hints::from_source(token.source(), &state.shared.lsp) {
|
||||
hints.add(token.end(), layout_type.name().to_string());
|
||||
}
|
||||
|
||||
if layout_type.expects().end < tokens.len()
|
||||
// Too many blocks
|
||||
{
|
||||
|
@ -663,6 +668,10 @@ impl RegexRule for LayoutRule {
|
|||
Some(last) => last,
|
||||
};
|
||||
|
||||
if let Some(hints) = Hints::from_source(token.source(), &state.shared.lsp) {
|
||||
hints.add(token.end(), layout_type.name().to_string());
|
||||
}
|
||||
|
||||
if layout_type.expects().start > tokens.len()
|
||||
// Not enough blocks
|
||||
{
|
||||
|
@ -1130,4 +1139,48 @@ mod tests {
|
|||
layout_token { delta_line == 0, delta_start == 2, length == 10 };
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hints() {
|
||||
let source = Rc::new(SourceFile::with_content(
|
||||
"".to_string(),
|
||||
r#"
|
||||
#+LAYOUT_BEGIN Split
|
||||
A
|
||||
#+LAYOUT_NEXT
|
||||
B
|
||||
#+LAYOUT_END
|
||||
"#
|
||||
.to_string(),
|
||||
None,
|
||||
));
|
||||
let parser = LangParser::default();
|
||||
let (_, state) = parser.parse(
|
||||
ParserState::new_with_semantics(&parser, None),
|
||||
source.clone(),
|
||||
None,
|
||||
ParseMode::default(),
|
||||
);
|
||||
if let Some(lsp) = &state.shared.lsp {
|
||||
let borrow = lsp.borrow();
|
||||
|
||||
if let Some(hints) = borrow.inlay_hints.get(&(source as Rc<dyn Source>)) {
|
||||
let borrow = hints.hints.borrow();
|
||||
assert_eq!(
|
||||
borrow[0].position,
|
||||
tower_lsp::lsp_types::Position {
|
||||
line: 3,
|
||||
character: 13
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
borrow[1].position,
|
||||
tower_lsp::lsp_types::Position {
|
||||
line: 5,
|
||||
character: 12
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue