Skip to content

Commit 5fbf085

Browse files
authored
feat(lsp): clear documentation on new scans (#23)
This change ensures that previous documentation, such as vulnerability summaries, is cleared from the editor when a new scan is initiated. Previously, old documentation would persist after a new build-and-scan or scan-base-image command was executed, leading to potentially outdated information being displayed.
1 parent 66f9fa9 commit 5fbf085

File tree

8 files changed

+25
-12
lines changed

8 files changed

+25
-12
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ result
88

99
.idea
1010
.vscode
11+
scan-logs

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sysdig-lsp"
3-
version = "0.7.0"
3+
version = "0.7.1"
44
edition = "2024"
55
authors = [ "Sysdig Inc." ]
66
readme = "README.md"

src/app/lsp_interactor.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,8 @@ where
6868
.read_documentation_at(uri, position)
6969
.await
7070
}
71+
72+
pub async fn remove_documentations(&self, uri: &str) {
73+
self.document_database.remove_documentations(uri).await
74+
}
7175
}

src/app/lsp_server/commands/build_and_scan.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ where
113113
diagnostics_for_layers(&document_text, &scan_result)?;
114114

115115
self.interactor.remove_diagnostics(uri).await;
116+
self.interactor.remove_documentations(uri).await;
116117
self.interactor
117118
.append_document_diagnostics(uri, &[diagnostic])
118119
.await;

src/app/lsp_server/commands/scan_base_image.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ where
102102

103103
let uri = self.location.uri.as_str();
104104
self.interactor.remove_diagnostics(uri).await;
105+
self.interactor.remove_documentations(uri).await;
105106
self.interactor
106107
.append_document_diagnostics(uri, &[diagnostic])
107108
.await;

src/app/markdown/markdown_data.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ mod test {
6666
pull_string: "ubuntu:23.04".to_string(),
6767
image_id: "sha256:f4cdeba72b994748f5eb1f525a70a9cc553b66037ec37e23645fbf3f0f5c160d"
6868
.to_string(),
69-
digest: "sha256:5a828e28de105c3d7821c4442f0f5d1c52dc16acf4999d5f31a3bc0f03f06edd"
70-
.to_string(),
69+
digest: Some(
70+
"sha256:5a828e28de105c3d7821c4442f0f5d1c52dc16acf4999d5f31a3bc0f03f06edd"
71+
.to_string(),
72+
),
7173
base_os: "ubuntu 23.04".to_string(),
7274

7375
total_vulns_found: MarkdownSummaryTable {

src/app/markdown/markdown_summary.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use super::markdown_summary_table::MarkdownSummaryTable;
88
pub struct MarkdownSummary {
99
pub pull_string: String,
1010
pub image_id: String,
11-
pub digest: String,
11+
pub digest: Option<String>,
1212
pub base_os: String,
1313
pub total_vulns_found: MarkdownSummaryTable,
1414
}
@@ -18,7 +18,7 @@ impl From<&ScanResult> for MarkdownSummary {
1818
MarkdownSummary {
1919
pull_string: value.metadata().pull_string().to_string(),
2020
image_id: value.metadata().image_id().to_string(),
21-
digest: value.metadata().digest().unwrap_or("").to_string(),
21+
digest: value.metadata().digest().map(|s| s.to_string()),
2222
base_os: value.metadata().base_os().name().to_string(),
2323
total_vulns_found: MarkdownSummaryTable::from(value),
2424
}
@@ -27,11 +27,15 @@ impl From<&ScanResult> for MarkdownSummary {
2727

2828
impl Display for MarkdownSummary {
2929
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
30-
let format = format!(
31-
"### Summary\n* **PullString**: {}\n* **ImageID**: `{}`\n* **Digest**: `{}`\n* **BaseOS**: {}\n\n{}",
32-
&self.pull_string, &self.image_id, &self.digest, &self.base_os, &self.total_vulns_found
33-
);
34-
35-
f.write_str(&format)
30+
writeln!(f, "### Summary")?;
31+
writeln!(f, "* **PullString**: {}", self.pull_string)?;
32+
writeln!(f, "* **ImageID**: `{}`", self.image_id)?;
33+
match &self.digest {
34+
Some(digest) => writeln!(f, "* **Digest**: `{}`", digest)?,
35+
None => writeln!(f, "* **Digest**: None")?,
36+
}
37+
writeln!(f, "* **BaseOS**: {}", self.base_os)?;
38+
writeln!(f)?;
39+
write!(f, "{}", self.total_vulns_found)
3640
}
3741
}

0 commit comments

Comments
 (0)