Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 📌 Fixed sample code in Minimum SFC. #280

Merged

Commits on May 2, 2024

  1. fix: 📌 Fixed sample code in Minimum SFC.

    In the step for adding `option` to `generate`, it seemed necessary to add `option` to the arguments of `genNode` and `genElement` as well.
    
    https://github.com/Ubugeeei/chibivue/blob/v0.0.8/book/impls/10_minimum_example/070_sfc_compiler3/packages/compiler-core/codegen.ts
    
    Therefore, `genNode` and `genElement` with added arguments were also added to the sample code.
    
    > 一時的な対応なのであまり厳格ではないのですが、概ね動作するようになると思います。
    >
    > ```ts
    > export const generate = (
    >   {
    >     children,
    >   }: {
    >     children: TemplateChildNode[]
    >   },
    >   option: Required<CompilerOptions>,
    > ): string => {
    >   // isBrowser が false の場合は with 文を含まないコードを生成する
    >   return `${option.isBrowser ? 'return ' : ''}function render(_ctx) {
    >     ${option.isBrowser ? 'with (_ctx) {' : ''}
    >       const { h } = ChibiVue;
    >       return ${genNode(children[0], option)};
    >     ${option.isBrowser ? '}' : ''}
    > }`
    > }
    >
    > // .
    > // .
    > // .
    >
    > const genProp = (
    >   prop: AttributeNode | DirectiveNode,
    >   option: Required<CompilerOptions>,
    > ): string => {
    >   switch (prop.type) {
    >     case NodeTypes.ATTRIBUTE:
    >       return `${prop.name}: "${prop.value?.content}"`
    >     case NodeTypes.DIRECTIVE: {
    >       switch (prop.name) {
    >         case 'on':
    >           return `${toHandlerKey(prop.arg)}: ${
    >             option.isBrowser ? '' : '_ctx.' // -------------------- ここ
    >           }${prop.exp}`
    >         default:
    >           // TODO: other directives
    >           throw new Error(`unexpected directive name. got "${prop.name}"`)
    >       }
    >     }
    >     default:
    >       throw new Error(`unexpected prop type.`)
    >   }
    > }
    >
    > // .
    > // .
    > // .
    >
    > const genInterpolation = (
    >   node: InterpolationNode,
    >   option: Required<CompilerOptions>,
    > ): string => {
    >   return `${option.isBrowser ? '' : '_ctx.'}${node.content}` // ------------ ここ
    > }
    > ```
    >
    > https://ubugeeei.github.io/chibivue/10-minimum-example/090-minimum-sfc.html#template-%E9%83%A8%E5%88%86%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%8F%E3%82%9A%E3%82%A4%E3%83%AB
    madogiwa0124 committed May 2, 2024
    Configuration menu
    Copy the full SHA
    16b02ff View commit details
    Browse the repository at this point in the history