Skip to content

Сбор символов для создания компонента #2

@sergeche

Description

@sergeche

Файл src/compiler/EndorphinContext.ts, см. TODO на строке 25

Чтобы создать компонент и какие-то особые внутренние примитивы используются специальные символы из модуля endorphin:

import { defineComponent, html } from 'endorphin';

export default defineComponent(() => {
    return html`<div>...</div>`;
});

Однако учитывая, что мы пишем в JS, пользователь может написать вот так:

import { defineComponent def, html as h } from 'endorphin';

export default def(() => {
    return h`<div>...</div>`;
});

То есть он может переименовать специальные символы (defineComponent, html) в свои (def, h) и использовать для описания компонент.

Класс EndorphinContext как раз отвечает за то, чтобы проверить, что какой-то узел AST является специальным, требующим особой обработки. Но он сейчас понимает только стандартные названия символов. Нужно научить его собирать реальные символы, которые используются в указанном AST модуля. Как минимум нужно это сделать для импортов. Максимум — понимать вот такие записи в том числе (лучше отдельным PR):

import { defineComponent, html } from 'endorphin';

const def = defineComponent;

export default def(() => {
    return html`<div>...</div>`;
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions