Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1611a15
feat: add risk score field to html
bastiandoetsch Nov 12, 2025
549ae4a
fix: disable feature flag cache and save folder config
bastiandoetsch Nov 13, 2025
d6c4786
fix: use imcache instead of map for feature flags
bastiandoetsch Nov 13, 2025
6f550a1
fix: try to fix risk score layout
bastiandoetsch Nov 13, 2025
45337df
chore: update tests to cater to imcache syntax
bastiandoetsch Nov 13, 2025
71b13b7
test: separate DIs for unified test api smoke test (#1055)
rrama Nov 13, 2025
7e93c94
fix: use imcache instead of map for feature flags
bastiandoetsch Nov 13, 2025
cb17778
chore: update problem parsing, code-actions
bastiandoetsch Nov 14, 2025
9fdadca
Merge branch 'main' into feat/IDE-1493_add-risk-score-and-fix-issues
bastiandoetsch Nov 14, 2025
661f979
fix: merge error
bastiandoetsch Nov 14, 2025
499fcc2
fix: refactorings, go mod fix
bastiandoetsch Nov 14, 2025
cde5f68
chore: only clone test repo in comparison test once
bastiandoetsch Nov 14, 2025
4d584c5
fix: adjust test expectation to new findings
bastiandoetsch Nov 14, 2025
f6d0a37
refactor: more code reuse from legacy
bastiandoetsch Nov 14, 2025
cd86dca
fix: test expecation
bastiandoetsch Nov 14, 2025
1dcfbf5
Merge branch 'main' into feat/IDE-1493_add-risk-score-and-fix-issues
bastiandoetsch Nov 18, 2025
cde0b2b
fix: code action & upgrade path
bastiandoetsch Nov 18, 2025
54d6104
fix: introduction paths & remediation advice
bastiandoetsch Nov 19, 2025
c4e3ba2
Merge branch 'main' into feat/IDE-1493_add-risk-score-and-fix-issues
bastiandoetsch Nov 19, 2025
2d13fd5
fix: panic when trying to retrieve code action
bastiandoetsch Nov 20, 2025
3f36b22
chore: share current logic
bastiandoetsch Nov 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions application/codeaction/codeaction.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2023 Snyk Limited All rights reserved.
* © 2023-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -77,13 +77,17 @@ func (c *CodeActionsService) GetCodeActions(params types.CodeActionParams) []typ
return nil
}
path := uri.PathFromUri(params.TextDocument.URI)
folder := c.c.Workspace().GetFolderContaining(path)
if folder == nil {
c.logger.Debug().Msg("file not in workspace folder, skipping code actions")
return nil
}

r := converter.FromRange(params.Range)
issues := c.IssuesProvider.IssuesForRange(path, r)
logMsg := fmt.Sprint("Found ", len(issues), " issues for path ", path, " and range ", r)
c.logger.Debug().Msg(logMsg)
c.logger.Debug().Any("path", path).Any("range", r).Msgf("Found %d issues", len(issues))

folderPath := c.c.Workspace().GetFolderContaining(path)
codeConsistentIgnoresEnabled := c.featureFlagService.GetFromFolderConfig(folderPath.Path(), featureflag.SnykCodeConsistentIgnores)
codeConsistentIgnoresEnabled := c.featureFlagService.GetFromFolderConfig(folder.Path(), featureflag.SnykCodeConsistentIgnores)

var filteredIssues []types.Issue
if !codeConsistentIgnoresEnabled {
Expand All @@ -100,7 +104,7 @@ func (c *CodeActionsService) GetCodeActions(params types.CodeActionParams) []typ
}
filteredIssues = append(filteredIssues, issue)
}
logMsg = fmt.Sprint("Filtered to ", len(filteredIssues), " issues for path ", path, " and range ", r)
logMsg := fmt.Sprint("Filtered to ", len(filteredIssues), " issues for path ", path, " and range ", r)
c.logger.Debug().Msg(logMsg)
}

Expand Down
3 changes: 2 additions & 1 deletion application/config/config.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2022 Snyk Limited All rights reserved.
* © 2022-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -342,6 +342,7 @@ func initWorkflows(c *Config) error {
if err != nil {
return err
}

return nil
}

