Как стать автором
Обновить

Комментарии 130

Вчера обновил webstorm и первое что реально порадовало за много лет, это проведенная оптимизация автокомплита. Теперь автокомплит успевает даже на очень слабых машинах. Это чудо!
Сегодня обновил WebStorm и что удивило, что Jest перестал работать, теперь валится где-то в недрах с ошибкой «RangeError: Maximum call stack size exceeded», так что пришлось откатываться. При этом генерируемая комманда работает из терминала нормально.
Интересная проблема. А при запуске из IDE и из терминала используется одна и та же версия node? Был бы признателен, если можно было бы посмотреть на полный стектрейс этой ошибки, в идеале в виде бага на youtrack.jetbrains.com/issues/WEB :)
Нет ли случайно открытого проекта, где это воспроизводится? Спасибо.
Постараюсь завтра выделить время на разбор проблемы и описать более детально. К сожалению не открытый и поделиться естественно им не могу.

{applause} !!!


(и да, можете минусовать за бессодержательность)

О, так запоминания состояния на разных ветках небыло раньше? Блин, а я все время думал, что это у меня что-то глючит :)
PhpStorm, как одна из IDE на этой платформе, научился запоминать свое состояние для каждой ветки и восстанавливает его при переключении между ними.

Это касается Favorites ?

Закладки общие.
Переключение веток переключает tasks? Будет ли оно работать, если ветку сменю в консоли и потом вернусь в редактор, сменит ли он контекст?
p.s. Извини, нет возможности сейчас самому проверить.

По второму — нет, переключать ветки нужно в IDE. По первому сейчас уточню. Но у меня есть ощущение, что контекст из Tasks не отслеживается.

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

А если у меня в одной ветке файл есть, а в другой его нет и я туда закладку поставил, то после переключения на вторую ветку и обратно закладка пропадёт навсегда?

Увы. Будет здорово, если Вы сообщите об этой проблеме по ссылке в моем комментарии выше.
Хм. А почему Unhandled exception появляется в блоке catch (Throwable $e)?
Ведь любое исключение в PHP 7.1 — Throwable. Да и система указывает на исключение которое наследуется от Exception.
Можно пример кода?
Конечно. Все классы есть в use, поэтому на неймспейсы не грешите.

try{
    ...
} catch (Throwable $e) {
    $this->exception($e); // Unhandled ....
    continue;
}


protected function exception(Throwable $e)
{
    $this->exceptionCount++;

    if ($this->exceptionCount > $this->getMaxExceptionCount()) {
        throw new MyCustomException('текст ошибки', 0, $e);
    }
}


class MyCustomException extends \Exception
{
// Пустой класс
}


UPD: А, стоп. Оно ж в блоке catch. А выше там класс анонимный и оно не может определить его использование и верхний catch. Тогда вроде как все верно. Но лучше гляньте лишний раз.

Ну да, внутри catch-блока выбрасывается MyCustomException. Если оно не задекларировано и выше нигде не ловится, то PhpStorm считате его необработанным.

Анонимный класс, это «return new class extends MyAbstractClassEtc {...}».
При этом такой объект создается через динамический require(), поэтому Шторм такое не засечет.

В общем, суть та же что и с функциями

Про анонимные классы — это я погорячился, с ними ситуация точно такая же, как и с обычными. Т.е. не имеет значения его дальнешее использование, важно либо задекларировать исключение в PHPDoc метода, либо его обработать внутри метода. Иная ситуация с анонимными функциями, но они тут не причем, поэтому я и отредактировал сообщение.

Немного не в тему, но может подскажете как убрать комментарий «TODO: Change the autogenerated stub» при оверрайде методов? :) Запарился уже его удалять каждый раз.

Editor | File and Code Templates | Code | PHP Overridden Method Body.

Ребята, вы молодцы! Особенно контроль исключений — то, чего давно не хватало, так держать!
Спасибо, стараемся :)
Однако не обошлось без чайной ложечки дёгтя, к сожалению. Теперь все, что отлавливалось с помощью set_exception_handler подсвечивается и мозолит глаза.

