Re[2]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 08.06.10 22:26
Оценка:
Здравствуйте, _nn_, Вы писали:

__>
__>def q = <#
__>my string
__>#>;
__>def p = linq <# from i in a select i #>;
__>def u = "string"; 
__>


__>Все три строки подсвечиваются одинаково.


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

То есть подсветка $-подвыражений внутри $-строк и linq внутри linq-строк будет реализована уже в "следующей версии", когда будут анализироваться PExpr-ы.

Хотя именно для $-строк и linq-строк наверное стоит добавить отдельную поддержку, потому что они часто используются в маленьких сниппетах, где using-и не прописуются.
Re[3]: Браузер кода Nemerle: подсветка работает
От: Ziaw Россия  
Дата: 09.06.10 04:20
Оценка:
Здравствуйте, catbert, Вы писали:

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


__>>Вначале текст выглядит четко, а к концу очень бледно.


C>Бледно выглядит код, помещенный в квазицитату. В вашем примере несбалансированная скобка помещает в квазицитату весь код дальше её самой.


Она закрывается после foreach, или я что-то проглядел?
Re[3]: Браузер кода Nemerle: подсветка работает
От: _nn_ www.nemerleweb.com
Дата: 09.06.10 05:04
Оценка:
Здравствуйте, catbert, Вы писали:

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


__>>Вначале текст выглядит четко, а к концу очень бледно.


C>Бледно выглядит код, помещенный в квазицитату. В вашем примере несбалансированная скобка помещает в квазицитату весь код дальше её самой.


Поместите весь файл core.n , на каком-то моменте вы увидите , что текст бледнеет.

C>Собственно, "бледность" — один из вариантов Внешний вид кода задается CSS.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 09.06.10 06:29
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Поместите весь файл core.n , на каком-то моменте вы увидите , что текст бледнеет.


Долго втыкал на подсветку, так и не смог найти места, где она неправильная. Не исключено, что проблема связана с этой — http://rsdn.ru/forum/nemerle/3835775.1.aspx
Автор: VladD2
Дата: 07.06.10
— которую я уже пофиксил.
Re[4]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 09.06.10 06:32
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Она закрывается после foreach, или я что-то проглядел?


Да, так и есть, мне раньше казалось, что там скобки несбалансированы.
В любом случае, сейчас все подсвечивается правильно.
Re[5]: Браузер кода Nemerle: подсветка работает
От: _nn_ www.nemerleweb.com
Дата: 09.06.10 06:56
Оценка:
Здравствуйте, catbert, Вы писали:

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


__>>Поместите весь файл core.n , на каком-то моменте вы увидите , что текст бледнеет.


C>Долго втыкал на подсветку, так и не смог найти места, где она неправильная. Не исключено, что проблема связана с этой — http://rsdn.ru/forum/nemerle/3835775.1.aspx
Автор: VladD2
Дата: 07.06.10
— которую я уже пофиксил.


Нашлась причина.
Баш у FF 3.6.4RC

Так что все хорошо
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[13]: Браузер кода Nemerle: подсветка работает
От: Воронков Василий Россия  
Дата: 09.06.10 11:12
Оценка:
ViewState у текст-бокса можно отключить, он там не нужен. Просто явно записывай текст туда, а можно даже не показывать исходный текст пока в целях экономии траффика. А в идеале бы тут прикрутить сжатие и с сервером общаться через аякс, чтобы он возвращал только собственно сгенерированный код.
Re[12]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 19:03
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Такое можно только специально написать На строку в 200 килобайт (хотя там генерится максимум 100) 40 тыс. перевыделений — это несколько крутовато.


Такое элементарно получается когда некоторые не очень опытные товарищи начинают формировать строки из мелких фрагментов.

ВВ>Короче, в порядке борьбы за истину, запустил я хттп дебуггер — тот показывает, что практически все время ожидания идет ответ, т.е. "байты капают". А тут два варианта — или там ручками делается флаш или таки канал.


Ну, тады ой. Надо переносить на более шустрй хостинг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 22:06
Оценка:
Здравствуйте, catbert, Вы писали:

