diff options
Diffstat (limited to 'support/texlab/src')
-rw-r--r-- | support/texlab/src/db/analysis.rs | 10 | ||||
-rw-r--r-- | support/texlab/src/db/document.rs | 23 | ||||
-rw-r--r-- | support/texlab/src/db/workspace.rs | 2 | ||||
-rw-r--r-- | support/texlab/src/features/formatting.rs | 2 | ||||
-rw-r--r-- | support/texlab/src/features/rename/label.rs | 10 | ||||
-rw-r--r-- | support/texlab/src/lib.rs | 3 | ||||
-rw-r--r-- | support/texlab/src/options.rs | 2 | ||||
-rw-r--r-- | support/texlab/src/parser/build_log.rs | 12 | ||||
-rw-r--r-- | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap | 8 | ||||
-rw-r--r-- | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap | 6 |
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, }, |