Skip to content

Commit 4df116f

Browse files
committed
feat: lint
1 parent 8e02824 commit 4df116f

29 files changed

+507
-133
lines changed

Cargo.lock

+18-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/base_db/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2021"
66
[dependencies]
77
text-size = "1.1.1"
88
line_index.workspace = true
9-
parser.workspace = true
9+
sql_parser.workspace = true
1010

1111
[dev-dependencies]
1212

crates/base_db/src/change.rs

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::ops::Sub;
22

3-
use parser::get_statements;
3+
use line_index::LineIndex;
4+
use sql_parser::extract_sql_statement_ranges;
45
use text_size::{TextLen, TextRange, TextSize};
56

67
use crate::document::{Document, StatementRef};
@@ -124,11 +125,14 @@ impl Change {
124125
.into_iter()
125126
.map(|s| StatementChange::Deleted(s)),
126127
);
127-
doc.statement_ranges = get_statements(&self.text)
128+
// TODO also use errors returned by extract sql statement ranges
129+
doc.statement_ranges = extract_sql_statement_ranges(&self.text)
130+
.ranges
128131
.iter()
129-
.map(|(range, _)| range.clone())
132+
.map(|r| r.clone())
130133
.collect();
131134
doc.text = self.text.clone();
135+
doc.line_index = LineIndex::new(&doc.text);
132136

133137
changed_statements.extend(
134138
doc.statement_refs()
@@ -181,6 +185,7 @@ impl Change {
181185
});
182186

