Вопрос пo Highliting Pattern
От: ifle  
Дата: 30.03.15 08:55
Оценка:
Добавил в Custom Pattern следующий replace для JS
Search : $expr1$.scrollLeft
Replace : $($expr1$).scrollLeft()

Не пойму почему решарпер предлагает понемять следующее вырожение
$(o_obj).scrollLeft(10);
Re: Вопрос пo Highliting Pattern
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 31.03.15 10:57
Оценка:
Здравствуйте, ifle, Вы писали:

I>Не пойму почему решарпер предлагает понемять следующее вырожение

I>$(o_obj).scrollLeft(10);
Озадачил коллег. Есть у меня подозрение, что убрать галочку про similar construct может помочь.
Re[2]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 31.03.15 19:43
Оценка:
Здравствуйте, qxWork, Вы писали:

W>Здравствуйте, ifle, Вы писали:


I>>Не пойму почему решарпер предлагает понемять следующее вырожение

I>>$(o_obj).scrollLeft(10);
W>Озадачил коллег. Есть у меня подозрение, что убрать галочку про similar construct может помочь.
Не помогает
Re: Вопрос пo Highliting Pattern
От: vad13  
Дата: 01.04.15 08:57
Оценка:
Здравствуйте, 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, но класс выражений, которые будут матчатся, сократится практически до идентификатора.
Re[2]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 01.04.15 10:42
Оценка:
Здравствуйте, 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 в код плагина?
Re[3]: Вопрос пo Highliting Pattern
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 01.04.15 17:42
Оценка:
Здравствуйте, ifle, Вы писали:

I>Так можно, но более сложные выражения не найдутся.

возможно, имеет смысл найти и заменить все, а потом пройтись regex-ами изжить двойные скобки.

I>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина?

Не совсем понимаю. Паттерны лежат в сеттингах.
Re[4]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 01.04.15 18:30
Оценка:
Здравствуйте, qxWork, Вы писали:

W>Здравствуйте, ifle, Вы писали:


I>>Так можно, но более сложные выражения не найдутся.

W>возможно, имеет смысл найти и заменить все, а потом пройтись regex-ами изжить двойные скобки.
Решение конечно можно найти, но жаль, что работает не так, как ожидается.
Этот баг будет пофиксен в ближайших фиксах?

I>>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина?

W>Не совсем понимаю. Паттерны лежат в сеттингах.

Паттерны сильная вещь конечно, но довольно ограниченная, есть задачи которые для них не посильные и видимо прийдётся делать свой плагин, поэтому хотелось бы перенести уже созданные паттерны без лишних телодвижений в плагин, а паттернов накопилось уже не мало.
Re[5]: Вопрос пo Highliting Pattern
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 01.04.15 18:36
Оценка:
Здравствуйте, ifle, Вы писали:

I>Этот баг будет пофиксен в ближайших фиксах?

Если баг будет заведен в трекере и на него найдется время.
Я не совсем уверен, что сейчас поведение неправильное (хотя для этой конкретной задачи неудобное), возможно, оно именно должно регулировать галочкой. С точки зрения структуры выражение в скобках не перестает быть выражением.

I>>>А есть ли у вас утилита, которая могла бы сделать миграцию Custom Pattern в код плагина?

W>>Не совсем понимаю. Паттерны лежат в сеттингах.

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

Все равно не понимаю, что хочется сделать. Все паттерны, какие есть живут в сеттингах. Можно их экспортировать в файл и подключать этот файл. Можно этот файл таскать вместе с плагином и в плагине написать компонент, который этот файл автоматически подцепит.
Re[6]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 01.04.15 18:50
Оценка:
Здравствуйте, qxWork, Вы писали:

W>Здравствуйте, ifle, Вы писали:


I>>Этот баг будет пофиксен в ближайших фиксах?

W>Если баг будет заведен в трекере и на него найдется время.
W>Я не совсем уверен, что сейчас поведение неправильное (хотя для этой конкретной задачи неудобное), возможно, оно именно должно регулировать галочкой. С точки зрения структуры выражение в скобках не перестает быть выражением.
Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции.

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

Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам.
Re[7]: Вопрос пo Highliting Pattern
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 03.04.15 10:59
Оценка:
Здравствуйте, ifle, Вы писали:

I>Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции.

Я невнимательно прочитал. Проблема в том, что $(obj) — это тоже expression, а отличать выражения с $ от других мы не умеем.
Завел реквест

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

