Отключить response-jsx для каждого файла в проекте ReasonReact
Есть ли способ отключить преобразование res ponse-jsx в некоторых файлах проекта ReasonReact?
Думаю, можно и наоборот, не добавляя "reason": { "react-jsx": 3 }
к bsconfig.json
и добавив @@bs.config({jsx: 3})
в начало файлов, в которых вы хотите преобразовать res ponse-jsx, но это заставило бы меня добавить эту аннотацию в слишком много файлов.
Я хотел бы создать небольшой DSL на основе JSX в нескольких файлах, а в остальной части моего проекта использовать React.
1 ответ
Примечание: предлагаемое решение не очень прямолинейно, и я думаю, что его намного проще добавить @@bs.config
аннотации явно во всех необходимых файлах, но если вы действительно не хотите этого делать, может сработать следующее.
Если я правильно читаю код компилятора, пользовательские ppx применяются до ReasonReact ppx. В связанном модуле компилятораCmd_ppx_apply.apply_rewriters
будет применяться со всеми аргументами, переданными с -ppx
флаг и Ppx_entry.rewrite_implementation
ReasonReact ppx.
Предполагая, что это правда, можно иметь ppx, который проверяет оператор верхнего уровня, например @@custom.jsx
в верхней части файла, который будет проверять ppx. Раньше ReasonReact ppx выполнял аналогичную проверку, если он служит ссылкой.
Затем, если этот оператор будет найден, пользовательский ppx обработает узлы, которые имеют @JSX
атрибуты и убедитесь, что он удаляет из них атрибуты, поэтому, когда компилятор передает AST в ReasonReact ppx, он их не видит.
Обратите внимание, что это сломается, если конвейер ReScript ppx однажды будет обновлен до основанного на драйвере (вряд ли я бы сказал, потому что это означало бы, что ReScript должен каким-то образом поддерживать собственные библиотеки как граждане 1-го класса) или если порядок, упомянутый выше, изменится (ReasonReact ppx применяется перед пользовательскими).