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

features generate-docs: `$` sequences in NOTES.md and descriptions are expanded as String.replace patterns, splicing the README template into the output

Aberta Para iniciantes
#1,325 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
typescript
Domínio
cli

Direção de pesquisa

O template é preenchido em src/spec-node/collectionCommonUtils/generateDocsCommandImpl.ts por volta das linhas 170-182, onde .replace() é chamado com valores de string. Substitua essas chamadas, para o conteúdo fornecido pelo usuário (notas, nome, descrição, descrições das opções), por uma função replacer e depois execute o repro novamente: um NOTES.md contendo $ deve aparecer literalmente no README.md gerado, sem uma segunda cópia do template. Está concluído quando a saída corresponde ao texto esperado e $', $& e $$ também passam inalterados.

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

Descrição

Problem

If a Feature's NOTES.md contains $` (for example the markdown `$`), the generated README.md gets a second copy of the README template at that point: the title, the description, and an "Example Usage" block with literal #{Registry}/#{Namespace}/<id>:#{Version} and #{Customizations}. $', $& and $$ also misbehave, and so do name, description and option descriptions in devcontainer-feature.json.

Repro (CLI 0.89.0; same on main at 155f8b2)

mkdir -p src/demo
echo '{ "id": "demo", "version": "1.0.0", "name": "Demo", "description": "A demo." }' > src/demo/devcontainer-feature.json
echo 'Escape quotes, `$` or backslashes.' > src/demo/NOTES.md
devcontainer features generate-docs -p src -n x/y
  • Expected: Escape quotes, `$` or backslashes.
  • Actual: Escape quotes, `, then the template copy (# Demo (demo), ## Example Usage, #{Registry}/#{Namespace}/demo:#{Version}, #{Customizations}), then ` or backslashes.

Cause

src/spec-node/collectionCommonUtils/generateDocsCommandImpl.ts:170-182 fills the template with .replace('#{…}', value). With a string replacement, String.prototype.replace expands $`, $', $& and $$ (MDN). The same code is in devcontainers/action src/generateDocs.ts:152-162.

Suggested fix

Pass a replacer function, as in .replace('#{Notes}', () => generateNotesMarkdown()), for every placeholder that takes user content.

Not the same as #1324, which is about how option values are sourced at build time.

Linguagem predominante
TypeScript
Estrelas
3k
Forks
462
Merge médio
13h 28min
PRs com merge (30d)
2

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

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 devcontainers/cli

Todas as issues de devcontainers/cli

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.