diff --git a/.gitignore b/.gitignore index 449c1f5..c639fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ result .idea .vscode +scan-logs diff --git a/Cargo.lock b/Cargo.lock index 4cb18f6..7478772 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2035,7 +2035,7 @@ dependencies = [ [[package]] name = "sysdig-lsp" -version = "0.7.0" +version = "0.7.1" dependencies = [ "async-trait", "bollard", diff --git a/Cargo.toml b/Cargo.toml index 93b24fc..a7eaedd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sysdig-lsp" -version = "0.7.0" +version = "0.7.1" edition = "2024" authors = [ "Sysdig Inc." ] readme = "README.md" diff --git a/src/app/lsp_interactor.rs b/src/app/lsp_interactor.rs index a90c8e6..15eb3ed 100644 --- a/src/app/lsp_interactor.rs +++ b/src/app/lsp_interactor.rs @@ -68,4 +68,8 @@ where .read_documentation_at(uri, position) .await } + + pub async fn remove_documentations(&self, uri: &str) { + self.document_database.remove_documentations(uri).await + } } diff --git a/src/app/lsp_server/commands/build_and_scan.rs b/src/app/lsp_server/commands/build_and_scan.rs index 450ac18..19a6928 100644 --- a/src/app/lsp_server/commands/build_and_scan.rs +++ b/src/app/lsp_server/commands/build_and_scan.rs @@ -113,6 +113,7 @@ where diagnostics_for_layers(&document_text, &scan_result)?; self.interactor.remove_diagnostics(uri).await; + self.interactor.remove_documentations(uri).await; self.interactor .append_document_diagnostics(uri, &[diagnostic]) .await; diff --git a/src/app/lsp_server/commands/scan_base_image.rs b/src/app/lsp_server/commands/scan_base_image.rs index 497f91f..bfc914e 100644 --- a/src/app/lsp_server/commands/scan_base_image.rs +++ b/src/app/lsp_server/commands/scan_base_image.rs @@ -102,6 +102,7 @@ where let uri = self.location.uri.as_str(); self.interactor.remove_diagnostics(uri).await; + self.interactor.remove_documentations(uri).await; self.interactor .append_document_diagnostics(uri, &[diagnostic]) .await; diff --git a/src/app/markdown/markdown_data.rs b/src/app/markdown/markdown_data.rs index f592409..02c3150 100644 --- a/src/app/markdown/markdown_data.rs +++ b/src/app/markdown/markdown_data.rs @@ -66,8 +66,10 @@ mod test { pull_string: "ubuntu:23.04".to_string(), image_id: "sha256:f4cdeba72b994748f5eb1f525a70a9cc553b66037ec37e23645fbf3f0f5c160d" .to_string(), - digest: "sha256:5a828e28de105c3d7821c4442f0f5d1c52dc16acf4999d5f31a3bc0f03f06edd" - .to_string(), + digest: Some( + "sha256:5a828e28de105c3d7821c4442f0f5d1c52dc16acf4999d5f31a3bc0f03f06edd" + .to_string(), + ), base_os: "ubuntu 23.04".to_string(), total_vulns_found: MarkdownSummaryTable { diff --git a/src/app/markdown/markdown_summary.rs b/src/app/markdown/markdown_summary.rs index c7b76fc..9ccac3d 100644 --- a/src/app/markdown/markdown_summary.rs +++ b/src/app/markdown/markdown_summary.rs @@ -8,7 +8,7 @@ use super::markdown_summary_table::MarkdownSummaryTable; pub struct MarkdownSummary { pub pull_string: String, pub image_id: String, - pub digest: String, + pub digest: Option, pub base_os: String, pub total_vulns_found: MarkdownSummaryTable, } @@ -18,7 +18,7 @@ impl From<&ScanResult> for MarkdownSummary { MarkdownSummary { pull_string: value.metadata().pull_string().to_string(), image_id: value.metadata().image_id().to_string(), - digest: value.metadata().digest().unwrap_or("").to_string(), + digest: value.metadata().digest().map(|s| s.to_string()), base_os: value.metadata().base_os().name().to_string(), total_vulns_found: MarkdownSummaryTable::from(value), } @@ -27,11 +27,15 @@ impl From<&ScanResult> for MarkdownSummary { impl Display for MarkdownSummary { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let format = format!( - "### Summary\n* **PullString**: {}\n* **ImageID**: `{}`\n* **Digest**: `{}`\n* **BaseOS**: {}\n\n{}", - &self.pull_string, &self.image_id, &self.digest, &self.base_os, &self.total_vulns_found - ); - - f.write_str(&format) + writeln!(f, "### Summary")?; + writeln!(f, "* **PullString**: {}", self.pull_string)?; + writeln!(f, "* **ImageID**: `{}`", self.image_id)?; + match &self.digest { + Some(digest) => writeln!(f, "* **Digest**: `{}`", digest)?, + None => writeln!(f, "* **Digest**: None")?, + } + writeln!(f, "* **BaseOS**: {}", self.base_os)?; + writeln!(f)?; + write!(f, "{}", self.total_vulns_found) } }