Русский
Русский
English
Статистика
Реклама

Phpstorm

Минимизация кликов и горячие клавиши для жизни разработчика Темнее Тёмной Темноты

02.07.2020 08:05:44 | Автор: admin
Хороший разработчик/аналитик/просто пользователь ПК стремится к оптимизации любого процесса. Будь то хоть включение чайника на кухне, пока снимаешь куртку зимой, а также к улучшению и модернизации рабочего места или ПО.
Медленный компьютер, тормозящие приложения, узкое использование инструментов с огромнейшими возможностями всё это демотивирует.
Попробуем расширить кругозор и оптимизировать каждый клик.



В статье разобраны 5 IDE, 2 приложения для работы с БД, 2 ОС, 2 браузера и 2 SSH программы и хранитель паролей.



Навигация
PhpStorm 2020.1.2
Notepad++ v7.8.7
Apache Netbeans 12
Sublime Text 3
Visual Studio Code 1.46.1
Redmine
Atlassian (Trello, Bitbucket, SourceTree 3.3.9, Jira, Confluence)
Windows 10
Linux
Google Chrome 83.0
Mozilla (Firefox 78.0b9, Thunderbird 68.9.0)
PL SQL Developer 13
DBeaver 7.1.0
Keepass 2.45
WinSCP 5.17.6
Putty 0.73
Прокачиваем мобильник

Я разбил каждый пункт на подпункты и сделал их раскрывающимися меню, чтоб каждый смог посмотреть только то, чем пользуется или в чём заинтересован.

Вот основные подпункты:
  • Описание. Основное, что делает программа либо выжимка с Википедии
  • Горячие клавиши Совокупность клавиш, при одновременном нажатии которых происходит запрограммированное действие
  • Главное меню Оптимизация рабочего пространства
  • Выравнивание/Табуляция Автоформатирование отступов
  • Шаблоны кода Заранее написанные блоки кода, вызываемые по аббревиатурам и запрограммированной клавише, обычно Tab
  • Ссылки Ссылки на официальный сайт, сайт откуда можно скачать, описание в Википедии, мобильная версия если такая есть, а также просто полезные ссылки, допустим на статьи о приложении


ТТТ
Отдельно хочу выделить подпункт, который я везде называю ТТТ Темнее Тёмной Темноты.
Окрашивание в тёмный цвет всего, что можно + полезные ссылки, в основном на тёмные
темы с userstyles.org (почему-то прямая ссылка даёт иногда 504 ошибку, а ссылки на темы работают нормально), предварительно поставив плагин Stylus в Chrome или в Mozilla
Общие примеры:
Глобальные темы для браузеров:
darkreader
global-dark
ВК
Google Script
скрин



IDE


PhpStorm 2020.1.2




ТТТ
File Settings Editor Color Scheme Material Darker

Выравнивание/Табуляция
  • Code Reformat Code или CTRL+ALT+L
  • File Settings Editor Code Style


Горячие клавиши

Главное меню
File Settings Menus and Toolbars

Шаблоны кода
File Settings Editor Live Templates

Тестирование REST запросов внутри программы
Очень удобно если важна не визуальная составляющая ответа, внутрянка.
Tools HTTP Client Test RESTful Web Service


БД
View Tool Windows Database



SSH
Tools Deployment Browse Remote Host

GIT
  • Если установлен гит, то правой кнопкой мыши в любом файле GIT
  • VCS Git
  • В нижней панели Version Control


Экспорт настроек


Командная строка
Снизу вкладка Terminal

Тайм-трекинг
File Settings Tools Tasks Servers




Notepad++ v7.8.7



Плагины
Плагины Управление плагинами. Есть полезные:
  • XML Tools
  • QuickText (Это шаблоны кода)
  • Snippets
  • Customize Toolbar (Это настройка главного меню)
  • Compare (Diff)


Выравнивание/Табуляция
Опции Настройки Синтаксисы

Горячие клавиши
Опции Сочетание клавиш

ТТТ
Опции Определение стилей




Apache Netbeans 12




Горячие клавиши
Tools Options Keymap

Выравнивание/Табуляция
Tools Options Editor Formatting

Шаблоны кода
Tools Options Editor Code Templates (бонусом выставление курсора)

Главное меню
Tools Options Appearance Document Tabs, а также в вкладке Window

Командная строка
Window IDE Tools Terminal

ТТТ






Sublime Text 3




ТТТ
  • Preferences Color Scheme Monokai
  • Preferences Theme


Горячие клавиши
Preferences Key Bindings

Шаблоны кода
Tools Snippets




Visual Studio Code 1.46.1




Горячие клавиши
File Preferences Keyboard Shortcuts

Консоль
Terminal New terminal

Расширешия
View Extensions

Репозиторий
View SCM


Ссылки



Аналитика


Redmine


новый




ТТТ
При создании нового проекта есть выбор светлой или тёмной темы.


старый


ТТТ
Не забываем подправлять URL если он у нас домашний