I>Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам.
Можно (и видимо, нужно) положить файл в ресурсы плагина и написать компонент, который этот файл добавляет в сеттинги. Примерно так:
  
  [ShellComponent]
  public class DefaultMsbuildRunnerSettings : IHaveDefaultSettingsStream
  {
    Stream IHaveDefaultSettingsStream.GetDefaultSettingsStream(Lifetime lifetime)
    {
      Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("JetBrains.Platform.VisualStudio.SinceVs10.resources.DefaultMsbuildRunnerSettings.xml");
      Assertion.Assert(stream != null, "stream != null");

      lifetime.AddDispose(stream);
      return stream;
    }

    string IHaveDefaultSettingsStream.Name
    {
      get { return "Default MsbuildRunner Settings"; }
    }
  }
Re[8]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 04.04.15 11:06
Оценка:
Здравствуйте, qxWork, Вы писали:

W>Здравствуйте, ifle, Вы писали:


I>>Что-то я не очень понял, про какие скобки идёт речь, есть выражение которое должно найти вызов свойства, а не функции.

W>Я невнимательно прочитал. Проблема в том, что $(obj) — это тоже expression, а отличать выражения с $ от других мы не умеем.
W>Завел реквест
Спасибо, надеюсь, что попадёт в один из ближайших фиксов

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

I>>Таскать и файл и плагин не хочется. Хотелось бы, что-бы все проверки находились в одном месте, а не размазаны по разным местам.
W>Можно (и видимо, нужно) положить файл в ресурсы плагина и написать компонент, который этот файл добавляет в сеттинги. Примерно так:
W>
  
W>  [ShellComponent]
W>  public class DefaultMsbuildRunnerSettings : IHaveDefaultSettingsStream
W>  {
W>    Stream IHaveDefaultSettingsStream.GetDefaultSettingsStream(Lifetime lifetime)
W>    {
W>      Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("JetBrains.Platform.VisualStudio.SinceVs10.resources.DefaultMsbuildRunnerSettings.xml");
W>      Assertion.Assert(stream != null, "stream != null");

W>      lifetime.AddDispose(stream);
W>      return stream;
W>    }

W>    string IHaveDefaultSettingsStream.Name
W>    {
W>      get { return "Default MsbuildRunner Settings"; }
W>    }
W>  }

W>


Хороший пример, спасибо, так и сделаю. При разборе паттернов решарпер на лету что-то компилирует или паттерны интерпретируемые?
На сколько скорость работы паттернов отличается от кода написанного в плагине?
Вот чего сильно не хватает в паттернах это возможности указать regex или какой-то condition для експрешинов.
Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.
Re[9]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 06.04.15 08:13
Оценка:
Сделал плагин, при регистрации получаю такую ошибку. Что не так делаю?

--- EXCEPTION #1/2 [InvalidOperationException]
Message = “Unable to resolve dependency 'JetBrains.ReSharper.SDK (≥ 9.0.20141204.190166)'.”
ExceptionPath = Root.InnerException
ClassName = System.InvalidOperationException
HResult = COR_E_INVALIDOPERATION=80131509
Source = NuGet.Core
StackTraceString = “
  at NuGet.InstallWalker.OnDependencyResolveError(PackageDependency dependency)
     at NuGet.PackageWalker.Walk(IPackage package)
     at NuGet.InstallWalker.ResolveOperations(IPackage package)
     at NuGet.PackageManager.Execute(IPackage package, IPackageOperationResolver resolver)
     at NuGet.PackageManager.InstallPackage(IPackage package, FrameworkName targetFramework, Boolean ignoreDependencies, Boolean allowPrereleaseVersions, Boolean ignoreWalkInfo)
     at NuGet.PackageManager.InstallPackage(IPackage package, Boolean ignoreDependencies, Boolean allowPrereleaseVersions)
     at JetBrains.Application.SinceClr4.Extensions.ExtensionManagerViewModelProvider.<>c__DisplayClass2b.<>c__DisplayClass35.<get_Model2>b__26()
     at JetBrains.Util.ILoggerEx.Catch(ILogger thіs, Action F, ExceptionOrigin origin)
”
 
--- Outer ---
 
