Skip to content

Commit

Permalink
removed dashmap, state moved to channels
Browse files Browse the repository at this point in the history
  • Loading branch information
uros-5 committed Mar 11, 2024
1 parent 87e04fc commit 30bc5f0
Show file tree
Hide file tree
Showing 16 changed files with 670 additions and 1,437 deletions.
102 changes: 5 additions & 97 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions jinja-lsp-queries/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jinja-lsp-queries"
version = "0.1.5"
version = "0.1.6"
edition = "2021"
description = "TreeSitter queries for jinja-lsp"
license = "MIT"
Expand All @@ -9,7 +9,6 @@ license = "MIT"
tree-sitter = "0.20.10"
tree-sitter-jinja2 = "0.0.5"
tree-sitter-rust = "0.20.4"
dashmap = "5.1.0"
tower-lsp = { version = "0.20.0", features = ["proposed"] }
ropey = "1.5.0"

36 changes: 17 additions & 19 deletions jinja-lsp-queries/src/capturer/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,28 +65,24 @@ impl JinjaObjectCapturer {
let end = capture.node.end_position();
if let Ok(value) = value {
if start.row == self.dot.1.row && start.column == self.dot.1.column {
match self
.objects
.last_mut()
.map(|last| {
last.fields.push((String::from(value), (start, end)));
self.ident = (start, end);
})
.is_none()
{
true => {
self.ident = (start, end);
let is_filter = self.is_hover(start);
self.objects.push(JinjaObject::new(
String::from(value),
start,
end,
is_filter,
));
if let Some(last) = self.objects.last_mut() {
last.fields.push((String::from(value), (start, end)));
self.ident = (start, end);
} else {
// TODO: in future add those to main library
if VALID_IDENTIFIERS.contains(&value) {
return;
}
false => (),
self.ident = (start, end);
let is_filter = self.is_hover(start);
self.objects
.push(JinjaObject::new(String::from(value), start, end, is_filter));
}
} else {
// TODO: in future add those to main library
if VALID_IDENTIFIERS.contains(&value) {
return;
}
self.ident = (start, end);
let is_filter = self.is_hover(start);
self.objects
Expand Down Expand Up @@ -143,3 +139,5 @@ pub enum CompletionType {
Filter,
Identifier,
}

static VALID_IDENTIFIERS: [&str; 4] = ["loop", "true", "false", "not"];
77 changes: 8 additions & 69 deletions jinja-lsp-queries/src/lsp_helper.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use std::collections::HashMap;

use dashmap::DashMap;
use tree_sitter::{Node, Point};

use crate::{
Expand All @@ -10,78 +9,18 @@ use crate::{
};

pub fn search_errors(
root: Node<'_>,
source: &str,
query: &Queries,
variables: &DashMap<String, Vec<JinjaVariable>>,
file_name: &String,
diags: &mut HashMap<String, Vec<(JinjaVariable, JinjaDiagnostic)>>,
) -> Option<()> {
let trigger_point = Point::new(0, 0);
let query = &query.jinja_idents;
let capturer = JinjaObjectCapturer::default();
let props = query_props(root, source, trigger_point, query, true, capturer);
let props = props.show();
for object in props {
if object.is_filter {
continue;
}
let file = variables.get(file_name)?;
let mut exist = false;
let mut err_type = JinjaDiagnostic::Undefined;
let mut to_warn = false;
let temp = file
.value()
.iter()
.filter(|variable| variable.name == object.name)
.filter(|variable| {
exist = true;
object.location.0 >= variable.location.0
});
let empty = temp.count() == 0;
if empty && exist {
to_warn = true;
} else if empty {
to_warn = true;
drop(file);
for i in variables {
let temp = i
.value()
.iter()
.filter(|variable| variable.name == object.name);

if temp.count() != 0 {
err_type = JinjaDiagnostic::DefinedSomewhere;
to_warn = true;
break;
}
}
}
if to_warn {
let variable = JinjaVariable::new(&object.name, object.location, DataType::Variable);
if diags.get(file_name).is_none() {
diags.insert(file_name.to_string(), vec![(variable, err_type)]);
} else {
diags.get_mut(file_name).unwrap().push((variable, err_type));
}
}
}
None
}

pub fn search_errors2(
root: Node<'_>,
source: &str,
query: &Queries,
variables: &HashMap<String, Vec<JinjaVariable>>,
file_name: &String,
diags: &mut HashMap<String, Vec<(JinjaVariable, JinjaDiagnostic)>>,
) -> Option<()> {
) -> Option<Vec<(JinjaVariable, JinjaDiagnostic)>> {
let trigger_point = Point::new(0, 0);
let query = &query.jinja_idents;
let capturer = JinjaObjectCapturer::default();
let props = query_props(root, source, trigger_point, query, true, capturer);
let props = props.show();
let mut diags = vec![];
for object in props {
if object.is_filter {
continue;
Expand Down Expand Up @@ -115,12 +54,12 @@ pub fn search_errors2(
}
if to_warn {
let variable = JinjaVariable::new(&object.name, object.location, DataType::Variable);
if diags.get(file_name).is_none() {
diags.insert(file_name.to_string(), vec![(variable, err_type)]);
} else {
diags.get_mut(file_name).unwrap().push((variable, err_type));
}
diags.push((variable, err_type));
}
}
None
if diags.is_empty() {
None
} else {
Some(diags)
}
}
2 changes: 1 addition & 1 deletion jinja-lsp-queries/src/test_queries.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#[cfg(test)]
mod query_tests {

use crate::capturer::included::IncludeCapturer;
use tree_sitter::{Parser, Point};

use crate::{
capturer::{
included::{IncludeCapturer, IncludedTemplate},
init::JinjaInitCapturer,
object::{CompletionType, JinjaObjectCapturer},
rust::RustCapturer,
Expand Down
9 changes: 3 additions & 6 deletions jinja-lsp/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "jinja-lsp"
version = "0.1.5"
version = "0.1.6"
edition = "2021"
license = "MIT"
authors = ["uros-5"]
Expand All @@ -23,14 +23,11 @@ env_logger = "0.9.0"
ropey = "1.5.0"
serde_json = "1.0.78"
tokio = { version = "1.17.0", features = ["full"] }
tower-lsp = { version = "0.19.0", features = ["proposed"]}
tower-lsp = { version = "0.20.0", features = ["proposed"]}
serde = { version = "1.0", features = ["derive"] }
dashmap = "5.1.0"
log = "0.4.14"
im-rc = "15.0.0"
tree-sitter = "0.20.10"
walkdir = "2.4.0"
anyhow = "1.0.75"
tree-sitter-jinja2 = "0.0.5"
tree-sitter-rust = "0.20.4"
jinja-lsp-queries = { path = "../jinja-lsp-queries", version = "0.1.3"}
jinja-lsp-queries = { path = "../jinja-lsp-queries", version = "0.1.6"}
Loading

0 comments on commit 30bc5f0

Please sign in to comment.