Шаблоны
Скачиваем и устанавливаем Redmine.
Создаём, что надо, проекты и т.д.
Допустим нам надо заполнить по шаблону поля при создании новой задачи.
Для этого нам опять помогут UserScript`ы.
Устанавливаем TamperMonkey по аналогии с статьёй habr.com/ru/post/504664 (пункт Юзерскрипты в браузере), вставляем
код
// ==UserScript==// @name         redmineTemplate// @namespace    http://127.0.0.1/redmine*// @version      0.1// @author       You// @match        http://127.0.0.1/redmine*// ==/UserScript==var d = document.createElement('span');document.querySelector('#issue_tracker_id').parentNode.appendChild(d);d.style['color'] = 'red';d.style.width = '100px';d.style.cursor = 'pointer';d.style.paddingLeft = '30px';d.textContent = 'Шаблон'; d.addEventListener('click', function () {   //Трекер   $('#issue_tracker_id :contains(\'Поддержка\')').attr('selected', 'selected');   // Описание   $('#issue_description').val('Полное описание. \nПример:...');   // Срок завершения   $('#issue_due_date').attr('value',$('#issue_start_date').attr('value'));   // Готовность   $('#issue_done_ratio :contains(\'30 %\')').attr('selected', 'selected'); });



Появляется кнопка, жмём, автозаполняются поля теми значениями, которые мы указали.


Скрипт простой, но времени экономит вагон.
Можно в любой части редмайна вставить подобные скрипты и автоматизировать часто используемые части.




Atlassian


У Atlassian есть хаб в хабре, некоторые статьи будут из него

Confluence








Trello




Горячие клавиши

Шаблоны



Bitbucket







SourceTree 3.3.9




ТТТ
Инструменты Настройки Общее Theme

Шаблоны кода
Инструменты Настройки Пользовательские действия

Горячие клавиши
Подсвечены в главном меню у каждого пункта



Jira




Шаблоны кода
Через TamperMonkey по аналогии с старым редмайном (выше)
document.querySelector('#summary').value = 'Новая тема'







ОС


Windows 10




bat
Очень много батников нашлось в интернете и много статей в Хабре. Кому интересно, просто заходим в Хабр, вводим в поиск bat (либо сразу по ссылке) и изучаем возможности.


ТТТ


Пуск Параметры Персонализация Цвета Тёмный.
Как изменить цвет выделения в Windows 10
Как изменить цвет окон Windows 10

Ускорение


Оптимизация действий
  • Автозагрузка нынче перенеслась из WIN+R msconfig в Диспетчер задач (CTRL+SHIFT+ESC либо переходим в Пуск Параметры Приложения Автозагрузка).
  • Скрипт настройки Windows 10


Отключаем ненужные приложения
Если мы хотим, чтоб при запуске Windows сразу открывались нужные нам приложения, добавляем их в папку автозагрузки.
Обычно она по адресу C:\Users\ВАШ_ПОЛЬЗОВАТЕЛЬ\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup, либо можно так: WIN+R Вводим shell:startup, в папку вставляем приложения (лучше ярлыки)
Добавить приложение для автоматического запуска при начальной загрузке Windows 10
Отключить подтверждение перед установкой приложений (UAC контроль учётных записей). Жмём лупу справа от Пуска, вводим UAC, жмём Изменение параметров контроля учётных записей, бегунок вниз.

Внешний вид
Приводим рабочий стол в порядок, удаляем лишнее, переносим ярлыки, чтоб все были под рукой. Тоже самое делаем и с папками, сколько бы временных затрат это ни стоило. Упорядоченные папки, без шуток, экономят массу времени (но я до сих пор не могу разобрать злосчастную папку На потом).
Если вам мало места или вы ведёте двойную/тройную жизнь, допустим дизайнер и БДшник, используйте несколько рабочих столов



Linux




Да простят меня все, но я не Линуксоид. Собрал, что знал, думаю хоть что-то, да будет полезным




Браузеры


Google Chrome 83.0




Для ускорения обмена настройками между разными компьютерами, а также для быстрого подключения к сервисам Google заводим аккаунт и настраиваем синхронизацию. Не стесняемся объединять закладки в папки для экономии места.




Mozilla


Firefox Developer 78.0b9


Также, как и в Chrome для ускорения обмена настройками между разными компьютерами заводим аккаунт и настраиваем синхронизацию. И также объединяем закладки в папки для экономии места.
ТТТ


Ссылки



Thunderbird 68.9.0


Папки и фильтры
Если нам приходится много работать с почтой, системное разделение на папки по темам очень ускоряет работу и не отвлекает на ненужную почту.
Инструменты Фильтры сообщений. Настройка антиспама и пересылки раскладывания сообщений по папкам настраивается тут.

ТТТ
Инструменты Дополнения Темы Dark




Database


PL SQL Developer 13




Шаблоны кода
Они чуть другие, чем обычные шорткаты. Вставляются либо двойным кликом либо перетаскиванием в рабочее окно.
Вид Список шаблонов





DBeaver 7.1.0




ТТТ
  • Окна Настройки Общие Внешний вид Dark
  • Окна Настройки Общие Внешний вид Цвета и шрифты


Горячие клавиши
Окна Настройки Общие Клавиши

Выравнивание/Табуляция
  • Окна Настройки Общие Текстовые редакторы
  • Окна Настройки DBeaver Редакторы Редактор SQL Форматирование


Шаблоны кода
Окна Настройки DBeaver Редакторы Редактор SQL Templates

Диаграммы связей
Собственно из-за чего я и оставил DBeaver. Жмём на таблицу с CTRL, выбираем вкладку Диаграмма и видим все соединения с выбранной таблицей.




Храним пароли


Keepass 2.45




Храним пароли в одном месте.



FTP + SSH


WinSCP 5.17.6




Чтоб меняться подключениями между рабочими местами, пользуемся выгрузкой Инструменты Экспорт настроек
ТТТ
Внешний вид Интерфейс Theme Dark

Горячие клавиши
В главном меню Команды





Putty 0.73




Обмен подключениями между рабочими местами нашёл пока только такой способ через реестр Computer\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions
ТТТ
Window Colours




Прокачиваем мобильник


Уделяем внимание папкам и объединению приложений. Лишний клик забывается, как только привыкаешь и запоминаешь, где что.
Если у вас уже настроена почта по папкам, то с мобильного телефона удобней смотреть уже сортированное. То есть настраиваем на компьютере, пользуемся на компьютере и на мобильном.
Боты в телеграм. Скептически к ним относился, пока пару штук не сделал и не понял всех возможностей. Склеивать их с различными Google-сервисами можно на ура, главное придумать, как оптимизировать время, создав или найдя уже существующего полезного бота.
Календарь. Тут всё просто. Используем его везде.
Чеклист допустим TickTick
Список дел, допустим Простой список дел или Задачи: Список задач. Нужны, чтоб не держать всё в голове и если не нравится календарь.

Итог


Мы научились пользоваться горячими клавишами, шаблонами кода, оптимизировали рабочее пространство приложений и узнали новые возможности.
Тратьте время на настройки и ускоряйте рабочий процесс до одного клика.

Полезные ссылки, которые также могут пригодится


Tabsbook
www.tabsbook.ru Пока для меня самый удобный менеджер закладок, работающий как в Chrome, так и в Mozilla. Если есть инструмент, объединяющий закладки кроссбраузерно, буду признателен поделившимся.


Adminer
www.adminer.org очень хорошая альтернатива www.phpmyadmin.net, умещается в один файл php.


Heroku
www.heroku.com облачная PaaS-платформа

Miro
Miro (до 2019 года RealtimeBoard) платформа для совместной работы распределенных команд (в том числе при дистанционной работе отдельных сотрудников), разработанная в России и вышедшая на международный рынок.
Официальный сайт
Википедия
Андроид

Airtable
Airtable представляет собой гибрид базы данных и электронной таблицы.
Официальный сайт
Википедия
Андроид

AWD - Android Web Developer
AWD PHP/HTML/CSS/JS IDE Android Web Developer (AWD) это IDE (интегрированная среда разработки) для веб разработчиков. Поддерживаются следующие языки и форматы: PHP, CSS, JS, HTML, JSON
Подробнее..

Настройка Xdebug3 для Laravel-приложения в Docker

30.01.2021 18:12:04 | Автор: admin

Начнём пожалуй, со структуры, в которой всё будет:

docker/ docker-compose.yml .env .env.example .gitignore services     database      dump      .gitignore     nginx      site.conf     php         Dockerfile         php.ini

А теперь обо всём по порядку:

Файл .gitingore содержит только одну строчку /.env

Файл .env.example в начале проекта такой же, как и .env

В файле docker-compose.yml содержится информация про все наши сервисы:

version: "3.7"services:  php:    build:      args:        uname: ${PHP_UNAME}        uid: ${PHP_UID}        gid: ${PHP_GID}      context: ./services/php    container_name: ${PROJECT_NAME}_php    image: ${PROJECT_NAME}_php    restart: unless-stopped    working_dir: /var/www/    volumes:      - ./services/php/php.ini:/usr/local/etc/php/php.ini      - ../:/var/www    environment:      COMPOSER_MEMORY_LIMIT: 2G      XDEBUG_CONFIG: client_host=${XDEBUG_REMOTE_HOST} client_port=${XDEBUG_STORM_PORT} remote_enable=1      PHP_IDE_CONFIG: serverName=${XDEBUG_STORM_SERVER_NAME}    networks:      - main_network    depends_on:      - db  db:    image: mysql:5.6    restart: unless-stopped    container_name: ${PROJECT_NAME}_db    command: --default-authentication-plugin=mysql_native_password    environment:      MYSQL_DATABASE: ${DB_DATABASE}      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}      MYSQL_PASSWORD: ${DB_PASSWORD}      MYSQL_USER: ${DB_USERNAME}    ports:      - ${DB_LOCAL_PORT}:3306    volumes:      - ./services/database/dump:/var/lib/mysql    networks:      - main_network  nginx:    image: nginx:1.17-alpine    restart: unless-stopped    container_name: ${PROJECT_NAME}_nginx    ports:      - ${NGINX_LOCAL_PORT}:80    volumes:      - ../:/var/www      - ./services/nginx:/etc/nginx/conf.d    networks:      - main_network    depends_on:      - phpnetworks:  main_network:    driver: bridge    name: ${PROJECT_NAME}_main_network    ipam:      driver: default      config:        - subnet: ${SUBNET_IP}/${SUBNET_MASK}

Из важного здесь стоит отметить ./services/php/php.ini:/usr/local/etc/php/php.ini - наш локальный файл php.ini (там некоторые конфиги дебаггера) будет намаплен на тот что внутри контейнера. XDEBUG_CONFIG - будет задана переменная окружения внутри контейнера php, которую потом будет испльзовать xdebug вместо значений по-умолчанию. Здесь мы задаем client_host - хост, к которому xdebug будет пытаться подключиться при инициации отладочного соединения. Этот адрес должен быть адресом машины, на которой ваш PhpStorm прослушивает входящие отладочные соединения. Получается так, что наша локальная машина находится в одной подсети с запущеными контейнерами, а её адресс будет первым в этой подсети. Таким образом, мы всегда можем знать каким будет адресс нашей машины, и позже зададим это значение в переменную XDEBUG_REMOTE_HOST . В CLIENT_PORT нужно будет задать порт, установленный на прослушивание в IDE (9003). XDEBUG_STORM_SERVER_NAME - имя сервера, который мы создадим в IDE позже. Этот параметр нужен, чтобы сообщить PhpStorm, как сопоставлять пути при подключении с докера (ведь у вас же открыты локальные файлы в редакторе, а код работает на удалённых; хотя при испльзовании volumes это не совсем так).

Вот, как выглядит файл окружения .env :

PROJECT_NAME=my_projectDB_DATABASE=my_project_dbDB_USERNAME=my_projectDB_PASSWORD=p@$$w0rdDB_ROOT_PASSWORD=toorPHP_UNAME=devPHP_UID=1000PHP_GID=1000DB_LOCAL_PORT=3377NGINX_LOCAL_PORT=8077XDEBUG_STORM_SERVER_NAME=DockerXDEBUG_REMOTE_HOST=192.168.227.1XDEBUG_STORM_PORT=9003SUBNET_IP=192.168.227.0SUBNET_MASK=28

На счёт подсети для проекта, то здесь мы задали 192.168.227.0 с маской 28, то-есть для всех устройств остаётся 32 - 28 = 4 бита, что равносильно 2 ** 4 - 1 = 15 контейнеров. Не 16 потому что в подсеть входит также наша локальная машина, которая, кстати, будет иметь адресс 192.168.227.1. Именно это значение мы задали в переменную XDEBUG_REMOTE_HOST.

Настройки веб-сервера site.conf:

server {    listen 80;    server_name 127.0.0.1 localhost;    client_max_body_size 5m;    error_log  /var/log/nginx/error.log;    access_log /var/log/nginx/access.log;    root /var/www/public;    index index.php;    location / {        try_files $uri $uri/ /index.php?$query_string;        gzip_static on;    }    location ~ \.php$ {        try_files $uri =404;        fastcgi_split_path_info ^(.+\.php)(/.+)$;        fastcgi_pass php:9000;        fastcgi_index index.php;        include fastcgi_params;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        fastcgi_param PATH_INFO $fastcgi_path_info;    }}

В нашем Dockerfile (тот что для php) нужно не забыть установить и включить xdebug. Для этого добавляем 2 строчки:

RUN pecl install xdebugRUN docker-php-ext-enable xdebug

Стоит отметить, что будет испльзована последняя (то-есть 3) версия (есть различия в конфигурации по сравнению с 2).

Полный Dockerfile:

FROM php:7.4-fpm# Arguments defined in docker-compose.ymlARG unameARG gidARG uid# Install system dependenciesRUN apt-get update \    && apt-get install -y \        git \        curl \        dpkg-dev \        libpng-dev \        libjpeg-dev \        libonig-dev \        libxml2-dev \        libpq-dev \        libzip-dev \        zip \        unzip \        cronRUN pecl install xdebugRUN docker-php-ext-enable xdebugRUN docker-php-ext-configure gd \  --enable-gd \  --with-jpegADD ./php.ini /usr/local/etc/php/php.ini# Clear cacheRUN apt-get clean && rm -rf /var/lib/apt/lists/*# Install PHP extensionsRUN docker-php-ext-install pdo pdo_mysql pdo_pgsql pgsql mbstring exif pcntl bcmath gd sockets zip# Get latest ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer# Create system user to run Composer and Artisan CommandsRUN groupadd --gid $gid $unameRUN useradd -G www-data,root -s /bin/bash --uid $uid --gid $gid $unameRUN mkdir -p /home/$uname/.composer && \    chown -R $uname:$uname /home/$uname# Set working directoryWORKDIR /var/wwwUSER $uname# Expose port 9000 and start php-fpm serverEXPOSE 9000CMD ["php-fpm"]

Также, зададим некоторые параметры исплнения в php.ini :

max_execution_time=1000max_input_time=1000xdebug.mode=debugxdebug.log="/var/www/xdebug.log"xdebug.remote_enable=1

Запустим наше приложение:

docker-compose up -d

И дальше пойдём в PhpStorm для настройки:

Создадим сервер с названием Docker и cделаем маппинг локального корня проекта (/var/www/quizzy.loc) на путь, по которому он лежит в докере (/var/www):

Дальше, нам нужно будет настроить использование интерпретатора php из докера:

Настраиваем php interpreterНастраиваем php interpreterВыбираем сервис, в котором находится php и указываем путь к интерпретаторуВыбираем сервис, в котором находится php и указываем путь к интерпретаторуЗадаём параметры запуска (через exec)Задаём параметры запуска (через exec)

Теперь можем перейти в подпункт "Debug" и настроить порт на котором запускать:

Настраиваем дебаггерНастраиваем дебаггер

Проверим, работает ли Xdebug:

Теперь можем поставить брейкпоинт в нашем коде и начать прослушивание входящих подключений:

Переходим в наш любимый браузер Firefox, устанавливаем и включаем плагин на нужной странице:

Перезагружаем страницу, и в PhpStrom должен поймать подключение:

Подробнее..

Xdebug через Windows Subsystem For Linux 2 (WSL2)

24.08.2020 10:10:39 | Автор: admin

Под катом небольшая заметка про то как можно настроить удобное окружение для работы с PHP, xdebug через Windows Subsystem For Linux 2 (WSL 2).



Для начала немного истории


Я очень долгое время жил в мире Ubuntu писать на PHP, NodeJS, GoLang сразу на той же системе, на которой все будет запускаться, крайне приятно. Но, к сожалению, наличие руководящей должности приводит к тому, что приходится пользоваться большим количеством софта, который работает только на Windows.


Очень долгое время я просто жил "через SSH". На моем ноутбуке просто стоял PhpStorm, в котором я через ssh правил файлы на Ubuntu сервере просто и работает.


Виртуалки сразу отбросил ноут не очень радовался соседям внутри:) Докер поджирал заметно ресурсы и без того перегруженного 100500 вкладками и копиями запущенных Phpstorm небольшой ноутбук dell e7390:) Докер крутится у нас в бою и как раз на дев серверах, куда я хожу через sftp.


Но прошло время и стало возможным легко и просто запустить у себя на винде WSL2 (http://personeltest.ru/away/habr.com/ru/news/t/516054) и я решил все же сделать удобное окружение для своей работы.


Теперь к делу


Базовая установка системы


Как установить WSL на Windows есть множество инструкций. Я все сделал по официальному мануалу с сайта Microsoft


После успешной установки в PowerShell нужно написать команду wsl и мы погружаемся внутрь Linux, который внутри Windows



Далее идет череда стандартных команд для настройки веб сервера на Ubuntu:


sudo apt updatesudo apt upgradesudo apt install apache2sudo apt install php libapache2-mod-php php-mysql php-xml php-curlsudo a2enmod rewrite

Все файлы моих проектов было доступы через /mnt/d/work/projects/и_так_далее. Да, я в курсе, что стоит копировать файлы напрямую в файловую систему Linux, чтобы работало быстрее. Но зачастую такого варианта по скорости достаточно, но если чувствуете тормоза ФС, то стоит использовать сетевой диск.


По поводу сетевого диска

Теория гласит (да и здравый смысл тоже), что файлы, с которыми оперирует php должны быть в самой системе Linux, а не в виде подмонтированного NTFS винды. Если нужно чтобы файлы были полностью нативно в системе можно сделать следующее.


  1. Создать папку под WSL проект. Например /home/user/projects
  2. Склонировать копию проекта туда же (уже внутренним GIT). Например будет /home/user/projects/test
  3. Подключить сетевой диск на директорию \\wsl$\Ubuntu где "Ubuntu" название вашего дистрибутива. Определить верное название можно путем перехода в папку \\wsl$ в проводнике
  4. Добавляем папку в сетевом диске в PhpStorm
  5. Настроить маппинг директорий для отладки (чтобы шторм понимал какому файлу соответствует файл, который прислал нам xdebug)
  6. Включить Automatic upload
  7. Теперь все изменения будут отправляться сразу же в WSL через сетевой диск и можно заниматься отладкой

Но в данном способе есть один неприятный минус надо синхронизировать файлы. Например вы перешли на другую ветку в винде = надо в линуксе тоже переходить в эту ветку. Двойная работа. Подумываю над каким нибудь хитрым скриптом, который с rsync будет все это делать сам, но пока не придумал. Если придумаете, пишите буду очень благодарен:)


Также не забывайте настройку Apache, чтобы он ходил в нужные директории. Если что, конечно, можно сделать связку из php-fpm и nginx тут уже на ваш вкус.


Настройка xdebug на сервере


Далее настраиваем xdebug стандартным путем по любому мануалу из интернета. Я опишу кратко порядок действий.


  1. Устанавливаем xdebug через sudo apt-get php-xdebug


  2. Открываем sudo nano /etc/php/7.2/mods-available/xdebug.ini и приводим к такому содержимому


    zend_extension=xdebug.soxdebug.remote_enable=truexdebug.remote_host=wsl.hostxdebug.remote_port=9002xdebug.profiler_enable=1xdebug.profiler_output_dir=/tmpxdebug.remote_autostart=onxdebug.idekey=PHPSTORMxdebug.remote_log=/tmp/xdebug.log
    

  3. Перезапускаем apache sudo service apache2 restart



Костыль для обратной связи


На этом настройки конкретно xdebug на сервере заканчиваются. Но чтобы данный конфиг заработал нам необходимо в /etc/hosts указать что такое wsl.host. На самом деле мы ожидаем там увидеть IP адрес головной системы на нашем ПК, а именно windows.


Изначально во всех инструкциях, которые я нашел, указывается что нужно писать xdebug.remote_host=127.0.0.1, но сеть в WSL устроена таким образом, что 127.0.0.1 внутри linux будет указывать именно на linux, а не windows. То есть дебаггер, ожидающий подключения в PhpStorm не дождется этих подключений:)


В поисках решения этой проблемы я наткнулся на пост в интернете, откуда решил взять gif-ку что наглядности.



Небольшая гифка-пояснение


Автор поста предлагает свой github репозиторий с C# приложением, которое надо добавить в планировщик Windows чтобы команда выполнялась при каждом запуске ПК. У меня сходу этот скрипт не сработал, да и проводить какие-то кастомизации в Windows не хотелось.


Ценой нескольких часов я собрал "костыльный" bash скрипт, который прописывает автоматически IP адрес хостовой системы в /etc/hosts внутри linux при каждом входе в WSL инструкцию и скрипт выложил на github.


Но этот скрипт нужно запускать при первом запуске системы. Руками такое делать "не красиво", а стандартный systemd и rc.local через wsl не работают. Поэтому пришлось использовать костыльное и небезопасное, но рабочее решение.


  1. Создаем файл в корне системы /startup.sh с таким содержимым, даем ему права на запуск chmod +x /startup.sh
  2. Даем права на запуск этого скрипта с sudo без пароля (иначе доступа на запись в /etc/hosts нет)
  3. Добавляем строчку sudo /startup.sh в /etc/profile

При каждом входе в wsl запускается скрипт, который прописывает все что нужно в /etc/hosts и по адресу wsl.host наш linux будет видеть windows. Если кто-то знает как это можно достичь более правильным путем, буду благодарен если отпишите способ в комментариях или можно лично.


После входа в wsl стоит проверить, что хост прописался пишем команду cat /etc/hosts и на последнем месте должно быть что-то вроде этого:
172.26.64.1 wsl.host


Настройка xdebug в PhpStorm на Windows


После завершения всех работ внутри WSL можно перейти к настройке дебаггера в PhpStorm


  1. File->Settings->Languages & Framework->PHP
    Открываем выбор интерпретаторов

    Первый вариант "From Docker, Vagrant, VM, WSL, Remote"

    Выбираем установленный WSL

    Убеждаемся, что xdebug активирован


  2. File->Settings->Languages & Framework->PHP->Debug
    Активируем прослушивание дебаггера и указываем порт, который ранее указали в WSL (у меня это 9002, а изначально он 9000)

    В итоге должно выглядеть примерно так

    Убираем галочку в advanced напротив пункта "Pass required configuration options.."




Если ее не снять, то дебаггер будет передавать свои параметры по умолчанию и они будут перезатираться в итоге наш wsl.host будет заменен на 127.0.0.1 и ничего работать не будет.


Причем эта проблема проявляется только при отладке через консоль, т.к. при отладке HTTP сервера никакие конфиги не пробрасываются и забираются из ini файлов.


На этом все можно проверять работает ли дебаггер.


Проверка результата


  1. Ставим breakpoint в index.php на любой строчке в коде
  2. Переходим в браузере на этот файл и видимо, что дебаггер заработал
  3. Для отладки консольного скрипта необходимо добавить конфигурацию запуска скрипта

    Добавляем конфигурацию Php Script

Указываем путь до скрипта и нужные аргументы

Сохраняем, закрываем и запускаем дебаггер


Вместо заключения


Таким образом, перелопатив несколько разных источников, статей, гистов я пришел к "почти идеальному" рабочему окружению при работе с PHP. Если есть где чего можно улучшить/доработать пишите в комментарии или в любой другой способ связи со мной.

Подробнее..

PhpStorm 2020.3 PHP 8, атрибуты, PHPStan и Psalm, Xdebug 3, Tailwind CSS и совместная разработка

08.12.2020 08:06:23 | Автор: admin


Рады представить финальный мажорный релиз PhpStorm в этом году! Под катом подробный разбор всех изменений и новых возможностей.





PHP 8


PHP 8.0 выпущен. Большое спасибо всем контрибьюторам и менеджерам релиза!

PhpStorm 2020.3 поддерживает все последние изменения языка. Давайте рассмотрим, что доступно и как это использовать в IDE.

Версия языка в статусбаре


Теперь в статусной строке всегда отображается текущая версия PHP проекта. Оттуда же можно переключить версию.



Если переключатель не активен, это означает, что ограничение на версию PHP задано в composer.json.

Именованные аргументы


В PHP 8 аргументы функций и методов могут передаваться путем указания имени параметра. Вызовы теперь автоматически задокументированы, а необязательные параметры стали необязательными в полном смысле слова.

С помощью квик-фикса Add name identifiers можно добавить имена к аргументам:



Опечатки или ошибочные имена аргументов подсвечиваются:



Если передаваемое значение совпадает со значением параметра по умолчанию, то его можно смело удалить:



Вместо массива options для передачи набора параметров можно использовать именованные аргументы, просто передавая только необходимые. Аргументы, передаваемые таким образом, в отличие от элементов массива, являются типобезопасными.



Атрибуты


Атрибуты это новый, структурированный способ указания метаданных в PHP вместо комментариев PHPDoc.

Чтобы создать атрибут, надо объявить класс и добавить маркер #[Attribute]. Здесь PhpStorm поможет с подсветкой, автодополнением кода, поиском использований, рефакторингами и прочим.



Сам PHP проверяет валидность атрибутов только при вызове ReflectionAttribute::newInstance(). А если не обращаться к атрибутам через Reflection, то они полностью игнорируются, чтобы не загружать лишние классы и не создавать объекты.

А вот PhpStorm провалидирует все в редакторе, не запуская Reflection API. При этом проверяются следующие правила:

  • Указанный класс действительно может быть атрибутом.


  • Данный атрибут применяется только в разрешенных местах: класс, свойство, метод, параметр, функция или константа класса.


  • Атрибут повторяется только в том случае, если он объявлен с флагом Attribute::IS_REPEATABLE.



Вот атрибуты в действии с Symfony:





Штормовские атрибуты PHP 8


Несколько атрибутов доступны в PhpStorm 2020.3 из коробки в неймспейсе \JetBrains\PhpStorm\.

Их сразу же можно использовать в своей кодовой базе, ничего не подключая.

А вот если вы дополнительно используете другие инструменты статического анализа и не хотите получать ошибок типа Class not found, то тогда, возможно, стоит добавить пакет атрибутов JetBrains/phpstorm-attributes как зависимость в composer.json.


#[Deprecated]


Используйте этот атрибут как PHPDoc-тег @deprecated, чтобы пометить методы, классы или константы классов, которые будут удалены в будущем.

Преимущество тут в том, что можно указать замену для устаревшего кода и пользователю будет проще обновиться.

Давайте посмотрим на реальный пример. В недавно выпущенном Symfony 5.2 метод \Symfony\Component\DependencyInjection\Alias::setPrivate() объявлен устаревшим. Если там добавить атрибут #[Deprecated], то можно упростить миграцию.

#[Deprecated(   reason: 'since Symfony 5.2, use setPublic() instead',   replacement: '%class%->setPublic(!%parameter0%)')]





#[ArrayShape]


Этот атрибут полезен для работы с простыми структурами данных или объектоподобными массивами, когда по какой-то причине нельзя объявить класс.

Синтаксис вот такой:
#[ArrayShape([// key => type,   key1 => int,   key2 => string,   key3 => Foo,   key3 => App\PHP 8\Foo::class,])]function functionName(...): array


Тип может быть указан как строка или как ссылка на класс в виде FQN строки или константы ::class.



Массив, который определяет форму, можно вынести в константу и переиспользовать:

const  MY_ARRAY_SHAPE = [];#[ArrayShape(MY_ARRAY_SHAPE)]




В PhpStorm мы уже проаннотировали атрибутом #[ArrayShape] некоторые стандартные функции PHP, например parse_url().

К счастью, синтаксис однострочных атрибутов обратно совместим. То есть, если записать #[ArrayShape] в одну строку в проекте на PHP 7, то интерпретатор PHP воспримет эту строку как комментарий.

В отличие от интерпретатора PHP, PhpStorm все равно будет анализировать атрибуты! Так что, даже если ваш проект работает на PHP 7.4 или ниже, вы все равно получите пользу от добавления #[ArrayShape].


#[Immutable]


Неизменяемые объекты не могут быть изменены после инициализации или создания. Их использование делает состояние программы более предсказуемым и облегчает отладку.

Атрибутом #[Immutable] можно пометить весь класс или конкретные свойства, чтобы показать, что они не могут быть изменены.

PhpStorm будет проверять использование таких объектов и свойств и подсвечивать попытки изменения.



Изменение свойства по умолчанию разрешено в конструкторе, но можно также разрешить и в методах private/protected. Это делается с помощью констант CONSTRUCTOR_WRITE_SCOPE, PRIVATE_WRITE_SCOPE, PROTECTED_WRITE_SCOPE, передаваемых в конструктор #[Immutable].




#[Pure]


Этим атрибутом помечаются чистые функции, то есть те, которые не производят никаких побочных эффектов. Такие функции можно безопасно удалить, если результат их выполнения впоследствии не используется.



Если функция помечена как чистая, но в ее теле есть попытка изменить что-то за пределами из внешнего скоупа, то PhpStorm подсветит небезопасный код.



Все стандартные чистые функции PHP уже помечены этим атрибутом в PhpStorm.


#[ExpectedValues]


С помощью этого атрибута можно указать, какие значения функция принимает в качестве параметров, а какие может возвращать.

Это практически то же самое, что делает expectedArguments() в .phpstorm.meta.php. Разница лишь в том, что мета-версия, скорее, вспомогательная, а атрибут жестко указывает, что других возможных значений нет.

Например, рассмотрим функцию count:
count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int

Еe второй аргумент целое число, но на самом деле это не произвольное целое число, а одна из констант COUNT_NORMAL или COUNT_RECURSIVE.

Вот как атрибут #[ExpectedValues] улучшит ситуацию:



То есть появилось автодополнение, а если передано что-то другое, то подсвечивается ошибка.

Как указать возможные значения или битовые маски
Ожидаемые значения передаются в конструктор атрибута и могут быть одним из следующих:
  • Числа: #[ExpectedValues(values: [1,2,3])]
  • Строковые литералы: #[ExpectedValues(values: [red, black, green])]
  • Константы: #[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]
  • Константы класса: #[ExpectedValues(values: [Code::OK, Code::ERROR])]


И есть несколько способов указать ожидаемые аргументы:
  • #[ExpectedValues(values: [1,2,3])] означает, что ожидается только одно из значений.
  • #[ExpectedValues(flags: [1, 2, 3])] означает, что ожидается битовая маска заданных значений, например 1 | 3.
  • #[ExpectedValues(valuesFromClass: MyClass::class)] означает, что ожидается любая из констант класса `MyClass`.
  • #[ExpectedValues(flagsFromClass: ExpectedValues::class)] означает, что ожидается битовая маска констант из класса `MyClass`.



Еще один пример #[ExpectedValues]


Возьмем хелпер response() из Laravel. В качестве второго параметра он принимает статус код HTTP.

Есть две проблемы
  • Нет автодополнения с возможными кодами
  • Нет проверки правильности значения в редакторе




Давайте исправим это, добавив атрибут #[ExpectedValues(valuesFromClass: Response::class)]




#[NoReturn]


Некоторые функции могут приводить к остановке выполнения скрипта. Если отметить такие функции как точки выхода атрибутом #[NoReturn], то улучшится анализ потока управления.




#[Language]


Этот атрибут можно добавить к строковым параметрам, в которых ожидается текст на каком-либо языке, например RegExp, SQL, DQL и так далее.

Для аргументов появится подсветка и дополнительные возможности.






Вернемся к новым возможностям PHP 8.

Объявление свойств в конструкторе


Обычные свойства можно преобразовать в promoted или обратно с помощью квик-фикса Convert to promoted property.



PhpStorm гарантирует, что свойства используются только способом, разрешенным в PHP 8:
  • Можно декларировать свойства только в конструкторе.
  • Нельзя объявлять в абстрактном конструкторе.
  • Нельзя объявлять свойство variadic таким образом.
  • Свойство не может иметь тип 'Callable'.
  • Не допускается переопределение свойства.





Если свойство объявлено новым способом, но в теле конструктора осталась инициализация, то PhpStorm предложит ее удалить.



Выражение match


Новое выражение похоже на switch, но использует строгое сравнение и может быть присвоено переменной или возвращено.

PhpStorm определяет, может ли блок switch быть переделан в match, и сделает это автоматически с помощью квик-фикса по нажатию Alt+Enter:



Может быть трудно увидеть неправильное использование нового выражения, поэтому PhpStorm подсветит все ошибки.




Будут обнаружены дублирующиеся значения в условиях:



Выражение match с одной веткой и веткой по умолчанию может быть безопасно заменено на тернарное выражение.



А если осталась только ветка по умолчанию, то соответствие match вообще не понадобится.



Наконец, если в разных ветвях одинаковые тела, они могут быть объединены.



Оператор nullsafe


Вместо кучи условий с проверкой на null теперь можно использовать цепочку вызовов с новыми оператором ?->.

PhpStorm проверит правильность использования оператора:



Висячая запятая


Теперь допустимо добавлять запятую после последнего аргумента при вызове функций и в списке замыканий use.



Non-capturing catches


В PHP 8 можно ловить исключение в catch-блоке без переменной.



Выражение throw


Бросать исключения теперь можно в стрелочных функциях и в коротких операторах ??, а также в тернарном ? :.



Можно использовать сокращение thr и нажать tab это live template.



Константа ::class на объектах


Раньше, чтобы получить FQN объекта, нужно было использовать функцию get_class(). В PHP 8 вызов get_class($object) можно смело заменить на $object::class.

Собственно, по нажатию Alt+Enter такую замену и можно сделать. Неправильное использование константы ::class PhpStorm подсветит.



Новые функции для строк: str_contains(), str_starts_with(), str_ends_with()


How do I check if a string contains a specific word? самый просматриваемый вопрос по PHP на Stack Overflow. В PHP 8 есть четкий ответ на этот вопрос: использовать функцию str_contains().

PhpStorm 2020.3 находит вызовы strpos(), которые можно заменить на str_contains():



Есть также новые str_starts_with() и str_ends_with() для определения того, начинается или заканчивается ли строка определенной подстрокой. PhpStorm подсвечивает, где вызовы substr() можно заменить новыми альтернативами:



Reclassified engine warnings


В PHP 8 для многих ошибок был пересмотрен тип бросаемого предупреждения. А именно, вместо Notice во многих случаях будет Exception или Type Error.

В PhpStorm в связи с этим некоторые инспекции имеют два разных уровня severity: для PHP 8 и для более старых версий.



Это все из наиболее заметного по PHP 8. Есть еще целая куча изменений помельче, которые будут видны при обновлении на PHP 8.


Поддержка Psalm и PHPStan


Оба статических анализатора можно использовать в PhpStorm 2020.3 для подсветки проблем непосредственно в редакторе.



Если PHPStan или Psalm добавлены как зависимости в composer.json, то рядом с ними будет значок гаечного ключа, открывающий настройки инструмента.



Оттуда можно перейти к настройкам инспекции и включить подсветку в редакторе. Это делается выбором соответствующей инспекции в списке PHP | Quality tools в Settings/Preferences | Editor | Inspections.

Лучше включить только один из инструментов, а не оба одновременно.



Тут же можно указать путь к конфигурационному файлу и настроить аргументы командной строки.

PHPStan может работать без конфигурационного файла, а для Psalm он требуется обязательно. Если в корневом каталоге есть psalm.xml или phpstan.neon, PhpStorm подтянет их автоматически.

Когда все настроено, откройте любой файл, и вы увидите подсветку от статических анализаторов. Может быть небольшая задержка перед тем, как появится подсветка.



Аннотации


Все псалмовские аннотации @psalm-* теперь корректно подсвечиваются в редакторе. Но вообще, теперь можно смело убирать префикс @psalm- из тегов, то есть @psalm-return -> @return и @psalm-param -> @param.



Поддержка типов


Добавили поддержку некоторых типов Psalm и на основе информации из тегов улучшили наш вывод типов. Это сделало более точными проверки, генерацию кода и автодополнение.

Псевдотипы
Поддерживаются псалмовские псевдотипы, такие как scalar, numeric и т. п.



Константы в типах
Пожжерживаются объединения констант и указание через * в тегах param и var.



Тайпхинты для массивов
Описания массивов array<array-key, Type> тоже поддерживаются, в том числе вложенные.



Дженерики и @tempate
Поддержка дженериков фича для продвинутых пользователей, у которой нет полной корректной спецификации и много граничных случаев. Тем не менее мы решили реализовать базовую поддержку для @template на основе синтаксиса Псалма, чтобы посмотреть, как это будет использоваться.

Пока поддерживается только самый примитивный случай, когда функция возвращает один из своих параметров.



Эта поддержка дженериков является очень базовой, ее можно считать экспериментальной. Хотим понять, как это будет использоваться и что нужно реализовать в первую очередь. Будем рады обратной связи, особенно в виде реальных примеров использования в наш трекер.

Xdebug 3


Обновился популярный отладчик для PHP, теперь он значительно быстрее в работе и проще в настройке. Более подробно об Xdebug 3 читайте в документе Upgrade guide.

Чтобы сконфигурировать Xdebug 3, теперь достаточно одной опции xdebug.mode (например так XDEBUG_MODE=debug).

Также был изменен дефолтный порт Xdebug: вместо 9000 теперь 9003. Чтобы упростить миграцию, PhpStorm по умолчанию слушает оба порта. Настройки портов и другие опции для Xdebug находятся в Preferences/Settings | Languages & Frameworks | PHP | Debug.




Улучшения отладчика


Возможности по отладке в PhpStorm расширились двумя новыми фишками.

Интеркактивные хинты
Теперь в отладочном режиме вывод переменных можно развернуть, чтобы увидеть все поля. Тут же можно и изменить значения.



Inline Watches
В предыдущих версиях можно было добавить переменную или выражение в список watch и наблюдать, как меняется значение по шагам.

В PhpStorm 2020.3 можно добавлять вотчи непосредственно к контексте, и они будут отображаться рядом с кодом.

Нажмите Add as Inline Watch в попапе на хинте.


Или нажмите Add Inline Watch в контекстном меню редактора.


Или выделите переменную и в контекстном меню выберите Add Inline Watch.


Подсветка и переименование переменных в Twig


Выберите переменную или поместите на нее курсор, и все ее использования в шаблоне будут подсвечены. А чтобы переименовать все вхождения, нажмите Shift + F6.




Совместная разработка Code With Me


В PhpStorm 2020.3 встроен плагин Code With Me новый инструмент JetBrains для совместной разработки и парного программирования. С помощью него можно расшарить открытый проект с другими пользователями и работать над ним вместе в режиме реального времени. Подробнее про Code With Me в этих постах.




HTTP-клиент


Интеграция Guzzle с HTTP-клиентом в PhpStorm


Guzzle один самых популярных HTTP клиентов для PHP. Представьте, что где-то в коде есть HTTP-запрос и хочется его потестировать, не запуская сам код. Раньше пришлось бы копировать все параметры вручную.

PhpStorm 2020.3 позволяет конвертировать простые запросы Guzzle в файлы .http. Если запрос поддерживается, то рядом с ним появится иконка. Нажав на нее, вы откроете новый scratch-файл с правильным URL, параметрами запроса, методами, заголовками, телом.



Теперь из редактора запрос можно запустить и поиграться с ним, а затем сохранить его как http-файл в проекте.

Больше об HTTP-клиенте в видеообзоре.

Копировать HTTP-запрос в cURL


Чтобы экспортировать HTTP-запрос в cURL-строку, нажмите Alt+Enter на запросе в редакторе и выберите Convert to cURL and copy to clipboard. Теперь его можно вставить в терминал, документацию или любой инструмент тестирования API.




Редактор


Улучшения для Markdown


Для описания диаграмм и графиков можно использовать синтаксис Mermaid.js в markdown-файлах. PhpStorm теперь умеет рендерить превью для них прямо в редакторе. Включается в Preferences/Settings | Languages & Frameworks | Markdown.



Еще теперь можно переформатировать содержимое файлов .md в соответствии с популярными стилями. Делается нажатием L / Ctrl+Alt+L.

Настраивается в Preferences/Settings | Editor | Code Style | Markdown.



И наконец, если нажать кнопку Auto-Scroll Preview в правом верхнем углу редактора, то прокрутка превью и текста будет синхронизирована.

Улучшена проверка орфографии и грамматики


Опечатки и грамматические проблемы теперь можно исправлять намного быстрее:
  • Во-первых, во всплывающем окне появится объяснение ошибки.
  • А если нажать Alt+Enter на подсвеченном тексте, то варианты замены будут предложены наверху, а не спрятаны в подпункт, как раньше.




Сплит редактора перетаскиванием


Чтобы открыть несколько файлов бок о бок, просто перетащите вкладку в нужный угол экрана.



Есть еще один способ открыть файл в сплит-режиме Shift+Enter.
Комбинацию можно нажать на выбранном файле в Project view или в результатах поиска по файлам.



Вкладка предпросмотра


Если нужно быстро просмотреть файлы, то теперь не обязательно открывать каждый в отдельной вкладке. Можно использовать новую вкладку Preview tab.

Чтобы включить ее, нажмите на шестеренку в Project view и выберите Enable Preview Tab и Open Files with Single Click.



Еще можно просматривать файлы нажатием пробела в Project view, не открывая их.




IDE


Улучшения для Search Everywhere



Результаты сгруппированы по релевантности:


Можно делать простые математические операции и не открывать гугл калькулятор:


Можно искать по истории Git:


Автоматическое переключение на светлую или темную тему


В Preferences/Settings | Appearance & Behavior | Appearance | Theme выберите Sync with OS.



Новый набор горячих клавиш для macOS


Альтернативная раскладка горячих клавиш для macOS минимизирует использование функциональных клавиш, чтобы не надо было растягивать руку на всю клавиатуру при совершении основных действий. Например, вместо Fn+Shift+F6 для Rename рефакторинга используется ++R.



Слова вместо иконок для горячих клавиш macOS


Можно сделать так, чтобы вместо иконок типа отображались слова Alt, Cmd и т. п.

Включается в секции Registry опцией ide.macos.disable.native.shortcut.symbols. Чтобы получить доступ к реестру, используйте Find Action Cmd+Shift+A и напишите там Registry.

Установить PhpStorm как приложение по умолчанию для разных файлов


В Preferences | Settings / Editor / File Types нажать Associate file types with PhpStorm. В диалоговом окне выберите расширения для файлов, и они будут открываться в PhpStorm.

На macOS требуется перезагрузка.



Шаблоны могут генерировать несколько файлов


Можно одновременно сгенерировать сразу несколько файлов, например скелет для модуля или комбо контроллер-вью.

В Preferences / Settings | Editor | File and Code Templates нажать на , чтобы создать новый шаблон, а затем нажать на иконку Create Child Template File .

В поле File name можно использовать переменные типа ${NAME}.



А вот пример того, как сгенерировать контроллер и шаблон в Symfony:




Поддержка Git stage


Включить можно чекбоксом Enable staging area в Preferences/Settings | Version Control | Git.

В окне инструментов Commit (Cmd+0 / Alt+0) появятся две группы файлов: staged и unstaged.

Чтобы добавить файл в staged, нажмите на + напротив него.



Или можно выбрать конкретные строки и добавить их иконкой в редакторе. В этом случае можно закоммитить часть изменений из файла, а над остальными продолжить работу.




Инструменты БД


PhpStorm из коробки включает в себя возможности DataGrip, которые охвачены в обзоре релиза DataGrip 2020.3 от наших коллег.

SQL для MongoDB


Теперь можно использовать SQL-запросы к MongoDB. PhpStorm 2020.3 поддерживает SELECT-запросы с JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSETи всеми функциями MongoDB кроме map, reduce, filter и let. Подробнее в блог-посте.



Веб


Как всегда, в PhpStorm входят все обновления из WebStorm 2020.3. Наиболее примечательной является поддержка Tailwind CSS.

Tailwind CSS


PhpStorm дополняет классы Tailwind в HTML-файлах и после директивы @apply. А также предоставит автодополнение псевдо-классов.

tailwind-completion-after-apply

Если навести указатель на класс в HTML и CSS файлах, то отобразится предпросмотр полученного CSS. Предпросмотр также доступен при автодополнении кода, во всплывающем окне документации F1 / Ctrl+Q.

tailwind-completion-for-pseudo-class-variants

PhpStorm поддерживает настройки из tailwind.config.js. Например, если определить тему с новыми цветами, то во всплывающем окне автодополнения будут созданные классы с именем кастомного цвета.

tailwind-customization-support




Скачать PhpStorm 2020.3 можно на странице Whats new.

А вот видеоролик (на английском) с демонстрацией главных фич релиза:


На этом всё на этот раз. Будем рады вопросам, пожеланиям, баг-репортам и просто мыслям в комментариях.
Подробнее..

DataGrip 2020.3 SQL для Монги, новые форматы экспорта, интроспекция прав доступа и другое

25.11.2020 18:12:55 | Автор: admin
Привет! Очередной длинный пост о том, что мы сделали за последние четыре месяца. Как всегда, мы говорим DataGrip, а подразумеваем все остальные наши IDE. В том числе и WebStorm, SQL-плагин к которому теперь можно докупить.




Самое важное:


SQL для MongoDB
Поддержка Couchbase
Аутентификация через Azure AD
Улучшения в редакторе больших значений
Открытие таблиц в транспонированном виде
Новые форматы экспорта
Интроспекция прав доступа
Форматирование диалекта Generic
Улучшения в конфигурациях запуска
Перетаскивание вкладок

SQL для MongoDB


Теперь можно писать SQL в MongoDB. Мы написали транслятор SQL в JavaScript.



Работают только запросы SELECT и предложения JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET. Полный пост обо всём, что мы поддержали, читайте здесь.

В контекстном меню есть две опции: Copy JS script to clipboard и Show JS Script. Последняя откроет окно с JS-запросом, который мы отправим на сервер. Здесь же можно его отредактировать и запустить.



Соединение


Поддержка Couchbase


Наша семья растёт: мы поддержали Couchbase! Важно отметить, что DataGrip работает с Couchbase Query, а не с Couchbase Analytics.



Аутентификация через Azure AD


Об этом нас давно просили: к базе данных Azure SQL теперь можно подсоединиться через Active Directory.



Рабочая папка


Теперь можно указать рабочую папку для процесса, который отвечает за соединение. Относительные пути, например в свойствах драйвера, будут разрешаться в эту папку.



Редактор данных


Редактор больших значений


Мы сделали этот редактор в предыдущей версии, а сейчас улучшили несколько вещей.

Форматированное значение


Если в ячейке хранится однострочный XML или JSON, в редакторе значений он будет показан в отформатированном виде. Причем вы можете отредактировать значение в удобном виде, а сохранится оно всё равно как одна строка.



Расположение снизу


Если вам важна ширина экрана, передвиньте редактор вниз.



Картинки


Ещё в этом же редакторе отображаются картинки.



Открытие таблиц в транспонированном виде


Теперь все таблицы можно открывать в транспонированном виде по умолчанию. Полезно, если в таблицах много столбцов.



Выделение в редакторе


В редакторе всегда работало умное выделение: нажимаете Ctrl+W на Windows/Linux или Opt+Up на macOS и сначала выделяется текущая строка, потом текущий столбец, потом вся таблица. Теперь можно двигаться и в обратном порядке: при помощи Ctrl+Shift+W на Windows/Linux и Opt+Down на macOS.



Импорт/экспорт


Новые форматы


Сделали два новых формата: One-row и SQL-Insert-Multirow.



One-Row копирует выделенные значения в одну строку через запятую. Это удобно, когда значения столбца нужно вставить в оператор IN.



SQL-Insert-Multirow сгенерирует один INSERT для нескольких строк. В некоторых базах, например MySQL и PostgreSQL, это работает.



Не ставить кавычки


Новая опция в CSV форматах: never quote values.



Интроспекция


Сбор диагностической информации


Интроспекция это процесс сбора информации о базе данных. Эту информацию DataGrip хранит у себя, чтобы помогать вам навигироваться по базе, искать объекты, дополнять код.

Иногда при интроспекции обнаруживаются разные проблемы. Мы не всегда можем их воспроизвести. Поэтому мы придумали механизм сбора данных, которые пригодятся, если вы пишете нам в поддержку или трекер.

Diagnostic refresh запустит интроспекцию, соберет нужную информацию и запишет её в файл, который откроется в файловом менеджере. Он пригодится нам, чтобы понять, что происходит.

Prepare introspector diagnostic собирает всю возможную информацию, не перезапуская интроспекцию. Результат работы этого действия присылайте, если что-то устарело или не подгрузилось.



Права доступа


DataGrip теперь знает о правах доступа и показывает их в сгенерированном DDL для объекта.


Изменённые объекты в проводнике базы данных


Если вы изменили DDL объектов, но ещё не успели отправить свои изменения в базу, эти объекты будут подсвечены в дереве. Раньше изменённые объекты показывались только в окне Database Changes.



[PostgreSQL] Больше свойств таблиц


DataGrip генерирует DDL таблицы, включая TABLESPACE и INDEX ACCESS METHOD.



[Greenplum] Новые объекты


В дереве базы данных Greenplum стало больше отображаемых объектов: мы добавили коллации, материализованные представления, внешние таблицы, обёртки сторонних данных, сторонние сервера, сторонние таблицы и сопоставления пользователей.



[Oracle] Корректное отображение перегрузок


Перегрузки внутри одного пакета раньше отображались как один объект. Теперь как несколько. Число в квадратных скобках это индекс процедуры в базе данных.



Помощь в написании кода


Форматирование диалекта Generic


Теперь вы можете форматировать запросы, работая с базами, которые мы не поддерживаем.



Новый интерфейс переименования


Внутристрочное переименование теперь предлагает опции: переименовать в комментариях, строках и в текстовых вхождениях. Текстовые вхождения это обычный поиск по тексту в файлах, формат которых мы не подсвечиваем.



Исправление опечаток


Alt+Enter на Windows/Linux и Opt+Enter на macOSтеперь сразу предлагают список исправлений, без вложенного меню.



[Oracle] Конфликт вызовов


Если возникает конфликт вызова перегруженной процедуры, DataGrip предупредит об этом.



Новые настройки капитализации в форматировании


Теперь можно указать капитализацию отдельно для встроенных типов, пользовательских типов и встроенных функций.



Запуск запросов


Конфигурации запуска


Запуск скриптов из файлов стал удобнее:

Смена контекста


DataGrip предупредит, если внутри скрипта меняется контекст, то есть используется USE или SET search_path.



Отображение контекста


Если вы выбрали накатить скрипт на источник данных, то DataGrip выберет схему по умолчанию. Теперь она отобразится рядом серым цветом.



История запуска


Маленькая кнопка с часами откроет список для выбора баз и схем, на которые вы накатывали скрипты раньше.



Вывод консоли в отдельной вкладке


Если для вас важна ширина экрана, вывод консоли можно открывать в новой вкладке окна Services по умолчанию. Таким образом, вся ширина экрана будет задействована для результата запроса или текстового вывода. Включается это в Settings/Preferences | Database | General | Open new services tab for sessions.



[SQL Server] Имена вкладок


В прошлом году мы сделали так, что комментарии перед запросом становятся именами вкладок. Это не работало в SQL Server, если запускать сразу несколько запросов, потому что SQL Server обрабатывает несколько запросов как один. Теперь работает как надо.



[SQL Server] Подсказки для создания индекса в планировщике


В планировщике теперь появляются подсказки, которые предлагают создать индекс для улучшения производительности запроса.



Редактирование DDL



Предупреждение о неактуальной структуре таблицы


Если вы открываете DDL таблицы, но кэшированная версия DataGrip успела устареть, вас об этом предупредят. Раньше это работало только для объектов с исходным кодом: процедур, функций, представлений.



Предупреждение, если объект удален


Если объект был удален, пока вы его редактировали, появится сообщение об этом. Например, вы вносили изменения в процедуру, а в это время её кто-то дропнул!



DataGrip предложит три варианта:

Revert local changes: выбирайте этот вариант, если вас устраивает, что процедура удалена. Редактор закроется.

Keep local changes: в этом варианте вы будете продолжать вносить изменения в процедуру, а при нажатии Submit она будет создана заново.

Restore in the database: то же самое, но DataGrip сразу же восстановит вариант процедуры, который был актуален на тот момент, когда вы ее открыли. Это нужно для того, чтобы правильно подсветить ваши текущие изменения при редактировании. После нажатия Submit результаты этого действия и Keep local changes будут одинаковы.

Действия по работе с исходниками


Действия Submit, Rollback и Show Changes теперь можно запускать для объекта из любого контекста, в том числе проводника. Например, у вас висят изменения для некоторого количества процедур. Можно выделить несколько из них в дереве и только их исходники отправить в базу. А остальные, например, откатить. Раньше эти операции делались только из окна Database Changes.



Общее


Перетаскивание вкладок


Теперь можно переносить вкладки в разные области экрана. Получается, есть и полностью независимый сплит-режим: если выбрать режим In-Editor Results, у каждой вкладки будет свой результат запроса.



Синхронизация темы с системными настройками


Если выбрать Sync with OS в настройках Settings/Preferences | Appearance & Behavior | Appearance | Theme, то IDE будет автоматически синхронизировать цветовую тему с настройками операционной системы.



Сочетания клавиш macOS словами


Некоторым людям сложно читать условные обозначения клавиш на macOS. Теперь можно дёрнуть ключ ide.macos.disable.native.shortcut.symbols в реестре, и вместо значков будут слова. Сработает для всех меню внутри IDE, кроме главного, в котором поменять что-то мы бессильны.



Вкладка предпросмотра


В настройках панели Files выберите Enable Preview Tab. Теперь по клику на файл его содержимое видно во вкладке предпросмотра. Если вы начинаете редактировать файл, эта вкладка превращается в обычную.



Простой калькулятор


Вычисляйте несложные штуки в окне Search Everywhere.



Ассоциации с файлами


С этой версии в настройках DataGrip можно указать, какие файлы IDE должна открывать по умолчанию. Настройка находится тут: Settings/Preferences | Settings | Editor | File Types | Associate file types with DataGrip.



Кстати, это могут быть не только файлы, связанные с базами данных. DataGrip вполне подходящий редактор для JSON, HTML или MarkDown*!

*с плагином

Развернуть всё


Раньше в панелях Database и Files была только кнопка Collapse All, которая закрывает все узлы. Мы добавили кнопку Expand All, которая открывает все возможные узлы до последнего уровня. Может пригодится при быстром поиске, когда вы просто печатаете имя объекта, находясь в дереве. Такой поиск ищет только по открытым узлам.



Такой вышел релиз!

Скачать триал на месяц

Фидбек принимаем в комментариях к посту и здесь:

Трекер (это если точно нашли проблему)
Телеграм-канал
Твиттер
Почта

Команда DataGrip
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru