Так выглядит Goto для типа, который живёт в другой сборке если рядом есть .pdb. Поскольку в pdb-файлах хранится информация только о методах, то максимум что получается это вывалить список Locations для всех методов этого класса. Включая конструкторы, геттеры, индексеры и т.д.
В идеале можно распарсивать по-новой файлы, до которых добрались через pdb и находить настоящие объявления классов. Но лично мне хватает того, что пока получилось.
Здравствуйте, Блудов Павел, Вы писали:
БП>Поскольку в pdb-файлах хранится информация только о методах, то максимум что получается это вывалить список Locations для всех методов этого класса.
Это не хорошо.
БП>В идеале можно распарсивать по-новой файлы, до которых добрались через pdb и находить настоящие объявления классов. Но лично мне хватает того, что пока получилось.
Предлагаю все же пропускать этот файл через парсер и вытягивать таким образом список типов. Ну, а там уже пробегая по АСТ находить нужный тип (и вообще нужные элементы).
Темболее что это совсем не сложно. Надо создать лексер/парсер и скормить им файл.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>По крайней мере для этой задачи никакой проект не нужен. Тут нужно тупо распарсиь (без типизации) файл и найти в нем локешон класса (по имени).
Похоже, всё-таки нужен. Дело в том, что сейчас можно из Nemerle.Completion2\CodeModel\ExprFinder.n попасть в Nemerle\ncc\parsing\AST.n, если нажать F12 на типе Location.
Но открывшийся файл получается сам по себе. Он никак не раскрашен, сделать Goto из него тоже не получается. А хочется. Вот тут можно создать виртуальный проект или что-то навроде и добавлять в него файлики по мере надобности.
Здравствуйте, Блудов Павел, Вы писали:
БП>Но открывшийся файл получается сам по себе. Он никак не раскрашен, сделать Goto из него тоже не получается.
То что не получается сделать goto — это понятно. А то что он вообще не раскрашен — это проблемы реализации. Нет никаких причин препятсвующих минимальной раскраске таких файлов.
БП> А хочется. Вот тут можно создать виртуальный проект или что-то навроде и добавлять в него файлики по мере надобности.
Тут есть два момента:
1. Каждый проект отжирает ресурсы. И не факт, что конечный пльзователь захочит платить за лишний проект. Ведь он всегда может окрыть этот проект в среде явным образом.
2. Не ясно как получить полный список файлов такого проекта. Этот пункт наверно решаем, но с этим нуно разбираться.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>2. Не ясно как получить полный список файлов такого проекта. Этот пункт наверно решаем, но с этим нуно разбираться.
В общем виде никак не рашаем. Гарантировано можно получить только список файлов, в которых есть исполняемый код.
Если кода нет, а есть, например, только определение енума, то о пренадлежности такого файла к проекту можно лишь гадать.
С другой стороны, если кода нет, то всё что нужно можно нагенерить из метаданных. Кроме комментариев, разумеется.
Здравствуйте, Блудов Павел, Вы писали:
БП>С другой стороны, если кода нет, то всё что нужно можно нагенерить из метаданных. Кроме комментариев, разумеется.
Ну, да. Остается только Рефлектор подключить и будет все ОК.
У нас не слишком наполеоновские планы?
Откровенно говоря то что работает переход по pdb уже офигительно круто! В C#-проектах этого очень нехватало.
Мне кажется сначало нужно решить более насущьные проблемы. Так сделать минимальную подсветку синтаксиса для файлов не из проекта. И сделать распознование класса чтобы переход более разумно выглядел (все же когда сейчас смотришь на тонны методов в то время как пытался перейти на описание типа, то входишь в ступор).
Ну, а fake-проекты будет создавать уже как-нить потом.
Сейчас самое важное довести проект до работоспособности. Так чтобы на нем уже можно было развивать самого себя и писать другие проекты.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
+1 ко всему сказаному. Мне, например, очень хочется довести проект до того состояния, когда можно будет сделать хотя бы бету, пересесть на неё и дальше уже писать на ней.
Здравствуйте, Блудов Павел, Вы писали:
БП>+1 ко всему сказаному. Мне, например, очень хочется довести проект до того состояния, когда можно будет сделать хотя бы бету, пересесть на неё и дальше уже писать на ней.
О том и речь. И в принципе осталось не так уж много.
Потому и не охота сейчас ввязываться в объемистые переделки или расширения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
БП>>+1 ко всему сказаному. Мне, например, очень хочется довести проект до того состояния, когда можно будет сделать хотя бы бету, пересесть на неё и дальше уже писать на ней.
а я бы на вашем месте уже пересел бы
по крайней мере я сижу уже, и наблюдаю некоторый комфорт
что мешает собственно?
Здравствуйте, PhantomIvan, Вы писали:
PI>что мешает собственно?
Кое-что поглюкивает. В основном компилятор, который используется немного не по назначению.
Здравствуйте, Блудов Павел, Вы писали:
БП>Кое-что поглюкивает. В основном компилятор, который используется немного не по назначению.
Компилятор работает по назначению. Все что в нем не так или недостает нужно просто деделать.
Так что не стесняйтесь. Говорите что нехватает. Прикрутим.
ЗЫ
Кстати, все же при переходе на типы точно надо парсить исходник. Я уже малось задолбался высматривать тип по списку его членов (он ведь иногда не маленький).
Надо бы сделать так...
1. По членам классов определять список файлов в которых расположен тип.
2. Парсить эти файлы и по АСТ находить в нем фхождения нужного типа.
3. Выводить на экран список этих файлов или сразу переходить к началу типа если он находитс в одном файле.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Надо бы сделать так... VD>1. По членам классов определять список файлов в которых расположен тип. VD>2. Парсить эти файлы и по АСТ находить в нем фхождения нужного типа. VD>3. Выводить на экран список этих файлов или сразу переходить к началу типа если он находитс в одном файле.
Именно этим я и занимаюсь. Более того, без этого нельзя, например, перейти к публичному полю.
Опять-таки хочется чтобы курсор вставал на имя свойства, а не на его геттера/сеттера. Это тоже только распарсиванием.
Вобщем позараз нужно.
Здравствуйте, Блудов Павел, Вы писали:
БП>Опять-таки хочется чтобы курсор вставал на имя свойства, а не на его геттера/сеттера. Это тоже только распарсиванием.
Эта проблема вызвана кривотой локешонов в свойствах. В принципе я думал заняться ими когда разгребу другие проблемы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.