Форум программистов, компьютерный форум, киберфорум
Skjame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
После безуспешных поисков соратников, я всё равно решил продолжить доработку некоторых opensource проектов.
В данный момент доработка ведется только над mc (Midnight commander)
Планируется добавить в его едитор функционал свойственный некоторым ide, а именно:
- добавить в completer проверку области видимости. работать это будет только для файлов C и C++
- добавить в completer поиск по подключенным хедерам. Это можно развивать до бесконечности, но для начала я это буду
делать для си, си++, питона и shell
- улучшить работу с etags. В настоящий момент я использую universal-ctags. Но часто непонятно это дефинишн или использование, так что тут буду что-нибудь придумывать, чтобы стало понятно))
- переход на таг должен не текущий открывать новый файл, и регистрировать его в списке открытых, а не просто делать
текущим
- сделать более удобным работу с несколькими одновременно открытыми файлами. mcedit умеет работать, и если настроить
горячие клавиши, это не так уж безобразно, но навигацию хочется улучшить 100%.

В самом mc мне нравиться практически всё, кроме того что командная строка (которая внизу) и шелл (который появляется после скрытия панелей) имеют разную историю. Хотелось бы, чтобы это была одна сессия.

Так же возможно я буду тут постить полезные (ИМХО) bash-скрипты и т.п.

Изыскания с автокомплитером и код-навигатором

Запись от Skjame размещена 15.09.2017 в 17:37
Показов 2535 Комментарии 0

Ух, даже не знаю с чего начать. Пожалуй, нужно было писать сюда почаще, потому что работы проделано очень много, и сейчас трудно уже вспомнить всё...С другой стороны, не хотелось писать, когда нет особых результатов и успехов.

Сейчас я уже дошёл до того момента, когда начисто забыл то чем занимался месяц назад, и чтобы избежать этого в будущем - опишу ситуацию.

Последнее время вся моя работа с MC была не сколько в его коде, сколько в исследованиях и пробах пера в написании библиотеки/тулзы для быстрого и умного code-completer'a и code-navigator'a. Как многие понимают - это не простая задача, даже если ограничиться С/C++. И идея отказаться от самописного г**на пришла довольно быстро. Но вот найти какую-то библиотеку или выдрать её откуда-нибудь не так-то просто оказалось.

Я довольно успешно смог выдрать из qtcreator'a плугин CPlusPlus, и даже заставить его работать, но тащить в MC qt-шный код не очень хотелось. Возможно, я ещё передумаю, и он там появиться. Но сейчас, это явно лишнее. Так что, не смотря на успех - вычёркиваем.

Сам MC использует файл TAGS, который генерируется программами ctags или etags, но как я писал в шапке блога, да и те кто читают явно знают, что работает он плохо, но зато поиски в гугле с запросом "ctags analogue token parser" вывел меня на следующий проект (эх, юзал бы я vim или emacs давно бы его знал) rtags github.

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

Как же мне это понравилось. Clang-model для кода используется и в qtcreator'e, ну наконец нашёл возможность не писать код, и получить рабочий механизм... но все мы знаешь что так просто не бывает...

Я не буду описывать то количество финтов ушами, которое мне пришлось совершить, чтобы банально собрать rtags (дело в том что на компе уже были необходимые библиотеки и программы, но не тех версий...). Но вот для запуска индексации, нужен не просто путь к папке, а специальный файл compile_commands.json, который вроде как легко получается cmake'ом... А что делать если проект не cmake... Ладно, ставим bear заходим в каталог самого mc, делаем bear make. Он собирает mc, и заодно создаёт файл, мы его скармливаем rtags и готово, всё работает, из консоли запускаем rc -F <имя символа> и он выдаёт в stdout всё что нужно. Круто!!

СТОП!

А если у меня нет мэйкфайла...Что если я просто набросал ещё пару тройку классов, и там ещё нечего собирать, у меня не будет навигации в коде...блин... столько трудов и всё коту под...

И тут я осознал ещё одну вещь, зачем нам bear make и т.п. тулзы, когда файлик compile_commands.json элементарно просто выглядит, всё что нужно, это добавить возможность его создания. А для этого хорошо бы иметь файл описывающий наш проект (mcedit.project.file). Это будет и удобнее для настройки проекта в целом (флаги компилятора и т.п.) и решит проблему с созданием этого самого файла.

В качестве формата было решено использовать нечто подобное qt.pro файлов.

------

Итог записи: для навигации и автокомплишена решено использовать rtags. Необходимо создать меню настройки проекта и проработать его формат. Сменилось направление задач, но цель осталась прежней)

------
P.S. в дальнейшем буду писать короткие отчёты с более подробной инфой, чтобы не забывать, да и полезным может оказаться для кого-нибудь, чтобы не так много как мне пришлось прыгать с бубном.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru