Skip to content

Commit 39eef13

Browse files
committed
fix: replaced Suppression.status with IgnoreDetails
1 parent 5c27d53 commit 39eef13

File tree

4 files changed

+46
-24
lines changed

4 files changed

+46
-24
lines changed

domain/ide/command/ignores_request.go

+22-8
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ package command
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122
"fmt"
2223

2324
"github.com/snyk/code-client-go/sarif"
2425
"github.com/snyk/go-application-framework/pkg/configuration"
2526
"github.com/snyk/go-application-framework/pkg/local_workflows/ignore_workflow"
2627
"github.com/snyk/snyk-ls/application/config"
2728
"github.com/snyk/snyk-ls/domain/snyk"
29+
"github.com/snyk/snyk-ls/infrastructure/code"
2830
"github.com/snyk/snyk-ls/internal/types"
2931
)
3032

@@ -77,16 +79,28 @@ func (cmd *submitIgnoreRequest) Execute(ctx context.Context) (any, error) {
7779
gafConfig.Set(ignore_workflow.InteractiveKey, false)
7880
gafConfig.Set(configuration.INPUT_DIRECTORY, contentRoot)
7981

80-
result, err := engine.InvokeWithConfig(ignore_workflow.WORKFLOWID_IGNORE_CREATE, gafConfig)
81-
if err != nil && len(result) == 0 {
82-
return nil, fmt.Errorf("failed to invoke ignore-create workflow: %w", err)
82+
data, err := engine.InvokeWithConfig(ignore_workflow.WORKFLOWID_IGNORE_CREATE, gafConfig)
83+
if err != nil {
84+
return nil, err
8385
}
8486

85-
suppressionResponse, ok := result[0].GetPayload().(*sarif.Suppression)
87+
if data == nil || len(data) == 0 {
88+
return nil, fmt.Errorf("no data returned from ignore workflow")
89+
}
90+
91+
output, ok := data[0].GetPayload().([]byte)
8692
if !ok {
87-
return nil, fmt.Errorf("unexpected payload type: expected *sarif.Suppression")
93+
return nil, fmt.Errorf("invalid response from ignore workflow") //TODO fix this
94+
}
95+
96+
var suppression *sarif.Suppression
97+
err = json.Unmarshal(output, suppression)
98+
if err != nil {
99+
return nil, err
88100
}
89-
issue.SetSuppressionStatus(string(suppressionResponse.Status))
101+
ignoreDetails := code.SarifSuppressionToIgnoreDetails(suppression)
102+
103+
issue.SetIgnoreDetails(ignoreDetails)
90104

91105
case "update":
92106
if len(cmd.command.Arguments) < 5 {
@@ -129,7 +143,7 @@ func (cmd *submitIgnoreRequest) Execute(ctx context.Context) (any, error) {
129143
if !ok {
130144
return nil, fmt.Errorf("unexpected payload type: expected *sarif.Suppression")
131145
}
132-
issue.SetSuppressionStatus(string(suppressionResponse.Status))
146+
issue.SetIgnoreDetails(string(suppressionResponse.Status))
133147

134148
case "delete":
135149
if len(cmd.command.Arguments) < 3 {
@@ -157,7 +171,7 @@ func (cmd *submitIgnoreRequest) Execute(ctx context.Context) (any, error) {
157171
if !ok {
158172
return nil, fmt.Errorf("unexpected payload type: expected *sarif.Suppression")
159173
}
160-
issue.SetSuppressionStatus(string(suppressionResponse.Status))
174+
issue.SetIgnoreDetails(string(suppressionResponse.Status))
161175

162176
default:
163177
return nil, fmt.Errorf(`unkown worflow`)

domain/snyk/issues.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ func (i *Issue) Clone() *Issue {
110110
LessonUrl: i.LessonUrl,
111111
Fingerprint: i.Fingerprint,
112112
GlobalIdentity: i.GlobalIdentity,
113-
SuppressionStatus: i.SuppressionStatus,
114113
m: sync.RWMutex{},
115114
}
116115
}
@@ -479,6 +478,6 @@ func (i *Issue) SetID(id string) {
479478
i.ID = id
480479
}
481480

482-
func (i *Issue) SetSuppressionStatus(status string) {
483-
i.SuppressionStatus = status
481+
func (i *Issue) SetIgnoreDetails(ignoreDetails *types.IgnoreDetails) {
482+
i.IgnoreDetails = ignoreDetails
484483
}

infrastructure/code/convert.go

+21-12
Original file line numberDiff line numberDiff line change
@@ -442,22 +442,31 @@ func (s *SarifConverter) getIgnoreDetails(result codeClientSarif.Result) (bool,
442442
isIgnored = true
443443
suppression := result.Suppressions[0]
444444

445-
reason := suppression.Justification
446-
if reason == "" {
447-
reason = "None given"
448-
}
449-
ignoreDetails = &types.IgnoreDetails{
450-
Category: string(suppression.Properties.Category),
451-
Reason: reason,
452-
Expiration: parseExpirationDateFromString(suppression.Properties.Expiration),
453-
IgnoredOn: parseDateFromString(suppression.Properties.IgnoredOn),
454-
IgnoredBy: suppression.Properties.IgnoredBy.Name,
455-
Status: suppression.Status,
456-
}
445+
ignoreDetails = SarifSuppressionToIgnoreDetails(&suppression)
457446
}
458447
return isIgnored, ignoreDetails
459448
}
460449

450+
func SarifSuppressionToIgnoreDetails(suppression *codeClientSarif.Suppression) *types.IgnoreDetails {
451+
if suppression == nil {
452+
return nil
453+
}
454+
455+
reason := suppression.Justification
456+
if reason == "" {
457+
reason = "None given"
458+
}
459+
ignoreDetails := &types.IgnoreDetails{
460+
Category: string(suppression.Properties.Category),
461+
Reason: reason,
462+
Expiration: parseExpirationDateFromString(suppression.Properties.Expiration),
463+
IgnoredOn: parseDateFromString(suppression.Properties.IgnoredOn),
464+
IgnoredBy: suppression.Properties.IgnoredBy.Name,
465+
Status: suppression.Status,
466+
}
467+
return ignoreDetails
468+
}
469+
461470
func parseExpirationDateFromString(date *string) string {
462471
if date == nil {
463472
return ""

internal/types/issues.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ type Issue interface {
116116
SetIsNew(isNew bool)
117117
SetCodeActions(actions []CodeAction)
118118
SetRange(r Range)
119-
SetSuppressionStatus(status string)
119+
SetIgnoreDetails(ignoreDetails *IgnoreDetails)
120120
}
121121

122122
type IssueAdditionalData interface {

0 commit comments

Comments
 (0)