Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[JavaScript] Tokenization breaks when new line starts with less-than operator

Aberta
#904 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
javascript, typescript
Domínio
tooling

Direção de pesquisa

Comece reproduzindo o exemplo de JavaScript no VS Code com as extensões desabilitadas e, em seguida, inspecione os arquivos de gramática TypeScript do repositório. A correção estará concluída quando um operador less-than no início de uma linha for destacado como operador em vez de abrir JSX, e o destaque não continuar até uma tag de fechamento.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Does this issue occur when all extensions are disabled?: Yes

VS Code version: Code 1.66.0 (e18005f0f1b33c29e81d732535d8c0e47cafb0b5, 2022-03-30T05:50:41.156Z)
OS version: Linux x64 4.15.0-175-generic
Restricted Mode: No

System Info
Item Value
CPUs Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz (8 x 3541)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
oop_rasterization: disabled_off
opengl: enabled_on
rasterization: disabled_software
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: disabled_software
video_encode: disabled_software
vulkan: disabled_off
webgl: enabled
webgl2: enabled
Load (avg) 0, 0, 1
Memory (System) 31.26GB (23.84GB free)
Process Argv --unity-launch --crash-reporter-id c990702e-9bfc-48d9-b2b9-78bab7fdb823
Screen Reader no
VM 0%
DESKTOP_SESSION ubuntu
XDG_CURRENT_DESKTOP Unity
XDG_SESSION_DESKTOP ubuntu

|XDG_SESSION_TYPE|x11|

Extensions: none

Simple example

  1. In a new editor, set the language mode to plain JavaScript
  2. Type the following
    let obj = {}
    
    let bad = 1
      < obj.two
    
    let unexpected = 1
    />
    let nowFixed = 1
    
  3. The < on line 4 is treated as a JSX tag opener (even when the self-closing tag on line 7 is removed)
    Note how GitHub's highlighting in 2. and this screenshot disagree
    Screenshot from 2022-04-01 11-22-56
  4. Declaring two slightly changes highlighting, but notice the . in obj.two is still green. Using "Developer: Inspect Editor Token and Scopes" shows it's still considered a JSX tag.
    Screenshot from 2022-04-01 11-23-48

Extended example

To show all the specific conditions required to trigger this issue

Screenshot from 2022-04-01 11-17-14

Show code snippet for copy-paste

let expected, notExpected, obj = {}
let expectedFunc = () => { return (true) }
obj.twenty = 20

expected = 10 < obj.twenty

expected = 10
  < 20

expected = 30
  > obj.twenty

expected = 10
  < obj.twenty;

expected = (10
  < obj.twenty)

expected = 10 <
  obj.twenty

notExpected = 10
  < obj.twenty // <-- `<` at start of line misinterpreted as JSX

// syntax highlighting continues to be wonky
let notExpectedFunc = () => { return (true) }
/> // until a JSX closing tag is added
let expectedFunc = () => { return (true) }

Real-world example

In my repo, using prettier for formatting (specifically, a prettier fork that places operators at start of line instead of end) yields the following output, with the problem starting at line 77. Note how placing the cursor on the less-than op highlights the greater-than op on line 84, as if lines 77-84 are just one giant JSX opening tag declaration. Also note that this is a .js file with no mention nor import of React, and the prior examples also had language type explicitly set to JavaScript.

Screenshot from 2022-04-01 11-43-10


My preemptive apologies if this issue is a duplicate (I searched but found none) or if it belongs in a more specific repo.

Linguagem predominante
TypeScript
Estrelas
471
Forks
149
Métricas de merge de PRs
Nenhum PR com merge em 30d

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de microsoft/TypeScript-TmLanguage

Todas as issues de microsoft/TypeScript-TmLanguage

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.