Здравствуйте, STDray, Вы писали:
STD>Я делал что-то вроде...
STD>STD> token INDENT = '\uE001';
STD> token BADDENT = '\uE003';
STD> token DEDENT = BADDENT? '\uE002';
STD>
STD>То есть была какая-то идея, чтобы
STD>- использовать символы из приватного диапазона юникода для расстановки виртуальных скобок.
Примерно о таком подходе я и говорил, когда говорил об автоматическом решении. Его проблема — невозможность написания универсального решения для имеющихся языков. Деталей уже не помню, но в том же Питоне есть особенности требующие специализированного препроцессора.
То что ты предлагаешь сделать можно. Хотя и не так просто, так как токенов, как таковых, у нас нет. Мы парсим непосредственно текст.
STD>- использовать конструктор SourceSnapshot this(originalText : string, text : string, fileIndex : int, fileName : string, lineIndexes : array[int], textOffset : int); для корректного позиционирования ошибок после расстановки виртуальных скобок.
Ну, да. У нас там уже базовая инфраструктура для ремапинга есть. Так что в теории это возможно.
STD>Но потом я от этой идеи отказался, потому что непонятно, как дружить все это дело со студийной интеграцией. Да и то, что надо в двух местах указывать символы для виртуальных скобок мне не понравилось. Так что я считаю, пусть какое-то простенькое решение, но должно быть в коробке.
SourceSnapshot должен осуществлять все пересчеты. Он должен храрить две строки. Одну препроцессированную, а другую исходную. Перед выдачей информации пользователю позиции должны пересчитывается по таблице пересчета. Хардекс использовал эту штуку для подержи препроцессора в парсере Шарпа еще на ПЕГ-е.
Я давно не занимался проблемой, но вроде бы были какие-то грабли в разных языках. Так что там нельзя вот так универсально расставить виртуальные скобки.
Можно сделать половинчатое решение. Препроцессор пишется вручную, но использует механизм пересчета (relocation) встроенный в SourceSnapshot (его доведем до нужного уровня).
Вставлять, кстати, можно обычные скобки, а не какие-то страшные символы. Но можно и страшные, если язык не позволяет.
Собственно, если есть желание, можешь сам это дело реализовать. Мы же теперь опен-сорс.
Мы поможем разобраться в деталях. Допилим что надо...