1

Тема: Шукаю програмістів які використовують сніпнети або шаблони коду

Всім привіт. Всі хто шарить що таке emmet або знає програмування запрошую у цю тему.
Зараз я готую один проект, який можливо зекономить пару годин за пару місяців.

В чому фішка. Програмісти пишуть код і дуже часто конструкції повторяються. Для того що б було веселіше дехто використовує шаблони коду, або сніпнети або live templates. Кожен називає їх по-різному але суть їх одна. Пришвидшити написання функціоналу.

Emmet дає непогані можливості для html, css, xml і інших мов розмітки, але для скриптових мов це не підходить.
У html ви пишете div>table і все чудово працює. В php ви не зможете написати if > for для того що б отримати структуру

if(){
  foreack(){
  }
}

Я розробив фішку яка допомагає комбінувати шаблони.
На даному етапі є плагін для phpstorm який підтримує PHP
Планую зробити наступне:
[ ] написання шаблонів для java, javascript ...
[ ] підтримка інших редакторів

Які можливості дає плагін.
З стандартним набором шаблонів ви з легкістю зможете отримати наступні штуки:

Прихований текст
if
if(){
  
}

if!e 
if(!empty()){

}

ifi 
if(isset()){

}

if!eco
if(!empty()) {
  continue;
}

}

iferf
if(empty()){
  return false;
}

forek
foreack( as => ){

}

+ ще дуже багато шаблонів які можна довго описувати.

В чому перевага:
1 - У вас безліч комбінацій.
2 - гнучка система шаблонів (не треба створювати на кожне слово шаблон - можна їх комбінувати
3 - у вас швидше буде іти реалізація функціоналу

Для прикладу часто пишете або щось типу цього.

if(empty()){
  return false;
}

У даному випадку набиреєте iferf жмете таб і редагуєте дані під курсором (вставляєте змінну)
Якщо ви хочете зробити перевірку на те чи є змінна є масивом  ifisarf   (isa - скорочення для is_array)
Хочете повернути true пишете rt (rt - return true)

Особисто мені ця штука дуже допомагає бо всі скорочення досить прозорі)

Якщо є люди яким ця фішка цікава, хочуть спробувати або долучитись пишіть тут. Я скину плагін, все що потрібно і розкажу в деталях як можна застосувати у своїх проектах.

Подякували: Replace, Singularity, BarsicPlus, 0xDADA11C7, mike5

2

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Писати в IntelliJ IDEA писати css і html досить зручно і без всяких сніпетів.

Я от в Vim не використовую emmet для css бо є compass зі своїм кастомним синтаксисом.

А от для html і інших МП є крутезний  https://github.com/SirVer/ultisnips з кучей сніпетів https://github.com/honza/vim-snippets про які каже funivan.

Якщо це будуть пітоно сніпети для Pycharm я за :)

Подякували: Master_Sergius1

3

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Якщо це будуть пітоно сніпети для Pycharm я за :)

Я також за ;) Як я написав вище сама головна фішка це групування і вкладеність.
Які 2-3 конструкції ви найчастіше пишете у пітоні?


p.s.  https://github.com/SirVer/ultisnips - дякую спробую  ;)

Оновлено

А от для html і інших МП є крутезний  https://github.com/SirVer/ultisnips з кучей сніпетів https://github.com/honza/vim-snippets про які каже funivan.

Спробував, непогана штука. У них є вкладеність але мабуть там щось інше розуміють.
Наскільки я зрозумів не можливо написати ife і отримати з 2х шаблонів 1н кусок коду ;) Якщо я не правильно зрозумів - поправте мене.

4

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

funivan написав:

Наскільки я зрозумів не можливо написати ife і отримати з 2х шаблонів 1н кусок коду ;) Якщо я не правильно зрозумів - поправте мене.

Ти про відзеркалення чи як ? ну типу в одному місці пишешь Animal і воно зявляється в іншому.

Ти ще відео подивись і почитай документацію до них.
ultisnips це й накрутіший двигунець для сніпетів в Vim!

