85845580d9
The contrib/vscode/init.sh script initializes the .vscode directory with some helpful metadata so VS Code handles Git code better. One big issue that VS Code has is detecting the tab width based on file type. ".txt" files were not covered by this script before, so add them with the appropriate tab widths. This prevents inserting spaces instead of tabs and keeps the tab width to eight instead of four or two. While we are here, remove the "editor.wordWrap" settings. The editor's word wrap is only cosmetic: it does not actually insert newlines when your typing goes over the column limit. This can make it appear like you have properly wrapped code, but it is incorrect. Further, existing code that is over the column limit is wrapped even if your editor window is wider than the limit. This can make reading such code more difficult. Without these lines, VS Code renders the lines accurately, without "ghost" newlines. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
379 lines
8.6 KiB
Bash
Executable File
379 lines
8.6 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,
|
|
"files.trimTrailingWhitespace": true
|
|
},
|
|
"[txt]": {
|
|
"editor.detectIndentation": false,
|
|
"editor.insertSpaces": false,
|
|
"editor.tabSize": 8,
|
|
"files.trimTrailingWhitespace": true
|
|
},
|
|
"files.associations": {
|
|
"*.h": "c",
|
|
"*.c": "c"
|
|
},
|
|
"cSpell.ignorePaths": [
|
|
],
|
|
"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": [],
|
|
"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
|