Browse Source
VS Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. Among other languages, it has support for C/C++ via an extension, which offers to not only build and debug the code, but also Intellisense, i.e. code-aware completion and similar niceties. This patch adds a script that helps set up the environment to work effectively with VS Code: simply run the Unix shell script contrib/vscode/init.sh, which creates the relevant files, and open the top level folder of Git's source code in VS Code. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Johannes Schindelin
7 years ago
committed by
Junio C Hamano
4 changed files with 181 additions and 0 deletions
@ -0,0 +1 @@ |
|||||||
|
init.sh whitespace=-indent-with-non-tab |
@ -0,0 +1,14 @@ |
|||||||
|
Configuration for VS Code |
||||||
|
========================= |
||||||
|
|
||||||
|
[VS Code](https://code.visualstudio.com/) is a lightweight but powerful source |
||||||
|
code editor which runs on your desktop and is available for |
||||||
|
[Windows](https://code.visualstudio.com/docs/setup/windows), |
||||||
|
[macOS](https://code.visualstudio.com/docs/setup/mac) and |
||||||
|
[Linux](https://code.visualstudio.com/docs/setup/linux). Among other languages, |
||||||
|
it has [support for C/C++ via an extension](https://github.com/Microsoft/vscode-cpptools). |
||||||
|
|
||||||
|
To start developing Git with VS Code, simply run the Unix shell script called |
||||||
|
`init.sh` in this directory, which creates the configuration files in |
||||||
|
`.vscode/` that VS Code consumes. `init.sh` needs access to `make` and `gcc`, |
||||||
|
so run the script in a Git SDK shell if you are using Windows. |
@ -0,0 +1,165 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
die () { |
||||||
|
echo "$*" >&2 |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
cd "$(dirname "$0")"/../.. || |
||||||
|
die "Could not cd to top-level directory" |
||||||
|
|
||||||
|
mkdir -p .vscode || |
||||||
|
die "Could not create .vscode/" |
||||||
|
|
||||||
|
# General settings |
||||||
|
|
||||||
|
cat >.vscode/settings.json <<\EOF || |
||||||
|
{ |
||||||
|
"C_Cpp.intelliSenseEngine": "Default", |
||||||
|
"C_Cpp.intelliSenseEngineFallback": "Disabled", |
||||||
|
"files.associations": { |
||||||
|
"*.h": "c", |
||||||
|
"*.c": "c" |
||||||
|
} |
||||||
|
} |
||||||
|
EOF |
||||||
|
die "Could not write settings.json" |
||||||
|
|
||||||
|
# Infer some setup-specific locations/names |
||||||
|
|
||||||
|
GCCPATH="$(which gcc)" |
||||||
|
GDBPATH="$(which gdb)" |
||||||
|
MAKECOMMAND="make -j5 DEVELOPER=1" |
||||||
|
OSNAME= |
||||||
|
X= |
||||||
|
case "$(uname -s)" in |
||||||
|
MINGW*) |
||||||
|
GCCPATH="$(cygpath -am "$GCCPATH")" |
||||||
|
GDBPATH="$(cygpath -am "$GDBPATH")" |
||||||
|
MAKE_BASH="$(cygpath -am /git-cmd.exe) --command=usr\\\\bin\\\\bash.exe" |
||||||
|
MAKECOMMAND="$MAKE_BASH -lc \\\"$MAKECOMMAND\\\"" |
||||||
|
OSNAME=Win32 |
||||||
|
X=.exe |
||||||
|
;; |
||||||
|
Linux) |
||||||
|
OSNAME=Linux |
||||||
|
;; |
||||||
|
Darwin) |
||||||
|
OSNAME=macOS |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# Default build task |
||||||
|
|
||||||
|
cat >.vscode/tasks.json <<EOF || |
||||||
|
{ |
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558 |
||||||
|
// for the documentation about the tasks.json format |
||||||
|
"version": "2.0.0", |
||||||
|
"tasks": [ |
||||||
|
{ |
||||||
|
"label": "make", |
||||||
|
"type": "shell", |
||||||
|
"command": "$MAKECOMMAND", |
||||||
|
"group": { |
||||||
|
"kind": "build", |
||||||
|
"isDefault": true |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
EOF |
||||||
|
die "Could not install default build task" |
||||||
|
|
||||||
|
# Debugger settings |
||||||
|
|
||||||
|
cat >.vscode/launch.json <<EOF || |
||||||
|
{ |
||||||
|
// Use IntelliSense to learn about possible attributes. |
||||||
|
// Hover to view descriptions of existing attributes. |
||||||
|
// For more information, visit: |
||||||
|
// https://go.microsoft.com/fwlink/?linkid=830387 |
||||||
|
"version": "0.2.0", |
||||||
|
"configurations": [ |
||||||
|
{ |
||||||
|
"name": "(gdb) Launch", |
||||||
|
"type": "cppdbg", |
||||||
|
"request": "launch", |
||||||
|
"program": "\${workspaceFolder}/git$X", |
||||||
|
"args": [], |
||||||
|
"stopAtEntry": false, |
||||||
|
"cwd": "\${workspaceFolder}", |
||||||
|
"environment": [], |
||||||
|
"externalConsole": true, |
||||||
|
"MIMode": "gdb", |
||||||
|
"miDebuggerPath": "$GDBPATH", |
||||||
|
"setupCommands": [ |
||||||
|
{ |
||||||
|
"description": "Enable pretty-printing for gdb", |
||||||
|
"text": "-enable-pretty-printing", |
||||||
|
"ignoreFailures": true |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
EOF |
||||||
|
die "Could not write launch configuration" |
||||||
|
|
||||||
|
# C/C++ extension settings |
||||||
|
|
||||||
|
make -f - OSNAME=$OSNAME GCCPATH="$GCCPATH" vscode-init \ |
||||||
|
>.vscode/c_cpp_properties.json <<\EOF || |
||||||
|
include Makefile |
||||||
|
|
||||||
|
vscode-init: |
||||||
|
@mkdir -p .vscode && \ |
||||||
|
incs= && defs= && \ |
||||||
|
for e in $(ALL_CFLAGS); do \ |
||||||
|
case "$$e" in \ |
||||||
|
-I.) \ |
||||||
|
incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \ |
||||||
|
"" "$$incs")" \ |
||||||
|
;; \ |
||||||
|
-I/*) \ |
||||||
|
incs="$$(printf '% 16s"%s",\n%s' \ |
||||||
|
"" "$${e#-I}" "$$incs")" \ |
||||||
|
;; \ |
||||||
|
-I*) \ |
||||||
|
incs="$$(printf '% 16s"$${workspaceRoot}/%s",\n%s' \ |
||||||
|
"" "$${e#-I}" "$$incs")" \ |
||||||
|
;; \ |
||||||
|
-D*) \ |
||||||
|
defs="$$(printf '% 16s"%s",\n%s' \ |
||||||
|
"" "$$(echo "$${e#-D}" | sed 's/"/\\&/g')" \ |
||||||
|
"$$defs")" \ |
||||||
|
;; \ |
||||||
|
esac; \ |
||||||
|
done && \ |
||||||
|
echo '{' && \ |
||||||
|
echo ' "configurations": [' && \ |
||||||
|
echo ' {' && \ |
||||||
|
echo ' "name": "$(OSNAME)",' && \ |
||||||
|
echo ' "intelliSenseMode": "clang-x64",' && \ |
||||||
|
echo ' "includePath": [' && \ |
||||||
|
echo "$$incs" | sort | sed '$$s/,$$//' && \ |
||||||
|
echo ' ],' && \ |
||||||
|
echo ' "defines": [' && \ |
||||||
|
echo "$$defs" | sort | sed '$$s/,$$//' && \ |
||||||
|
echo ' ],' && \ |
||||||
|
echo ' "browse": {' && \ |
||||||
|
echo ' "limitSymbolsToIncludedHeaders": true,' && \ |
||||||
|
echo ' "databaseFilename": "",' && \ |
||||||
|
echo ' "path": [' && \ |
||||||
|
echo ' "$${workspaceRoot}"' && \ |
||||||
|
echo ' ]' && \ |
||||||
|
echo ' },' && \ |
||||||
|
echo ' "cStandard": "c11",' && \ |
||||||
|
echo ' "cppStandard": "c++17",' && \ |
||||||
|
echo ' "compilerPath": "$(GCCPATH)"' && \ |
||||||
|
echo ' }' && \ |
||||||
|
echo ' ],' && \ |
||||||
|
echo ' "version": 4' && \ |
||||||
|
echo '}' |
||||||
|
EOF |
||||||
|
die "Could not write settings for the C/C++ extension" |
Loading…
Reference in new issue