183187
doc.text = self.apply_to_text(&doc.text);
188+
doc.line_index = LineIndex::new(&doc.text);
184189
} else {
185190
// change across stmts
186191

@@ -215,6 +220,7 @@ impl Change {
215220
}
216221

217222
doc.text = self.apply_to_text(&doc.text);
223+
doc.line_index = LineIndex::new(&doc.text);
218224

219225
if doc.text.text_len() < max {
220226
max = doc.text.text_len();
@@ -243,7 +249,7 @@ impl Change {
243249
+ 1,
244250
);
245251

246-
for (range, text) in get_statements(extracted_text) {
252+
for range in extract_sql_statement_ranges(extracted_text).ranges {
247253
match doc
248254
.statement_ranges
249255
.binary_search_by(|r| r.start().cmp(&range.start()))
@@ -253,7 +259,7 @@ impl Change {
253259
doc.statement_ranges.insert(pos, range);
254260
changed_statements.push(StatementChange::Added(StatementRef {
255261
idx: pos,
256-
text: text.to_string(),
262+
text: extracted_text[range].to_string(),
257263
document_url: doc.url.clone(),
258264
}));
259265
}
@@ -294,7 +300,7 @@ impl DocumentChange {
294300

295301
#[cfg(test)]
296302
mod tests {
297-
use parser::get_statements;
303+
use sql_parser::extract_sql_statement_ranges;
298304
use text_size::{TextRange, TextSize};
299305

300306
use crate::{
@@ -344,7 +350,7 @@ mod tests {
344350
assert_eq!("select id,test from users\nselect 1;", d.text);
345351
assert_eq!(d.statement_ranges.len(), 2);
346352

347-
for (r, _) in &get_statements(&d.text) {
353+
for r in &extract_sql_statement_ranges(&d.text).ranges {
348354
assert_eq!(
349355
d.statement_ranges.iter().position(|x| r == x).is_some(),
350356
true,

crates/base_db/src/diagnostics.rs

-39
This file was deleted.

crates/base_db/src/document.rs

+31-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{hash::Hash, hash::Hasher, ops::RangeBounds, usize};
22

33
use line_index::LineIndex;
4-
use parser::get_statements;
4+
use sql_parser::extract_sql_statement_ranges;
55
use text_size::{TextRange, TextSize};
66

77
use crate::PgLspPath;
@@ -51,10 +51,11 @@ impl Document {
5151
pub fn new(params: DocumentParams) -> Document {
5252
Document {
5353
version: 0,
54-
// todo: update get statements to return just the range
55-
statement_ranges: get_statements(&params.text)
54+
// todo: use errors returned by extract_sql_statement_ranges
55+
statement_ranges: extract_sql_statement_ranges(&params.text)
56+
.ranges
5657
.iter()
57-
.map(|(range, _)| range.clone())
58+
.map(|range| range.clone())
5859
.collect(),
5960
line_index: LineIndex::new(&params.text),
6061
text: params.text,
@@ -69,6 +70,16 @@ impl Document {
6970
.map(|idx| self.statement_ref(idx))
7071
}
7172

73+
pub fn statement_at_offset_with_range(
74+
&self,
75+
offset: &TextSize,
76+
) -> Option<(TextRange, StatementRef)> {
77+
self.statement_ranges
78+
.iter()
79+
.position(|r| r.contains(offset))
80+
.map(|idx| self.statement_ref_with_range(idx))
81+
}
82+
7283
pub fn drain_statements(&mut self) -> Vec<StatementRef> {
7384
self.statement_ranges
7485
.drain(..)
@@ -120,4 +131,20 @@ impl Document {
120131
})
121132
.unwrap()
122133
}
134+
135+
pub fn statement_ref_with_range(&self, pos: usize) -> (TextRange, StatementRef) {
136+
self.statement_ranges
137+
.get(pos)
138+
.map(|range| {
139+
(
140+
range.clone(),
141+
StatementRef {
142+
document_url: self.url.clone(),
143+
text: self.text[range.clone()].to_string(),
144+
idx: pos,
145+
},
146+
)
147+
})
148+
.unwrap()
149+
}
123150
}

crates/base_db/src/lib.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
#![feature(extract_if, lazy_cell, test)]
22

33
mod change;
4-
mod diagnostics;
54
mod document;
65
mod path;
76

87
pub use change::{Change, ChangedStatement, DocumentChange, StatementChange};
9-
pub use diagnostics::{Diagnostic, DiagnosticSource, Severity};
108
pub use document::{Document, DocumentParams, StatementRef};
119
pub use path::PgLspPath;

crates/diagnostics/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::fmt::Debug;
22
use text_size::TextRange;
33

4-
#[derive(Debug)]
4+
#[derive(Debug, PartialEq, Eq)]
55
pub struct Diagnostic {
66
pub message: String,
77
pub description: Option<String>,

crates/hover/src/lib.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,29 @@ mod resolve;
22

33
use resolve::Hoverable;
44
use schema_cache::SchemaCache;
5-
use text_size::{TextRange, TextSize};
5+
use text_size::TextRange;
66

77
pub struct HoverParams<'a> {
88
pub position: text_size::TextSize,
99
pub source: String,
1010
pub enriched_ast: Option<&'a sql_parser::EnrichedAst>,
11-
pub tree: &'a tree_sitter::Tree,
11+
pub tree: Option<&'a tree_sitter::Tree>,
1212
pub schema_cache: SchemaCache,
1313
}
1414

1515
#[derive(Debug)]
1616
pub struct HoverResult {
17-
range: Option<TextRange>,
18-
content: String,
17+
pub range: Option<TextRange>,
18+
pub content: String,
1919
}
2020

2121
pub fn hover(params: HoverParams) -> Option<HoverResult> {
2222
let elem = if params.enriched_ast.is_some() {
2323
resolve::resolve_from_enriched_ast(params.position, params.enriched_ast.unwrap())
24+
} else if params.tree.is_some() {
25+
resolve::resolve_from_tree_sitter(params.position, params.tree.unwrap(), &params.source)
2426
} else {
25-
resolve::resolve_from_tree_sitter(params.position, params.tree, &params.source)
27+
None
2628
};
2729

2830
if elem.is_none() {
@@ -38,7 +40,7 @@ pub fn hover(params: HoverParams) -> Option<HoverResult> {
3840
content: if t.comment.is_some() {
3941
format!("{}\n{}", t.name, t.comment.as_ref().unwrap())
4042
} else {
41-
t.name.clone()
43+
format!("Hello from the lsp. This is the table {}", t.name.clone())
4244
},
4345
})
4446
}

crates/ide/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ edition = "2021"
77
text-size = "1.1.1"
88
dashmap = "5.5.3"
99
base_db.workspace = true
10+
lint.workspace = true
1011
hover.workspace = true
1112
sql_parser.workspace = true
1213
diagnostics.workspace = true

crates/ide/src/features.rs

-1
This file was deleted.

crates/ide/src/features/hover.rs

-7
This file was deleted.

0 commit comments

Comments
 (0)