microsoft / vscode-cpptools

Official repository for the Microsoft C/C++ extension for VS Code.
Other
5.4k stars 1.51k forks source link

add option to hide declarations in 'Outline' #12422

Open mrx23dot opened 1 week ago

mrx23dot commented 1 week ago

Type: Feature Request

In C code every prototype is also listed in Outline not just the function itself, which is just annoying.

image

I tried to hide them with

    "outline.showEnums": false,
    "outline.showClasses": false,
    "outline.showFields": false,
    "outline.showTypeParameters": false,
    "outline.showObjects": false,
    "outline.showConstructors": false,
    "outline.showPackages": false,

but none of them worked

Extension version: 1.17.5 VS Code version: Code 1.73.1 (6261075646f055b99068d3688932416f2346dd3b, 2022-11-09T04:27:29.066Z) OS version: Windows_NT x64 10.0.19045 Modes: Unsupported Sandboxed: No

sean-mcmanus commented 6 days ago

This is currently "by design", but we can treat this as a enhancement request. This occurs only if the declaration and definition are in the same file (a potential "workaround" would be to put the declarations in a header file). And the function declarations don't need to be declared if you're able to put the definitions used by later definitions before they're used if there's no mutual dependency.

mrx23dot commented 6 days ago

If there are already so many options to hide different objects I would assume adding a new one would be max 3 lines of code, since object type already has a label "declaration"

    "outline.showEnums": false,
    "outline.showClasses": false,
    "outline.showFields": false,
    "outline.showTypeParameters": false,
    "outline.showObjects": false,
    "outline.showConstructors": false,
    "outline.showPackages": false,

My point is that in simple C I don't see much benefit listing any prototypes, thus it would always be noise. As refecence, Eclipse IDE has an option to hide prototypes too.

About workaround, critical sw requires explicit prototypes before function definitions. And most code base is already legacy code, so we cannot just freely move things around.