--- EXCEPTION #2/2 [LoggerException]
Message = “Unable to resolve dependency 'JetBrains.ReSharper.SDK (≥ 9.0.20141204.190166)'.”
ExceptionPath = Root
ClassName = JetBrains.Util.LoggerException
InnerException = “Exception #1 at Root.InnerException”
HResult = COR_E_APPLICATION=80131600
StackTraceString = “
  at JetBrains.Application.SinceClr4.Extensions.ExtensionManagerViewModelProvider.<>c__DisplayClass2b.<>c__DisplayClass35.<get_Model2>b__25()
     at JetBrains.UI.ExtensionManager.ViewModels.ExtensionActionViewModel.Do()
     at JetBrains.UI.ExtensionManager.ViewModels.ExtensionManagerViewModel.<BeginInstallation>b__10(ProgressIndicator indicator, Property`1 description)
     at JetBrains.UI.ExtensionManager.ViewModels.ProgressPage.<>c__DisplayClass6.<Run>b__3()
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Threading.ThreadHelper.ThreadStart()
”
Re[10]: Вопрос пo Highliting Pattern
От: der Igel Россия  
Дата: 06.04.15 20:18
Оценка:
Здравствуйте, 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.
Re[11]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 07.04.15 10:38
Оценка:
Здравствуйте, 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());
        }
    }
}
Re[12]: Вопрос пo Highliting Pattern
От: der Igel Россия  
Дата: 07.04.15 11:19
Оценка:
Здравствуйте, ifle, Вы писали:

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


Какое имя пакета? Должно быть с точкой, детали здесь https://www.jetbrains.com/resharper/devguide/Extensions/Packaging.html#packaging-and-distribution
Re[13]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 07.04.15 13:27
Оценка:
Здравствуйте, der Igel, Вы писали:

DI>Здравствуйте, ifle, Вы писали:


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


DI>Какое имя пакета? Должно быть с точкой, детали здесь https://www.jetbrains.com/resharper/devguide/Extensions/Packaging.html#packaging-and-distribution

Имя пакета с точкой. Делал по инструкции с гида
Re[9]: Вопрос пo Highliting Pattern
От: kropp  
Дата: 07.04.15 13:35
Оценка:
Здравствуйте, ifle, Вы писали:

I>При разборе паттернов решарпер на лету что-то компилирует или паттерны интерпретируемые?


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

I>На сколько скорость работы паттернов отличается от кода написанного в плагине?


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

I>Вот чего сильно не хватает в паттернах это возможности указать regex или какой-то condition для експрешинов.


А если это тернарный оператор с несколькими вызовами методов внутри? Странно это будет.

I>Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.


В плагине можно с помощью движка паттернов поискать все подходящие конструкции, а потом обработать полученные результаты вручную. И проверка, о которой вы говорите, прекрасно в эту концепцию вписывается. Так написаны некоторые встроенные анализы, такой же подход использован и в плагине Agent Mulder: https://github.com/hmemcpy/AgentMulder
Re[10]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 07.04.15 16:06
Оценка:
Здравствуйте, kropp, Вы писали:

K>А если это тернарный оператор с несколькими вызовами методов внутри? Странно это будет.

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

I>>Как пример $expr$.name где expr содержит слово xml, а если бы добавили возможность callback на C# после разбора експрешинов, то был бы вообще праздник.


K>В плагине можно с помощью движка паттернов поискать все подходящие конструкции, а потом обработать полученные результаты вручную. И проверка, о которой вы говорите, прекрасно в эту концепцию вписывается. Так написаны некоторые встроенные анализы, такой же подход использован и в плагине Agent Mulder: https://github.com/hmemcpy/AgentMulder


Посмотрел, много рукопашного там. Хорошо было-бы если бы отркрыли свой API для регистрации созданных IStructuralSearchPattern обьектов, с вожножностью callback для подтвержения поиска.
А вещь действительно удобная.
Re[14]: Вопрос пo Highliting Pattern
От: der Igel Россия  
Дата: 07.04.15 21:23
Оценка:
Здравствуйте, ifle, Вы писали:

I>Имя пакета с точкой. Делал по инструкции с гида


А исходники где-нибудь выложены? Я бы посмотрел.
Re[15]: Вопрос пo Highliting Pattern
От: ifle  
Дата: 08.04.15 14:19
Оценка:
Здравствуйте, der Igel, Вы писали:

DI>Здравствуйте, ifle, Вы писали:


I>>Имя пакета с точкой. Делал по инструкции с гида


DI>А исходники где-нибудь выложены? Я бы посмотрел.

Спасибо за помощь, разобрался, была проблема в nuget package
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.