5

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Ти про відзеркалення чи як ? ну типу в одному місці пишешь Animal і воно зявляється в іншому.

Ні. Ось що я маю на увазі.
Мій конфіг:

Прихований текст
  {
      group: 'variable_handling',
      shortcut: '(\!)?(iso|isf|isd|isa|isi|isn|isc|in|i|e)',
      expand: ' $1$2($TAB1$) $TAB2$',
      isRegex: true,
      tabs: {
        TAB2: [ 'variable_handling' ]
      },
      regexpReplaces: {
        'iso': 'is_object',
        'isf': 'is_file',
        'isd': 'is_dir',
        'isa': 'is_array',
        'isc': 'is_callable',
        'isi': 'is_integer',
        'isn': 'is_numeric',
        'in' : 'in_array',
        'i': 'isset',
        'e': 'empty'
      }
    },
{
      group: 'if',
      shortcut: '(eli|if)',
      expand: ' $1($TAB1$){\n$TAB2$}',
      isRegex: true,
      regexpReplaces: {
        'eli': 'elseif'
      },
      tabs: {
        END: [ 'class_method', 'if' ],
        TAB1: [  'variable_handling', 'logical_operators' ],
        TAB2: []
      }
    },
 {
      group: 'control_structure',
      shortcut: '(co|br|rf|rt|rn|rs|r\\$)',
      expand: '$1;',
      isRegex: true,
      regexpReplaces: {
        'co': 'continue',
        'br': 'break',
        'r$': 'return \\$this',
        'rs': 'return ""',
        'rf': 'return false',
        'rt': 'return true',
        'rn': 'return null'
      }
    },

ці всі штуки я можу комбінувати.
Я набираю if!isfrf  жму таб і отримую

if(!is_file()){
 return false;
}

Я можу кобінувати шаблони. Тобто хочу rt=> return true хочу rf => return false

І виходить що у моїй 1ній стрічці що я  набрав міститься 3 шаблони, але вони поміщаються один в одного в залежності від конфігу

Я мав на увазі ось це - вкладені шаблони

Всюди іде така тенденція
набрав if => жми таб
набрав !isf => жми таб
набрав rf => жми таб

+ наскільки я бачу перевага у моїй фішці у тому що я за 1н раз можу задати зразу декілька шаблоні (рега)

Ось наприклад я описав control_structure досить просто і підставляється куди треба. Фактично у рнрштормі (або інших продуктах інтелідж) досить важко створити багацько шаблонів ну і самий головний недолік - неможливість вкладення ;)

Надіюсь трохи вас зацікавив :)

6

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

@Singularity якщо у мене є 2 сніпнети. Для прикладу у одного аліас if у іншого iss

Я бажаю створити такий код:

if(is_string()){}

Я можу набрати ifiss нажати таб і отримати цей код?
Чи мені треба спочатку набрати if потім таб потім набрати iss і ще раз нажати таб?

7

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Друге.

Проблема в тому що сніпет if має в середині місце де треба щось написати, але сніпети можуть мати і 2-3 таких місця.  Зрозуміло про що я пишу?

Наприклад сніпет for має три таких точки - ти маєш змінити item, itetable,operation

 
for item in itetable:
    operation

І коли ти пишеш for!if мені наче зрозуміло що if має стати на місце operation, але я хз як таке реалізувати в сніпет движку.

8

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Хлопці, не парте собі тим голови. Якщо основним тормозом в роботі програміста є швидкість набору на клавіатурі - то це дуже поганий програміст. У хорошого програміста основним тормозом завжди є швидкість думки.

Подякували: Master_Sergius1

9

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Torbins написав:

Хлопці, не парте собі тим голови. Якщо основним тормозом в роботі програміста є швидкість набору на клавіатурі - то це дуже поганий програміст. У хорошого програміста основним тормозом завжди є швидкість думки.

Не згоден. Друкування (особливо тих частин, які не відповідають за ідею, але технічно необхідні) часто збиває з думки.

