Typescript Compiler - Реализация собственного преобразователя - PullRequest
0 голосов
/ 01 мая 2018

Я много читал о github-проблемах Typescript, касающихся реализации, но в этой области мало документации или людей, работающих в этой области.

Моя цель состоит в том, чтобы в основном машинопись понимала это ..

[1,2,3,4,5].filter(_ % 2).map(_ + 2)
[{name: "test"}, {name: "test2"}].map(_.name).map(_.toUpperCase())

совпадает с ...

[1,2,3,4,5].filter((x) => x % 2).map((x) => x + 2)
[{name: "test"}, {name: "test2"}].map((x) => x.name).map((x) => x.toUpperCase())

Я либо хочу определить макрос SweetJS для преобразования всех подчеркиваний в (x) => x во время компиляции, либо (желательно), чтобы машинописный текст применил это преобразование для меня, поскольку SweetJS довольно хакерская.

(Для справки https://github.com/sweet-js/sweet-core)

Как бы я реализовал что-то, что позволяет машинописному тексту как минимум понимать синтаксис подчеркивания в правильном контексте \ И \, если это возможно, преобразовывать подчеркивания во время компиляции.

РЕДАКТИРОВАТЬ3: (Edit3 здесь для удобочитаемости) это, как далеко я ушел с проблемой, я решил не менять компилятор, чтобы думать, что это другой тип, но вместо этого делать это ...

declare const _: (<T>(arg: T) => T) & { [key: string]: () => any }
const test = [{name: "Shanon", age: 24}].filter(_.age);

какая машинопись сейчас устраивает, но она небезопасна, поэтому любая помощь будет признательна.

РЕДАКТИРОВАТЬ: С моими минимальными навыками компиляции, я думаю, что мне нужно набирать текст, чтобы понять, что когда я нахожусь в контексте подчеркивания "CallExpression", имеет очень уникальное значение (CallExpression в AST).

РЕДАКТИРОВАТЬ2: enter image description here это определение AST, которое мне нужно вывести (что-то вроде этого), важно отметить, я не хочу, чтобы подчеркивание преобразовывалось до того, как оно будет проверено на наличие типов, но я хочу проконтролировать, как подчеркивание проверяется на тип. Он должен обрабатывать только подчеркивание как этот тип внутри типа AST CallExpression

...