Skip to content

Commit 9c03a12

Browse files
committed
fix: field parameters
1 parent 8b16d3c commit 9c03a12

File tree

7 files changed

+33
-65
lines changed

7 files changed

+33
-65
lines changed

src/backend.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -490,14 +490,12 @@ impl Backend {
490490
pub async fn complete_model(
491491
&self,
492492
needle: &str,
493-
range: ByteRange,
494-
rope: Rope,
493+
range: Range,
495494
items: &mut MaxVec<CompletionItem>,
496495
) -> anyhow::Result<()> {
497496
if !items.has_space() {
498497
return Ok(());
499498
}
500-
let range = offset_range_to_lsp_range(range, rope).ok_or_else(|| errloc!("(complete_model) range"))?;
501499
let by_prefix = self.index.models.by_prefix.read().await;
502500
let matches = by_prefix
503501
.iter_prefix(needle.as_bytes())
@@ -509,10 +507,9 @@ impl Backend {
509507
Some(_R(module).to_string())
510508
});
511509
CompletionItem {
512-
text_edit: Some(CompletionTextEdit::InsertAndReplace(InsertReplaceEdit {
510+
text_edit: Some(CompletionTextEdit::Edit(TextEdit {
513511
new_text: label.clone(),
514-
insert: range,
515-
replace: range,
512+
range,
516513
})),
517514
label,
518515
detail: module,
@@ -526,14 +523,12 @@ impl Backend {
526523
pub async fn complete_template_name(
527524
&self,
528525
needle: &str,
529-
range: ByteRange,
530-
rope: Rope,
526+
range: Range,
531527
items: &mut MaxVec<CompletionItem>,
532528
) -> anyhow::Result<()> {
533529
if !items.has_space() {
534530
return Ok(());
535531
}
536-
let range = offset_range_to_lsp_range(range, rope).ok_or_else(|| errloc!("(complete_template_name) range"))?;
537532
let by_prefix = self.index.templates.by_prefix.read().await;
538533
let matches = by_prefix.iter_prefix(needle.as_bytes()).map(|(_, key)| {
539534
let label = _R(*key).to_string();
@@ -1154,4 +1149,3 @@ impl Text {
11541149
(!out.is_empty()).then(|| out.map_unit(ByteOffset))
11551150
}
11561151
}
1157-

src/python.rs

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -322,16 +322,11 @@ impl Backend {
322322
};
323323
let relative_offset = range.start;
324324
let needle = Cow::from(slice.byte_slice(1..offset - relative_offset));
325-
let rope = rope.clone();
326-
early_return.lift(|| async move {
325+
let range =
326+
some!(offset_range_to_lsp_range(range.shrink(1).map_unit(ByteOffset), rope.clone()));
327+
early_return.lift(move || async move {
327328
let mut items = MaxVec::new(completions_limit);
328-
self.complete_model(
329-
&needle,
330-
range.shrink(1).map_unit(ByteOffset),
331-
rope.clone(),
332-
&mut items,
333-
)
334-
.await?;
329+
self.complete_model(&needle, range, &mut items).await?;
335330
Ok(Some(CompletionResponse::List(CompletionList {
336331
is_incomplete: !items.has_space(),
337332
items: items.into_inner(),
@@ -399,7 +394,7 @@ impl Backend {
399394
if matches!(descriptor, b"comodel_name" | b"domain") {
400395
field_descriptors.push((descriptor, desc_value));
401396
}
402-
if desc_value.byte_range().contains(&offset) {
397+
if desc_value.byte_range().contains_end(offset) {
403398
field_descriptor_in_offset = Some((descriptor, desc_value));
404399
}
405400
}
@@ -425,16 +420,10 @@ impl Backend {
425420
};
426421
let relative_offset = range.start;
427422
let needle = Cow::from(slice.byte_slice(1..offset - relative_offset));
428-
let rope = rope.clone();
429-
early_return.lift(|| async move {
423+
let range = some!(offset_range_to_lsp_range(range.map_unit(ByteOffset), rope.clone()));
424+
early_return.lift(move || async move {
430425
let mut items = MaxVec::new(completions_limit);
431-
self.complete_model(
432-
&needle,
433-
range.shrink(1).map_unit(ByteOffset),
434-
rope.clone(),
435-
&mut items,
436-
)
437-
.await?;
426+
self.complete_model(&needle, range, &mut items).await?;
438427
Ok(Some(CompletionResponse::List(CompletionList {
439428
is_incomplete: !items.has_space(),
440429
items: items.into_inner(),

src/utils.rs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -434,37 +434,12 @@ impl Drop for Blocker<'_> {
434434
}
435435
}
436436

437-
// /// Custom display trait to bypass orphan rules.
438-
// /// Implemented on [`Option<_>`] to default to printing nothing.
437+
/// Custom display trait to bypass orphan rules.
438+
/// Implemented on [`Option<_>`] to default to printing nothing.
439439
pub trait DisplayExt {
440440
fn display(self) -> impl Display;
441441
}
442442

443-
// impl<T: Display> DisplayExt for Option<T> {
444-
// fn display(&self) -> impl Display {
445-
// #[repr(transparent)]
446-
// struct OptionDisplay<'a, T>(Option<&'a T>);
447-
// impl<T: Display> Display for OptionDisplay<'_, T> {
448-
// #[inline]
449-
// fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> std::fmt::Result {
450-
// match &self.0 {
451-
// Some(value) => value.fmt(f),
452-
// None => Ok(()),
453-
// }
454-
// }
455-
// }
456-
// OptionDisplay(self.as_ref())
457-
// }
458-
// }
459-
460-
// impl<T: Display> DisplayExt for Option<&T> {
461-
// fn display(self) -> impl Display {
462-
// match self {
463-
// Some(value) => value as &dyn Display,
464-
// None => &"" as &dyn Display,
465-
// }
466-
// }
467-
// }
468443
impl<T: Display> DisplayExt for Option<T> {
469444
fn display(self) -> impl Display {
470445
struct Adapter<T>(Option<T>);
@@ -631,13 +606,12 @@ pub fn strict_canonicalize<P: AsRef<Path>>(path: P) -> anyhow::Result<PathBuf> {
631606

632607
#[cfg(test)]
633608
mod tests {
634-
use std::{path::Path, str::FromStr};
609+
use std::path::Path;
635610

636611
use crate::utils::{strict_canonicalize, DisplayExt};
637612

638613
use super::{to_display_path, uri_from_file_path, UriExt, WSL};
639614
use pretty_assertions::assert_eq;
640-
use tower_lsp_server::lsp_types::Uri;
641615

642616
#[test]
643617
fn test_to_display_path() {
@@ -668,6 +642,9 @@ mod tests {
668642
#[test]
669643
#[cfg(windows)]
670644
fn test_windows_uri_roundtrip_conversion() {
645+
use std::str::FromStr;
646+
use tower_lsp_server::lsp_types::Uri;
647+
671648
let uri = Uri::from_str("file:///C:/Windows").unwrap();
672649
let path = uri.to_file_path().unwrap();
673650
assert_eq!(&path, Path::new("C:/Windows"), "uri={uri:?}");

src/xml.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,7 @@ impl Backend {
6969
};
7070
let mut reader = Tokenizer::from(text.as_ref());
7171
let mut record_ranges = vec![];
72-
let path = uri
73-
.to_file_path()
74-
.ok_or_else(|| errloc!("uri.to_file_path failed"))?;
72+
let path = uri.to_file_path().ok_or_else(|| errloc!("uri.to_file_path failed"))?;
7573
let current_module = self
7674
.index
7775
.module_of_path(&path)
@@ -264,8 +262,8 @@ impl Backend {
264262
.await?
265263
}
266264
RefKind::Model => {
267-
self.complete_model(needle, replace_range, rope.clone(), &mut items)
268-
.await?
265+
let range = some!(offset_range_to_lsp_range(replace_range, rope.clone()));
266+
self.complete_model(needle, range, &mut items).await?
269267
}
270268
RefKind::PropertyName(access) => {
271269
let mut model_filter = some!(model_filter);
@@ -289,8 +287,8 @@ impl Backend {
289287
)?;
290288
}
291289
RefKind::TInherit | RefKind::TCall => {
292-
self.complete_template_name(needle, replace_range, rope.clone(), &mut items)
293-
.await?;
290+
let range = some!(offset_range_to_lsp_range(replace_range, rope.clone()));
291+
self.complete_template_name(needle, range, &mut items).await?;
294292
}
295293
RefKind::PropOf(component) => {
296294
self.complete_component_prop(/*needle,*/ replace_range, rope.clone(), component, &mut items)?;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"module":{"roots":["."]}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name": "foo"}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Foo(Model):
2+
_name = 'foo'
3+
4+
class Bar(Model):
5+
_name = 'bar'
6+
7+
foo_id = Many2one(comodel_name='foo')
8+
# ^complete bar foo

0 commit comments

Comments
 (0)