Добил навигацию.
От: Блудов Павел Россия  
Дата: 15.11.06 12:08
Оценка: 195 (5)
Доброго всем времени суток!

То, о чём давно говорили большевики случилось!

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

Осталось прикрутить генерацию псевдо-исходников из метаданных если ничего не нашлось. Как это делает студия для c#.

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

P.P.S. Навигация во внешние сборки не работает на атрибутах (доделаю) а также интерфейсах, енумах и чисто абстрактных классах. Т.е. там, где нет кода, который мог бы исполниться. Это победить невозможно, т.к. местонахождения таких файлов попросту нет в .pdb.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re: Добил навигацию.
От: PhantomIvan  
Дата: 15.11.06 16:35
Оценка:
БП>Теперь если нажать F12 на чём-нибудь, что живёт в сторонней сборочке, для которой доступен .pdb, то после некоторого количества танцев с бубном находятся все нужные исходные файлы, засовываются во временный проект, парсятся и переход осуществляется уже куда нужно.

а этот временный проект, он где находится?

БП>Осталось прикрутить генерацию псевдо-исходников из метаданных если ничего не нашлось. Как это делает студия для c#.


как насчет code definition window ?

БП>P.S. Требуются тестеры. Нужно пройтись по всем доступным проектам и найти места, где навигация не работает, а должна бы. Также приветствуется информация о местах, где она стреляется.


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

а с тестами — я тебе помогу (роботы ака юнит-тесты)

БП>P.P.S. Навигация во внешние сборки не работает на атрибутах (доделаю) а также интерфейсах, енумах и чисто абстрактных классах. Т.е. там, где нет кода, который мог бы исполниться. Это победить невозможно, т.к. местонахождения таких файлов попросту нет в .pdb.


я не силен в вопросах pdb-файлов, если я перехожу куда нибудь по этой схеме, сколько сырцов грузится и откуда?

так же с f12 фигня при переходе на локешон дефинишена — локешон кривой обычно
но ты с этим не парься, это я порешаю (т.к. мне аккуратный локейшен необходим)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Добил навигацию.
От: IT Россия linq2db.com
Дата: 15.11.06 17:05
Оценка: 1 (1)
Здравствуйте, PhantomIvan, Вы писали:

PI>а этот временный проект, он где находится?


Он же временный. Создаётся, используется и прибивается

БП>>P.S. Требуются тестеры. Нужно пройтись по всем доступным проектам и найти места, где навигация не работает, а должна бы. Также приветствуется информация о местах, где она стреляется.


PI>чтоб тестеры появились, нужно инсталлёр сделать


Что-то в каком-то виде есть в исходниках интеграции. Но что и в каком

PI>я не силен в вопросах pdb-файлов, если я перехожу куда нибудь по этой схеме, сколько сырцов грузится и откуда?


С pdb схема работы примерно следующая:

1. Определяется location объекта.
2. Если этот location является исполняемым модулем, то ищется файл с таким же именем в той же папке, но с расширением pdb.
3. Если искомый объект — метод, и в pdb файле обнаружено его место нахождение, то студии возвращается имя найденного исходного файла и координаты в нём.
4. Если искомый объект — класс (для объявления классов точных координат в pdb нет), то ищется любой из его методов для определения файл(ов) в котором определён класс. Файлов может быть несколько для partial classes.
5. Если файл имеет расширение '.n' (а если нет, то что делается?), то создаётся временный проект, найденный файл компилируется для определения места положения искомого класса.
6. Если из всего вышеперечисленного ничего не вышло, то исходный код класса будет сгенерирован как это сделано для C#.

В результате, мы убиваем сразу двух зайцев. Во-первых, не надо париться с переходом к исходникам в другом проекте солюшина, т.к. это при наличии pdb уже фактически сделано. Во-вторых, при наличии pdp файлов и исходников мы умеем открывать исходный код на том языке, на котором он написан.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Добил навигацию.
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.11.06 22:08
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>P.S. Требуются тестеры. Нужно пройтись по всем доступным проектам и найти места, где навигация не работает, а должна бы. Также приветствуется информация о местах, где она стреляется.


http://nemerle.org/svn/vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n
строка 70
по типу TExpr.MacroEnvelope и даже по TExpr переход не происходит. Так же не показываются хинты.

БП>P.P.S. Навигация во внешние сборки не работает на атрибутах (доделаю) а также интерфейсах, енумах и чисто абстрактных классах. Т.е. там, где нет кода, который мог бы исполниться. Это победить невозможно, т.к. местонахождения таких файлов попросту нет в .pdb.


Можно предлагать выбрать файл и если в нем есть нужный тип, переходить к нему.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Добил навигацию.
От: Блудов Павел Россия  
Дата: 16.11.06 01:40
Оценка:
Здравствуйте, IT, Вы писали:

IT>5. Если файл имеет расширение '.n' (а если нет, то что делается?), то создаётся временный проект, найденный файл компилируется для определения места положения искомого класса.

Хааароший вопрос. Дкмаю, нужно использовать CodeDom. Там вроде всё тоже самое, только в профиль.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[2]: Добил навигацию.
От: Блудов Павел Россия  
Дата: 16.11.06 01:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>http://nemerle.org/svn/vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/QuickTipInfo.n

VD>строка 70
VD>по типу TExpr.MacroEnvelope и даже по TExpr переход не происходит. Так же не показываются хинты.

Это конструктор. Параметры конктрукторов почему-то выпадают из Ast'а. Я пытался разобраться но не преуспел.
Ещё не работает вот такой вариант:
    m1(v : TestVariant2) : object
    {
    | AValue                       => v;
    | BValue                       => v;
    | CValue(sv) /*Почему-то если у pattern'ов есть параметры, то нет Location */ => sv;
    }


БП>>P.P.S. Навигация во внешние сборки не работает на атрибутах (доделаю) а также интерфейсах, енумах и чисто абстрактных классах. Т.е. там, где нет кода, который мог бы исполниться. Это победить невозможно, т.к. местонахождения таких файлов попросту нет в .pdb.


VD>Можно предлагать выбрать файл и если в нем есть нужный тип, переходить к нему.


А смысл? Если кода нет, то можно тупо нагенерить definition из метаданных. Всё равно это нужно реализовывать.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[3]: Добил навигацию.
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.11.06 03:53
Оценка: 36 (1)
Здравствуйте, Блудов Павел, Вы писали:

БП>Это конструктор. Параметры конктрукторов почему-то выпадают из Ast'а. Я пытался разобраться но не преуспел.

БП>Ещё не работает вот такой вариант:
БП>
БП>    m1(v : TestVariant2) : object
БП>    {
БП>    | AValue                       => v;
БП>    | BValue                       => v;
БП>    | CValue(sv) /*Почему-то если у pattern'ов есть параметры, то нет Location */ => sv;
БП>    }
БП>


Это все я пофиксил.

VD>>Можно предлагать выбрать файл и если в нем есть нужный тип, переходить к нему.


БП>А смысл? Если кода нет, то можно тупо нагенерить definition из метаданных. Всё равно это нужно реализовывать.


Это если кода нет. А если есть, то хотелось бы видить именно его, а не нагенеренный код. В общем, тут бы продумать чтобы было по гибче. Может сделать отдельный пункт меню при выборе которого код не генерируется, а всегда предлагается выбрать файл. А по другой пусть генерируется код.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Добил навигацию.
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.11.06 03:53
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

IT>>5. Если файл имеет расширение '.n' (а если нет, то что делается?), то создаётся временный проект, найденный файл компилируется для определения места положения искомого класса.

БП>Хааароший вопрос. Дкмаю, нужно использовать CodeDom. Там вроде всё тоже самое, только в профиль.

R# можно использовать. КодДом — это полная фигня.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Добил навигацию.
От: IT Россия linq2db.com
Дата: 16.11.06 04:39
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>R# можно использовать. КодДом — это полная фигня.


Хорошая идея. Только для начала желательно переписать R# на Nemerle.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Добил навигацию.
От: Блудов Павел Россия  
Дата: 16.11.06 05:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это все я пофиксил.

Тогда вот ещё issue:
Location у каждого параметра функции совпадает с Location его имени. А должна быть Name.Location + Type.Location. Таже история с CustomAttributes.
Мне это принципиально, потому как не работает вот такая конструкция:
if (asm.header.parms.Contains(line, col))

Вместо этого приходится явно перебирать все параметры и проверять у них .ty.Location

VD>Это если кода нет. А если есть, то хотелось бы видить именно его, а не нагенеренный код. В общем, тут бы продумать чтобы было по гибче. Может сделать отдельный пункт меню при выборе которого код не генерируется, а всегда предлагается выбрать файл. А по другой пусть генерируется код.

Я думал над таким вариантом: есть сборка и есть её исходники. Но сборка получена путём скачивания из интернета, а не сборки исходников вручную.
Это типичный случай для всяких библиотек типа DevExpress, Infragistix, BLToolkit и т.п.

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

Но делать это нужно один раз, а не всегда, когда пользователь жмёт F12.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[5]: Добил навигацию.
От: Блудов Павел Россия  
Дата: 16.11.06 05:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>R# можно использовать. КодДом — это полная фигня.

Одно другому не мешает. Прикрурить полную фигню это час делов. Потом можно будет переприкрутить на R#.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Мде
От: Блудов Павел Россия  
Дата: 16.11.06 07:04
Оценка:
БП>Одно другому не мешает. Прикрурить полную фигню это час делов. Потом можно будет переприкрутить на R#.
В полной фигне отсутствует понятие Location
Так что остаётся только R#.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[6]: Добил навигацию.
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.11.06 13:47
Оценка: +1
Здравствуйте, Блудов Павел, Вы писали:

БП>Одно другому не мешает. Прикрурить полную фигню это час делов. Потом можно будет переприкрутить на R#.


Это прикрутить R# можно за день. А КодДом вообще прикрутить нельзя просто потому, что парсера для него нет. У меня вообще создается впечаталение создается, что ты слабо представляешь то что такое КодДом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Добил навигацию.
От: IT Россия linq2db.com
Дата: 16.11.06 14:10
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Но делать это нужно один раз, а не всегда, когда пользователь жмёт F12.


Что-то подобное делается в отладчике.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Добил навигацию.
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.11.06 14:45
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Тогда вот ещё issue:

БП>Location у каждого параметра функции совпадает с Location его имени. А должна быть Name.Location + Type.Location. Таже история с CustomAttributes.

Ты лучше юнит-тесты добавляй, а я их буду работать заставлять.

БП>Мне это принципиально, потому как не работает вот такая конструкция:

БП>
if (asm.header.parms.Contains(line, col))

БП>Вместо этого приходится явно перебирать все параметры и проверять у них .ty.Location

Поправим. ДОбавляй юнит-тест.

БП>В этом случае исходники как бы есть, но поскольку лежат не там где должны быть согласно pdb (либо pdb вообще нет), то они не находятся.

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

БП>Но делать это нужно один раз, а не всегда, когда пользователь жмёт F12.


Тут логично было бы завести отедельную страницу настроек и действовать так...
Когда орел пытается перейти по некому идентификатору через определенный пункт меню, мы смотрим в настройки и если соотвествий не найдено, то запрашиваем у пользователя информацию (открываем некий диалог). Далее запоминаем эту информацию и позволяем изменить ее (потом) в странице настроек.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.