Здравствуйте, Codealot, Вы писали:
C>Например, простая и полезная фича — сделать опцию, чтобы числа в VS показывались с сепараторами тысяч. Запрос на фичу добавили давно, но как обычно, разрабы не будут ничего делать, пока пользователи не прорвут им новую дырку в заднице. C>https://developercommunity.visualstudio.com/t/VS-Watch-Window---Add-Option-For-Thousan/10536321 C>Проголосуем?
Подожди, все заняты: вырезают partial методы из шарпа.
Здравствуйте, Codealot, Вы писали:
_>>один раз добавил на уровне отладчика и пользуйся.
C>Как ты это себе представляешь?
По ссылке которую я привёл упоминается файл autoexp.cs, находится он где-то тут: Microsoft Visual Studio\2019\Enterprise\Common7\Packages\Debugger\Visualizers\Original\autoexp.cs .
Добавляешь, напр. в конец, нужный тебе DebuggerDisplay уровня assembly:
[assembly: DebuggerDisplay("{m_value.ToString(\"N0\", new System.Globalization.CultureInfo(\"en-US\", false) {NumberFormat = new System.Globalization.NumberFormatInfo() {NumberGroupSeparator = \"_\"}}),nq}", Target = typeof(Int32))]
[assembly: DebuggerDisplay("{m_value.ToString(\"N0\", new System.Globalization.CultureInfo(\"en-US\", false) {NumberFormat = new System.Globalization.NumberFormatInfo() {NumberGroupSeparator = \"_\"}}),nq}", Target = typeof(Int64))]
И компилишь, в самом файле даже комент приведён:
// To build this, open an elevated Developer Command Prompt and run:
// csc /t:library autoexp.cs
Студию даже перегружать не надо, autoexp.dll цепляется во время отладки. Работает вроде везде (watch/locals, всплывающий watch, immediate window), как просмотр, так и редактирование.
Re[9]: А почему бы нам не сделать что-нибудь полезное?
Пробежался по ссылкам и не уловил, почему DebuggerDisplayAttribute на подходит? На SO и ссылка на использование есть. Да, не из коробки, но если очень надо — один раз добавил на уровне отладчика и пользуйся.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Например, простая и полезная фича — сделать опцию, чтобы числа в VS показывались с сепараторами тысяч. Запрос на фичу добавили давно, но как обычно, разрабы не будут ничего делать, пока пользователи не прорвут им новую дырку в заднице.
Попросил ДипСика:
Напиши плагин к VS 2022 реализующий отображение в коде чисел с разделителями тысяч.
Он выдал готовый код плагина. Остается только добавить во VSIX-проект, скомпилировать и проинсталлировать плагин. Пробуй, если интересно.
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Operations;
using System;
using System.Text.RegularExpressions;
namespace ThousandsSeparatorExtension
{
[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("CSharp")]
[ContentType("Basic")]
[TextViewRole(PredefinedTextViewRoles.Document)]
public sealed class NumberAdornment : IWpfTextViewCreationListener
{
[Import]
public ITextUndoHistoryRegistry UndoHistoryRegistry { get; set; }
[Import]
public ITextBufferFactoryService TextBufferFactoryService { get; set; }
public void TextViewCreated(IWpfTextView textView)
{
textView.TextBuffer.Changed += OnTextBufferChanged;
}
private void OnTextBufferChanged(object sender, TextContentChangedEventArgs e)
{
if (e.Changes.Count == 0) return;
var buffer = sender as ITextBuffer;
if (buffer.Properties.TryGetProperty("IsProcessing", out bool isProcessing) && isProcessing)
return;
buffer.Properties["IsProcessing"] = true;
using (ITextEdit edit = buffer.CreateEdit())
{
foreach (var change in e.Changes)
{
var line = buffer.CurrentSnapshot.GetLineFromPosition(change.NewPosition);
string text = line.GetText();
foreach (Match match in Regex.Matches(text, @"\b\d{4,}\b"))
{
string formatted = FormatNumber(match.Value);
if (formatted != match.Value)
{
Span span = new Span(line.Start.Position + match.Index, match.Length);
edit.Replace(span, formatted);
}
}
}
if (edit.HasEffectiveChanges)
{
edit.Apply();
}
}
buffer.Properties["IsProcessing"] = false;
}
private string FormatNumber(string number)
{
int cursor = number.Length - 1;
var result = new System.Collections.Generic.Stack<char>();
int count = 0;
while (cursor >= 0)
{
result.Push(number[cursor]);
count++;
if (count % 3 == 0 && cursor > 0)
result.Push('_');
cursor--;
}
return new string(result.ToArray()).Trim('_');
}
}
}
Попросил его сгенерить и source.extension.vsixmanifest (единственная более менее сложная часть проекта):
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, amironov79, Вы писали:
A>>Подожди, все заняты: вырезают partial методы из шарпа.
C>Похоже, у меня уже образовался круг фанатов.
Re[5]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>В тикете про это буквально написано
Не нашел этого и по ссылке. Ты сам то почитай то, что написал:
I often find myself repeatedly counting digits to read the order of magnitude of large decimal numbers in the watch window (and losing my place!). For example a variable that contains an allocation size in bytes. I’d like the option to use a separator at every thousand. So rather than 7988768 we could see 7,988,768 for example, which is easier to read.
Думаю, что большинство, как и я, подумало о том, что речь о представлении литералов в коде. Почитал отзывы, коих ровно один (без учета стандартных отписок от МС):
I think that it would be better to make this option work in other debug windows too — quick watch, autos, etc. It could be implemented as an option in the VS wide settings, or as an option in the watch window’s context menu — the same way as the “Hexadecimal display” option.
Товарищ тоже пишет "было бы лучше", т.е. и он понял предложение как предложение для подсветки кода.
Так что ты распечатай и смотри на него на ночь, вспоминая какой ты был долблоом.
Ну и у нас ты обязан в теме всё описать. Никто не обязан ходить по ссылке для понимания написанного тобой.
C>Ну а твое предположение что это должно было быть просто странное.
Ты не умеешь выражать свои мысли, но пытаешься собирать единомышленников. Это смешно.
И ничего странного в представлении чисел с разделителями декад в коде я не вижу. Сам отделяю их "_" в своем коде, если они таки встречаются. Делал это еще на Немерле, где эта фича появилась впервые.
C>Кхм, как ты это себе представляешь?
Выводишь поле в отладчике, например:
_pos.ToString("N0"),ac,nq
и радуешься полученному представлению:
1 213 456 789
N0 — формат с отделением декад
,ac — заставляет пересчитывать значение при любом шаге в отладчике
,nq — заставляет отбросить кавычки у строк
Может, конечно, было бы удобнее иметь возможность менять представление прямо из контекстной манишке в отладчике (как с хексами). Но об этом стоило бы написать подробнее в запросе на фичу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C> Запрос на фичу добавили давно, но как обычно, разрабы не будут ничего делать, пока пользователи не прорвут им новую дырку в заднице
Вообще не угадал! Разрабы (а по факту, куча индусни, нанятой за доширак) берутся только за то, что хоть примерно понимают на своём уровне. Ну то есть за всякие финтифлюшки.
Мои бесконечные переписывания с этими клоунами сначала свелись к тому, что САМ И НАПИШИ(!!!), затем была какая-то черезногузадерищенская реализация, споры, после чего я эту тухлую контору даже касаться больше не хочу — "всё пропало в доме биллгейтских".
Достаточно посмотреть, какой сказочный дол___б работает в их команде, чтобы понять, что искать там нечего:
Хочешь хорошую IDE с возможностью нормального расширения — про VS придётся забыть.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, undo75, Вы писали: U>на одной из прошлых работ у одного видел настроено чтобы "!=" отображалась соответствующим символом математическим. имхо читабельность это скорее уменьшает, чем улучшает...
Это называется "лигатуры" и никакой специальной настройки не требует — достаточно выставить подходящий шрифт.
Одно время народ за этим сильно фанател, потом накал восторга ослаб. В основном — потому, что нарушается мелкий user experience: когда я вижу <=> как три символа, мне видно, куда поставить курсор, чтобы стереть нужный из них. Когда эта байда слепляется в одну стрелку, в ней не видно, куда ставить курсор. Для читаемости, конечно, лигатуры лучше (недаром математики в статьях применяют настоящие стрелки, а не комбинации из минусов, равно, и скобок).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Например, простая и полезная фича — сделать опцию, чтобы числа в VS показывались с сепараторами тысяч. Запрос на фичу добавили давно, но как обычно, разрабы не будут ничего делать, пока пользователи не прорвут им новую дырку в заднице.
Сделай если можешь и хочешь. Но лично я не рекомендую делать плагины для сторонних редакторов или IDE. Лучше сделай функционал для себя лично в полностью подконтрольной программе.
C>PS и если у кого-то есть другие несложные и полезные примеры — предлагайте.
Я уже много, что предлагал в качестве беседы, но понятно же, что за бесплатно или делаешь сам, или ничего сделано не будет. А за платно сам понимаешь.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
bnk>>Проголосовал в минус (нет)
C>Некоторым людям — лишь бы нагадить. Просто ради удовольствия от самого процесса.
Саечка за испуг, там невозможно в минус проголосовать, нижняя стрелка задизейблена
bnk>>Эта фича нужно полутора землекопам.
C>Чтобы читать числа было удобнее — нужно всем.
А зачем читать длинные числа в отладчике?
Re[3]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, VladD2, Вы писали:
VD>>Попросил ДипСика: VD>>
VD>>Напиши плагин к VS 2022 реализующий отображение в коде чисел с разделителями тысяч.
C>Этот незамутненный ни малейшим пониманием оптимизм... C>Ты в курсе, что такое Watch в отладчике и зачем оно используется? И какое отношение к нему имеет отображение в коде, по твоему? Если допустить что оно вообще будет работать, в чем я сильно сомневаюсь.
Под рукой нет студии, но ChatGPT предлагает готовый код.
Попробуйте:
using Microsoft.VisualStudio.DebuggerVisualizers;
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Windows.Forms;
[assembly: DebuggerVisualizer(
typeof(WatchNumberVisualizer),
typeof(VisualizerObjectSource),
Target = typeof(int),
Description = "Formatted Number Visualizer")]
[assembly: DebuggerVisualizer(
typeof(WatchNumberVisualizer),
typeof(VisualizerObjectSource),
Target = typeof(long),
Description = "Formatted Number Visualizer")]
[assembly: DebuggerVisualizer(
typeof(WatchNumberVisualizer),
typeof(VisualizerObjectSource),
Target = typeof(double),
Description = "Formatted Number Visualizer")]
public class WatchNumberVisualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
object data = objectProvider.GetObject();
string formattedValue = FormatWithSpaces(data);
MessageBox.Show($"Formatted Value:\n{formattedValue}", "Formatted Number Visualizer");
}
private string FormatWithSpaces(object number)
{
if (number is int i)
return i.ToString("N0", CultureInfo.InvariantCulture).Replace(',', ' ');
if (number is long l)
return l.ToString("N0", CultureInfo.InvariantCulture).Replace(',', ' ');
if (number is double d)
return d.ToString("N2", CultureInfo.InvariantCulture).Replace(',', ' ');
return number.ToString();
}
}
Здравствуйте, Codealot, Вы писали:
C>Этот незамутненный ни малейшим пониманием оптимизм...
Звучит как хамство. Давай по уважительнее и по аккуратнее.
C>Ты в курсе, что такое Watch в отладчике и зачем оно используется? И какое отношение к нему имеет отображение в коде, по твоему? Если допустить что оно вообще будет работать, в чем я сильно сомневаюсь.
Из твоего описания ни разу не ясно, что речь идет об отладчике. Ты тогда бы уточнял, что хочешь.
С представлением данных в отладчике все еще проще. Любое значение можно всегда в строку с нужным форматом преобразовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, undo75, Вы писали:
U>на одной из прошлых работ у одного видел настроено чтобы "!=" отображалась соответствующим символом математическим. имхо читабельность это скорее уменьшает, чем улучшает...
Я когда VS 2022 впервые поставил себе, то там по умолчанию был шрифт Cascadia Code с лигатурами для !=, => и т.п.
Выглядит интересно, но непривычно. Если так изначально кодить, то может и нормально, но у себя это убрал )
Re[9]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Ты не в курсе этого вопроса — ладно, со всеми бывает. Но ты даже погуглить не потрудился, а это уже намного хуже.
Гуглить здесь ложно. Я ИИ запряг. И он утверждает, что ты врешь.
Можешь опровергнуть его утверждение приведя ссылку на спеку.
C>Ну а по основному вопросу — очевидно, до тебя наконец дошло, и ты решил сделать вид, что ничего не было.
Про вачь-виндоу, я действительно не заметил. Но в любом случае, это не очевидно из твоего поста на РСДН. А ходить по ссылкам тут никто не обязан. Учесть доносить свои мысли корректно. И уж тем более выключи свою спесь и надменность приходя суда.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, velkin, Вы писали:
V>Сделай если можешь и хочешь. Но лично я не рекомендую делать плагины для сторонних редакторов или IDE. Лучше сделай функционал для себя лично в полностью подконтрольной программе.
Плавали, знаем.
Как минимум, можно просто проголосовать за этот тикет.
Ад пуст, все бесы здесь.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, amironov79, Вы писали:
A>Нет, у нас анархо-коммунизм: постебать пообщаться имеет право каждый, никакого руководства, всеобщее самоуправление, свобода, равенство и т.д.
Тогда не говори за всех.
Ад пуст, все бесы здесь.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>PS и если у кого-то есть другие несложные и полезные примеры — предлагайте.
Несложно и полезно (пример из предыдущего коммента): вставлять из intellisense полный вызов метода.
Я уже удолбался вставлять скобочки и ';'. Фича — может быть и не простая в плане улавливания контекста, но точно не настолько сложная, чтобы делать её ДЕВЯТЬ ЛЕТ.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Baiker, Вы писали:
B>Вообще не угадал! Разрабы (а по факту, куча индусни, нанятой за доширак) берутся только за то, что хоть примерно понимают на своём уровне. Ну то есть за всякие финтифлюшки.
Не "угадал", я сам в МС работал. Понимание — тоже, но обычно они просто ничего не станут фиксить, пока пользователи не начнут собираться для линчевания. Новые фичи — да, исправления — нет.
B>Достаточно посмотреть, какой сказочный дол___б работает в их команде, чтобы понять, что искать там нечего:
О, этого типа я уже читал. Он там абсолютно в каждом тикете, и постоянно несет пургу. Но вроде бы он не последний человек в C# team.
Ад пуст, все бесы здесь.
Re: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Например, простая и полезная фича — сделать опцию, чтобы числа в VS показывались с сепараторами тысяч. Запрос на фичу добавили давно, но как обычно, разрабы не будут ничего делать, пока пользователи не прорвут им новую дырку в заднице.
Вариант сделать самому не рассматривается?
А разрабам это просто не нужно. В коде редко когда встречаются литералы чисел. Плюс можно прямо в литерале задать разделители пробелами:
var x = 123_456_789;
В новых версиях Шарпа это работает. Так что оно просо не стоит выделки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, VladD2, Вы писали:
VD>Попросил ДипСика: VD>
VD>Напиши плагин к VS 2022 реализующий отображение в коде чисел с разделителями тысяч.
Этот незамутненный ни малейшим пониманием оптимизм...
Ты в курсе, что такое Watch в отладчике и зачем оно используется? И какое отношение к нему имеет отображение в коде, по твоему? Если допустить что оно вообще будет работать, в чем я сильно сомневаюсь.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Ад пуст, все бесы здесь.
Re[4]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, VladD2, Вы писали:
VD>Из твоего описания ни разу не ясно, что речь идет об отладчике. Ты тогда бы уточнял, что хочешь.
В тикете про это буквально написано
Ну а твое предположение что это должно было быть просто странное.
VD>С представлением данных в отладчике все еще проще. Любое значение можно всегда в строку с нужным форматом преобразовать.
Кхм, как ты это себе представляешь?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Ад пуст, все бесы здесь.
Re[2]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, pilgrim_, Вы писали:
_>По ссылке которую я привёл упоминается файл autoexp.cs, находится он где-то тут: Microsoft Visual Studio\2019\Enterprise\Common7\Packages\Debugger\Visualizers\Original\autoexp.cs . _>Добавляешь, напр. в конец, нужный тебе DebuggerDisplay уровня assembly:
И правда, похоже что работает.
Никаких неприятных побочных эффектов?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Ад пуст, все бесы здесь.
Re[6]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, VladD2, Вы писали:
VD>Не нашел этого и по ссылке. Ты сам то почитай то, что написал: VD>
VD>I often find myself repeatedly counting digits to read the order of magnitude of large decimal numbers in the watch window (and losing my place!). For example a variable that contains an allocation size in bytes. I’d like the option to use a separator at every thousand. So rather than 7988768 we could see 7,988,768 for example, which is easier to read.
Выделил для тех, кто не может осилить несколько предложений.
Так что да, распечатай и читай на ночь.
VD> И ничего странного в представлении чисел с разделителями декад в коде я не вижу. Сам отделяю их "_" в своем коде, если они таки встречаются.
Не может быть!
Какими еще откровениями ты хочешь поделиться?
VD> Немерле, где эта фича появилась впервые.
Здравствуйте, Codealot, Вы писали:
C>Никаких неприятных побочных эффектов?
Не знаю, но в приведённом мною примере много аллокаций, можно вынести форматирование в отдельный статический класс (который в этом же файле и написать), со статическим полем культуры с нужным разделителем и методом типа FormatNumber, который и вызывать из атрибута, тогда будет минимум алокаций.
Re[8]: А почему бы нам не сделать что-нибудь полезное?
C>PS и если у кого-то есть другие несложные и полезные примеры — предлагайте. C>PPS обновил ссылку на задачу
на одной из прошлых работ у одного видел настроено чтобы "!=" отображалась соответствующим символом математическим. имхо читабельность это скорее уменьшает, чем улучшает...
Re[3]: А почему бы нам не сделать что-нибудь полезное?
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, Baiker, Вы писали:
B>>Вообще не угадал! Разрабы (а по факту, куча индусни, нанятой за доширак) берутся только за то, что хоть примерно понимают на своём уровне. Ну то есть за всякие финтифлюшки.
C>Не "угадал", я сам в МС работал. Понимание — тоже, но обычно они просто ничего не станут фиксить, пока пользователи не начнут собираться для линчевания. Новые фичи — да, исправления — нет.
Разве у руководства(но больше у прогеров VS) не должно быть какого-то "инженерного видения", какая фича стóит свеч, а какую можно задвинуть? Опираться чисто на голоса — с такой "демократией" можно докатиться до ловли Покемонов прям в студии. Инженеры обязаны видеть чуть дальше носа — насколько фича повысит продуктивность. И потом, добавление фич поверх СТАРЫХ БАГОВ создаёт ещё больший трэш, который потом уже ничем не исправить.
Собственно, в одном комменте разраб так и сказал — с текущим API студии реализовать твою фичу нельзя (это я предлагал полную замену intellisense).
B>>Достаточно посмотреть, какой сказочный дол___б работает в их команде, чтобы понять, что искать там нечего:
C>О, этого типа я уже читал. Он там абсолютно в каждом тикете, и постоянно несет пургу. Но вроде бы он не последний человек в C# team.
Если ЭТО — "не последний", представляю, какие там "рядовые" ) Надеюсь, весь этот тараканник наконец разгонят.