Expand Down
4 changes: 2 additions & 2 deletions application/server/parallelization_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2024 Snyk Limited
* © 2024-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -60,7 +60,7 @@ func Test_Concurrent_CLI_Runs(t *testing.T) {
go func() {
defer wg.Done()
dir := types.FilePath(t.TempDir())
repo, err := storedconfig.SetupCustomTestRepo(t, dir, testsupport.NodejsGoof, "", c.Logger())
repo, err := storedconfig.SetupCustomTestRepo(t, dir, testsupport.NodejsGoof, "", c.Logger(), false)
require.NoError(t, err)
folder := types.WorkspaceFolder{
Name: fmt.Sprintf("Test Repo %d", intermediateIndex),
Expand Down
22 changes: 11 additions & 11 deletions application/server/server_smoke_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ func Test_SmokePreScanCommand(t *testing.T) {
c.SetSnykIacEnabled(false)
di.Init()

repo, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.PythonGoof, "", c.Logger())
repo, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.PythonGoof, "", c.Logger(), false)
require.NoError(t, err)
require.NotEmpty(t, repo)

Expand Down Expand Up @@ -386,7 +386,7 @@ func Test_SmokeExecuteCLICommand(t *testing.T) {

func addJuiceShopAsWorkspaceFolder(t *testing.T, loc server.Local, c *config.Config) types.Folder {
t.Helper()
cloneTargetDirJuice, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/juice-shop/juice-shop", "bc9cef127", c.Logger())
cloneTargetDirJuice, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/juice-shop/juice-shop", "bc9cef127", c.Logger(), false)
require.NoError(t, err)

juiceLspWorkspaceFolder := types.WorkspaceFolder{Uri: uri.PathToUri(cloneTargetDirJuice), Name: "juicy-mac-juice-face"}
Expand Down Expand Up @@ -836,7 +836,7 @@ func isNotStandardRegion(c *config.Config) bool {

func setupRepoAndInitialize(t *testing.T, repo string, commit string, loc server.Local, c *config.Config) types.FilePath {
t.Helper()
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), repo, commit, c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), repo, commit, c.Logger(), false)
if err != nil {
t.Fatal(err, "Couldn't setup test repo")
}
Expand Down Expand Up @@ -941,7 +941,7 @@ func Test_SmokeUncFilePath(t *testing.T) {
cleanupChannels()
di.Init()

cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger(), false)
if err != nil {
t.Fatal(err, "Couldn't setup test repo")
}
Expand Down Expand Up @@ -969,7 +969,7 @@ func Test_SmokeSnykCodeDelta_NewVulns(t *testing.T) {
di.Init()
scanAggregator := di.ScanStateAggregator()
fileWithNewVulns := "vulns.js"
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger(), false)
cloneTargetDirString := string(cloneTargetDir)
assert.NoError(t, err)

Expand Down Expand Up @@ -1012,7 +1012,7 @@ func Test_SmokeSnykCodeDelta_NoNewIssuesFound(t *testing.T) {
scanAggregator := di.ScanStateAggregator()

fileWithNewVulns := "vulns.js"
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/snyk-labs/nodejs-goof", "0336589", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/snyk-labs/nodejs-goof", "0336589", c.Logger(), false)
assert.NoError(t, err)

cloneTargetDirString := string(cloneTargetDir)
Expand Down Expand Up @@ -1041,7 +1041,7 @@ func Test_SmokeSnykCodeDelta_NoNewIssuesFound_JavaGoof(t *testing.T) {
di.Init()
scanAggregator := di.ScanStateAggregator()

cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/snyk-labs/java-goof", "f5719ae", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), "https://github.com/snyk-labs/java-goof", "f5719ae", c.Logger(), false)
assert.NoError(t, err)

cloneTargetDirString := string(cloneTargetDir)
Expand All @@ -1067,7 +1067,7 @@ func Test_SmokeScanUnmanaged(t *testing.T) {
cleanupChannels()
di.Init()

cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.CppGoof, "259ea516a4ec", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.CppGoof, "259ea516a4ec", c.Logger(), false)
cloneTargetDirString := string(cloneTargetDir)
if err != nil {
t.Fatal(err, "Couldn't setup test repo")
Expand Down Expand Up @@ -1130,7 +1130,7 @@ func Test_SmokeOrgSelection(t *testing.T) {
c.SetSnykIacEnabled(false)
di.Init()

repo, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.PythonGoof, "", c.Logger())
repo, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.PythonGoof, "", c.Logger(), false)
require.NoError(t, err)
require.NotEmpty(t, repo)
require.NoError(t, err)
Expand Down Expand Up @@ -1553,8 +1553,8 @@ func Test_SmokeOrgSelection(t *testing.T) {

func ensureInitialized(t *testing.T, c *config.Config, loc server.Local, initParams types.InitializeParams, preInitSetupFunc func(*config.Config)) {
t.Helper()
t.Setenv("SNYK_LOG_LEVEL", "debug")
c.SetLogLevel(zerolog.LevelDebugValue)
t.Setenv("SNYK_LOG_LEVEL", "info")
c.SetLogLevel(zerolog.LevelInfoValue)
c.ConfigureLogging(nil) // we don't need to send logs to the client
gafConfig := c.Engine().GetConfiguration()
gafConfig.Set(configuration.DEBUG, c.Logger().GetLevel() == zerolog.DebugLevel)
Expand Down
4 changes: 2 additions & 2 deletions application/server/server_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2022-2024 Snyk Limited
* © 2022-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -1049,7 +1049,7 @@ func Test_IntegrationHoverResults(t *testing.T) {
fakeAuthenticationProvider := di.AuthenticationService().Provider().(*authentication.FakeAuthenticationProvider)
fakeAuthenticationProvider.IsAuthenticated = true

var cloneTargetDir, err = storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger())
var cloneTargetDir, err = storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger(), false)
defer func(path string) { _ = os.RemoveAll(path) }(string(cloneTargetDir))
if err != nil {
t.Fatal(err, "Couldn't setup test repo")
Expand Down
4 changes: 2 additions & 2 deletions application/server/trust_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2022-2023 Snyk Limited
* © 2022-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -165,7 +165,7 @@ func Test_MultipleFoldersInRootDirWithOnlyOneTrusted(t *testing.T) {
rootDir := types.FilePath(t.TempDir())

// create trusted repo
repo1, err := storedconfig.SetupCustomTestRepo(t, rootDir, testsupport.NodejsGoof, "0336589", c.Logger())
repo1, err := storedconfig.SetupCustomTestRepo(t, rootDir, testsupport.NodejsGoof, "0336589", c.Logger(), false)
assert.NoError(t, err)

// create untrusted directory in same rootDir with the exact prefix
Expand Down
45 changes: 11 additions & 34 deletions application/server/unified_test_api_smoke_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,16 @@ func TestUnifiedTestApiSmokeTest(t *testing.T) {
var unifiedDiagnostics []types.Diagnostic
legacyTestStarted := false
var legacyDiagnostics []types.Diagnostic
dir := t.TempDir()

t.Run("1. Unified Test API scan (with risk score)", func(t *testing.T) {
unifiedTestStarted = true
unifiedDiagnostics = runOSSComparisonTest(t, true)
unifiedDiagnostics = runOSSComparisonTest(t, true, dir)
})

t.Run("2. Legacy scan (without risk score)", func(t *testing.T) {
legacyTestStarted = true
legacyDiagnostics = runOSSComparisonTest(t, false)
legacyDiagnostics = runOSSComparisonTest(t, false, dir)
})

t.Run("3. Compare diagnostics from both scans", func(t *testing.T) {
Expand All @@ -83,7 +84,7 @@ func TestUnifiedTestApiSmokeTest(t *testing.T) {
})
}

func runOSSComparisonTest(t *testing.T, unifiedScan bool) []types.Diagnostic {
func runOSSComparisonTest(t *testing.T, unifiedScan bool, dir string) []types.Diagnostic {
t.Helper()

c, loc, jsonRPCRecorder := setupOSSComparisonTest(t)
Expand All @@ -95,10 +96,11 @@ func runOSSComparisonTest(t *testing.T, unifiedScan bool) []types.Diagnostic {
// -----------------------------------------
// setup test repo
// -----------------------------------------
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(t.TempDir()), testsupport.NodejsGoof, "0336589", c.Logger())
cloneTargetDir, err := storedconfig.SetupCustomTestRepo(t, types.FilePath(dir), testsupport.NodejsGoof, "0336589", c.Logger(), true)
if err != nil {
t.Fatal(err, "Couldn't setup test repo")
}

cloneTargetDirString := (string)(cloneTargetDir)

// -----------------------------------------
Expand All @@ -108,9 +110,7 @@ func runOSSComparisonTest(t *testing.T, unifiedScan bool) []types.Diagnostic {

initParams := prepareInitParams(t, cloneTargetDir, c)
ensureInitialized(t, c, loc, initParams, func(c *config.Config) {
if unifiedScan {
substituteDepGraphFlow(t, c, cloneTargetDirString, manifestFile)
}
substituteDepGraphFlow(t, c, cloneTargetDirString, manifestFile)
c.SetAutomaticScanning(false)
c.SetDeltaFindingsEnabled(false)
})
Expand Down Expand Up @@ -181,8 +181,8 @@ func setRiskScoreFeatureFlagsFromGafConfig(t *testing.T, c *config.Config, clone
gafConfig.Set(FeatureFlagRiskScore, enabled)
gafConfig.Set(FeatureFlagRiskScoreInCLI, enabled)
folderConfig := c.FolderConfig(types.FilePath(cloneTargetDirString))
folderConfig.FeatureFlags["useExperimentalRiskScore"] = engine.GetConfiguration().GetBool(FeatureFlagRiskScore)
folderConfig.FeatureFlags["useExperimentalRiskScoreInCLI"] = engine.GetConfiguration().GetBool(FeatureFlagRiskScoreInCLI)
folderConfig.FeatureFlags["useExperimentalRiskScore"] = gafConfig.GetBool(FeatureFlagRiskScore)
folderConfig.FeatureFlags["useExperimentalRiskScoreInCLI"] = gafConfig.GetBool(FeatureFlagRiskScoreInCLI)
err := storedconfig.UpdateFolderConfig(gafConfig, folderConfig, c.Logger())
if err != nil {
t.Fatal(err, "unable to update folder config")
Expand Down Expand Up @@ -230,30 +230,7 @@ func compareAndReportDiagnostics(t *testing.T, unified, legacy []types.Diagnosti

// Helper to get matching key from OssIssueData.Key
getMatchingKey := func(d types.Diagnostic) string {
// Try to get OssIssueData directly
if ossData, ok := d.Data.AdditionalData.(types.OssIssueData); ok {
if ossData.Key != "" {
return ossData.Key
}
t.Logf("WARNING: OssIssueData has empty Key field")
}

// Try to convert from map
if ossData, converted := convertMapToOssIssueData(d.Data.AdditionalData); converted {
if ossData.Key != "" {
return ossData.Key
}
t.Logf("WARNING: Converted OssIssueData has empty Key field")
}

// Fallback to Code field
if d.Code != nil {
t.Logf("WARNING: Could not extract OssIssueData.Key for diagnostic, using Code field")
return strings.ToLower(fmt.Sprintf("%v", d.Code))
}

t.Logf("WARNING: Found diagnostic with no Code and no OssIssueData.Key")
return ""
return d.Code.(string) + "|" + d.Range.String()
}

// Create maps indexed by OssIssueData.Key for easier comparison
Expand Down Expand Up @@ -786,7 +763,7 @@ func collectOssIssueDataComparisons(title string, unified, legacy types.OssIssue
// Compare Identifiers sub-object (only mismatches)
comparisons = append(comparisons, collectOssIdentifiersComparisons(title, unified.Identifiers, legacy.Identifiers)...)

if unified.Description != legacy.Description {
if unified.Description[0:20] != legacy.Description[0:20] {
comparisons = append(comparisons, FieldComparison{
DiagnosticTitle: title,
FieldPath: "Data.AdditionalData.Description",
Expand Down
4 changes: 3 additions & 1 deletion domain/ide/converter/converter.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* © 2022-2025 Snyk Limited All rights reserved.
* © 2022-2025 Snyk Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -210,6 +210,7 @@ func getOssIssue(issue types.Issue) types.ScanIssue {
CWE: issue.GetCWEs(),
CVE: issue.GetCVEs(),
},
Title: matchingIssue.Title,
Description: matchingIssue.Description,
Language: matchingIssue.Language,
PackageManager: matchingIssue.PackageManager,
Expand Down Expand Up @@ -243,6 +244,7 @@ func getOssIssue(issue types.Issue) types.ScanIssue {
AdditionalData: types.OssIssueData{
Key: additionalData.Key,
RuleId: issue.GetID(),
Title: additionalData.Title,
License: additionalData.License,
Identifiers: types.OssIdentifiers{
CWE: issue.GetCWEs(),
Expand Down
3 changes: 3 additions & 0 deletions domain/snyk/issues.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (
"net/url"
"sync"

"github.com/snyk/go-application-framework/pkg/apiclients/testapi"

"github.com/snyk/snyk-ls/application/config"
"github.com/snyk/snyk-ls/internal/delta"
"github.com/snyk/snyk-ls/internal/product"
Expand Down Expand Up @@ -79,6 +81,7 @@ type Issue struct {
Fingerprint string
GlobalIdentity string
FindingId string
Issue *testapi.Issue `json:"-"`
m sync.RWMutex
}

Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ require (
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
github.com/samber/lo v1.52.0
github.com/shirou/gopsutil v3.21.11+incompatible
github.com/snyk/cli-extension-os-flows v0.0.0-20251111161917-55366f295dd6
github.com/snyk/cli-extension-os-flows v0.0.0-20251112185644-508309df0847
github.com/snyk/code-client-go v1.24.4
github.com/snyk/go-application-framework v0.0.0-20251112134702-bc81011fdac9
github.com/snyk/go-application-framework v0.0.0-20251113163503-48c15c72fb26
github.com/sourcegraph/go-lsp v0.0.0-20240223163137-f80c5dd31dfd
github.com/spf13/pflag v1.0.6
github.com/stretchr/testify v1.10.0
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -287,14 +287,14 @@ github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMT
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
github.com/snyk/cli-extension-os-flows v0.0.0-20251111161917-55366f295dd6 h1:gZEGnUxmUQL6kRczjVsZ17saVEt4q+BjnHl9YuAJFW4=
github.com/snyk/cli-extension-os-flows v0.0.0-20251111161917-55366f295dd6/go.mod h1:zzzpxTldp5eASBcjgWw6KL2RDWXK/09x6q7s2wpF3EQ=
github.com/snyk/cli-extension-os-flows v0.0.0-20251112185644-508309df0847 h1:HcdbYCSwBGMylI6o3jO5Z6LImdwJvu2vH2hlCcVg0js=
github.com/snyk/cli-extension-os-flows v0.0.0-20251112185644-508309df0847/go.mod h1:zzzpxTldp5eASBcjgWw6KL2RDWXK/09x6q7s2wpF3EQ=
github.com/snyk/code-client-go v1.24.4 h1:19rmeqZFvjQMKaAmSZ0CdYZb1d0ENsDad2Cp32jeWOA=
github.com/snyk/code-client-go v1.24.4/go.mod h1:uMlmMToe4uuNhNLs+yxjM3WFbytna+ytDWhpbnNwTSk=
github.com/snyk/error-catalog-golang-public v0.0.0-20251008132755-b542bb643649 h1:kS6bSbjvfMTc8vqIZzHXzTHKh4kLKt27m0tsJ8T3WQc=
github.com/snyk/error-catalog-golang-public v0.0.0-20251008132755-b542bb643649/go.mod h1:Ytttq7Pw4vOCu9NtRQaOeDU2dhBYUyNBe6kX4+nIIQ4=
github.com/snyk/go-application-framework v0.0.0-20251112134702-bc81011fdac9 h1:AWUqWh+WzWQMEgEdAx3Lk6OaZ/FKrI90P7OyuBL1+lI=
github.com/snyk/go-application-framework v0.0.0-20251112134702-bc81011fdac9/go.mod h1:HXON5jD2A4GarLrQyUSLBGR7jJy7LfzzHmjdkLe3VCk=
github.com/snyk/go-application-framework v0.0.0-20251113163503-48c15c72fb26 h1:/iXBfqWLin9LRxKQtJKbXop5kss9POqY3rdkyQhomQ4=
github.com/snyk/go-application-framework v0.0.0-20251113163503-48c15c72fb26/go.mod h1:HXON5jD2A4GarLrQyUSLBGR7jJy7LfzzHmjdkLe3VCk=
github.com/snyk/go-httpauth v0.0.0-20231117135515-eb445fea7530 h1:s9PHNkL6ueYRiAKNfd8OVxlUOqU3qY0VDbgCD1f6WQY=
github.com/snyk/go-httpauth v0.0.0-20231117135515-eb445fea7530/go.mod h1:88KbbvGYlmLgee4OcQ19yr0bNpXpOr2kciOthaSzCAg=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
Expand Down
Loading
Loading