C>То есть подсветка $-подвыражений внутри $-строк и linq внутри linq-строк будет реализована уже в "следующей версии", когда будут анализироваться PExpr-ы.


Ага. И вообще типы нужно подсвечивать только на основании информации из TExpr-шенов.

C>Хотя именно для $-строк и linq-строк наверное стоит добавить отдельную поддержку, потому что они часто используются в маленьких сниппетах, где using-и не прописуются.


Не стоит. Лексер интеграции изгаляется по этому поводу, потому что анализировать TExpr дороговато для реалтайма. У тебя проблемы времени нет, так что ты можешь подкрасить код "честно".

Так что спеуиальных решений делать не надо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 22:11
Оценка: +1
Здравствуйте, catbert, Вы писали:

C>Бледно выглядит код, помещенный в квазицитату. В вашем примере несбалансированная скобка помещает в квазицитату весь код дальше её самой.


А нельзя подсвечивать квази-цитаты так же как в интеграции, добавление серого фона?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.06.10 22:12
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Нашлась причина.

__>Баш у FF 3.6.4RC

А это что, если не секрет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Браузер кода Nemerle: подсветка работает
От: _nn_ www.nemerleweb.com
Дата: 10.06.10 07:30
Оценка:
Здравствуйте, VladD2, Вы писали:

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


__>>Нашлась причина.

__>>Баш у FF 3.6.4RC

VD>А это что, если не секрет?


Тут http://www.mozilla.com/en-US/firefox/all-beta.html
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[14]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 10.06.10 13:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>ViewState у текст-бокса можно отключить, он там не нужен. Просто явно записывай текст туда, а можно даже не показывать исходный текст пока в целях экономии траффика. А в идеале бы тут прикрутить сжатие и с сервером общаться через аякс, чтобы он возвращал только собственно сгенерированный код.


Ну, это же демка, оптимизировать её нету смысла.
Re[13]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 10.06.10 13:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Такое элементарно получается когда некоторые не очень опытные товарищи начинают формировать строки из мелких фрагментов.


HTML формируется StringBuilder’ом.

VD>Ну, тады ой. Надо переносить на более шустрй хостинг.


Nemerle.Compiler использует рефлексию, так что еще не всякий хостинг подойдет. Нужен Full Trust.
Re[4]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 10.06.10 13:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. И вообще типы нужно подсвечивать только на основании информации из TExpr-шенов.


Это так, но надо ещё учитывать, что не всегда дело доходит до TExpr-ов, ведь подсвечиваемый код необязательно должен вообще компилироваться без ошибок.
Кроме того, я боюсь, что в некоторых TExpr'ах может быть напутано с локейшнами (в том же $""-макросе), в результате собьется подсветка.

Имея "карту" пространств имен и типов, можно все идентификаторы правильно подсвечивать на основе PExpr где-то на 90%. Но для некоторых фич (например тултип для переменных) анализ TExpr-ов все равно обязателен.

VD>Не стоит. Лексер интеграции изгаляется по этому поводу, потому что анализировать TExpr дороговато для реалтайма. У тебя проблемы времени нет, так что ты можешь подкрасить код "честно".


VD>Так что спеуиальных решений делать не надо.


Есть проблема контекста. Если подсвечивается целый файл в контексте проекта, тогда можно (и следует) пользоватся TExpr-ами. Если подсвечивается сниппет:

static Main() : void
    WriteLine($"Hello, $username")

то тут необходимо догадываться и про $-строки, и про питоновский синтаксис.
Re[5]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:01
Оценка:
Здравствуйте, catbert, Вы писали:

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


Это критично для IDE, но не для подсветки закомиченых исходниках. В них наличие ошибок компиляции — это не штатная ситуация. К тому же компилятор немерла пытается до последнего типизироват даже код с ошибками, так что что-то да будет.

C>Кроме того, я боюсь, что в некоторых TExpr'ах может быть напутано с локейшнами (в том же $""-макросе), в результате собьется подсветка.


Такого тоже быть не должно. Иначе не будет работать хинты и комплит. Так что это тоже ошибка. Можешь закладываться на то, что все должно быть ОК даже в случае с кодом сгенерированным макросами.