Ну, тут уж извините: чем больше используется динамечских фич языка, тем сложнее IDE помогать с помощью статического анализа. Единственное, что приходит в голову, так это дать возможность указывать, какие исключения являются unchecked (WI-22936). Сейчас это только RuntimeException и LogicException. Но мы с удовольствием выслушаем альтернативные предложения.

Было бы очень круто, тк сейчас все методы вызывающие методы работающие с бд подсвечены, тк доктрина может в случае недоступности бд кинуть исключение.
По REST запросам интересная модификация, но вот 1 момент который все-же не дает пока перейти от Postman — Форматирование ответа.

В Postman ответ в виде Json дерева, а тут получается весь Json в строку.
Читать крайне неудобно.

Мы планируем добавить возможность автоматического форматирования ответа (WEB-28672).

Помимо форматирования ещё и содержимое кириллицы в ответе выводится как есть. Какое-нибудь \u041F\u0440\u0438\u0432\u0435\u0442 не особо читабельно, даже если его отформатировать.

Мы всегда рады предложениям в трекере.

У меня ответы идут в UTF-8 и с Кирилицей все нормально.

Но вот вопрос появился, а как передать тело запроса?
Например получить с Эластика агрегированные данные отправив такое тело:

{
	"aggs":
	{
		"agg_name":
		{
			"terms":
			{
				"field":"filed_name",
				"order":{"_count":"desc"},
				"min_doc_count":1
			}
		}
	}
}
Пустая строка после заголовков, потом тело.
Что-то как-то для Codeception слабенько все. Не хватает нормальной возможности запускать отдельные тесты и кейсы, запуска с code coverage. Ещё хочется научиться запускать тесты внутри docker контейнера.
И ещё что раздражает — результаты покрытия кода тестами никак не меняются при обновлении файла. Приходится вручную удалять и добавлять.
Работа над Codeception продолжается, но многое из того, что вы перечислили уже поддерживается. Отдельные тесты и кейсы уже можно запускать — кликните правой кнопкой на методе и выберете Run или в Run Configuration выберете Method. Тесты внутри Docker контейнера тоже подерживаются — www.youtube.com/watch?v=UuiLnmWMvv0.

Голосуйте за поддержку code coverage в Codeception — youtrack.jetbrains.com/issue/WI-34962 и за обновление — youtrack.jetbrains.com/issue/WI-25513.

Про покрытие есть тикет (WI-34962), для всего остального предлагаю Вам не стеснятся и тикеты завести. Мы всегда рады обратной связи.

Привет.
Спасибо, очень клевые изменения. А можно как-то временно выключить «Контроль Исключений». У нас автотесты засветились, как Рождественская елка. :)

В настройках Editor | Inspections | PHP, названия инспекций перечислены в тексте статьи. Можно отключить совсем или поменять уровень на "No highlighting", если планируете пользоваться квикфиксами. Там же можно задать область, в который инспекции должны работать. Это может быть полезно, если инспекции нежелательны только в тестах, но не в коде.

JetBrains как всегда на высоте! Услышали меня с форматированием структур Twig. Может и следующее пожелание услышат:
Хотелось бы, что бы была настройка Smart-Checkout при переключении между ветками, которая позволяла бы текущие незакомиченные изменения отправлять в Shelf автоматически и возвращать при переключении обратно.

Есть такой тикет, голосуйте (IDEA-173936).

Отлично, спасибо, пошел голосовать.
JetBrains, есть такой баг. Прошло 2 года… Новые фичи — это классно, но блин… 2 года прошло, а баг все еще бесит

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

НЛО прилетело и опубликовало эту надпись здесь

А у меня другая комбинация, бесит меньше, чем один шифт жать:
Shift-Shift
Нет фокуса
Alt-Tab
Alt-Tab
Shift-Shift
Есть фокус)

НЛО прилетело и опубликовало эту надпись здесь

Или пойти в тикет и приложить логи, которые помогут исправить проблему ;) Там же можно скачать тестовый билд, в котором проблема должна быть исправлена (см. последние комментарии).

