git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/9] Add support to develop Git in Visual Studio Code
@ 2018-07-23 13:52 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
                   ` (9 more replies)
  0 siblings, 10 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

[Visual Studio Code](https://code.visualstudio.com/) (nickname "VS Code") is a light-weight, cross-platform, Open Source development environment, with an increasingly powerful extension to support C/C++ development. In particular the intellisense support as well as all the other niceties developers might have come to expect from Integrated Development Environments will help accelerate development.

This topic branch makes it easy to get started using VS Code to develop Git itself.

To get started, run the script `./contrib/vscode/init.sh`. This will initialize the `.vscode/` directory and some files in that directory. After that, simply open Git's top-level directory as "folder" in VS Code.

The files have to be generated because of the curious way Git determines what flags to pass to the C compiler, in particular which constants are defined, because they change the compile flow in rather dramatic ways (determining, e.g. which SHA-1 backend to use).

Johannes Schindelin (9):
  contrib: add a script to initialize VS Code configuration
  vscode: hard-code a couple defines
  cache.h: extract enum declaration from inside a struct declaration
  mingw: define WIN32 explicitly
  vscode: only overwrite C/C++ settings
  vscode: wrap commit messages at column 72 by default
  vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  vscode: add a dictionary for cSpell
  vscode: let cSpell work on commit messages, too

 .gitignore                    |   1 +
 cache.h                       |  24 ++-
 config.mak.uname              |   2 +-
 contrib/vscode/.gitattributes |   1 +
 contrib/vscode/README.md      |  14 ++
 contrib/vscode/init.sh        | 375 ++++++++++++++++++++++++++++++++++
 6 files changed, 405 insertions(+), 12 deletions(-)
 create mode 100644 contrib/vscode/.gitattributes
 create mode 100644 contrib/vscode/README.md
 create mode 100755 contrib/vscode/init.sh


base-commit: 53f9a3e157dbbc901a02ac2c73346d375e24978c
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-2%2Fdscho%2Fvscode-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2/dscho/vscode-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/2
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  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 ` Johannes Schindelin via GitGitGadget
  2018-07-23 16:57   ` Jonathan Nieder
  2018-07-23 19:48   ` Junio C Hamano
  2018-07-23 13:52 ` [PATCH 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
                   ` (8 subsequent siblings)
  9 siblings, 2 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

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.

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>
---
 .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


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 2/9] vscode: hard-code a couple defines
  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 13:52 ` Johannes Schindelin via GitGitGadget
  2018-07-23 17:41   ` Jonathan Nieder
  2018-07-23 13:52 ` [PATCH 3/9] cache.h: extract enum declaration from inside a struct declaration Johannes Schindelin via GitGitGadget
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

Sadly, we do not get all of the definitions via ALL_CFLAGS. Some defines
are passed to GCC *only* when compiling specific files, such as git.o.

Let's just hard-code them into the script for the time being.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 3cc93243f..494a51ac5 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -115,7 +115,19 @@ include Makefile
 vscode-init:
 	@mkdir -p .vscode && \
 	incs= && defs= && \
-	for e in $(ALL_CFLAGS); do \
+	for e in $(ALL_CFLAGS) \
+			'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
+			'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
+			'-DBINDIR="$(bindir_relative_SQ)"' \
+			'-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' \
+			'-DDEFAULT_GIT_TEMPLATE_DIR="$(template_dir_SQ)"' \
+			'-DETC_GITCONFIG="$(ETC_GITCONFIG_SQ)"' \
+			'-DETC_GITATTRIBUTES="$(ETC_GITATTRIBUTES_SQ)"' \
+			'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
+			'-DCURL_DISABLE_TYPECHECK', \
+			'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
+			'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
+			'-DGIT_INFO_PATH="$(infodir_relative_SQ)"'; do \
 		case "$$e" in \
 		-I.) \
 			incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 3/9] cache.h: extract enum declaration from inside a struct declaration
  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 13:52 ` [PATCH 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
@ 2018-07-23 13:52 ` Johannes Schindelin via GitGitGadget
  2018-07-23 13:52 ` [PATCH 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

While it is technically possible, it is confusing. Not only the user,
but also VS Code's intellisense.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 cache.h | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/cache.h b/cache.h
index 89a107a7f..2380136f6 100644
--- a/cache.h
+++ b/cache.h
@@ -1425,18 +1425,20 @@ extern void *read_object_with_reference(const struct object_id *oid,
 extern struct object *peel_to_type(const char *name, int namelen,
 				   struct object *o, enum object_type);
 
+enum date_mode_type {
+	DATE_NORMAL = 0,
+	DATE_RELATIVE,
+	DATE_SHORT,
+	DATE_ISO8601,
+	DATE_ISO8601_STRICT,
+	DATE_RFC2822,
+	DATE_STRFTIME,
+	DATE_RAW,
+	DATE_UNIX
+};
+
 struct date_mode {
-	enum date_mode_type {
-		DATE_NORMAL = 0,
-		DATE_RELATIVE,
-		DATE_SHORT,
-		DATE_ISO8601,
-		DATE_ISO8601_STRICT,
-		DATE_RFC2822,
-		DATE_STRFTIME,
-		DATE_RAW,
-		DATE_UNIX
-	} type;
+	enum date_mode_type type;
 	const char *strftime_fmt;
 	int local;
 };
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 4/9] mingw: define WIN32 explicitly
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (2 preceding siblings ...)
  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 ` Johannes Schindelin via GitGitGadget
  2018-07-23 13:52 ` [PATCH 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This helps VS Code's intellisense to figure out that we want to include
windows.h, and that we want to define the minimum target Windows version
as Windows Vista/2008R2.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 config.mak.uname | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config.mak.uname b/config.mak.uname
index 684fc5bf0..2be2f1981 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -528,7 +528,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
 	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
 		compat/win32/pthread.o compat/win32/syslog.o \
 		compat/win32/dirent.o
-	BASIC_CFLAGS += -DPROTECT_NTFS_DEFAULT=1
+	BASIC_CFLAGS += -DWIN32 -DPROTECT_NTFS_DEFAULT=1
 	EXTLIBS += -lws2_32
 	GITLIBS += git.res
 	PTHREAD_LIBS =
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 5/9] vscode: only overwrite C/C++ settings
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (3 preceding siblings ...)
  2018-07-23 13:52 ` [PATCH 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
@ 2018-07-23 13:52 ` 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
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

The C/C++ settings are special, as they are the only generated VS Code
configurations that *will* change over the course of Git's development,
e.g. when a new constant is defined.

Therefore, let's only update the C/C++ settings, also to prevent user
modifications from being overwritten.

Ideally, we would keep user modifications in the C/C++ settings, but
that would require parsing JSON, a task for which a Unix shell script is
distinctly unsuited. So we write out .new files instead, and warn the
user if they may want to reconcile their changes.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 494a51ac5..ba9469226 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -13,7 +13,7 @@ die "Could not create .vscode/"
 
 # General settings
 
-cat >.vscode/settings.json <<\EOF ||
+cat >.vscode/settings.json.new <<\EOF ||
 {
     "C_Cpp.intelliSenseEngine": "Default",
     "C_Cpp.intelliSenseEngineFallback": "Disabled",
@@ -51,7 +51,7 @@ esac
 
 # Default build task
 
-cat >.vscode/tasks.json <<EOF ||
+cat >.vscode/tasks.json.new <<EOF ||
 {
     // See https://go.microsoft.com/fwlink/?LinkId=733558
     // for the documentation about the tasks.json format
@@ -73,7 +73,7 @@ die "Could not install default build task"
 
 # Debugger settings
 
-cat >.vscode/launch.json <<EOF ||
+cat >.vscode/launch.json.new <<EOF ||
 {
     // Use IntelliSense to learn about possible attributes.
     // Hover to view descriptions of existing attributes.
@@ -175,3 +175,20 @@ vscode-init:
 	echo '}'
 EOF
 die "Could not write settings for the C/C++ extension"
+
+for file in .vscode/settings.json .vscode/tasks.json .vscode/launch.json
+do
+	if test -f $file
+	then
+		if git diff --no-index --quiet --exit-code $file $file.new
+		then
+			rm $file.new
+		else
+			printf "The file $file.new has these changes:\n\n"
+			git --no-pager diff --no-index $file $file.new
+			printf "\n\nMaybe \`mv $file.new $file\`?\n\n"
+		fi
+	else
+		mv $file.new $file
+	fi
+done
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 6/9] vscode: wrap commit messages at column 72 by default
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (4 preceding siblings ...)
  2018-07-23 13:52 ` [PATCH 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
@ 2018-07-23 13:52 ` 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
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

When configuring VS Code as core.editor (via `code --wait`), we really
want to adhere to the Git conventions of wrapping commit messages.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index ba9469226..face115e8 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -17,6 +17,10 @@ cat >.vscode/settings.json.new <<\EOF ||
 {
     "C_Cpp.intelliSenseEngine": "Default",
     "C_Cpp.intelliSenseEngineFallback": "Disabled",
+    "[git-commit]": {
+        "editor.wordWrap": "wordWrapColumn",
+        "editor.wordWrapColumn": 72
+    },
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (5 preceding siblings ...)
  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 ` Johannes Schindelin via GitGitGadget
  2018-07-25  7:32   ` Johannes Sixt
  2018-07-23 13:52 ` [PATCH 8/9] vscode: add a dictionary for cSpell Johannes Schindelin via GitGitGadget
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This adds a couple settings for the .c/.h files so that it is easier to
conform to Git's conventions while editing the source code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index face115e8..29f2a729d 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -21,6 +21,14 @@ cat >.vscode/settings.json.new <<\EOF ||
         "editor.wordWrap": "wordWrapColumn",
         "editor.wordWrapColumn": 72
     },
+    "[c]": {
+        "editor.detectIndentation": false,
+        "editor.insertSpaces": false,
+        "editor.tabSize": 8,
+        "editor.wordWrap": "wordWrapColumn",
+        "editor.wordWrapColumn": 80,
+        "files.trimTrailingWhitespace": true
+    },
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 8/9] vscode: add a dictionary for cSpell
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (6 preceding siblings ...)
  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-23 13:52 ` 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
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:52 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

The quite useful cSpell extension allows VS Code to have "squiggly"
lines under spelling mistakes. By default, this would add too much
clutter, though, because so much of Git's source code uses words that
would trigger cSpell.

Let's add a few words to make the spell checking more useful by reducing
the number of false positives.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 169 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 168 insertions(+), 1 deletion(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 29f2a729d..a134cb4c5 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -32,7 +32,174 @@ cat >.vscode/settings.json.new <<\EOF ||
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-    }
+    },
+    "cSpell.words": [
+        "DATAW",
+        "DBCACHED",
+        "DFCHECK",
+        "DTYPE",
+        "Hamano",
+        "HCAST",
+        "HEXSZ",
+        "HKEY",
+        "HKLM",
+        "IFGITLINK",
+        "IFINVALID",
+        "ISBROKEN",
+        "ISGITLINK",
+        "ISSYMREF",
+        "Junio",
+        "LPDWORD",
+        "LPPROC",
+        "LPWSTR",
+        "MSVCRT",
+        "NOARG",
+        "NOCOMPLETE",
+        "NOINHERIT",
+        "RENORMALIZE",
+        "STARTF",
+        "STARTUPINFOEXW",
+        "Schindelin",
+        "UCRT",
+        "YESNO",
+        "argcp",
+        "beginthreadex",
+        "committish",
+        "contentp",
+        "cpath",
+        "cpidx",
+        "ctim",
+        "dequote",
+        "envw",
+        "ewah",
+        "fdata",
+        "fherr",
+        "fhin",
+        "fhout",
+        "fragp",
+        "fsmonitor",
+        "hnsec",
+        "idents",
+        "includeif",
+        "interpr",
+        "iprog",
+        "isexe",
+        "iskeychar",
+        "kompare",
+        "mksnpath",
+        "mktag",
+        "mktree",
+        "mmblob",
+        "mmbuffer",
+        "mmfile",
+        "noenv",
+        "nparents",
+        "ntpath",
+        "ondisk",
+        "ooid",
+        "oplen",
+        "osdl",
+        "pnew",
+        "pold",
+        "ppinfo",
+        "pushf",
+        "pushv",
+        "rawsz",
+        "rebasing",
+        "reencode",
+        "repo",
+        "rerere",
+        "scld",
+        "sharedrepo",
+        "spawnv",
+        "spawnve",
+        "spawnvpe",
+        "strdup'ing",
+        "submodule",
+        "submodules",
+        "topath",
+        "topo",
+        "tpatch",
+        "unexecutable",
+        "unhide",
+        "unkc",
+        "unkv",
+        "unmark",
+        "unmatch",
+        "unsets",
+        "unshown",
+        "untracked",
+        "untrackedcache",
+        "unuse",
+        "upos",
+        "uval",
+        "vreportf",
+        "wargs",
+        "wargv",
+        "wbuffer",
+        "wcmd",
+        "wcsnicmp",
+        "wcstoutfdup",
+        "wdeltaenv",
+        "wdir",
+        "wenv",
+        "wenvblk",
+        "wenvcmp",
+        "wenviron",
+        "wenvpos",
+        "wenvsz",
+        "wfile",
+        "wfilename",
+        "wfopen",
+        "wfreopen",
+        "wfullpath",
+        "which'll",
+        "wlink",
+        "wmain",
+        "wmkdir",
+        "wmktemp",
+        "wnewpath",
+        "wotype",
+        "wpath",
+        "wpathname",
+        "wpgmptr",
+        "wpnew",
+        "wpointer",
+        "wpold",
+        "wpos",
+        "wputenv",
+        "wrmdir",
+        "wship",
+        "wtarget",
+        "wtemplate",
+        "wunlink",
+        "xcalloc",
+        "xgetcwd",
+        "xmallocz",
+        "xmemdupz",
+        "xmmap",
+        "xopts",
+        "xrealloc",
+        "xsnprintf",
+        "xutftowcs",
+        "xutftowcsn",
+        "xwcstoutf"
+    ],
+    "cSpell.ignoreRegExpList": [
+        "\\\"(DIRC|FSMN|REUC|UNTR)\\\"",
+        "\\\\u[0-9a-fA-Fx]{4}\\b",
+        "\\b(filfre|frotz|xyzzy)\\b",
+        "\\bCMIT_FMT_DEFAULT\\b",
+        "\\bde-munge\\b",
+        "\\bGET_OID_DISAMBIGUATORS\\b",
+        "\\bHASH_RENORMALIZE\\b",
+        "\\bTREESAMEness\\b",
+        "\\bUSE_STDEV\\b",
+        "\\Wchar *\\*\\W*utfs\\W",
+        "cURL's",
+        "nedmalloc'ed",
+        "ntifs\\.h",
+    ],
 }
 EOF
 die "Could not write settings.json"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 9/9] vscode: let cSpell work on commit messages, too
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (7 preceding siblings ...)
  2018-07-23 13:52 ` [PATCH 8/9] vscode: add a dictionary for cSpell Johannes Schindelin via GitGitGadget
@ 2018-07-23 13:53 ` 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
  9 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-23 13:53 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

By default, the cSpell extension ignores all files under .git/. That
includes, unfortunately, COMMIT_EDITMSG, i.e. commit messages. However,
spell checking is *quite* useful when writing commit messages... And
since the user hardly ever opens any file inside .git (apart from commit
messages, the config, and sometimes interactive rebase's todo lists),
there is really not much harm in *not* ignoring .git/.

The default also ignores `node_modules/`, but that does not apply to
Git, so let's skip ignoring that, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index a134cb4c5..27de94994 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -33,6 +33,8 @@ cat >.vscode/settings.json.new <<\EOF ||
         "*.h": "c",
         "*.c": "c"
     },
+    "cSpell.ignorePaths": [
+    ],
     "cSpell.words": [
         "DATAW",
         "DBCACHED",
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  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
  1 sibling, 1 reply; 29+ messages in thread
From: Jonathan Nieder @ 2018-07-23 16:57 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget
  Cc: git, Junio C Hamano, Johannes Schindelin

Hi,

Thanks for working on this.

Johannes Schindelin via GitGitGadget wrote:

> 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.

This doesn't really seem relevant to the change.  The relevant bits
are that (1) VS Code is a popular source code editor, and that (2)
it's one worth recommending to newcomers.

> 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>

This doesn't tell me what the patch will actually do.

VSCode is an editor.  Is the idea that this will help configure the
editor to do the right thing with whitespace or something?  Or does it
configure IDE features to build git?

Thanks,
Jonathan

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 2/9] vscode: hard-code a couple defines
  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
  0 siblings, 1 reply; 29+ messages in thread
From: Jonathan Nieder @ 2018-07-23 17:41 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget
  Cc: git, Junio C Hamano, Johannes Schindelin

Hi,

Johannes Schindelin via GitGitGadget wrote:

> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> Sadly, we do not get all of the definitions via ALL_CFLAGS. Some defines
> are passed to GCC *only* when compiling specific files, such as git.o.
>
> Let's just hard-code them into the script for the time being.

Could we move these to ALL_CFLAGS?  Is there any downside other than
increased rebuilds when options change?

Thanks,
Jonathan

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  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-23 19:48   ` Junio C Hamano
  2018-07-23 21:37     ` Junio C Hamano
  2018-07-30 14:42     ` Johannes Schindelin
  1 sibling, 2 replies; 29+ messages in thread
From: Junio C Hamano @ 2018-07-23 19:48 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget; +Cc: git, Johannes Schindelin

"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:

> 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

This is caued by our usual "git apply --whitespace=warn" as it
contains lines indented by spaces not tabs (perhaps the json
literals?)  Can we have contrib/vscode/.gitattributes to tweak the
whitespace breakage checking rules so that this file is excempt?

I'll just shut my eyes while applying this series for today, though
;-)

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  2018-07-23 19:48   ` Junio C Hamano
@ 2018-07-23 21:37     ` Junio C Hamano
  2018-07-30 14:42     ` Johannes Schindelin
  1 sibling, 0 replies; 29+ messages in thread
From: Junio C Hamano @ 2018-07-23 21:37 UTC (permalink / raw)
  To: Johannes Schindelin via GitGitGadget; +Cc: git, Johannes Schindelin

Junio C Hamano <gitster@pobox.com> writes:

> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
>> 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
>
> This is caued by our usual "git apply --whitespace=warn" as it

"caught"; sorry for a typo.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  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
  0 siblings, 1 reply; 29+ messages in thread
From: Johannes Sixt @ 2018-07-25  7:32 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Johannes Schindelin via GitGitGadget, git, Junio C Hamano

Am 23.07.2018 um 15:52 schrieb Johannes Schindelin via GitGitGadget:
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
> 
> This adds a couple settings for the .c/.h files so that it is easier to
> conform to Git's conventions while editing the source code.
> 
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>   contrib/vscode/init.sh | 8 ++++++++
>   1 file changed, 8 insertions(+)
> 
> diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
> index face115e8..29f2a729d 100755
> --- a/contrib/vscode/init.sh
> +++ b/contrib/vscode/init.sh
> @@ -21,6 +21,14 @@ cat >.vscode/settings.json.new <<\EOF ||
>           "editor.wordWrap": "wordWrapColumn",
>           "editor.wordWrapColumn": 72
>       },
> +    "[c]": {
> +        "editor.detectIndentation": false,
> +        "editor.insertSpaces": false,
> +        "editor.tabSize": 8,
> +        "editor.wordWrap": "wordWrapColumn",
> +        "editor.wordWrapColumn": 80,
> +        "files.trimTrailingWhitespace": true
> +    },

I am a VS Code user, but I haven't used these settings before.

With these settings, does the editor break lines while I am typing? Or 
does it just insert a visual cue that tells where I should insert a line 
break? If the former, it would basically make the editor unusable for my 
taste. I want to have total control over the code I write. The 80 column 
limit is just a recommendation, not a hard requirement.

>       "files.associations": {
>           "*.h": "c",
>           "*.c": "c"
> 

-- Hannes

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  2018-07-23 16:57   ` Jonathan Nieder
@ 2018-07-30 14:28     ` Johannes Schindelin
  0 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin @ 2018-07-30 14:28 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: Johannes Schindelin via GitGitGadget, git, Junio C Hamano

Hi Jonathan,

On Mon, 23 Jul 2018, Jonathan Nieder wrote:

> Johannes Schindelin via GitGitGadget wrote:
> 
> > 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.
> 
> This doesn't really seem relevant to the change.  The relevant bits
> are that (1) VS Code is a popular source code editor, and that (2)
> it's one worth recommending to newcomers.

To the contrary. This paragraph describes the motivation of the patch.

It is, if you want, the most important part of the entire patch series.

> > 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>
> 
> This doesn't tell me what the patch will actually do.

True. Will add a paragraph.

> VSCode is an editor.  Is the idea that this will help configure the
> editor to do the right thing with whitespace or something?  Or does it
> configure IDE features to build git?

It is a start of all of the above. Ideally, I will be eventually be able
to consistently use VS Code for Git development, whether I have to work on
a Linux, a macOS or a Windows machine.

And I am not happy until the same ease is also available to others. Hence
my contribution.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 1/9] contrib: add a script to initialize VS Code configuration
  2018-07-23 19:48   ` Junio C Hamano
  2018-07-23 21:37     ` Junio C Hamano
@ 2018-07-30 14:42     ` Johannes Schindelin
  1 sibling, 0 replies; 29+ messages in thread
From: Johannes Schindelin @ 2018-07-30 14:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin via GitGitGadget, git

Hi Junio,

On Mon, 23 Jul 2018, Junio C Hamano wrote:

> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
> 
> > 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
> 
> This is caued by our usual "git apply --whitespace=warn" as it
> contains lines indented by spaces not tabs (perhaps the json
> literals?)

A `git diff --check` does not show any red flag.

> Can we have contrib/vscode/.gitattributes to tweak the whitespace
> breakage checking rules so that this file is excempt?

I would have appreciated quite a bit more clear a message, including how I
can trigger this, and what is the appropriate setting.

As it is, I cannot reproduce your problem with a `git show`, so I assume
that the main problem is that this commit *does* add that .gitattributes,
but of course your `git apply` ran before that file existed.

For your own pleasure, here is the link to the .gitattributes file in the
commit that you applied yourself:

https://github.com/gitster/git/commit/44559f0388a4e256bea3eb2f57b92a2b9e3d06f9#diff-046ba41c5a21694c62b8dc5e93d7f0c2R1

I assume that this is good enough for you, and your comment is moot?

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 2/9] vscode: hard-code a couple defines
  2018-07-23 17:41   ` Jonathan Nieder
@ 2018-07-30 14:46     ` Johannes Schindelin
  0 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin @ 2018-07-30 14:46 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: Johannes Schindelin via GitGitGadget, git, Junio C Hamano

Hi Jonathan,

On Mon, 23 Jul 2018, Jonathan Nieder wrote:

> Johannes Schindelin via GitGitGadget wrote:
> 
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> >
> > Sadly, we do not get all of the definitions via ALL_CFLAGS. Some defines
> > are passed to GCC *only* when compiling specific files, such as git.o.
> >
> > Let's just hard-code them into the script for the time being.
> 
> Could we move these to ALL_CFLAGS?  Is there any downside other than
> increased rebuilds when options change?

I assumed that it gives us a bit more liberty at using names for constants
that might otherwise be too general.

I did not even consider the rebuild time, but that's a good point.

The idea to move those definitions to ALL_CFLAGS sounds good to me, yet I
am loathe to introduce this into a patch series that is not about
far-reaching design decisions at all, but merely about making a decent
tool available to the finger tips of all Git contributors.

Read: I think this would make for a pretty good micro-project, maybe in next
year's GSoC (assuming that it happens and that we're accepted again).

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  2018-07-25  7:32   ` Johannes Sixt
@ 2018-07-30 14:48     ` Johannes Schindelin
  0 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin @ 2018-07-30 14:48 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Johannes Schindelin via GitGitGadget, git, Junio C Hamano

Hi Hannes,

On Wed, 25 Jul 2018, Johannes Sixt wrote:

> Am 23.07.2018 um 15:52 schrieb Johannes Schindelin via GitGitGadget:
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> > 
> > This adds a couple settings for the .c/.h files so that it is easier to
> > conform to Git's conventions while editing the source code.
> > 
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> >   contrib/vscode/init.sh | 8 ++++++++
> >   1 file changed, 8 insertions(+)
> > 
> > diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
> > index face115e8..29f2a729d 100755
> > --- a/contrib/vscode/init.sh
> > +++ b/contrib/vscode/init.sh
> > @@ -21,6 +21,14 @@ cat >.vscode/settings.json.new <<\EOF ||
> >           "editor.wordWrap": "wordWrapColumn",
> >           "editor.wordWrapColumn": 72
> >       },
> > +    "[c]": {
> > +        "editor.detectIndentation": false,
> > +        "editor.insertSpaces": false,
> > +        "editor.tabSize": 8,
> > +        "editor.wordWrap": "wordWrapColumn",
> > +        "editor.wordWrapColumn": 80,
> > +        "files.trimTrailingWhitespace": true
> > +    },
> 
> I am a VS Code user, but I haven't used these settings before.
> 
> With these settings, does the editor break lines while I am typing? Or does it
> just insert a visual cue that tells where I should insert a line break? If the
> former, it would basically make the editor unusable for my taste. I want to
> have total control over the code I write. The 80 column limit is just a
> recommendation, not a hard requirement.

Fear not. It is giving you a very clear visual cue, but that's all. It
does show the line wrapped, but the line number column quite clearly shows
that it did not insert a new-line.

Ciao,
Dscho

> 
> >       "files.associations": {
> >           "*.h": "c",
> >           "*.c": "c"
> > 
> 
> -- Hannes
> 
> 

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH v2 0/9] Add support to develop Git in Visual Studio Code
  2018-07-23 13:52 [PATCH 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                   ` (8 preceding siblings ...)
  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 ` Johannes Schindelin via GitGitGadget
  2018-07-30 15:42   ` [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration Johannes Schindelin via GitGitGadget
                     ` (8 more replies)
  9 siblings, 9 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

[Visual Studio Code](https://code.visualstudio.com/) (nickname "VS Code") is a light-weight, cross-platform, Open Source development environment, with an increasingly powerful extension to support C/C++ development. In particular the intellisense support as well as all the other niceties developers might have come to expect from Integrated Development Environments will help accelerate development.

Due to the way Git's source code and build process is structured, it can be quite challenging to use VS Code effectively for developing Git. Which is a shame, as developing with vim and the command-line causes unnecessary churn, and it is quite understandable that most Git developers simply do not want to fight with a modern development environment just to try whether they like developing Git with it.

This topic branch makes it easy to get started using VS Code to develop Git.

Simply run the script `./contrib/vscode/init.sh`. This will initialize the `.vscode/` directory and some files in that directory. After that, just open Git's top-level directory as "folder" in VS Code.

The files have to be generated because of the curious way Git determines what flags to pass to the C compiler, in particular which constants are defined, because they change the compile flow in rather dramatic ways (determining, e.g. which SHA-1 backend to use).

Changes since v1:

- Clarified commit message of the first commit.

Johannes Schindelin (9):
  contrib: add a script to initialize VS Code configuration
  vscode: hard-code a couple defines
  cache.h: extract enum declaration from inside a struct declaration
  mingw: define WIN32 explicitly
  vscode: only overwrite C/C++ settings
  vscode: wrap commit messages at column 72 by default
  vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  vscode: add a dictionary for cSpell
  vscode: let cSpell work on commit messages, too

 .gitignore                    |   1 +
 cache.h                       |  24 ++-
 config.mak.uname              |   2 +-
 contrib/vscode/.gitattributes |   1 +
 contrib/vscode/README.md      |  14 ++
 contrib/vscode/init.sh        | 375 ++++++++++++++++++++++++++++++++++
 6 files changed, 405 insertions(+), 12 deletions(-)
 create mode 100644 contrib/vscode/.gitattributes
 create mode 100644 contrib/vscode/README.md
 create mode 100755 contrib/vscode/init.sh


base-commit: 53f9a3e157dbbc901a02ac2c73346d375e24978c
Published-As: https://github.com/gitgitgadget/git/releases/tags/pr-2%2Fdscho%2Fvscode-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2/dscho/vscode-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/2

Range-diff vs v1:

  1:  e2e449a00 !  1:  bbf13e40a contrib: add a script to initialize VS Code configuration
     @@ -4,11 +4,14 @@
      
          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.
     +    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.
      
     -    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.
     +    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>
      
  2:  3770bd855 =  2:  6c8b5a4f2 vscode: hard-code a couple defines
  3:  de49c4bf2 =  3:  105b50c62 cache.h: extract enum declaration from inside a struct declaration
  4:  b3ce2ccf4 =  4:  4b95b1e2a mingw: define WIN32 explicitly
  5:  06dcf6d97 =  5:  3dd53c04c vscode: only overwrite C/C++ settings
  6:  08212c57e =  6:  384b08836 vscode: wrap commit messages at column 72 by default
  7:  2e880b6f1 =  7:  ba78af756 vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  8:  ce216cf43 =  8:  358f38d3a vscode: add a dictionary for cSpell
  9:  4c2aa015a =  9:  b9c628b88 vscode: let cSpell work on commit messages, too

-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration
  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
  2018-07-30 15:42   ` [PATCH v2 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
                     ` (7 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

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


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 2/9] vscode: hard-code a couple defines
  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   ` [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration Johannes Schindelin via GitGitGadget
@ 2018-07-30 15:42   ` 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
                     ` (6 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

Sadly, we do not get all of the definitions via ALL_CFLAGS. Some defines
are passed to GCC *only* when compiling specific files, such as git.o.

Let's just hard-code them into the script for the time being.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 3cc93243f..494a51ac5 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -115,7 +115,19 @@ include Makefile
 vscode-init:
 	@mkdir -p .vscode && \
 	incs= && defs= && \
-	for e in $(ALL_CFLAGS); do \
+	for e in $(ALL_CFLAGS) \
+			'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
+			'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
+			'-DBINDIR="$(bindir_relative_SQ)"' \
+			'-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' \
+			'-DDEFAULT_GIT_TEMPLATE_DIR="$(template_dir_SQ)"' \
+			'-DETC_GITCONFIG="$(ETC_GITCONFIG_SQ)"' \
+			'-DETC_GITATTRIBUTES="$(ETC_GITATTRIBUTES_SQ)"' \
+			'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
+			'-DCURL_DISABLE_TYPECHECK', \
+			'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
+			'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
+			'-DGIT_INFO_PATH="$(infodir_relative_SQ)"'; do \
 		case "$$e" in \
 		-I.) \
 			incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 3/9] cache.h: extract enum declaration from inside a struct declaration
  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   ` [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration Johannes Schindelin via GitGitGadget
  2018-07-30 15:42   ` [PATCH v2 2/9] vscode: hard-code a couple defines Johannes Schindelin via GitGitGadget
@ 2018-07-30 15:42   ` Johannes Schindelin via GitGitGadget
  2018-07-30 15:42   ` [PATCH v2 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
                     ` (5 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

While it is technically possible, it is confusing. Not only the user,
but also VS Code's intellisense.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 cache.h | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/cache.h b/cache.h
index 89a107a7f..2380136f6 100644
--- a/cache.h
+++ b/cache.h
@@ -1425,18 +1425,20 @@ extern void *read_object_with_reference(const struct object_id *oid,
 extern struct object *peel_to_type(const char *name, int namelen,
 				   struct object *o, enum object_type);
 
+enum date_mode_type {
+	DATE_NORMAL = 0,
+	DATE_RELATIVE,
+	DATE_SHORT,
+	DATE_ISO8601,
+	DATE_ISO8601_STRICT,
+	DATE_RFC2822,
+	DATE_STRFTIME,
+	DATE_RAW,
+	DATE_UNIX
+};
+
 struct date_mode {
-	enum date_mode_type {
-		DATE_NORMAL = 0,
-		DATE_RELATIVE,
-		DATE_SHORT,
-		DATE_ISO8601,
-		DATE_ISO8601_STRICT,
-		DATE_RFC2822,
-		DATE_STRFTIME,
-		DATE_RAW,
-		DATE_UNIX
-	} type;
+	enum date_mode_type type;
 	const char *strftime_fmt;
 	int local;
 };
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 4/9] mingw: define WIN32 explicitly
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (2 preceding siblings ...)
  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   ` Johannes Schindelin via GitGitGadget
  2018-07-30 15:42   ` [PATCH v2 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
                     ` (4 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This helps VS Code's intellisense to figure out that we want to include
windows.h, and that we want to define the minimum target Windows version
as Windows Vista/2008R2.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 config.mak.uname | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/config.mak.uname b/config.mak.uname
index 684fc5bf0..2be2f1981 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -528,7 +528,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
 	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
 		compat/win32/pthread.o compat/win32/syslog.o \
 		compat/win32/dirent.o
-	BASIC_CFLAGS += -DPROTECT_NTFS_DEFAULT=1
+	BASIC_CFLAGS += -DWIN32 -DPROTECT_NTFS_DEFAULT=1
 	EXTLIBS += -lws2_32
 	GITLIBS += git.res
 	PTHREAD_LIBS =
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 5/9] vscode: only overwrite C/C++ settings
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (3 preceding siblings ...)
  2018-07-30 15:42   ` [PATCH v2 4/9] mingw: define WIN32 explicitly Johannes Schindelin via GitGitGadget
@ 2018-07-30 15:42   ` 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
                     ` (3 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

The C/C++ settings are special, as they are the only generated VS Code
configurations that *will* change over the course of Git's development,
e.g. when a new constant is defined.

Therefore, let's only update the C/C++ settings, also to prevent user
modifications from being overwritten.

Ideally, we would keep user modifications in the C/C++ settings, but
that would require parsing JSON, a task for which a Unix shell script is
distinctly unsuited. So we write out .new files instead, and warn the
user if they may want to reconcile their changes.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 494a51ac5..ba9469226 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -13,7 +13,7 @@ die "Could not create .vscode/"
 
 # General settings
 
-cat >.vscode/settings.json <<\EOF ||
+cat >.vscode/settings.json.new <<\EOF ||
 {
     "C_Cpp.intelliSenseEngine": "Default",
     "C_Cpp.intelliSenseEngineFallback": "Disabled",
@@ -51,7 +51,7 @@ esac
 
 # Default build task
 
-cat >.vscode/tasks.json <<EOF ||
+cat >.vscode/tasks.json.new <<EOF ||
 {
     // See https://go.microsoft.com/fwlink/?LinkId=733558
     // for the documentation about the tasks.json format
@@ -73,7 +73,7 @@ die "Could not install default build task"
 
 # Debugger settings
 
-cat >.vscode/launch.json <<EOF ||
+cat >.vscode/launch.json.new <<EOF ||
 {
     // Use IntelliSense to learn about possible attributes.
     // Hover to view descriptions of existing attributes.
@@ -175,3 +175,20 @@ vscode-init:
 	echo '}'
 EOF
 die "Could not write settings for the C/C++ extension"
+
+for file in .vscode/settings.json .vscode/tasks.json .vscode/launch.json
+do
+	if test -f $file
+	then
+		if git diff --no-index --quiet --exit-code $file $file.new
+		then
+			rm $file.new
+		else
+			printf "The file $file.new has these changes:\n\n"
+			git --no-pager diff --no-index $file $file.new
+			printf "\n\nMaybe \`mv $file.new $file\`?\n\n"
+		fi
+	else
+		mv $file.new $file
+	fi
+done
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 6/9] vscode: wrap commit messages at column 72 by default
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (4 preceding siblings ...)
  2018-07-30 15:42   ` [PATCH v2 5/9] vscode: only overwrite C/C++ settings Johannes Schindelin via GitGitGadget
@ 2018-07-30 15:42   ` 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
                     ` (2 subsequent siblings)
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

When configuring VS Code as core.editor (via `code --wait`), we really
want to adhere to the Git conventions of wrapping commit messages.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index ba9469226..face115e8 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -17,6 +17,10 @@ cat >.vscode/settings.json.new <<\EOF ||
 {
     "C_Cpp.intelliSenseEngine": "Default",
     "C_Cpp.intelliSenseEngineFallback": "Disabled",
+    "[git-commit]": {
+        "editor.wordWrap": "wordWrapColumn",
+        "editor.wordWrapColumn": 72
+    },
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 7/9] vscode: use 8-space tabs, no trailing ws, etc for Git's source code
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (5 preceding siblings ...)
  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   ` 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
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

This adds a couple settings for the .c/.h files so that it is easier to
conform to Git's conventions while editing the source code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index face115e8..29f2a729d 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -21,6 +21,14 @@ cat >.vscode/settings.json.new <<\EOF ||
         "editor.wordWrap": "wordWrapColumn",
         "editor.wordWrapColumn": 72
     },
+    "[c]": {
+        "editor.detectIndentation": false,
+        "editor.insertSpaces": false,
+        "editor.tabSize": 8,
+        "editor.wordWrap": "wordWrapColumn",
+        "editor.wordWrapColumn": 80,
+        "files.trimTrailingWhitespace": true
+    },
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 8/9] vscode: add a dictionary for cSpell
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (6 preceding siblings ...)
  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   ` 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
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

The quite useful cSpell extension allows VS Code to have "squiggly"
lines under spelling mistakes. By default, this would add too much
clutter, though, because so much of Git's source code uses words that
would trigger cSpell.

Let's add a few words to make the spell checking more useful by reducing
the number of false positives.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 169 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 168 insertions(+), 1 deletion(-)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index 29f2a729d..a134cb4c5 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -32,7 +32,174 @@ cat >.vscode/settings.json.new <<\EOF ||
     "files.associations": {
         "*.h": "c",
         "*.c": "c"
-    }
+    },
+    "cSpell.words": [
+        "DATAW",
+        "DBCACHED",
+        "DFCHECK",
+        "DTYPE",
+        "Hamano",
+        "HCAST",
+        "HEXSZ",
+        "HKEY",
+        "HKLM",
+        "IFGITLINK",
+        "IFINVALID",
+        "ISBROKEN",
+        "ISGITLINK",
+        "ISSYMREF",
+        "Junio",
+        "LPDWORD",
+        "LPPROC",
+        "LPWSTR",
+        "MSVCRT",
+        "NOARG",
+        "NOCOMPLETE",
+        "NOINHERIT",
+        "RENORMALIZE",
+        "STARTF",
+        "STARTUPINFOEXW",
+        "Schindelin",
+        "UCRT",
+        "YESNO",
+        "argcp",
+        "beginthreadex",
+        "committish",
+        "contentp",
+        "cpath",
+        "cpidx",
+        "ctim",
+        "dequote",
+        "envw",
+        "ewah",
+        "fdata",
+        "fherr",
+        "fhin",
+        "fhout",
+        "fragp",
+        "fsmonitor",
+        "hnsec",
+        "idents",
+        "includeif",
+        "interpr",
+        "iprog",
+        "isexe",
+        "iskeychar",
+        "kompare",
+        "mksnpath",
+        "mktag",
+        "mktree",
+        "mmblob",
+        "mmbuffer",
+        "mmfile",
+        "noenv",
+        "nparents",
+        "ntpath",
+        "ondisk",
+        "ooid",
+        "oplen",
+        "osdl",
+        "pnew",
+        "pold",
+        "ppinfo",
+        "pushf",
+        "pushv",
+        "rawsz",
+        "rebasing",
+        "reencode",
+        "repo",
+        "rerere",
+        "scld",
+        "sharedrepo",
+        "spawnv",
+        "spawnve",
+        "spawnvpe",
+        "strdup'ing",
+        "submodule",
+        "submodules",
+        "topath",
+        "topo",
+        "tpatch",
+        "unexecutable",
+        "unhide",
+        "unkc",
+        "unkv",
+        "unmark",
+        "unmatch",
+        "unsets",
+        "unshown",
+        "untracked",
+        "untrackedcache",
+        "unuse",
+        "upos",
+        "uval",
+        "vreportf",
+        "wargs",
+        "wargv",
+        "wbuffer",
+        "wcmd",
+        "wcsnicmp",
+        "wcstoutfdup",
+        "wdeltaenv",
+        "wdir",
+        "wenv",
+        "wenvblk",
+        "wenvcmp",
+        "wenviron",
+        "wenvpos",
+        "wenvsz",
+        "wfile",
+        "wfilename",
+        "wfopen",
+        "wfreopen",
+        "wfullpath",
+        "which'll",
+        "wlink",
+        "wmain",
+        "wmkdir",
+        "wmktemp",
+        "wnewpath",
+        "wotype",
+        "wpath",
+        "wpathname",
+        "wpgmptr",
+        "wpnew",
+        "wpointer",
+        "wpold",
+        "wpos",
+        "wputenv",
+        "wrmdir",
+        "wship",
+        "wtarget",
+        "wtemplate",
+        "wunlink",
+        "xcalloc",
+        "xgetcwd",
+        "xmallocz",
+        "xmemdupz",
+        "xmmap",
+        "xopts",
+        "xrealloc",
+        "xsnprintf",
+        "xutftowcs",
+        "xutftowcsn",
+        "xwcstoutf"
+    ],
+    "cSpell.ignoreRegExpList": [
+        "\\\"(DIRC|FSMN|REUC|UNTR)\\\"",
+        "\\\\u[0-9a-fA-Fx]{4}\\b",
+        "\\b(filfre|frotz|xyzzy)\\b",
+        "\\bCMIT_FMT_DEFAULT\\b",
+        "\\bde-munge\\b",
+        "\\bGET_OID_DISAMBIGUATORS\\b",
+        "\\bHASH_RENORMALIZE\\b",
+        "\\bTREESAMEness\\b",
+        "\\bUSE_STDEV\\b",
+        "\\Wchar *\\*\\W*utfs\\W",
+        "cURL's",
+        "nedmalloc'ed",
+        "ntifs\\.h",
+    ],
 }
 EOF
 die "Could not write settings.json"
-- 
gitgitgadget


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v2 9/9] vscode: let cSpell work on commit messages, too
  2018-07-30 15:42 ` [PATCH v2 0/9] Add support to develop Git in Visual Studio Code Johannes Schindelin via GitGitGadget
                     ` (7 preceding siblings ...)
  2018-07-30 15:42   ` [PATCH v2 8/9] vscode: add a dictionary for cSpell Johannes Schindelin via GitGitGadget
@ 2018-07-30 15:42   ` Johannes Schindelin via GitGitGadget
  8 siblings, 0 replies; 29+ messages in thread
From: Johannes Schindelin via GitGitGadget @ 2018-07-30 15:42 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Johannes Schindelin

From: Johannes Schindelin <johannes.schindelin@gmx.de>

By default, the cSpell extension ignores all files under .git/. That
includes, unfortunately, COMMIT_EDITMSG, i.e. commit messages. However,
spell checking is *quite* useful when writing commit messages... And
since the user hardly ever opens any file inside .git (apart from commit
messages, the config, and sometimes interactive rebase's todo lists),
there is really not much harm in *not* ignoring .git/.

The default also ignores `node_modules/`, but that does not apply to
Git, so let's skip ignoring that, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/vscode/init.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/contrib/vscode/init.sh b/contrib/vscode/init.sh
index a134cb4c5..27de94994 100755
--- a/contrib/vscode/init.sh
+++ b/contrib/vscode/init.sh
@@ -33,6 +33,8 @@ cat >.vscode/settings.json.new <<\EOF ||
         "*.h": "c",
         "*.c": "c"
     },
+    "cSpell.ignorePaths": [
+    ],
     "cSpell.words": [
         "DATAW",
         "DBCACHED",
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2018-07-30 15:43 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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   ` [PATCH v2 1/9] contrib: add a script to initialize VS Code configuration Johannes Schindelin via GitGitGadget
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

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).