function completeAttributeNameBefore(code) {
    if (code === codes.slash) {
      effects.consume(code)
      return completeEnd
    }

    // ASCII alphanumerical and `:` and `_`.
    if (code === codes.colon || code === codes.underscore || asciiAlpha(code)) {
      effects.consume(code)
      return completeAttributeName
    }

    if (markdownSpace(code)) {
      effects.consume(code)
      return completeAttributeNameBefore
    }

    return completeEnd(code)
  }
At an attribute name.

At first, this state is used after a complete tag name, after whitespace,
where it expects optional attributes or the end of the tag.
It is also reused after attributes, when expecting more optional
attributes.

```markdown
> | <a />
       ^
> | <a :b>
       ^
> | <a _b>
       ^
> | <a b>
       ^
> | <a >
       ^
```

@type {State}