summaryrefslogtreecommitdiff
path: root/support/texlab/src
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src')
-rw-r--r--support/texlab/src/db/analysis.rs10
-rw-r--r--support/texlab/src/db/document.rs23
-rw-r--r--support/texlab/src/db/workspace.rs2
-rw-r--r--support/texlab/src/features/formatting.rs2
-rw-r--r--support/texlab/src/features/rename/label.rs10
-rw-r--r--support/texlab/src/lib.rs3
-rw-r--r--support/texlab/src/options.rs2
-rw-r--r--support/texlab/src/parser/build_log.rs12
-rw-r--r--support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap8
-rw-r--r--support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap6
10 files changed, 49 insertions, 29 deletions
diff --git a/support/texlab/src/db/analysis.rs b/support/texlab/src/db/analysis.rs
index 35ee4be2a1..79e81c963c 100644
--- a/support/texlab/src/db/analysis.rs
+++ b/support/texlab/src/db/analysis.rs
@@ -149,6 +149,16 @@ pub struct TexAnalysis {
pub environment_names: Vec<String>,
}
+#[salsa::tracked]
+impl TexAnalysis {
+ #[salsa::tracked]
+ pub fn has_document_environment(self, db: &dyn Db) -> bool {
+ self.environment_names(db)
+ .iter()
+ .any(|name| name == "document")
+ }
+}
+
impl TexAnalysis {
pub(super) fn analyze(db: &dyn Db, root: &latex::SyntaxNode) -> Self {
let mut links = Vec::new();
diff --git a/support/texlab/src/db/document.rs b/support/texlab/src/db/document.rs
index 4ee23a2230..1fc7d6880c 100644
--- a/support/texlab/src/db/document.rs
+++ b/support/texlab/src/db/document.rs
@@ -175,23 +175,22 @@ impl Document {
}
#[salsa::tracked]
- pub fn can_be_index(self, db: &dyn Db) -> bool {
+ pub fn can_be_root(self, db: &dyn Db) -> bool {
self.parse(db).as_tex().map_or(false, |data| {
- data.analyze(db)
- .links(db)
- .iter()
- .filter(|link| link.kind(db) == TexLinkKind::Cls)
- .any(|link| link.path(db).text(db) != "subfiles")
+ let analysis = data.analyze(db);
+ analysis.has_document_environment(db)
+ || !analysis
+ .links(db)
+ .iter()
+ .filter(|link| link.kind(db) == TexLinkKind::Cls)
+ .any(|link| link.path(db).text(db) == "subfiles")
})
}
#[salsa::tracked]
pub fn can_be_built(self, db: &dyn Db) -> bool {
- self.parse(db).as_tex().map_or(false, |data| {
- data.analyze(db)
- .links(db)
- .iter()
- .any(|link| link.kind(db) == TexLinkKind::Cls)
- })
+ self.parse(db)
+ .as_tex()
+ .map_or(false, |data| data.analyze(db).has_document_environment(db))
}
}
diff --git a/support/texlab/src/db/workspace.rs b/support/texlab/src/db/workspace.rs
index 0fb9745b12..8b4d755b09 100644
--- a/support/texlab/src/db/workspace.rs
+++ b/support/texlab/src/db/workspace.rs
@@ -67,7 +67,7 @@ impl Workspace {
self.documents(db)
.iter()
.copied()
- .filter(|&document| document.can_be_index(db))
+ .filter(|&document| document.can_be_root(db))
}
pub fn open(
diff --git a/support/texlab/src/features/formatting.rs b/support/texlab/src/features/formatting.rs
index 09737777fd..5d7d1c0c1f 100644
--- a/support/texlab/src/features/formatting.rs
+++ b/support/texlab/src/features/formatting.rs
@@ -19,10 +19,12 @@ pub fn format_source_code(
let document = workspace.lookup_uri(db, uri)?;
match document.language(db) {
Language::Tex => match workspace.options(db).latex_formatter {
+ LatexFormatter::None => None,
LatexFormatter::Texlab => None,
LatexFormatter::Latexindent => format_with_latexindent(db, document),
},
Language::Bib => match workspace.options(db).bibtex_formatter {
+ BibtexFormatter::None => None,
BibtexFormatter::Texlab => format_bibtex_internal(db, document, options),
BibtexFormatter::Latexindent => format_with_latexindent(db, document),
},
diff --git a/support/texlab/src/features/rename/label.rs b/support/texlab/src/features/rename/label.rs
index d38d13ae93..7e596209d8 100644
--- a/support/texlab/src/features/rename/label.rs
+++ b/support/texlab/src/features/rename/label.rs
@@ -44,24 +44,24 @@ pub(super) fn rename(context: &CursorContext<Params>) -> Option<RenameResult> {
});
if let Some(label) = latex::LabelReferenceRange::cast(node.clone()) {
- if let Some(name1) = label
+ if let Some(name_from) = label
.from()
.and_then(|name| name.key())
.filter(|name| name.to_string() == name_text)
{
edits.push(Indel {
- delete: latex::small_range(&name1),
+ delete: latex::small_range(&name_from),
insert: context.params.new_name.clone(),
});
}
- if let Some(name2) = label
- .from()
+ if let Some(name_to) = label
+ .to()
.and_then(|name| name.key())
.filter(|name| name.to_string() == name_text)
{
edits.push(Indel {
- delete: latex::small_range(&name2),
+ delete: latex::small_range(&name_to),
insert: context.params.new_name.clone(),
});
}
diff --git a/support/texlab/src/lib.rs b/support/texlab/src/lib.rs
index 9a7b587ab8..45b96fb265 100644
--- a/support/texlab/src/lib.rs
+++ b/support/texlab/src/lib.rs
@@ -23,7 +23,7 @@ pub struct Jar(
db::LinterData,
db::Document,
db::Document_parse,
- db::Document_can_be_index,
+ db::Document_can_be_root,
db::Document_can_be_built,
db::parse::TexDocumentData,
db::parse::TexDocumentData_analyze,
@@ -35,6 +35,7 @@ pub struct Jar(
db::analysis::TheoremEnvironment,
db::analysis::GraphicsPath,
db::analysis::TexAnalysis,
+ db::analysis::TexAnalysis_has_document_environment,
db::MissingDependencies,
db::hidden_dependency,
db::source_dependency,
diff --git a/support/texlab/src/options.rs b/support/texlab/src/options.rs
index cc0058fc68..6cbba51823 100644
--- a/support/texlab/src/options.rs
+++ b/support/texlab/src/options.rs
@@ -32,6 +32,7 @@ impl Default for DiagnosticsDelay {
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum BibtexFormatter {
+ None,
Texlab,
Latexindent,
}
@@ -45,6 +46,7 @@ impl Default for BibtexFormatter {
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum LatexFormatter {
+ None,
Texlab,
Latexindent,
}
diff --git a/support/texlab/src/parser/build_log.rs b/support/texlab/src/parser/build_log.rs
index 5f99129cdb..1e5eca26f8 100644
--- a/support/texlab/src/parser/build_log.rs
+++ b/support/texlab/src/parser/build_log.rs
@@ -17,8 +17,9 @@ static TEX_ERROR_REGEX: Lazy<Regex> = Lazy::new(|| {
Regex::new("(?m)^! ((?P<msg1>(.|\r|\n)*?)\r?\nl\\.(?P<line>\\d+)( (\\.\\.\\.)?(?P<hint>[^\r\n]+))?|(?P<msg2>[^\r\n]*))").unwrap()
});
-static WARNING_REGEX: Lazy<Regex> =
- Lazy::new(|| Regex::new("(LaTeX|Package [a-zA-Z_\\-]+) Warning: (?P<msg>[^\r\n]*)").unwrap());
+static WARNING_REGEX: Lazy<Regex> = Lazy::new(|| {
+ Regex::new("(?P<msg>(LaTeX|Package [a-zA-Z_\\-]+) Warning: [^\r\n]*?(on input line (?P<line>\\d+))?\\.)[\r\n]").unwrap()
+});
static BAD_BOX_REGEX: Lazy<Regex> = Lazy::new(|| {
Regex::new("(?P<msg>(Ov|Und)erfull \\\\[hv]box[^\r\n]*lines? (?P<line>\\d+)[^\r\n]*)").unwrap()
@@ -104,8 +105,11 @@ fn prepare_log(log: &str) -> String {
} else if line.chars().count() == MAX_LINE_LENGTH {
let mut new_line = String::new();
new_line.push_str(line);
- if let Some(old_line) = old_lines.next() {
- new_line.push_str(old_line);
+ while let Some(old_line) = old_lines.next() {
+ new_line.push_str(old_line);
+ if old_line.chars().count() != MAX_LINE_LENGTH {
+ break;
+ }
}
new_lines.push(new_line);
} else {
diff --git a/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap b/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap
index d2024a8cd3..22d2ca86e5 100644
--- a/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap
+++ b/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap
@@ -8,14 +8,16 @@ BuildLog {
BuildError {
relative_path: "./parent.tex",
level: Warning,
- message: "Citation `foo' on page 1 undefined on input line 6.",
+ message: "LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.",
hint: None,
- line: None,
+ line: Some(
+ 5,
+ ),
},
BuildError {
relative_path: "./parent.tex",
level: Warning,
- message: "There were undefined references.",
+ message: "LaTeX Warning: There were undefined references.",
hint: None,
line: None,
},
diff --git a/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap b/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap
index e4857d00d8..b77926323c 100644
--- a/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap
+++ b/support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap
@@ -8,21 +8,21 @@ BuildLog {
BuildError {
relative_path: "./parent.tex",
level: Warning,
- message: "'babel/polyglossia' detected but 'csquotes' missing. Loading 'csquotes' recommended.",
+ message: "Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing. Loading 'csquotes' recommended.",
hint: None,
line: None,
},
BuildError {
relative_path: "./parent.tex",
level: Warning,
- message: "There were undefined references.",
+ message: "LaTeX Warning: There were undefined references.",
hint: None,
line: None,
},
BuildError {
relative_path: "./parent.tex",
level: Warning,
- message: "Please (re)run Biber on the file: parent and rerun LaTeX afterwards.",
+ message: "Package biblatex Warning: Please (re)run Biber on the file: parent and rerun LaTeX afterwards.",
hint: None,
line: None,
},