From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration
Date: Mon, 30 Jul 2018 08:42:46 -0700 (PDT) [thread overview]
Message-ID: <bbf13e40a501b6d46766cbf69fd6022b9c0b47b3.1532965363.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2.v2.git.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
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>
---
.gitignore | 1 +
contrib/vscode/.gitattributes | 1 +
contrib/vscode/README.md | 14 +++
contrib/vscode/init.sh | 165 ++++++++++++++++++++++++++++++++++
4 files changed, 181 insertions(+)
create mode 100644 contrib/vscode/.gitattributes
create mode 100644 contrib/vscode/README.md
create mode 100755 contrib/vscode/init.sh
diff --git a/.gitignore b/.gitignore
index 388cc4bee..592e8f879 100644
--- a/.gitignore
+++ b/.gitignore
@@ -206,6 +206,7 @@
/config.mak.autogen
/config.mak.append
/configure
+/.vscode/
/tags
/TAGS
/cscope*
diff --git a/contrib/vscode/.gitattributes b/contrib/vscode/.gitattributes
new file mode 100644
index 000000000..e89f2236e
--- /dev/null
+++ b/contrib/vscode/.gitattributes
@@ -0,0 +1 @@
+init.sh whitespace=-indent-with-non-tab
diff --git a/contrib/vscode/README.md b/contrib/vscode/README.md
new file mode 100644
index 000000000..8202d6203
--- /dev/null
+++ b/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.
diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
new file mode 100755
index 000000000..3cc93243f
--- /dev/null
+++ b/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"
--
gitgitgadget
next prev parent reply other threads:[~2018-07-30 15:42 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
2018-07-23 13:52 ` [PATCH 1/9] contrib: add a script to initialize VS Code configuration Johannes Schindelin via GitGitGadget
2018-07-23 16:57 ` Jonathan Nieder
2018-07-30 14:28 ` Johannes Schindelin
2018-07-23 19:48 ` Junio C Hamano
2018-07-23 21:37 ` Junio C Hamano
2018-07-30 14:42 ` Johannes Schindelin
2018-07-23 13:52 ` [PATCH 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
2018-07-23 17:41 ` Jonathan Nieder
2018-07-30 14:46 ` Johannes Schindelin
2018-07-23 13:52 ` [PATCH 3/9] cache.h: extract enum declaration from inside a struct declaration Johannes Schindelin via GitGitGadget
2018-07-23 13:52 ` [PATCH 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
2018-07-23 13:52 ` [PATCH 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
2018-07-23 13:52 ` [PATCH 6/9] vscode: wrap commit messages at column 72 by default Johannes Schindelin via GitGitGadget
2018-07-23 13:52 ` [PATCH 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code Johannes Schindelin via GitGitGadget
2018-07-25 7:32 ` Johannes Sixt
2018-07-30 14:48 ` Johannes Schindelin
2018-07-23 13:52 ` [PATCH 8/9] vscode: add a dictionary for cSpell Johannes Schindelin via GitGitGadget
2018-07-23 13:53 ` [PATCH 9/9] vscode: let cSpell work on commit messages, too Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` Johannes Schindelin via GitGitGadget [this message]
2018-07-30 15:42 ` [PATCH v2 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 3/9] cache.h: extract enum declaration from inside a struct declaration Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 6/9] vscode: wrap commit messages at column 72 by default Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 8/9] vscode: add a dictionary for cSpell Johannes Schindelin via GitGitGadget
2018-07-30 15:42 ` [PATCH v2 9/9] vscode: let cSpell work on commit messages, too Johannes Schindelin via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bbf13e40a501b6d46766cbf69fd6022b9c0b47b3.1532965363.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).