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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions