NETSquirrel - вопросы и ответы

Поступило предложение сделать методы расширения для матриц и jagged-массивов (array of array of T):

  • T[,] ToMatrix<T>(this T[][] array) и TOutput[,] ToMatrix<T, TOutput>(this T[][] array, Func<T, TOutput>)
  • T[][] ToJagged<T>(this T[,] matrix) и TOutput[][] ToJagged<T, TOutput>(this T[,] matrix, Func<T, TOutput>)
  • T[,] Transpose<T>(this T[,] matrix) и TOutput[,] Transpose<T, TOutput>(this T[,] matrix, Func<T, TOutput>)

Лично я думаю над внедрением ещё:

  • SelectManyAsMatrix

У кого и какие есть ещё предложения (@Admin, @ibond, @RAlex, @Sun_Serega, @Kotov, @Valery)?

Обновил шаблон кода NETSquirrel для PascalABC.NET:

{$reference NETSquirrel.dll}

{$define DataStructures}
{$define Debug}
{$define Extensions}
{$define Utils}
{$define PascalABCNETUnits}

{$region NETSquirrel namespaces}
uses NETSquirrel;

{$ifdef DataStructures}
uses NETSquirrel.DataStructures;
uses NETSquirrel.DataStructures.Generic;
uses NETSquirrel.DataStructures.Immutable;
uses NETSquirrel.DataStructures.Generic.Immutable;
{$endif}

{$ifdef Debug}
uses NETSquirrel.Debug;
uses NETSquirrel.Debug.Generic;
{$endif}

{$ifdef Extensions}
uses NETSquirrel.Extensions;
uses NETSquirrel.Extensions.ConsoleSpecific;
{$endif}

{$ifdef Utils}
uses NETSquirrel.Utils;
{$endif}
{$endregion}
{$region Pascal Units}
{$ifdef PascalABCNETUnits}
uses GeneralExtensions;
uses TuplesExtensions;
uses NumericsExtensions;
{$endif}
{$endregion}

begin
  // code here
end.

Теперь можно подключать несколько пространств имён сразу посредством использования {$define ...}.

Перейти к содержанию

Набор сниппетов для PascalABC.NET, адаптированный под NETSquirrel. Список:

  • block
  • region
  • if, ifelse
  • loop, for, forr, while, repeat
  • foreach
  • procedure, function
  • lock
  • trye, tryf
  • class, record, interface
  • library, unit
  • prop, propg, props, aprop
  • netsquirrel
  • ComparerOf, EqualityComparerOf, ArrayOf, DictionaryOf, HashSetOf, KeyValuePairOf, LinkedListOf, LinkedListNodeOf, ListOf, SortedDictionaryOf, SortedListOf, SortedSetOf, QueueOf, StackOf [для GeneralExtensions]
  • ValueTupleOf [для TuplesExtensions]
  • ReadComplex, ReadVector2, ReadVector3, ReadVector4, ReadMatrix3x2, ReadMatrix4x4 [для NumericsExtensions]
  • сниппеты для пространства имён NETSquirrel.Utils, представляющие собой имена соответствующих методов (пример: GenerateArray)

Вначале располагаются общие сниппеты, после - для расширений NETSquirrel на PascalABC.NET, последние - для оригинальной NETSquirrel.

template.pct (7.4 KB)

Перейти к содержанию

Создан репозиторий для сниппетов PascalABC.NET.

Обновлён пакет сниппетов для PascalABC.NET до версии v0.0.17.2-6. Добавлены сниппеты:

  • для методов класса NETSquirrel.Extensions.ObjectExtensions
  • для всех директив компилятора
  • для методов класса NETSquirrel.Extensions.BaseTypesExtensions
  • для методов класса NETSquirrel.Extensions.TuplesExtensions
  • для автоклассов - aclass

Скачать PascalABC.NET Snippets v0.0.17.2-6

Пример использования:

  1. Набор ifdefelse.
  2. Нажатие Shift+Space.
  3. Результат:
{$ifdef |}

{$else}

{$endif}

| - текущая позиция курсора.

Перейти к содержанию

Как заменить стандартный набор сниппетов на сторонний?

  1. Откройте GitHub.
  2. Скачайте в разделе Releases нужную Вам версию пакета сниппетов NETSquirrel.
  3. Переместите скачанный .pct файл в директорию C:\Program Files (x86)\PascalABC.NETC:\Program Files (x86)\PascalABC.NET, заменив стандартный template.pct при этом.

Как создать собственный набор сниппетов?

  1. Создайте файл с названием template.txt.
  2. Смените расширение файла на .pct.
  3. Откройте файл и вставьте следующий шаблон:
[SnippetName]
code

SnippetName - имя сниппета, которое потребуется набрать в IDE PascalABC.NET (регистр не важен) для вставки ниже написанного кода, подписанного как code.

  1. Укажите позицию курсора, в которую он переместится (в пределах кода сниппета) после его вставки в IDE посредством |.
  2. После наполнения файла template.pct, созданного Вами, желаемыми сниппетами замените стандартный одноимённый файл в директории C:\Program Files (x86)\PascalABC.NETC:\Program Files (x86)\PascalABC.NET.
  • Для редактирования изначального template.pct требуется запуск текстового редактора с правами администратора.

  • Во всех случаях для проверки внесённых изменений требуется перезапуск IDE.

Перейти к содержанию

Количество голосов: 181, средняя оценка: 4.98. Просмотров: 32792. Самая высокая оценка на всё время на данный момент.

Как для разработчика, для меня это - приятная новость. Поэтому, в планах:

  • доделать сниппеты для PascalABC.NET и сделать аналогичные для Visual Studio
  • сделать библиотеку-ответвление проекта GraphicsABC - более простой аналог GraphABC, и для любого NET языка
  • сделать библиотеку-ответвление проекта ObjectsABC - более простой аналог ABCOObjects, и для любого NET языка
1 лайк

Обновлён пакет сниппетов для PascalABC.NET до версии v0.0.17.2-10. Добавлены сниппеты:

  • case, match
  • indexer, indexerg, indexers
  • для методов-расширения класса NETSquirrel.Extensions.MatricesExtensions
  • для методов-расширения класса NETSquirrel.Extensions.IEnumerableExtensions

Скачать PascalABC.NET Snippets v0.0.17.2-10

Перейти к содержанию

Требуется узнать в каком формате лучше предоставлять сниппеты:

[if] 
if | then 
begin 

end; 

[case] 
case | of 
: ; 
else 
end; 

[for] 
for var i := 0 to | do 
begin 

end;

или:

[if] 
if |{condition} then 
begin 
  {statements}
end; 

[case] 
case |{variable} of 
  {values set}: {statements}; 
  else {statements}
end; 

[for] 
for var i := 0 to |{high border} do 
begin 
  {statements}
end;

Первый вариант - меньше править при заполнении сниппета конкретными значениями, но также и меньше его информативность. Второй - больше править при заполнении сниппета, но также и больше информативность.

  • Первый
  • Второй
  • Желаю предложить свой

0 голосов

Весь смысл снипетов - увеличивать скорость написания кода. А что делают конструкции языка должно объясняться в справке, а не где попало. Тем более если человек не понимает что такое case - он точно не поймёт что такое statements. Всё же это сложный термин, ещё и на англ.

3 лайка

Кто голосовал за второй вариант - прошу откликнуться и аргументировать свою точку зрения.

Да аргумент простой: человеческая натура. Чтобы работало без разных там RTFM.

1 лайк

Ну, если делать как в студии, где подсказки сами пропадают - нормально. Но это будет довольно не удобно, если после каждого b+Shift+Space придётся удалять какую то часть кода.

И - скажите ка какой у вас опыт использования снипетов.

Пока - опыт исключительно отрицательный. Мешают…

Я на неё ориентировался, в частности, когда спрашивал вопрос про сниппеты. Но, понимая, что они - не главная забота разработчиков - я не стал предлагать слишком много с моей точки зрения.

Как может мешать то, что не проявит себя пока вы не нажмёте Shift+Space? И - вы случаем не путаете автодополнение кода со снипетами? begin+Enter и b+Shift+Space это разные фичи.

Не путаю. Я уже писал, что если это опционально, лично мне глубоко безразлично, есть они или нет. Поэтому я не бегаю с транспарантом “Сниппетам - наше большевистское НЕТ!”. Но когда спрашивают о мнении - почему не сказать?

Тогда станут ли снипеты более привлекательными вам, если будут добавлять всякие комментарии вместе с собой? Или вы тыкнули случайный вариант, не сильно думая?

Возможно, у Вас есть привычка “тыкать”, но не надо ее искать в других. Еще раз: мне сниппеты не нужны. Но уж если он вылез, то по моему мнению, должен быть понятен любому, а не только “особо посвященным”.

1 лайк

Здесь проблема в том, захотят ли разработчики заниматься этим. Если да, то хорошо (для меня, в частности). Если нет - мне понятно, времени у них не вагон и маленькая тележка, и среда, всё-таки ориентирована на начинающих, которым зачастую такие “вкусности” не нужны.