Skip to content

Fail nicely on unhandled states #19

@chancancode

Description

@chancancode

This is some pretty low-priority stuff.

Currently, if you pass the following to htmlbars demo:

<!doctype html>
<html>
  <head></head>
  <body></body>
</html>

You will get an empty document fragment back:

(function() {
  return {
    isHTMLBars: true,
    revision: "HTMLBars@VERSION_STRING_PLACEHOLDER",
    arity: 0,
    cachedFragment: null,
    hasRendered: false,
    buildFragment: function buildFragment(dom) {
      var el0 = dom.createDocumentFragment();
      return el0;
    },
    buildRenderNodes: function buildRenderNodes() { return []; },
    statements: [

    ],
    locals: [],
    templates: []
  };
}())

It would be nice to have this fail nicely, instead of silently ignoring the entire template because it starts with an unhandled state (the doctype).

(Related, CDATA fails in a similar way. If you have <script><![CDATA[ ..., I think it ignores the rest of the rest of the input and complains about the <script> tag is not closed.)

It would be nice to fail more gracefully and more precisely on these "error" states.

By default, I think you would expect that to throw an error somewhere in the pipeline (e.g. "Unsupported content: <!doctype>"). I'm just not sure where that should be handled.

On one hand, considering the position/goal of the simple-html-tokenizer project, it seems reasonable to consider this a parse error and throw the error as it encounters these states. On the other hand, if it's not that much more work, it seems useful to retain these in the tokenizer AST (either HTML5Tokenizer.Doctype/HTML5Tokenizer.StartCData or just a generic HTML5Tokenizer.UnsupportedState("doctype", ...)). This allow the downstream libraries to handle these "errors" and opens up the possibility for a wider range of use cases.

In terms of the htmlbars use case, the out-of-the-box experience would be the same – you'll still get an error, but it pushes the "error" checking out of the tokenizer (in htmlbars itself, probably). In theory, it could probably be done in a way that allows htmlbars plugins to extract/handle these cases (e.g. better report the errors to user, or to transparently correct/ignore them, or ...).

cc @mmun

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