C>Имея "карту" пространств имен и типов, можно все идентификаторы правильно подсвечивать на основе PExpr где-то на 90%.


Нельзя. Потом "правильно на 90%" — это означает не правильно.

Компилятор делает множество хитрых вычислений (вывод типов, разрешение перегрузки и т.п.) все они влияют на типы объектов. Чтобы вычислить правильную информацию, тебе придется повторить код компилятора, что сложно и бессмысленно.

C>Но для некоторых фич (например тултип для переменных) анализ TExpr-ов все равно обязателен.


Вот именно! Кроме того еще нужна навигация (гиперссылки как в Рефлекторе). Их тоже нельзя без типизации не выявить. А раз информация о типах все равно используется, то почему бы ее не использовать и для подсветки?

Короче, твой код должен выглядеть примерно так:
def currentPExpr = ...;
match (currentPExpr.TypedObject)
{
  | TExpr.Xxx => анализиурем информацию о типах для получения подсветки, ссылок и подсказок.
  ...
}



C>Есть проблема контекста. Если подсвечивается целый файл в контексте проекта, тогда можно (и следует) пользоватся TExpr-ами. Если подсвечивается сниппет:


C>
C>static Main() : void
C>    WriteLine($"Hello, $username")
C>

C>то тут необходимо догадываться и про $-строки, и про питоновский синтаксис.

Для подсветки уксков вода ничего умного не придумаешь. Тут достаточно просто подсветить их с помощью набора ключевых слов.

Более того это уже сделано минимум два раза. Разве что строки рекурсивные не подсвечиваются как следует. Но это можно пережить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 10.06.10 14:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Универсально можно сделать все. Только есть две проблемы:

VD>1. Чем универсальнее делаешь, тем больше работы.
VD>2. Чем универсальнее, тем менее функционально.

VD>В АСТ немерла есть вся нужная информация. А вот как ты сделаешь тоже самое универсально, я представить себе не могу.


Ну, цель у нас конкретная:

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


Вот эта информация и нужна. По сути, описанный плагин можно представить как функцию: TExpr -> ProjectInfo, где ProjectInfo — структура данных, в которой собрана нужная информация. Универсальность лишь в том, чтобы сделать ProjectInfo не специфичным для Немерле.
Re[15]: Браузер кода Nemerle: подсветка работает
От: Воронков Василий Россия  
Дата: 10.06.10 14:06
Оценка: +1
Здравствуйте, catbert, Вы писали:

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


Как сказать. Если добавить кнопочку "Скопировать HTML" для сгенерированного кода, то и в таком виде весьма полезно. Например, если надо в какой-нибудь блог вставить раскрашенный код на Немерле.
Re[4]: Браузер кода Nemerle: подсветка работает
От: catbert  
Дата: 10.06.10 14:14
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>А нельзя подсвечивать квази-цитаты так же как в интеграции, добавление серого фона?


Уже. Одной строчкой в CSS. Я экспериментировал с прозрачностью, чтобы было видно цитаты в цитатах.
Re[10]: Браузер кода Nemerle: подсветка работает
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.06.10 14:16
Оценка:
Здравствуйте, catbert, Вы писали:

C>Вот эта информация и нужна. По сути, описанный плагин можно представить как функцию: TExpr -> ProjectInfo, где ProjectInfo — структура данных, в которой собрана нужная информация. Универсальность лишь в том, чтобы сделать ProjectInfo не специфичным для Немерле.


1. Лучше все же анализировать PExpr. В нем есть свойство TypedObject в которое после типизации записывается ссылка на соответствующий TExpr (или другой объект описывающий типы).

2. Кроме PExpr и TExpr еще нужно анализировать и дерево типов.

3. TExpr и есть необходимая тебе информация.

Я бы описал процесс генерации "активной подсветки" (назовем это так) следующим образом.

1. Прогоняем процесс компиляции до стадии на которой начинается типизация тел методв. Запоминаем ссылки на PExpr-оны этих методов.
2. Выполняем типизацию тел методов. После этого у свойствах TypedObject у PExpr-ешонов будут содержаться объекты описывающие типы.
3. Проходим по нетипизированному АСТ и генерируем текст со ссылками и т.п.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.