Isu tinoramba tichiita kuti kushandisa PVS-Studio kuve nyore. Yedu analyzer yave kuwanikwa muChocolatey, maneja wepakeji yeWindows. Isu tinotenda kuti izvi zvichafambisa kuendeswa kwePVS-Studio, kunyanya, mumasevhisi emakore. Kuti usaende kure, ngatitarise iyo kodhi kodhi yeiyo Chocolatey imwechete. Azure DevOps ichaita seCI system.
Heino rondedzero yezvimwe zvinyorwa zvedu pamusoro penyaya yekubatanidzwa ne cloud systems:
PVS-Studio inoenda kumakore: Azure DevOps PVS-Studio inoenda kumakore: Travis CI PVS-Studio inoenda kumakore: CircleCI PVS-Studio inoenda kumakore: GitLab CI/CD
Ini ndinokupa zano kuti uteerere kune yekutanga chinyorwa nezve kubatanidzwa neAzure DevOps, sezvo mune iyi nyaya mamwe mapoinzi akasiiwa kuti arege kudzokororwa.
Saka, magamba echinyorwa ichi:
Nezve kushandisa Chocolatey
Iwe unogona kuona maitiro ekuisa iyo package maneja pachayo pane izvi
Raira kuisa yazvino vhezheni yeanalyzer:
choco install pvs-studio
Raira kuisa imwe vhezheni yePVS-Studio package:
choco install pvs-studio --version=7.05.35617.2075
Nekusagadzikana, chete musimboti weanalyzer, iyo Core chikamu, inoiswa. Mamwe mimwe mireza (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) inogona kupfuudzwa uchishandisa --package-parameter.
Muenzaniso wemurairo unozoisa analyzer ine plugin yeVisual Studio 2019:
choco install pvs-studio --package-parameters="'/MSVS2019'"
Zvino ngatitarisei muenzaniso wekushandiswa kuri nyore kweanalyzer pasi peAzure DevOps.
kuchinja
Rega ndikuyeuchidze kuti pane chikamu chakasiyana nezvenyaya dzakadai sekunyoresa account, kugadzira Pipeline Yakavaka uye kuwiriranisa account yako nepurojekiti iri muGitHub repository.
Chekutanga, ngatisemei chinokonzeresa, zvichiratidza kuti isu tinovhura chete shanduko mukati tenzi bazi:
trigger:
- master
Tevere tinoda kusarudza muchina chaiwo. Parizvino ichave mumiriri weMicrosoft ane Windows Server 2019 uye Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Ngatienderei kumutumbi wefaira yekumisikidza (block matanho) Kunyangwe ichokwadi chekuti haugone kuisa yekupokana software mumushini chaiwo, ini handina kuwedzera Docker mudziyo. Tinogona kuwedzera Chocolatey sekuwedzera kweAzure DevOps. Kuti tiite izvi, ngatiende
Pano iwe unofanirwa kusarudza kwatichawedzera kuwedzera uye tinya bhatani gadza.
Mushure mekubudirira kuisa, tinya Enderera kune sangano:
Iwe unogona ikozvino kuona template yeChocolatey basa pahwindo mabasa paunenge uchigadzirisa faira rekugadzirisa azure-pipelines.yml:
Dzvanya paChocolatey uye ona rondedzero yeminda:
Pano tinofanira kusarudza install mumunda nezvikwata. IN Nuspec File Name ratidza zita repasuru inodiwa - pvs-studio. Kana iwe ukasatsanangura iyo vhezheni, yazvino ichaiswa, iyo inokodzera isu zvachose. Ngatidzvanye bhatani wedzera uye isu tichaona basa rakagadzirwa mufaira rekugadzirisa.
steps:
- task: ChocolateyCommand@0
inputs:
command: 'install'
installPackageId: 'pvs-studio'
Tevere, ngatiendei kune chikamu chikuru chefaira redu:
- task: CmdLine@2
inputs:
script:
Iye zvino tinoda kugadzira faira ine analyzer rezinesi. Here PVSNAME и PVSKEY -mazita emhando dzakasiyana dzatinotsanangura mumaseting. Ivo vanochengeta iyo PVS-Studio yekupinda uye rezinesi kiyi. Kuti uise kukosha kwavo, vhura menyu Variables-> New variable. Ngatigadzire zvinoshanduka PVSNAME ye login uye PVSKEY yekiyi analyzer. Usakanganwa kutarisa bhokisi Chengetedza kukosha uku kwakavanzika nokuti PVSKEY. Kodhi yekuraira:
сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" credentials
–u $(PVSNAME) –n $(PVSKEY)
Ngativake purojekiti tichishandisa iyo bat faira iri mune repository:
сall build.bat
Ngatigadzire folda iyo mafaera ane mhedzisiro yeanalyzer achachengetwa:
сall mkdir PVSTestResults
Ngatitangei kuongorora purojekiti:
сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe"
–t .srcchocolatey.sln –o .PVSTestResultsChoco.plog
Isu tinoshandura rondedzero yedu kuita html fomati tichishandisa iyo PlogСonverter utility:
сall "C:Program Files (x86)PVS-StudioPlogConverter.exe"
–t html –o PVSTestResults .PVSTestResultsChoco.plog
Iye zvino iwe unofanirwa kugadzira basa kuti iwe ugone kurodha iyo report.
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: PVSTestResults
artifactName: PVSTestResults
condition: always()
Iyo yakazara faira yekumisikidza inoita seizvi:
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- task: ChocolateyCommand@0
inputs:
command: 'install'
installPackageId: 'pvs-studio'
- task: CmdLine@2
inputs:
script: |
call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe"
credentials –u $(PVSNAME) –n $(PVSKEY)
call build.bat
call mkdir PVSTestResults
call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe"
–t .srcchocolatey.sln –o .PVSTestResultsChoco.plog
call "C:Program Files (x86)PVS-StudioPlogConverter.exe"
–t html –o .PVSTestResults .PVSTestResultsChoco.plog
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: PVSTestResults
artifactName: PVSTestResults
condition: always()
Ngatidzvanye Sevha-> Sevha-> Mhanya kumhanya basa. Ngatitorei mushumo nekuenda kune yebasa tab.
Iyo Chocolatey purojekiti ine chete 37615 mitsetse yeC # kodhi. Ngatitarisei zvimwe zvezvikanganiso zvakawanikwa.
Test Results
Yambiro N1
Analyzer yambiro:
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Iyo analyzer yakaona kugoverwa kweiyo vhezheni pachayo, izvo zvisina musoro. Zvingangodaro, panzvimbo yeimwe yeiyi misiyano panofanira kunge paine imwe. Zvakanaka, kana iyi typo, uye basa rekuwedzera rinogona kungobviswa.
Yambiro N2
Analyzer yambiro:
public static PlatformType get_platform()
{
switch (Environment.OSVersion.Platform)
{
case PlatformID.MacOSX:
{
....
}
case PlatformID.Unix:
if(file_system.directory_exists("/Applications")
& file_system.directory_exists("/System")
& file_system.directory_exists("/Users")
& file_system.directory_exists("/Volumes"))
{
return PlatformType.Mac;
}
else
return PlatformType.Linux;
default:
return PlatformType.Windows;
}
}
Operator musiyano & kubva kumushandisi && ndiko kuti kana rutivi rworuboshwe rwechirevo chiri venhema, ipapo rutivi rworudyi rucharamba ruchiverengwa, iyo munyaya iyi inoreva nzira dzisina kufanira dzinofona system.directory_exists.
Muchidimbu chinotariswa, ichi chikanganiso chidiki. Ehe, mamiriro aya anogona kuvandudzwa nekutsiva iyo & opareta ne && opareta, asi kubva pamaonero anoshanda, izvi hazvikanganisa chero chinhu. Nekudaro, mune zvimwe zviitiko, kuvhiringika pakati & uye && kunogona kukonzera matambudziko akakomba kana rutivi rwerudyi rwechirevo rukabatwa nemaitiro asiri iwo / asina kunaka. Semuenzaniso, mukuunganidza kwedu kukanganisa,
if ((k < nct) & (s[k] != 0.0))
Kunyangwe iyo index k haina kururama, ichashandiswa kuwana array element. Nekuda kweizvozvo, kusarudzika kuchakandirwa IndexOutOfRangeException.
Yambiro N3, N4
Analyzer yambiro:
Analyzer yambiro:
public static string
prompt_for_confirmation(.... bool shortPrompt = false, ....)
{
....
if (shortPrompt)
{
var choicePrompt = choice.is_equal_to(defaultChoice) //1
?
shortPrompt //2
?
"[[{0}]{1}]".format_with(choice.Substring(0, 1).ToUpperInvariant(), //3
choice.Substring(1,choice.Length - 1))
:
"[{0}]".format_with(choice.ToUpperInvariant()) //0
:
shortPrompt //4
?
"[{0}]{1}".format_with(choice.Substring(0,1).ToUpperInvariant(), //5
choice.Substring(1,choice.Length - 1))
:
choice; //0
....
}
....
}
Muchiitiko ichi, kune pfungwa inoshamisa shure kwekushanda kwe ternary operator. Ngatitarisei zvakanyanya: kana mamiriro andakamaka nenhamba 1 asangana, tobva taenda kune chimiro 2, chinogara chiripo. zvechokwadi, zvinoreva kuti mutsara 3 uchaitwa.Kana chimiro 1 chikava chenhema, tobva taenda kumutsara wakanyorwa nhamba 4, mamiriro ayo anogara ariwo nguva dzose. zvechokwadi, zvinoreva kuti mutsara 5 uchaitwa.Saka, mamiriro akaiswa nekutaura 0 haazombozadzikiswa, izvo zvingave zvisiri izvo chaizvo zvinonzwisisika zvekushanda izvo zvakatarisirwa nemugadziri.
Yambiro N5
Analyzer yambiro:
private static string GetArgumentName (...., string description)
{
string[] nameStart;
if (maxIndex == 1)
{
nameStart = new string[]{"{0:", "{"};
}
else
{
nameStart = new string[]{"{" + index + ":"};
}
for (int i = 0; i < nameStart.Length; ++i)
{
int start, j = 0;
do
{
start = description.IndexOf (nameStart [i], j);
}
while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
....
return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
}
}
Iyo diagnostic yakashanda kune iyo mutsara:
while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false)
Kubva pane zvakasiyana j mitsetse mishoma iri pamusoro inotangwa kusvika zero, iyo ternary opareta ichadzosa kukosha venhema. Nekuda kwechiitiko ichi, muviri wechiuno unozoitwa kamwe chete. Zvinoratidzika kwandiri kuti chidimbu chekodhi hachishandi zvachose sezvaidiwa nemugadziri.
Yambiro N6
Analyzer yambiro:
private void remove_nuget_cache_for_package(....)
{
if (!config.AllVersions && installedPackageVersions.Count > 1)
{
const string allVersionsChoice = "All versions";
if (installedPackageVersions.Count != 1)
{
choices.Add(allVersionsChoice);
}
....
}
....
}
Pane imwe nested condition inoshamisa pano: yakaiswaPackageVersions.Count != 1izvo zvichagara zviripo zvechokwadi. Kazhinji yambiro yakadaro inoratidza chikanganiso chine musoro mukodhi, uye mune dzimwe nguva inongoratidza kusatarisisa.
Yambiro N7
Analyzer yambiro:
public static bool arguments_contain_sensitive_information(string
commandArguments)
{
return commandArguments.contains("-install-arguments-sensitive")
|| commandArguments.contains("-package-parameters-sensitive")
|| commandArguments.contains("apikey ")
|| commandArguments.contains("config ")
|| commandArguments.contains("push ")
|| commandArguments.contains("-p ")
|| commandArguments.contains("-p=")
|| commandArguments.contains("-password")
|| commandArguments.contains("-cp ")
|| commandArguments.contains("-cp=")
|| commandArguments.contains("-certpassword")
|| commandArguments.contains("-k ")
|| commandArguments.contains("-k=")
|| commandArguments.contains("-key ")
|| commandArguments.contains("-key=")
|| commandArguments.contains("-apikey")
|| commandArguments.contains("-api-key")
|| commandArguments.contains("-apikey")
|| commandArguments.contains("-api-key");
}
Mugadziri akanyora chikamu ichi chekodhi akakopa uye akaisa mitsetse miviri yekupedzisira ndokukanganwa kuigadzirisa. Nekuda kweizvi, vashandisi veChocolatey havana kukwanisa kuisa iyo parameter apikey dzimwe nzira mbiri. Zvakafanana nema parameter ari pamusoro, ndinogona kupa zvinotevera sarudzo:
commandArguments.contains("-apikey=");
commandArguments.contains("-api-key=");
Copy-paste zvikanganiso zvine mukana wakakura wekuonekwa munguva pfupi kana gare gare mune chero chirongwa chine huwandu hukuru hwekodhi yekodhi, uye chimwe chezvishandiso zvakanakisa zvekurwa nazvo ndeye static analysis.
PS Uye senguva dzose, kukanganisa uku kunowanzo kuoneka pamagumo emamiriro e-multi-line :). Ona chinyorwa "
Yambiro N8
Analyzer yambiro:
public virtual ConcurrentDictionary<string, PackageResult> get_outdated(....)
{
....
var pinnedPackageResult = outdatedPackages.GetOrAdd(
packageName,
new PackageResult(installedPackage,
_fileSystem.combine_paths(
ApplicationParameters.PackagesLocation,
installedPackage.Id)));
....
if ( installedPackage != null
&& !string.IsNullOrWhiteSpace(installedPackage.Version.SpecialVersion)
&& !config.UpgradeCommand.ExcludePrerelease)
{
....
}
....
}
Classic kukanganisa: chinhu chekutanga yakaiswaPackage inoshandiswa uye yoongororwa null. Iyi yekuongorora inotitaurira nezveimwe yematambudziko maviri muchirongwa: kana yakaiswaPackage kusamboenzana null, izvo zvisina chokwadi, uyezve cheki haina basa, kana isu tinogona kuwana chikanganiso chakakomba mukodhi - kuyedza kuwana isina chinhu.
mhedziso
Saka takatora rimwe danho diki - iko zvino kushandisa PVS-Studio kwave nyore uye kuri nyore. Ini ndinodawo kutaura kuti Chocolatey yakanaka pasuru maneja ane diki nhamba yezvikanganiso mukodhi, inogona kunge iri shoma kana uchishandisa PVS-Studio.
Tinokukoka iwe
PS
Tisati taburitswa, takatumira chinyorwa kune vanogadzira Chocolatey, uye vakachigamuchira zvakanaka. Hatina kuwana chero chinhu chakakosha, asi ivo, semuenzaniso, vakafarira bug yatakawana ine chekuita nekiyi "api-kiyi".
Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Vladislav Stolyarov.
Source: www.habr.com