Господи, я оказывается не один такой. На рабочем ноуте webstorm после апдейта на 2017.1 через какое-то время начал страдать этим. Причём дома с ней же — всё отлично. Переставлять не хочется, вроде баг мелкий, но такой противный.
НЛО прилетело и опубликовало эту надпись здесь

Это Php Inspections плагин, все вопросы к автору.

Понял, принято.
Огонь!

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

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

Странно как-то: в PhpStorm анонсируют рефакторинги для JS, которых для PHP нет. Сегодня прочитал бегло анонс на английском перед одним мероприятием, после него побежал к компу обновляться и никак не мог понять где этот рефакторинг, что не так делаю. И только сейчас, уже дома, читая этот пост, понял, что не про PHP было написано. Пришлось ручками выделять суперкласс и интерфейс.
А чего странного-то? В PhpStorm есть поддержка JavaScript, отчего бы нам не писать про новые JS фичи? К тому же, в тексте об этом сказано достаточно явно.
Кстати, а каких рефакторингов-то не хватает?

Например:


  • Extract (function/field) to new superclass (в новый клас и сделать его родителем текущего)
  • Extract (function/field) to new Trait (в новый трейт и использовать в текущем)

Создание суперклассов (возможно абстрактных) и интерфейсов. Добавление метода/константы в интерфейс. Как-то по аналогии с Pull Members Up, можно даже прямо в нём с возможностью создания нового суперкласса/интерфейса.

Вечно включающийся ESLint (YouTrack Issue) никак не починят.
А в 2017.3 у меня отломался автокомплит this.props в React компонентах.
Все та же проблема с gulp watcher. Не видит storm изменения внешних файлов, если оно сделано через gulp. Да, если я сделаю через блокнот изменения шторим увидит, но не через gulp.

Даже "File | Synchronize" не помогает?

Помогает наверное, но это не то. Там есть галочка Upload external changes так вот изменения от других программ она видит, но не от gulp.

Тут детали важны. Как я понимаю gulp просто работает в фоне (gulp watch или тому подобное) и при этом Вы не переключаетесь с одного приложения на другое (как при редактировании в блокноте, например). Если так, то да — PhpStorm не проверяет файлы на изменения в фоне — только при получении фокуса (когда альт-табишся с одного приложения на другое).


Или у Вас другая ситуация?

Такая, но смена фокуса тут не причем. Изменения файлов это события файловой системы. Если автоаплоад включен можно со свернутым штормом блокнотом править файлы и он будет свернутым все заливать с галочкой Upload external changes.

Оно и сейчас работает: только это Alt + Mouse selection (Default keymap; Windows 10)

Ну, да. Вот мы тут и не очень поняли, о чем вообще речь.

НЛО прилетело и опубликовало эту надпись здесь
Этот пункт меню из стороннего плагина. Например, у Symfony плагина есть такой баг.
НЛО прилетело и опубликовало эту надпись здесь
Видимо это меню зависит от проекта/окружения. у меня там есть пункт создания тестов
Когда сделаете отключаемую проверку файлов на фтп? понятно что разные люди работают над разными вещами… но 7 лет игнорировать один из самых запрашиваемых реквестов… =((

Composer из докер-контейнера запускаться еще не научили? Очень не хватает такой возможности, приходится через docker exec извращаться, чтобы композер не ругался на то, что на хосте нет расширений.

Пока нет, но планируем (WI-23544).

А когда будет возможность настраивать удалённый интерпретатор в docker контейнере для typescript и баз данных?

А зачем TS и БД может понадобится интерпретатор? Что именно Вы бы хотели получить с появлением такой возможности?

Интерпритатор node для Typescript(Languages & Frameworks > TypeScript). Сейчас можно настроить только для локально установленной nodejs, на машине разработчика. Не удобно тем, что имея nodejs в докере, приходится на хосте устанавливать nodejs.
Для базы данных хочется иметь возможность настроить источник находящийся в докер контейнере.
Хост ничего не знает о nodejs и базе данных, порты не пробрасываются.

Для Node.js есть плагин. С БД вообще не должно быть проблем: поднимаете контейнер, создаете data source с соответствующим IP и портом. Если порты не пробрасываются — это вопрос конфигурации Докера, здесь мы ничем помочь не можем.

Плагин уже установлен, возможность настроить удалённый интерпретатор не появляется. image

В случае с БД, я понимаю что это вопрос конфигурации, поэтому и интересуюсь будет ли возможность без проброса портов пользоваться этим инструментом :)

Его можно добавить при создании новой конфигурации (Run | Edit configurations...).


Node.js

Node.js


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

Можно поднять контейнер с прокси, который пробросит порт :)


