Здравствуйте, ifle, Вы писали:
I>Не пойму почему решарпер предлагает понемять следующее вырожение I>$(o_obj).scrollLeft(10);
Озадачил коллег. Есть у меня подозрение, что убрать галочку про similar construct может помочь.
Здравствуйте, qxWork, Вы писали:
W>Здравствуйте, ifle, Вы писали:
I>>Не пойму почему решарпер предлагает понемять следующее вырожение I>>$(o_obj).scrollLeft(10); W>Озадачил коллег. Есть у меня подозрение, что убрать галочку про similar construct может помочь.
Не помогает
Здравствуйте, ifle, Вы писали:
I>Добавил в Custom Pattern следующий replace для JS I>Search : $expr1$.scrollLeft I>Replace : $($expr1$).scrollLeft()
I>Не пойму почему решарпер предлагает понемять следующее вырожение I>$(o_obj).scrollLeft(10);
Если я правильно понял $expr1$ у вас это ExpressionPlaceholder, вызов функции $(o_obj) — тоже expression в грамматике Js,
поэтому он заматчил выражение $(o_obj).scrollLeft.
Как workaround, можно поменять тип плейсхолдера $expr1$ на NamePlaceholder, но класс выражений, которые будут матчатся, сократится практически до идентификатора.
Здравствуйте, vad13, Вы писали:
V>Здравствуйте, ifle, Вы писали:
I>>Добавил в Custom Pattern следующий replace для JS I>>Search : $expr1$.scrollLeft I>>Replace : $($expr1$).scrollLeft()
I>>Не пойму почему решарпер предлагает понемять следующее вырожение I>>$(o_obj).scrollLeft(10);
V>Если я правильно понял $expr1$ у вас это ExpressionPlaceholder, вызов функции $(o_obj) — тоже expression в грамматике Js, V>поэтому он заматчил выражение $(o_obj).scrollLeft.
V>Как workaround, можно поменять тип плейсхолдера $expr1$ на NamePlaceholder, но класс выражений, которые будут матчатся, сократится практически до идентификатора.
Так можно, но более сложные выражения не найдутся.
А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина?
Здравствуйте, ifle, Вы писали:
I>Так можно, но более сложные выражения не найдутся.
возможно, имеет смысл найти и заменить все, а потом пройтись regex-ами изжить двойные скобки.
I>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина?
Не совсем понимаю. Паттерны лежат в сеттингах.
Здравствуйте, qxWork, Вы писали:
W>Здравствуйте, ifle, Вы писали:
I>>Так можно, но более сложные выражения не найдутся. W>возможно, имеет смысл найти и заменить все, а потом пройтись regex-ами изжить двойные скобки.
Решение конечно можно найти, но жаль, что работает не так, как ожидается.
Этот баг будет пофиксен в ближайших фиксах?
I>>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина? W>Не совсем понимаю. Паттерны лежат в сеттингах.
Паттерны сильная вещь конечно, но довольно ограниченная, есть задачи которые для них не посильные и видимо прийдётся делать свой плагин, поэтому хотелось бы перенести уже созданные паттерны без лишних телодвижений в плагин, а паттернов накопилось уже не мало.
Здравствуйте, ifle, Вы писали:
I>Этот баг будет пофиксен в ближайших фиксах?
Если баг будет заведен в трекере и на него найдется время.
Я не совсем уверен, что сейчас поведение неправильное (хотя для этой конкретной задачи неудобное), возможно, оно именно должно регулировать галочкой. С точки зрения структуры выражение в скобках не перестает быть выражением.
I>>>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина? W>>Не совсем понимаю. Паттерны лежат в сеттингах.
I>Паттерны сильная вещь конечно, но довольно ограниченная, есть задачи которые для них не посильные и видимо прийдётся делать свой плагин, поэтому хотелось бы перенести уже созданные паттерны без лишних телодвижений в плагин, а паттернов накопилось уже не мало.
Все равно не понимаю, что хочется сделать. Все паттерны, какие есть живут в сеттингах. Можно их экспортировать в файл и подключать этот файл. Можно этот файл таскать вместе с плагином и в плагине написать компонент, который этот файл автоматически подцепит.
Здравствуйте, qxWork, Вы писали:
W>Здравствуйте, ifle, Вы писали:
I>>Этот баг будет пофиксен в ближайших фиксах? W>Если баг будет заведен в трекере и на него найдется время. W>Я не совсем уверен, что сейчас поведение неправильное (хотя для этой конкретной задачи неудобное), возможно, оно именно должно регулировать галочкой. С точки зрения структуры выражение в скобках не перестает быть выражением.
Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции.
W>Все равно не понимаю, что хочется сделать. Все паттерны, какие есть живут в сеттингах. Можно их экспортировать в файл и подключать этот файл. Можно этот файл таскать вместе с плагином и в плагине написать компонент, который этот файл автоматически подцепит.
Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам.
Здравствуйте, ifle, Вы писали:
I>Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции.
Я невнимательно прочитал. Проблема в том, что $(obj) — это тоже expression, а отличать выражения с $ от других мы не умеем.
Завел реквест
W>>Все равно не понимаю, что хочется сделать. Все паттерны, какие есть живут в сеттингах. Можно их экспортировать в файл и подключать этот файл. Можно этот файл таскать вместе с плагином и в плагине написать компонент, который этот файл автоматически подцепит. I>Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам.
Можно (и видимо, нужно) положить файл в ресурсы плагина и написать компонент, который этот файл добавляет в сеттинги. Примерно так:
Здравствуйте, qxWork, Вы писали:
W>Здравствуйте, ifle, Вы писали:
I>>Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции. W>Я невнимательно прочитал. Проблема в том, что $(obj) — это тоже expression, а отличать выражения с $ от других мы не умеем. W>Завел реквест
Спасибо, надеюсь, что попадёт в один из ближайших фиксов
W>>>Все равно не понимаю, что хочется сделать. Все паттерны, какие есть живут в сеттингах. Можно их экспортировать в файл и подключать этот файл. Можно этот файл таскать вместе с плагином и в плагине написать компонент, который этот файл автоматически подцепит. I>>Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам. W>Можно (и видимо, нужно) положить файл в ресурсы плагина и написать компонент, который этот файл добавляет в сеттинги. Примерно так: W>
Хороший пример, спасибо, так и сделаю. При разборе паттернов решарпер на лету что-то компилирует или паттерны интерпретируемые?
На сколько скорость работы паттернов отличается от кода написанного в плагине?
Вот чего сильно не хватает в паттернах это возможности указать regex или какой-то condition для експрешинов.
Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.
Здравствуйте, ifle, Вы писали:
I>Сделал плагин, при регистрации получаю такую ошибку. Что не так делаю?
I>
I>Message = “Unable to resolve dependency 'JetBrains.ReSharper.SDK (≥ 9.0.20141204.190166)'.”
I>
В зависимых пакетах плагина не должно быть ничего кроме Wave.
Для этого все пакеты, что мы добавляем в packages.config, должны быть с атрибутом developmentDependency="true"
Ну или пакет собирать натравливая nuget pack на nuspec а не csproj.
Здравствуйте, der Igel, Вы писали:
DI>Здравствуйте, ifle, Вы писали:
I>>Сделал плагин, при регистрации получаю такую ошибку. Что не так делаю?
I>>
I>>Message = “Unable to resolve dependency 'JetBrains.ReSharper.SDK (≥ 9.0.20141204.190166)'.”
I>>
DI>В зависимых пакетах плагина не должно быть ничего кроме Wave. DI>Для этого все пакеты, что мы добавляем в packages.config, должны быть с атрибутом developmentDependency="true" DI>Ну или пакет собирать натравливая nuget pack на nuspec а не csproj.
Помогло спасибо. Плагин прописался и я его вижу в Extension Manager.
Правда нет никаких признаков, что моя сборка загружается. Куда дальше смотреть?
Мой проект имеет всего один файл
namespace ResharperWebDevTools
{
[ZoneMarker]
public class ZoneMarker : IRequire<ICodeEditingZone>, IRequire<ILanguageJavaScriptZone> { }
[StaticSeverityHighlighting(Severity.ERROR, "JavaScript")]
internal class MyClassHighlighting : IHighlighting
{
private IExpression _invocationExpression;
public MyClassHighlighting(IExpression invocationExpression)
{
_invocationExpression = invocationExpression;
}
public bool IsValid()
{
return _invocationExpression != null && _invocationExpression.IsValid();
}
public DocumentRange CalculateRange()
{
return _invocationExpression.GetDocumentRange();
}
public string ToolTip
{
get { return"Hello world !!!!!!!!!!!!!!!"; }
}
public string ErrorStripeToolTip
{
get { return ToolTip; }
}
public int NavigationOffsetPatch
{
get { return 0; }
}
}
[ElementProblemAnalyzer(new[] {typeof (IExpression)}, HighlightingTypes = new[] {typeof (MyClassHighlighting)})]
public class IntPowerProblemAnalyzer : ElementProblemAnalyzer<IExpression>
{
protected override void Run(IExpression element, ElementProblemAnalyzerData data, IHighlightingConsumer consumer)
{
consumer.AddHighlighting(new MyClassHighlighting(element), element.GetDocumentRange(), element.GetContainingFile());
// if (element.ToString().StartsWith("onload"))
// consumer.AddHighlighting(new MyClassHighlighting(element), element.GetDocumentRange(), element.GetContainingFile());
}
}
}
Здравствуйте, ifle, Вы писали:
I>При разборе паттернов решарпер на лету что-то компилирует или паттерны интерпретируемые?
Паттерны компилируются при первом обращении и потом до закрытия солюшена переиспользуются.
I>На сколько скорость работы паттернов отличается от кода написанного в плагине?
Это, естественно, может сильно зависеть от конкретного примера, но в целом, паттерны обычно чуть быстрее и сильно более просты в написании, зато проигрывают в возможностях, что вы и указали ниже.
I>Вот чего сильно не хватает в паттернах это возможности указать regex или какой-то condition для експрешинов.
А если это тернарный оператор с несколькими вызовами методов внутри? Странно это будет.
I>Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.
В плагине можно с помощью движка паттернов поискать все подходящие конструкции, а потом обработать полученные результаты вручную. И проверка, о которой вы говорите, прекрасно в эту концепцию вписывается. Так написаны некоторые встроенные анализы, такой же подход использован и в плагине Agent Mulder: https://github.com/hmemcpy/AgentMulder
Здравствуйте, kropp, Вы писали:
K>А если это тернарный оператор с несколькими вызовами методов внутри? Странно это будет.
А что странного, для NamePlaceHolder есть возможность добавить regex, также было бы удобно и для expression. да и для любых параметров тоже.
I>>Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.
K>В плагине можно с помощью движка паттернов поискать все подходящие конструкции, а потом обработать полученные результаты вручную. И проверка, о которой вы говорите, прекрасно в эту концепцию вписывается. Так написаны некоторые встроенные анализы, такой же подход использован и в плагине Agent Mulder: https://github.com/hmemcpy/AgentMulder
Посмотрел, много рукопашного там. Хорошо было-бы если бы отркрыли свой API для регистрации созданных IStructuralSearchPattern обьектов, с вожножностью callback для подтвержения поиска.
А вещь действительно удобная.
Здравствуйте, der Igel, Вы писали:
DI>Здравствуйте, ifle, Вы писали:
I>>Имя пакета с точкой. Делал по инструкции с гида
DI>А исходники где-нибудь выложены? Я бы посмотрел.
Спасибо за помощь, разобрался, была проблема в nuget package