cdnet/options.go (87 lines of code) (raw):
/*
* Copyright 2021-2024 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package main
import (
"fmt"
"strings"
"github.com/JetBrains/qodana-cli/internal/platform"
"github.com/JetBrains/qodana-cli/internal/platform/strutil"
"github.com/JetBrains/qodana-cli/internal/platform/thirdpartyscan"
)
func (l CdnetLinter) computeCdnetArgs(c thirdpartyscan.Context) ([]string, error) {
target := getSolutionOrProject(c)
if target == "" {
return nil, fmt.Errorf("solution/project relative file path is not specified. Use --solution or --project flags or create qodana.yaml file with respective fields")
}
var props = ""
for _, p := range c.Property() {
if strings.HasPrefix(p, "log.") ||
strings.HasPrefix(p, "idea.") ||
strings.HasPrefix(p, "qodana.") ||
strings.HasPrefix(p, "jetbrains.") {
continue
}
if props != "" {
props += ";"
}
props += p
}
dotNet := c.QodanaYamlConfig().DotNet
if c.CdnetConfiguration() != "" {
if props != "" {
props += ";"
}
props += "Configuration=" + c.CdnetConfiguration()
} else if dotNet.Configuration != "" {
if props != "" {
props += ";"
}
props += "Configuration=" + dotNet.Configuration
}
if c.CdnetPlatform() != "" {
if props != "" {
props += ";"
}
props += "Platform=" + c.CdnetPlatform()
} else if dotNet.Platform != "" {
if props != "" {
props += ";"
}
props += "Platform=" + dotNet.Platform
}
mountInfo := c.MountInfo()
sarifPath := platform.GetSarifPath(c.ResultsDir())
args := []string{
"dotnet",
strutil.QuoteForWindows(mountInfo.CustomTools[thirdpartyscan.Clt]),
"inspectcode",
strutil.QuoteForWindows(target),
"-o=\"" + sarifPath + "\"",
"-f=\"Qodana\"",
"--LogFolder=\"" + c.LogDir() + "\"",
}
if props != "" {
args = append(args, "--properties:"+props)
}
if c.NoStatistics() {
args = append(args, "--telemetry-optout")
}
if c.CdnetNoBuild() {
args = append(args, "--no-build")
}
return args, nil
}
func getSolutionOrProject(c thirdpartyscan.Context) string {
var target = ""
paths := [4]string{
c.CdnetSolution(),
c.CdnetProject(),
c.QodanaYamlConfig().DotNet.Solution,
c.QodanaYamlConfig().DotNet.Project,
}
for _, path := range paths {
if path != "" {
target = path
break
}
}
return target
}