Но у меня другая частая проблема — активно используется динамический проброс порта, то есть докер сам назначает порт на хосте. Нельзя ли как-то в источниках сделать чтобы можно было брать порт из метаданных контейнера, отбираемого по какому-то фильтру, например по регулярке/префиксу имени?

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

Выражаю огромную благодарность за добавление аутентификации с использованием key-агента при подключении к БД через ssh-туннель.
Неудобно что в Unit-тестах с аннотацией @expectedException всё равно требует try-catch или @throws, а отключить это инспекцию, как понял, можно только на весь проект.
а отключить это инспекцию, как понял, можно только на весь проект.

Да нет. Создайте отдельный Scope только для тестов и отключите эту инспекцию только для него.

И правда неудобно. Завел (WI-38998), поправим.

эх, а переходить по импортам import Anything from '@/components/anything'; в .vue файлах так и не научили ;( упорно заявляет:


cannot find declaration to go

UPD: посыпаю голову пеплом, нашел в настройках как это пофиксить.
settings > languages & frameworks > JavaScript > webpack — указать пусть до webpack.config

Подскажите, пожалуйста, как выглядит ваш webpack конфиг?
А каким образом это заработало? У меня пути не подсвечиваются и не доступны для перехода в принципе, а клик на компоненте лишь переносит к секции components
В ubuntu 17.10 не работает поиск. Нажимаешь «ctrl+f», появляется неактивное окошко поиска, в которое невозможно ничего вписать. Обновился блин…

Нам о такой проблеме неизвестно. Не могли бы Вы создать тикет и приложить туда логи?

Очень не хватает функции выгрузки файлов по ftp которые пришли по git pull, в истории они отображаются, а выделить и отправить нельзя, приходится искать корневые папки и отправлять все файлы
Записали себе (WI-7372), учтем. Спасибо!
Если открыть панель version control, вкладку log, то там можно выбрать файлы в отдельных коммитах и залить на фтп шоткатом с клавиатуры
Подскажите пожалуйста, как в macOS вернуть иконки PhpStorm для файлов (типов) в системе? Они затираются другими программами, но как восстановить оригинальные не понятно, переустановка Шторма иконки в Finder не меняет.

Найти файл в Finder, открыть свойства и поменять программу по-умолчанию. Применить для всех файлов этого типа.

Что — то вообще какая-то дичь с форматирование сложных twig файлов (множественные вложенные if) стала, все файлы поломались => отступы уходят вправо и не возвращаются…

Было бы здорово увидеть конкретные куски кода, для которых сломалось форматирование.

вот полное содержание файла на котором ломается форматирование:
Содерждимое одного из файлов где всё ломается
{% set itemsCount = 0 %}
{% for subfolder in subfolders %}
    
    {% if subfolder.IsNotMade %}
        <div style="margin: 10px  10px 20px 0;">
            <a style="color:#ccc; float:right;"
               href="{{ base_url }}{{ subfolder.TreeAnchor }}">{{ subfolder.FolderName }}</a>
        </div>
        <div class="div_clear"></div>
    {% else %}
        
        {% set itemsCount = itemsCount + 1 %}
        
        {% if subfolder.Tip == constant('repository\\ViewModels\\TreeTip::GROUP') %}
            {% if subfolder.Vid == constant('repository\\ViewModels\\TreeVid_Group::DYNAMIC') %}
                <div class="content-block-header article-content-expander" {% if not subfolder.IsVisible %} style="display: none;" {% endif %}
                    data-bind="click: CollapseClick.bind($data, $('#models_{{ subfolder.FolderId }}'), $('#sign_{{ subfolder.FolderId }}'))">
                    <span class="left nowrap strong">
                        <a href="#" class="h2_node_link" style="color:#06c;">
                            <span id="sign_{{ subfolder.FolderId }}"  style="font-size:10.5pt;">+</span>{{ subfolder.FolderName }}
                        </a>
                    </span>
                </div>
                
                <div style="margin-bottom: 5px;{% if subfolder.IsVisible %}display: none;{% endif %}" class="to_show" data-expand="0"  id="models_{{ subfolder.FolderId }}">
                    {% if subfolder.Models %}
                        {% if subfolder.IsVisible %}
                            {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                        {% else %}
                            {% if itemsCount == 1 %}
                                {% include 'model_groups/models_table.twig' with {'models' : subfolder.Models} only %}
                            {% else %}
                                {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                            {% endif %}
                        {% endif %}
                    {% endif %}
            
                    {% if subfolder.SubFolders %}
                        {% include 'model_groups/folders/subfolders.twig' with {'subfolders' : subfolder.SubFolders} only %}
                    {% endif %}
                </div>
        
            {% elseif subfolder.Vid == constant('repository\\ViewModels\\TreeVid_Group::HEADER') %}
                {% if subfolder.SubFolders %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                    </div>
        
                    {% include 'model_groups/folders/subfolders.twig' with {'subfolders' : subfolder.SubFolders} only %}
                {% else %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models, 'group_name' : subfolder.FolderName} only %}
                    </div>
                {% endif %}
        
            {% else %}
                <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
                {% include 'model_groups/folders/subfolders.twig' with {'subfolders' :subfolder.SubFolders} only %}
            {% endif %}
        {% elseif subfolder.Tip == constant('repository\\ViewModels\\TreeTip::DIVISION') %}
        
            {% if subfolder.Vid == constant('repository\\ViewModels\\TreeVid_Division::INDEPENDENT') %}
        
                <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                </div>
        
            {% elseif subfolder.Vid == constant('repository\\ViewModels\\TreeVid_Division::MAIN') %}
                <div style="color:#666; margin:25px 0px 5px 30px; font-size:11pt;">
                    <strong>{{ subfolder.FolderName }}</strong>    
                </div>
                {% if subfolder.SubFolders %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table.twig' with {'models' : subfolder.Models} only %}
                    </div>
        
                    {% include 'model_groups/folders/subfolders.twig' with {'subfolders' : subfolder.SubFolders} only %}
                {% else %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table.twig' with {'models' : subfolder.Models} only %}
                    </div>
                {% endif %}
        
            {% elseif subfolder.Vid == constant('repository\\ViewModels\\TreeVid_Division::FULL') %}
                <div style="color:#666; margin:25px 0px 5px 30px; font-size:11pt;">
                    <strong>{{ subfolder.FolderName }}</strong>    
                </div>
                {% if subfolder.SubFolders %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                    </div>
                    {% include 'model_groups/folders/subfolders.twig' with {'subfolders' : subfolder.SubFolders} only %}
                {% else %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' : subfolder.Models} only %}
                    </div>
                {% endif %}
        
            {% else %}
                {% if subfolder.SubFolders %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                    </div>
                    {% include 'model_groups/folders/subfolders.twig' with {'subfolders' :subfolder.SubFolders} only %}
                {% else %}
                    <div id="mod_data" style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                    </div>
                {% endif %}
            {% endif %}
        
        {% elseif subfolder.Tip == constant('repository\\ViewModels\\TreeTip::SUBSECTION') %}
            <div style="color:#666; margin:25px 0px 0px 30px; font-size:11pt;">
                <strong>
                    {% if subfolder.FolderIcon %}
                        <img src="{{ subfolder.FolderIcon }}"  style="vertical-align: middle; margin: 0px;">
                    {% endif %}
                {{ subfolder.FolderName }}
                </strong>    
            </div>
            {% if subfolder.SubFolders %}
                <div id="mod_data" style="margin-bottom: 5px;">
                {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
                {% include 'model_groups/folders/subfolders.twig' with {'subfolders' :subfolder.SubFolders} only %}
            {% else %}
                <div id="mod_data" style="margin-bottom: 5px;">
                {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
            {% endif %}
        {% elseif subfolder.Tip == constant('repository\\ViewModels\\TreeTip::SECTION') %}
            {% if subfolder.SubFolders %}
                <div id="mod_data"  style="margin-bottom: 5px;">
                    {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
                {% include 'model_groups/folders/subfolders.twig' with {'subfolders' :subfolder.SubFolders} only %}
            {% endif %}
        {% else %}
            {% if subfolder.SubFolders %}
                <div id="mod_data" style="margin-bottom: 5px;">
                {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
                {% include 'model_groups/folders/subfolders.twig' with {'subfolders' :subfolder.SubFolders} only %}
            {% else %}
                <div id="mod_data"  style="margin-bottom: 5px;">
                {% include 'model_groups/models_table_without_header.twig' with {'models' :subfolder.Models} only %}
                </div>
            {% endif %}
            
        {% endif %}
    {% endif %}

{% endfor %}

Да, как-то ему нехорошо. Завел (WI-39018), спасибо.

Вам спасибо. Буду ждать )
Так вот, в новой версии задержки вывода символов на экран удалось сократить в четыре раза! Тем, кто работает с большими и огромными файлами, должно стать приятнее редактировать. Если же у вас в проекте ООП и по файлу на класс, вы разве что заметите слегка увеличившийся срок работы от батареи


Запустил проект, открыл файл PHP на 2 тысячи строк, Второй файл на 4 тысячи, между ними переключался и просто листал трекпадом, phpstorm начал сильно жрать батарею + процесор поднимаеться на 10 градусов сразу, как то странно, вроде бы до этого не было ;(
Если что Macbook, Highlighting = Inspection

Если это воспроизводится, было бы здорово увидеть CPU-snapshot того, что так разогревает процессор (инструкция).

Смотрим, спасибо! А пока суть да дело: есть ли шанс приватно получить доступ к проекту? Очень помогло бы в локализации проблемы.
Так, по текущей информации проблема должна быть исправлена в одном из первых патчей (2017.3.1 или 3.2). Проверьте, пожалуйста, еще раз, когда они выйдут. Ну и в любом случае, мы всегда рады снэпшотам в нашем трекере ;)
Вопрос про EAP, я не нашёл ссылок на лицензию EAP и официального объяснения.
1) Я могу каждый месяц обновлять EAP-версию? Это легально, или такая уловка, которая не поощряется?
2) Какие ограничения использования EAP?
2.1) Могу ли использовать EAP-версию для коммерческого индивидуального использования?
2.2) А в компании?..

Есть 2 вида EAP:


  • мажорная (2017.3) — любой может пользоваться ею. С каждой версией/билдом идет своя 30-дневная лицензия. Новые фичи, новые баги (вполне возможно, ибо это WIP — Work In Progress). Упор идет на добавление нового функционала а не на производительность (сначала сделать что бы работало, а когда уже работает то и оптимизировать можно); на более массовое тестирование нового функционала, выявление возможных при этом багов/возможных доработок.
  • багфиксная (2017.3.1, 2017.3.x) — самая обычная — нужна полноценная лицензия (либо стандартный 30-дневный триал). Это для тех кому нужны багфикси уже сейчас а не ждать официального релиза. Новый функционал здесь уже не очень то и появляется (более мелкие доработки), релиз считается стабильным, поэтому нужна лицензия.

На данный момент EAP для мажорной уже закончен (ибо состоялся финальный 2017.3 релиз). Следующий EAP билд будет для 2017.3.1 и будет требовать лицензию. Бесплатным EAP будет опять для 2018.1

Спасибо!
Багфиксная — это которая на сайте называется «Free 30-day trial»?
Можно ли где-нибудь подробнее почитать об этом?
Багфиксная — это которая на сайте называется «Free 30-day trial»?

"Багфиксная" это 2017.3.1, 2017.3.2 и т.д. Та что на сайте это 2017.3.0 final/release (то-есть уже не EAP но еще не багфикс релиз).


Последний доступный EAP билд был для мажорной EAP — по идее Вы можете им пользоваться до окончания встроенной временной лицензии (я не помню есть ли требование мол "если финалка выпущена то нужно прекратить использование EAP билда" — раньше такого не видел да и лицензия у меня есть).


Первый "багфиксный" EAP билд будет скорее всего в следующую среду (как правило они публикуют их в этот день недели; и он будет требовать лицензию) а официальный релиз 2017.3.1 состоится где-то через 2-3 недели (по идее).


Спасибо, за крайне удобный шторм, но вот частенько сильно не хватает одной небольшой мелочи — невозможно перейти по ссылке вида Class::method или Class::$property. Такие ссылки встречаются довольно часто — в доках, сообщениях об ошибках и даже штормовская функция Copy Reference такую создает, а перейти по ней сам не может, печаль.
Думал что-то найти не могу — писал в саппорт, но там мне только посоветовали юзать Ctrl+N и Class#method, иногда можно конечно воспользоваться, но постоянно исправлять :: на # уже раздражает и главное непонятно зачем дело стало, функционал то уже такой есть…

В документации ссылки такого вида отлично работают в паре с тегом @see. О какого рода "сообщениях об ошибках" идет речь?

Про документацию имел ввиду не код, а описание например в какой-то вики-системе, почему указывать в доках именно в таком виде — это общепринятая практика и идет от доков самого пхп, вот например видно, что они повсеместно описывают подобным образом php.net/manual/ru/pdo.begintransaction.php.
О сообщениях я имел ввиду страницу ошибки которую выводит YII2, думал, что в таком виде берется из стэка вызовов PHP, но посмотрел — нет все таки сами во фреймворке так выводят, так, что именно это можно считать специфичным для YII2. Но первый пункт все таки актуален, и главное — сам то пхпшторм такую ссылку формирует! Ее бы передаешь кому-то посмотреть, а он по быстрому перейти по ней не может, как в случае со ссылкой на строке.

В общем случае, конечно, мы можем это сделать. В частности, нам придется писать парсер PHPDoc, который будет пытаться из текста вычленить такие выражения. И нам бы очень не хотелось этим заниматься, есть куча других интересных вещей. В других языках это решается специальными тегами. Например, в Java есть {@link}, ссылки внутри которого отлично подсвечиваются. В PHP тоже такой был, но его сделали deprecated, а альтернативы не предложили. Если бы можно было использовать {@see}, это решило бы проблему. Но текущая версия спецификации этого не позволяет.

Наверное мы о разном, а имел ввиду не сделать возможным переход по таким ссылкам в пхпдоке, а сделать переход из диалога Ctr+N (меню Navigate-Class) — сейчас он отлично позволяет переходить по ссылкам вида Class#method и Class#property, но не позволяет делать точно такой же! переход по аналогичным ссылкам Class::method и Class::$property, хотя именно такой вид ссылок используются в доках по пхп и другой документации по пхп-библиотекам. Т.е. достаточно сделать, чтобы этот диалог распознавал ссылки с разделителем :: наравне с # и делал точно такой же переход — это мне кажется достаточно простая доработка, но очень полезная для быстрой навигации.
Спасибо за терпение :)

После обновления PhpStorm стал глючить (например, многократные сообщения об ошибке в плагине CSS Support). Пришлось удалить глобальные настройки, чтобы исправить. Уже не первое такое обновление.

После обновления при запуске выкидывает «there is not enough memory to perform the requested operation phpstorm», стоит по дефолту 725mb, всегда этого хватало, пробовал увеличивать вдвое, все равно мало.
Не у кого подобной проблемы нету?
Пока пришлось откатиться, память сжирает на старте
В папке с логами (Help | Show Logs) должны быть мемори дампы, хотелось бы на них взглянуть.
dropmefiles.com/3nOKB
dropmefiles.com/wSZdU
По первой ссылке файл удален, а во второй что-то не очень помогает. Это точно от правильной версии? Для разных версий логи хранятся в разных папках. Кстати, о логах, На них тоже было бы здорово взглянуть.
Спасибо. Это известная проблема, будет исправлена в первом патче.
Вам спасибо)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий