microsoft / microsoft/vscode-cpptools

Contents of `c_cpp_properties.json` file can get irrecoverably deleted

Open
#13,491 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Feature: Configuration investigate: repro Language Service
Dominant language
TypeScript
Stars
6.2k
Forks
1.7k
Avg merge
14h 46m
Merged PRs (30d)
61

Description

Environment
  • OS and Version: Debian 6.1.0-32-amd64
  • VS Code Version: 1.98.2
  • C/C++ Extension Version: 1.24.5
  • If using SSH remote, specify OS of remote machine: N/A
Bug Summary and Steps to Reproduce

Bug Summary:
After stashing and restoring .vscode/c_cpp_properties.json through git, cpptools will re-populate it's contents with default value deleting old contents.
Also works when temporarily moving or renaming .vscode directory.

Steps to reproduce:

  1. Create empty project and initialize git.
    mkdir -p foo/.vscode
    cd foo
    touch main.c
    git init
    git add main.c
    git commit -m 'Initial commit'
    
  2. Populate c_cpp_properties.json. Just something that differs from the default.
    echo '{"configurations":[{"name":"Foo"}],"version":4}' > .vscode/c_cpp_properties.json
    
  3. Open project folder in vscode and edit main.c. You should see C/C++ configuration is "Foo".
  4. Without closing vscode, stash untracked files and then restore them.
    git stash -k -u
    git stash pop
    
  5. Switch back to main.c. You should see C/C++ configuration has changed to default ("Linux" in my case).
  6. Click C/C++: Edit Configurations (JSON) through bottom right corner or command palette. This action destroys contents of c_cpp_properties.json. If you'd instead close and re-open vscode, you'd be safe.
Configuration and Logs
{"configurations":[{"name":"Foo"}],"version":4}

[C++.log](https://github.com/user-attachments/files/19702057/C%2B%2B.log)
[C++ Diagnostics.log](https://github.com/user-attachments/files/19702056/C%2B%2B.Diagnostics.log)
Other Extensions
  • Vim
Additional context

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue with .vscode/c_cpp_properties.json using the listed git stash -k -u and git stash pop steps, then use C/C++: Edit Configurations (JSON) to confirm the overwrite. Read the linked C++ logs while tracing the extension behavior around the restored configuration. Done means the custom Foo configuration remains intact after restoration and editing the JSON configuration.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.