Skip to content

Commit

Permalink
contrib: add a script to initialize VS Code configuration
Browse files Browse the repository at this point in the history
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.

To start developing Git with VS Code, simply run the Unix shell script
contrib/vscode/init.sh, which creates the configuration files in
.vscode/ that VS Code consumes.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
dscho authored and gitster committed Jul 23, 2018
1 parent b7bd948 commit 44559f0
Show file tree
Hide file tree
Showing 4 changed files with 181 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -207,6 +207,7 @@
/config.mak.autogen
/config.mak.append
/configure
/.vscode/
/tags
/TAGS
/cscope*
Expand Down
1 change: 1 addition & 0 deletions contrib/vscode/.gitattributes
@@ -0,0 +1 @@
init.sh whitespace=-indent-with-non-tab
14 changes: 14 additions & 0 deletions contrib/vscode/README.md
@@ -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.
165 changes: 165 additions & 0 deletions contrib/vscode/init.sh
@@ -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"

0 comments on commit 44559f0

Please sign in to comment.