Подякували: 0xDADA11C7, funivan2

10

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

@Singularity о все правильно, треба якось задавати місце куди може іти той чи інщий кусок шаблону. Я цю проблему вирішив. Можете глянути конфіг https://github.com/FastCoddy/intellij-p … nd-tabs.md

Є група variable_handling і група if у кожній з гих задано куди може попадати ця чи інша група, якщо не задано - система старається оприділити куди вставляти групу на основі попередніх шаблонів.

Ось приклад. If!issrf
Якщо не стрічка повертаємо фолс.
Розкривається по такому принципу
If
!is_string()
return false

З першими двома групами все просто. У групі іф задано куди підставляти перевірку змінних, а от як зрозуміти куди підставляти return false?
return false - це група з назвою control structure. У групі variable_handling немає визначення куди підставляти control_structure, відповідно ми дивимось на налаштування групи if. У цій групі вказано - підставляй у tab2. Все, код буде наступний

if(!is_string()){
return false;
}

Я опишу документацію до плагіну і виуладу відео роботи, уже є записані)

@Torbins якщо б швидкість набору коду не мала значення, ніхто б не придумував таку штуку як шаблони коду і сніпнети, вірно?
І до речі, саме для тих хто думає: швидкість немає значення, я напишу статтю про те, скільки часу і сил я зекономив за допомогою цього плагіну.

Чому появився цей плагін? Все почалось з банальних перевірок типу:
- якщо не пуста змінна повертаємо тру
- якщо пустий масив кидаємо ексепшин

У світі програмування таких комбінацій ну дцже багато. Я замцчився по куску дожавати темплейти і кожен раз жати таб таб таб.
А скорочення налаштовуються під кожного.

Ось мій майже повний конфіг:

https://raw.githubusercontent.com/FastC … s/php.json

Що планую: тестінг, підкрутити під усі продукти intellij, якщо цікаво комусь під саблайм чи вім наваяти плагін я допоможу у розробці.

11

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Вирішив перечитати деякі свої теми. Можливо комусь даний плагін буде цікавий. Успішно працює уже не перший рік.
Останній реліз: https://github.com/funivan/phpstorm-fas … /tag/0.4.6

12

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Ідея хороша, але вже багато де реалізована. А в тому ж редакторі Vim можна прямо на льоту придумувати собі шаблон і вносити в свою базу шаблонів.

13

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Master_Sergius у vim є вкладені шаблони?
Для прикладу
iferf (if entry return false)
ifethr (if empty throw new exception)
ifisfrt (if is file return true)

Чи вміє вім комбінувати шаблони? Тобто не створювати під кожен випадок свій шаблон, а написати кожне скорочення і розкрити їх однією кдавішею? Дякую ;)

14

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

funivan написав:

Master_Sergius у vim є вкладені шаблони?
Для прикладу
iferf (if entry return false)
ifethr (if empty throw new exception)
ifisfrt (if is file return true)

Чи вміє вім комбінувати шаблони? Тобто не створювати під кожен випадок свій шаблон, а написати кожне скорочення і розкрити їх однією кдавішею? Дякую ;)

Ось один із варіантів:
https://github.com/honza/vim-snippets
І цитата звідти: UltiSnips has additional features such as high speed, nesting snippets, expanding snippets in snippets and offers powerful transformations on text in snippets (like visual selections or placeholder texts).

Також Vim можна по-своєму розширяти (що ми й бачимо через силу-силенну різних плагінів, які створюються vim-гіками), навіть на Python (якщо зібрати Vim з підтримкою Python).

Але тут зовсім немає чого сперечатися, кожен налаштовує своє середовище як зручно. І все ж, коли швидкості набору коду і так достатньо високі, то виграш в 1-2 секунди на якомусь блоці уже не має значення. Головне, аби мізки поспівали за кодом :)

15

Re: Шукаю програмістів які використовують сніпнети або шаблони коду

Master_Sergius UltiSnips крута штука :) Правда я не юзаю вім але я уже ставлю собі і буду чекати як воно паше ;)