git/contrib/vscode/init.sh
Johannes Schindelin 2a2cdd069a vscode: add a dictionary for cSpell
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-07-30 13:14:39 -07:00

374 lines
8.5 KiB
Bash
Executable file

#!/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.new <<\EOF ||
{
"C_Cpp.intelliSenseEngine": "Default",
"C_Cpp.intelliSenseEngineFallback": "Disabled",
"[git-commit]": {
"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"
},
"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"
# 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.new <<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.new <<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) \
'-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' \
"" "$$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"
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