// JavaScript React /** @author Willy * @url https://reactjs.org/ **/ import React from 'react'; import { PhotoStory, VideoStory } from './stories'; function Story(props) { const SpecificStory = components[props.storyType]; return ; } function function return class var 0x123 { } &noRef; hello() React.Component() } attr2="&ref;"> /* no comment*/ function return class var 0x123 &ref; hello() React.Component() . anyWord { function return class var 0x123 hello() React.Component() } // Detect Valid tags /* comment */ { /* comment */ word . } return /* comment multiline */ /* comment */ && /*comment*/ & /*comment*/ { Hello } ?; [ ( ] , = && || return ; default ; return anyWord anyWord/*comment*/ . & | % /* comment*/ // Non-ASCII tag name & attribute <日本語>; ; ; let k1 =

Hello

world

; let k2 = ; // Empty tags <>; // no whitespace < >; // lots of whitespace < /*starting wrap*/ >; // comments in the tags <>hi; // text inside <>hi
bye
; // children <>1<>2.12.23; // nested fragments <>#; // # would cause scanning error if not in jsxtext // Tags after substitutions in templates `aaa${//comment /*comment*/}` // Don't highlight tags within variable declaration let myIdentity: (arg: T) => T = identity; var myIdentity: (arg: U) => U = identity; const myIdentity: {(arg: T): T} = identity; // Don't highlight tags within interfaces and classes interface GenericIdentityFn { (arg: T): T; } class Handler { info: (arg: T): T ; } // Check character after tag name, do not highlight invalid tags ; 22 + "11" }`; obj.something.tagFunc`Setting ${setting} is ${value}!`;