Одной из мелких, но приятных "плюшек" редактора кода Delphi 11.2 Alexandria является цветовое выделения части исходного кода программы, который не будет скомпилирован из-за директив условной компиляции ($IFDEF, $IFNDEF, $IF, $ELSEIF, $IF Defined...). Конструкции из этих директив могут иметь сложную логику и вложенность до 32 уровней. Я таких комбинаций не видел, но иногда бывает трудно визуально понять, какой фрагмент кода будет сейчас компилироваться, а какой нет.
Самый простой и доступный пример – это кроссплатформенный код. Он может содержать множество блоков кода, которые компилируется только для определенной платформы. Создадим новый проект на Delphi 11.2 и откроем какой-нибудь готовый модуль. Например, System.IOUtils. В данный момент активен проект под Windows и текст функции TPath.GetCachePath, который между директивами {$IFDEF POSIX}...{$ENDIF POSIX} выделяется своим серым цветом. Как только мы делаем активным проект под Android, цвета в редакторе сразу меняются, и мы видим, что теперь ярко выделяются строки между директивами {$IFDEF ANDROID}...{$ENDIF ANDROID}: Теперь активируем Linux: Наглядно? Да! Мне кажется, что эта новая возможность DelphiLSP придется по вкусу не только мне.
Самый простой и доступный пример – это кроссплатформенный код. Он может содержать множество блоков кода, которые компилируется только для определенной платформы. Создадим новый проект на Delphi 11.2 и откроем какой-нибудь готовый модуль. Например, System.IOUtils. В данный момент активен проект под Windows и текст функции TPath.GetCachePath, который между директивами {$IFDEF POSIX}...{$ENDIF POSIX} выделяется своим серым цветом. Как только мы делаем активным проект под Android, цвета в редакторе сразу меняются, и мы видим, что теперь ярко выделяются строки между директивами {$IFDEF ANDROID}...{$ENDIF ANDROID}: Теперь активируем Linux: Наглядно? Да! Мне кажется, что эта новая возможность DelphiLSP придется по вкусу не только мне.
Хорошая плюшка, но глючит :(
ОтветитьУдалитьВ моем проекте (больше 1 млн строк) вообще нигде не становится темнее, ни в моих юнитах, ни в делфовых.
Может кто-то знает где галочку поставить? :)
А в новом проекте есть плюшка, но и на System.IOUtils глючит (строка 301, проект для MSWINDOWS):
class function DoIsPathRooted(const Path: string; --- норм
const ValidateParam, UseWildcards: Boolean): Boolean; static; --- норм
class function DoMatchesPattern(const FileName, Pattern: string): Boolean; inline; static; --- темнее, но не должно
{$IFDEF MACOS} --- темнее
class function InternalGetMACOSPath(const SearchedPath: NSSearchPathDirectory; const SearchMask: NSSearchPathDomainMask): string; static; --- темнее
{$ENDIF MACOS} --- темнее
Еще сделали красивую подсветку синтаксиса в asm, но в x32 варианте отломали названия функций, остался только адрес:
ОтветитьУдалитьs:=an;
00B09ED3 B82C69B100 mov eax,$00b1692c
00B09ED8 8B152869B100 mov edx,[$00b16928]
00B09EDE E88D1AF2FF call $00a2b970
А при компиляции x64 нормально (UStrFromLStr):
s:=an;
0000000000BC055B 488D0D8EA20300 lea rcx,[rel $0003a28e]
0000000000BC0562 488B157FA20300 mov rdx,[rel $0003a27f]
0000000000BC0569 E8C214ECFF call @UStrFromLStr
Может кто-то знает, как сделать нормально в x32?
(Возможно так работает уже давно, не проверял :)