Комментарии 38
Хочу выразить благодарность компании Microsoft за то, что она создала этот открытый проект. Он окажет большое влияние на развитие C#-инфраструктуры. Да он уже оказывает влияние! Например, на базу Rolsyn переносятся такие известные проекты как ReSharper или CodeRush:И по вашей же ссылке текст:
The short answer to this tremendously popular question is, no, ReSharper will not use Roslyn. There are at least two major reasons behind this.Вы вообще читаете то, на что ссылаетесь?
+17
Поразительно! Я был довольно скептически настроен, но за час нашел кучу ошибок, некоторые критичные, которые случаются в редких случаях
Не реклама, просто огромная благодарность :)
Не реклама, просто огромная благодарность :)
+8
+2
+2
А решарпер почему не используете?
+2
используем, но только как помощник для написания кода. все его warnings уже давно все игнорируют.
Вот на том же проекте он сейчас выдал 5429 issues, понятно что никто не будет с этим разбираться
Вот на том же проекте он сейчас выдал 5429 issues, понятно что никто не будет с этим разбираться
+4
Лучше уж кому нибудь разобраться с ними и отключить все шумные предупреждения для проекта (там можно настройки закомитить с проектом), а самые полезные исправлять
0
Вот на том же проекте он сейчас выдал 5429 issues, понятно что никто не будет с этим разбираться
все его warnings уже давно все игнорируют.
Если вы отключили решарперовские варнинги — то где гарантия, что и предупреждения PVS не отправятся в тот же игнор?
0
Все эти identical subexpressions намекают на то, что вы не очень-то аккуратно программируете. Если switch не покрывает все кейсы, это нормально. Как вы умудрились посчитать All() по перечислению и при этом никуда не присвоить — большой вопрос.
0
почему-то перестал работать
Exception message:
There was no endpoint listening at net.pipe://localhost/33cde34b-307f-4abb-9c31-2a1dd644aa6b/PVSStudioAnalyzer that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
Exception type:
System.ServiceModel.EndpointNotFoundException
Stack:
Server stack trace:
at System.ServiceModel.Channels.ConnectionUpgradeHelper.DecodeFramingFault(ClientFramingDecoder decoder, IConnection connection, Uri via, String contentType, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.IAnalyzerContract.StartAnalysis(IDictionary`2 projectToFilesMap, Boolean obfuscateResults)
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.AnalyzerServiceSession.StartRemoteAnalysis(IDictionary`2 projectFilesMap, String channelName) in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\Analyzer\Integration\AnalyzerServiceSession.cs:line 192
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.AnalyzerServiceSession.Execute(IDictionary`2 projectFilesMap, String platform, String configuration, String solutionName, CancellationToken cancelToken, Boolean obfuscateResults) in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\Analyzer\Integration\AnalyzerServiceSession.cs:line 106
at ProgramVerificationSystems.PVSStudio.ProcessingEngine.<>c__DisplayClass53_0.b__10() in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\ProcessingEngine.cs:line 799
PVS-Studio Version: 6.0.15162.1
Visual Studio Version: 14.0 Professional
Visual Studio LocaleID: en
Windows Version: Microsoft Windows NT 10.0.10240.0
Exception message:
There was no endpoint listening at net.pipe://localhost/33cde34b-307f-4abb-9c31-2a1dd644aa6b/PVSStudioAnalyzer that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
Exception type:
System.ServiceModel.EndpointNotFoundException
Stack:
Server stack trace:
at System.ServiceModel.Channels.ConnectionUpgradeHelper.DecodeFramingFault(ClientFramingDecoder decoder, IConnection connection, Uri via, String contentType, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.IAnalyzerContract.StartAnalysis(IDictionary`2 projectToFilesMap, Boolean obfuscateResults)
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.AnalyzerServiceSession.StartRemoteAnalysis(IDictionary`2 projectFilesMap, String channelName) in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\Analyzer\Integration\AnalyzerServiceSession.cs:line 192
at ProgramVerificationSystems.PVSStudio.Analyzer.Integration.AnalyzerServiceSession.Execute(IDictionary`2 projectFilesMap, String platform, String configuration, String solutionName, CancellationToken cancelToken, Boolean obfuscateResults) in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\Analyzer\Integration\AnalyzerServiceSession.cs:line 106
at ProgramVerificationSystems.PVSStudio.ProcessingEngine.<>c__DisplayClass53_0.b__10() in D:\CCNetProjects\PVS-Studio Setup\WorkDir\PVS-Studio\PVS-Studio\ProcessingEngine.cs:line 799
PVS-Studio Version: 6.0.15162.1
Visual Studio Version: 14.0 Professional
Visual Studio LocaleID: en
Windows Version: Microsoft Windows NT 10.0.10240.0
0
Примеры ошибок в коде:
method always returns false
V3010 The return value of function 'Remove' is required to be utilized. FeedProcessor.cs 429
break is unconditional
if (totalReadsCount <= 0 || totalReadsCount <= 0 || noOptimizedSessions <= 0 || noOptimizedViews <= 0)
return;
SessionId = SessionId;
method always returns false
private bool FixRelativeUrl(ref string url, Uri frameUrl)
{
if (Uri.TryCreate(url, UriKind.Relative, out frameUrl))
{
try
{
var frameUriBuilder = new UriBuilder("http", frameUrl.ToString());
url = frameUriBuilder.Uri.AbsoluteUri;
}
catch
{
return false;
}
}
return false;
}
V3010 The return value of function 'Remove' is required to be utilized. FeedProcessor.cs 429
if (str[str.Length - 1] == ',')
str.Remove(str.Length - 1);
break is unconditional
foreach (string author in authors)
{
...
break;
}
+1
Давно не следил за вашими постами, потому есть вопрос:
Могу ли я бесплатно проверить коммерческий проект с открытым кодом? Если да, то как мне это сделать? А можете ли это сделать вы и написать статью? :)
Могу ли я бесплатно проверить коммерческий проект с открытым кодом? Если да, то как мне это сделать? А можете ли это сделать вы и написать статью? :)
0
Скачайте триал и проверьте проект — это самый лучше способ познакомиться с анализатором. Сделать мы можем. Можем даже ошибки поправить. Но «за дорого» :-).
+1
Тоже проверил свои почти 2 миллиона строк. Нашел около 70 High/Medium ошибок, из них:
Удивительно, что последние два не нашел решарпер, хотя случаи очень простые. Спасибо.
- ~20 ложных (в основном V3029, V3002, V3005, V3019)
- ~40 стилистических/устоявшихся (легаси код, поведение для совместимости, старый стиль кода и др.)
- 3 низкоприоритетных бага (V3025, V3001)
- 1 среднеприоритетный баг (V3003 — «if (A) { } else if (A) { }»)
- 2 высокоприоритетных (V3041 — целочисленное деление с результатом 0)
Удивительно, что последние два не нашел решарпер, хотя случаи очень простые. Спасибо.
+4
Небольшой вопрос возник:
Предупреждение PVS-Studio: V3004 The 'then' statement is equivalent to the 'else' statement. GetSemanticInfoTests.cs 2269Смущает именование выделенных частей, почему не if statement?
0
В своем проекте триалом нашел 2 серьезные ошибки, остальное ложные срабатывания, но эти 2 ошибки стоят аплодисментов.
+3
Расскажите что за ошибки.
+1
Расскажите, пожалуйста, про ошибки. Статистика по диагностикам очень поможет нам при принятии решений по доработке существующих правил и разработке новых.
Например, интересная статистика была в этом комментарии: habrahabr.ru/company/pvs-studio/blog/273811/#comment_8714091
Например, интересная статистика была в этом комментарии: habrahabr.ru/company/pvs-studio/blog/273811/#comment_8714091
+1
Сразу скажу, я использовал пререлизную версию приложения.
Первая ошибка связана с ошибкой в условии следующего вида.
var i = 2;
if(i < 0 && i > 2)…
Вторая ошибка это присвоение значения поля/переменной самой себе.
fieldName = fieldName;
Т.к. места где ошибки были обнаружены отвечают за очень редкие кейсы, ошибки не были обнаружены ранее, но могли привести к неприятным проблемам у пользователей.
Все остальное ложные срабатывания, так же было одно ошибочное о нем сразу сообщил разработчикам.
Дмитрий, я уверен, что в низком количестве ошибок не малая заслуга вашего продукта :)
Первая ошибка связана с ошибкой в условии следующего вида.
var i = 2;
if(i < 0 && i > 2)…
Вторая ошибка это присвоение значения поля/переменной самой себе.
fieldName = fieldName;
Т.к. места где ошибки были обнаружены отвечают за очень редкие кейсы, ошибки не были обнаружены ранее, но могли привести к неприятным проблемам у пользователей.
Все остальное ложные срабатывания, так же было одно ошибочное о нем сразу сообщил разработчикам.
Дмитрий, я уверен, что в низком количестве ошибок не малая заслуга вашего продукта :)
0
Было бы круто, если бы ваш анализатор выкупил Microsoft за очень большие деньги.
-1
После этой статьи решил-таки попробовать. И кое-что интересное нашёл :)
И как должно быть:
Т.е. у обеих функций одинаковая сигнатура: string format, params object [] и закрывающая скобка стояла не там. Сам даже если бы вчитывался, не заметил бы.
Это очень здорово, спасибо команде :)
source.OrderBy(String.Format("{0}.{1}", source.Name, MembersOf<TSource>.GetPath(keySelector), new ObjectParameter[] { }));
И как должно быть:
source.OrderBy(String.Format("{0}.{1}", source.Name, MembersOf<TSource>.GetPath(keySelector)), new ObjectParameter[] { });
Т.е. у обеих функций одинаковая сигнатура: string format, params object [] и закрывающая скобка стояла не там. Сам даже если бы вчитывался, не заметил бы.
V3025 Incorrect format. A different number of format items is expected while calling 'Format' function.
Это очень здорово, спасибо команде :)
+2
Раз уж проверили Roslyn, то было бы также интересно узнать про ошибки в ANTLR C# Runtime.
0
Новая проверка: habr.com/ru/company/pvs-studio/blog/446592
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Новогодний релиз PVS-Studio 6.00: проверяем Roslyn