internal/platform/product/analyzers.go (90 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 product import ( "strings" "github.com/JetBrains/qodana-cli/internal/platform/qdyaml" log "github.com/sirupsen/logrus" ) type Analyzer interface { GetLinter() Linter IsContainer() bool IsEAP() bool Name() string DownloadDist() bool InitYaml(yaml qdyaml.QodanaYaml) qdyaml.QodanaYaml } // DockerAnalyzer can have UnknownLinter as Linter value type DockerAnalyzer struct { Linter Linter Image string } func (a *DockerAnalyzer) IsContainer() bool { return true } func (a *DockerAnalyzer) IsEAP() bool { return strings.Contains(strings.ToLower(a.Image), "eap") } func (a *DockerAnalyzer) Name() string { return a.Image } func (a *DockerAnalyzer) GetLinter() Linter { return a.Linter } func (a *DockerAnalyzer) DownloadDist() bool { return false } func (a *DockerAnalyzer) InitYaml(yaml qdyaml.QodanaYaml) qdyaml.QodanaYaml { yaml.Linter = a.Linter.Name return yaml } // NativeAnalyzer can't be UnknownLinter type NativeAnalyzer struct { Linter Linter Eap bool } func (a *NativeAnalyzer) IsContainer() bool { return false } func (a *NativeAnalyzer) IsEAP() bool { return a.Eap } func (a *NativeAnalyzer) Name() string { return a.withEap() } func (a *NativeAnalyzer) withEap() string { if a.Eap { return a.Linter.ProductCode + EapSuffix } return a.Linter.ProductCode } func (a *NativeAnalyzer) GetLinter() Linter { return a.Linter } func (a *NativeAnalyzer) DownloadDist() bool { return true } func (a *NativeAnalyzer) InitYaml(yaml qdyaml.QodanaYaml) qdyaml.QodanaYaml { yaml.Linter = a.Linter.Name return yaml } type PathNativeAnalyzer struct { Linter Linter Path string IsEap bool } func (a *PathNativeAnalyzer) IsContainer() bool { return false } func (a *PathNativeAnalyzer) IsEAP() bool { return strings.Contains(strings.ToLower(a.Path), "eap") } func (a *PathNativeAnalyzer) Name() string { return a.Path } func (a *PathNativeAnalyzer) GetLinter() Linter { return a.Linter } func (a *PathNativeAnalyzer) DownloadDist() bool { return false } func (a *PathNativeAnalyzer) InitYaml(_ qdyaml.QodanaYaml) qdyaml.QodanaYaml { log.Fatalf("Customised path can't be stored to Yaml") return qdyaml.QodanaYaml{} }