microsoft / microsoft/vscode-cpptools

Incorrect Doxygen comments generated for certain C functions

Aperta
#11,282 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug Feature: Doc comments Language Service
Lingua principale
TypeScript
Stelle
6.2k
Fork
1.7k
Merge medio
14h 46m
PR unite (30g)
61

Descrizione

Environment
  • OS and Version: Windows 11 22H2 (x64)
  • VS Code Version: 1.80.2
  • C/C++ Extension Version: 1.16.3
Bug Summary and Steps to Reproduce

Bug Summary:

  • Auto-generation of Doxygen comments for C functions breaks whenever the return type contains struct, enum or pointer to a forward-declared union.
  • Additionally, when a C function is of the form return_type func(void), an extra @param entry is generated.

Steps to reproduce:

  1. Create a new C file with the following content:
    struct Bar {};
    union Bar2;
    
    enum Bar3 {
        BAR
    };
    
    typedef struct Bar *BarType;
    
    int *foo(int bar);
    
    struct Bar foo_broken(int bar);
    union Bar2 *foo_broken2(int bar);
    enum Bar3 foo_broken3(int bar);
    
    unsigned long long int foo2(void);
    BarType foo3(int bar);
    
    int foo_broken_param(void);
    
  2. Type /// above each function (or just use the context menu) to generate Doxygen comments.
  3. Obtain incorrect/truncated Doxygen comments:
    /// @brief 
    /// @param bar 
    /// @return 
    int *foo(int bar);  // correct (normal function)
    
    /// @brief 
    struct Bar foo_broken(int bar);     // truncated
    
    /// @brief 
    union Bar2 *foo_broken2(int bar);   // truncated
    
    /// @brief 
    enum Bar3 foo_broken3(int bar);     // truncated
    
    /// @brief 
    /// @param bar 
    /// @return 
    unsigned long long int foo2(int bar); // correct, despite having multiple tokens in the return type
    
    /// @brief 
    /// @param bar 
    /// @return 
    BarType foo3(int bar);      // correct, because `struct` is not present
    
    /// @brief 
    /// @param  
    /// @return 
    int foo_broken_param(void); // incorrect, an extra unnamed parameter is generated
    

Expected behavior:
Having

/// @brief  
/// @return 

generated for foo_broken_param (which doesn't take any parameters), and

/// @brief 
/// @param  
/// @return 

generated for every other function.

Configuration and Logs
c_cpp_properties.json: (Default Settings)
Other Extensions

No response

Additional context

No response

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo il problema in un file C usando le dichiarazioni e i passaggi di generazione di Doxygen riportati nel report. Traccia la generazione dei commenti Doxygen dell’estensione C/C++ per i tipi restituiti che contengono struct, enum o una union dichiarata in avanti, e per le funzioni con parametri void. Il lavoro è completato quando i commenti generati omettono il parametro per func(void) e preservano le voci @param e @return previste per le altre funzioni.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
c, typescript, vscode
Ambito
tooling
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.