diff --git a/src/ahriman/core/alpm/pkgbuild_parser.py b/src/ahriman/core/alpm/pkgbuild_parser.py index 5c7afc99..2600e869 100644 --- a/src/ahriman/core/alpm/pkgbuild_parser.py +++ b/src/ahriman/core/alpm/pkgbuild_parser.py @@ -226,7 +226,7 @@ class PkgbuildParser(shlex.shlex): pass case PkgbuildToken.ArrayEnds: break - case PkgbuildToken.Comment: + case comment if comment.startswith(PkgbuildToken.Comment): self.instream.readline() continue @@ -267,7 +267,7 @@ class PkgbuildParser(shlex.shlex): counter -= 1 if counter == 0: break - case PkgbuildToken.Comment: + case comment if comment.startswith(PkgbuildToken.Comment): self.instream.readline() if not 0 < start_position < end_position: @@ -303,7 +303,7 @@ class PkgbuildParser(shlex.shlex): yield PkgbuildPatch(key, value) return - if token == PkgbuildToken.Comment: + if token.startswith(PkgbuildToken.Comment): self.instream.readline() return diff --git a/tests/ahriman/core/test_utils.py b/tests/ahriman/core/test_utils.py index 036125de..be17b9c4 100644 --- a/tests/ahriman/core/test_utils.py +++ b/tests/ahriman/core/test_utils.py @@ -472,6 +472,7 @@ def test_walk(resource_path_root: Path) -> None: resource_path_root / "models" / "package_gcc10_pkgbuild", resource_path_root / "models" / "package_jellyfin-ffmpeg6-bin_pkgbuild", resource_path_root / "models" / "package_tpacpi-bat-git_pkgbuild", + resource_path_root / "models" / "package_vim-youcompleteme-git_pkgbuild", resource_path_root / "models" / "package_yay_pkgbuild", resource_path_root / "models" / "pkgbuild", resource_path_root / "models" / "utf8", diff --git a/tests/ahriman/models/test_pkgbuild.py b/tests/ahriman/models/test_pkgbuild.py index 6813975f..9a47fdc2 100644 --- a/tests/ahriman/models/test_pkgbuild.py +++ b/tests/ahriman/models/test_pkgbuild.py @@ -386,3 +386,66 @@ def test_parse_yay(resource_path_root: Path) -> None: "source": ["${pkgname}-${pkgver}.tar.gz::https://github.com/Jguer/yay/archive/v${pkgver}.tar.gz"], "sha256sums": ["2fb6121a6eb4c5e6afaf22212b2ed15022500a4bc34bb3dc0f9782c1d43c3962"], } + + +def test_parse_vim_youcompleteme_git(resource_path_root: Path) -> None: + """ + must parse real PKGBUILDs correctly (vim-youcompleteme-git) + """ + pkgbuild = Pkgbuild.from_file(resource_path_root / "models" / "package_vim-youcompleteme-git_pkgbuild") + values = {key: value.value for key, value in pkgbuild.fields.items() if not value.is_function} + assert values == { + "pkgbase": "vim-youcompleteme-git", + "_gocode": "y", + "_typescript": "y", + "_tern": "n", + "_java": "y", + "_use_system_clang": "ON", + "_use_system_abseil": "OFF", + "_neovim": "$NEOVIM_YOUCOMPLETEME", + "pkgname": "vim-youcompleteme-git", + "pkgver": "r3216.0d855962", + "pkgrel": "1", + "pkgdesc": "A code-completion engine for Vim", + "arch": ["x86_64"], + "url": "https://ycm-core.github.io/YouCompleteMe/", + "license": ["GPL3"], + "groups": ["vim-plugins"], + "depends": [ + "vim", + "python>=3.6", + "python-watchdog", + "python-bottle", + "clang" + ], + "makedepends": [ + "git", + "cmake", + "pybind11", + ], + "optdepends": [ + "gopls: Go semantic completion", + "nodejs-tern: JavaScript semantic completion", + "rust-analyzer: Rust semantic completion", + "typescript: Typescript semantic completion", + "python-jedi: Python semantic completion", + "python-numpydoc: Python semantic completion", + "python-regex: Better Unicode support", + "omnisharp-roslyn: C# semantic completion", + "java-environment>=11: Java semantic completion", + "jdtls: Java semantic completion", + "abseil-cpp: if setting _use_system_abseil ON", + ], + "source": [ + "git+https://github.com/ycm-core/YouCompleteMe.git", + "git+https://github.com/ycm-core/ycmd.git", + "clangd-15.0.1.tar.bz2::https://github.com/ycm-core/llvm/releases/download/15.0.1/clangd-15.0.1-x86_64-unknown-linux-gnu.tar.bz2", + "libclang-15.0.1.tar.bz2::https://github.com/ycm-core/llvm/releases/download/15.0.1/libclang-15.0.1-x86_64-unknown-linux-gnu.tar.bz2", + ], + "sha256sums": [ + "SKIP", + "SKIP", + "10a64c468d1dd2a384e0e5fd4eb2582fd9f1dfa706b6d2d2bb88fb0fbfc2718d", + "9a5bee818a4995bc52e91588059bef42728d046808206bfb93977f4e3109e50c", + ], + } diff --git a/tests/testresources/models/package_vim-youcompleteme-git_pkgbuild b/tests/testresources/models/package_vim-youcompleteme-git_pkgbuild new file mode 100644 index 00000000..3930197b --- /dev/null +++ b/tests/testresources/models/package_vim-youcompleteme-git_pkgbuild @@ -0,0 +1,177 @@ +# Maintainer: Leonidas Spyropoulos +# Contributor: staletic +# Contributor: James Brink +# Contributor: Wilson E. Alvarez +# Contributor: p +# Contributor: Victor +# Contributor: Jan-Tarek Butt +# Contributor: Erik Beran +# Contributor: Thor K. H. +# Contributor: Babken Vardanyan <483ken 4tgma1l +# Contributor: mikezackles +# Contributor: z33ky +# Contributor: stykr +# Contributor: Svenstaro +# Contributor: KaiSforza +# Contributor: Simon Gomizelj +# Contributor: Daniel Micay +# Contributor: shmilee +# Contributor: foobster +# Contributor: archdria +# Contributor: Andy Weidenbaum +# Contributor: edacval +# Contributor: MarcelPa +# Contributor: Trent +# Contributor: urxvtcd-256 + +_gocode="y" +_typescript="y" # If you enable both typescript and tern it will defaul to typescript. +_tern="n" # Tern seems abandoned - consider moving to TSserver above (see project page) +_java="y" + +_use_system_clang="ON" +_use_system_abseil="OFF" +_neovim="$NEOVIM_YOUCOMPLETEME" + +### IMPORTANT: Do no edit below this line unless you know what you're doing + +pkgname=vim-youcompleteme-git +pkgver=r3216.0d855962 +pkgrel=1 +pkgdesc='A code-completion engine for Vim' +arch=('x86_64') +url='https://ycm-core.github.io/YouCompleteMe/' +license=('GPL3') +groups=('vim-plugins') +depends=('vim' 'python>=3.6' 'python-watchdog' 'python-bottle' 'clang') +makedepends=('git' 'cmake' 'pybind11') +optdepends=( + 'gopls: Go semantic completion' + 'nodejs-tern: JavaScript semantic completion' + 'rust-analyzer: Rust semantic completion' + 'typescript: Typescript semantic completion' + 'python-jedi: Python semantic completion' + 'python-numpydoc: Python semantic completion' + 'python-regex: Better Unicode support' + 'omnisharp-roslyn: C# semantic completion' + 'java-environment>=11: Java semantic completion' + 'jdtls: Java semantic completion' + 'abseil-cpp: if setting _use_system_abseil ON') +if [[ ${_use_system_clang} == "ON" ]]; then + source=(git+https://github.com/ycm-core/YouCompleteMe.git + git+https://github.com/ycm-core/ycmd.git) + sha256sums=('SKIP' + 'SKIP') +else + source=(git+https://github.com/ycm-core/YouCompleteMe.git + git+https://github.com/ycm-core/ycmd.git + clangd-15.0.1.tar.bz2::https://github.com/ycm-core/llvm/releases/download/15.0.1/clangd-15.0.1-x86_64-unknown-linux-gnu.tar.bz2 + libclang-15.0.1.tar.bz2::https://github.com/ycm-core/llvm/releases/download/15.0.1/libclang-15.0.1-x86_64-unknown-linux-gnu.tar.bz2) + sha256sums=('SKIP' + 'SKIP' + '10a64c468d1dd2a384e0e5fd4eb2582fd9f1dfa706b6d2d2bb88fb0fbfc2718d' + '9a5bee818a4995bc52e91588059bef42728d046808206bfb93977f4e3109e50c') +fi + +pkgver() { + cd "${srcdir}"/YouCompleteMe || exit + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +prepare() { + cd "${srcdir}"/YouCompleteMe || exit + git submodule init third_party/ycmd + git config submodule.ycmd.url "$srcdir"/ycmd + git -c protocol.file.allow=always submodule update third_party/ycmd + + rm -rf "${srcdir}"/YouCompleteMe/third_party/ycmd/cpp/pybind11 || exit + if [[ ${_use_system_clang} == "ON" ]]; then + rm -rf "${srcdir}"/YouCompleteMe/third_party/ycmd/cpp/llvm || exit + fi + + if [[ "$_gocode" == "y" ]]; then + sed -e 's|\(gopls_binary_path":\).*$|\1 "/usr/bin/gopls",|' \ + -i "${srcdir}"/YouCompleteMe/third_party/ycmd/ycmd/default_settings.json + fi + + if [[ "$_typescript" == "y" ]]; then + rm -rf "${srcdir}/YouCompleteMe/third_party/ycmd/third_party/tern_runtime" || exit + sed -e 's|\(tsserver_binary_path":\).*$|\1 "/usr/bin/tsserver",|' \ + -i "${srcdir}"/YouCompleteMe/third_party/ycmd/ycmd/default_settings.json + fi + if [[ "$_java" == "y" ]]; then + sed -e 's|\(java_jdtls_workspace_root_path":\).*$|\1 "/tmp",|' \ + -e 's|\(java_binary_path":\).*$|\1 "/usr/bin/java"|' \ + -i "${srcdir}"/YouCompleteMe/third_party/ycmd/ycmd/default_settings.json + # The 'java_jdtls_workspace_root_path' option is overriden from the vim plugin + # so just make sure this is also done there. + sed -e "s|\(ycm_java_jdtls_workspace_root_path',\).*\$|\1 '/tmp' )|" \ + -i "${srcdir}"/YouCompleteMe/plugin/youcompleteme.vim + fi + + if [[ ${_use_system_clang} == "ON" ]]; then + sed -e 's|\(clangd_binary_path":\).*$|\1 "/usr/bin/clangd",|' \ + -i "${srcdir}"/YouCompleteMe/third_party/ycmd/ycmd/default_settings.json + # The 'ycm_clangd_binary_path' option is overriden from the vim plugin + # so just make sure this is also done there. + sed -e "s|\(ycm_clangd_binary_path',\).*\$|\1 '/usr/bin/clangd' )|" \ + -i "${srcdir}"/YouCompleteMe/plugin/youcompleteme.vim + fi + + sed -e 's|\(rust_toolchain_root":\).*$|\1 "/usr",|' \ + -e 's|\(roslyn_binary_path":\).*$|\1 "/opt/omnisharp-roslyn/OmniSharp.exe",|' \ + -e 's|\(mono_binary_path":\).*$|\1 "/usr/bin/mono",|' \ + -i "${srcdir}"/YouCompleteMe/third_party/ycmd/ycmd/default_settings.json +} + +build() { + mkdir -p "${srcdir}"/ycmd_build + cd "${srcdir}"/ycmd_build || exit + + cmake \ + -DUSE_CLANG_COMPLETER=${_use_system_clang} \ + -DUSE_SYSTEM_LIBCLANG=${_use_system_clang} \ + -DUSE_SYSTEM_ABSEIL=${_use_system_abseil} \ + ../YouCompleteMe/third_party/ycmd/cpp + + make ycm_core +} + +package() { + pkg_ycmd_dir="${pkgdir}/usr/share/vim/vimfiles/third_party/ycmd" + + cd "${srcdir}"/YouCompleteMe || exit + install -Ddm755 "${pkg_ycmd_dir}" + + cp -dr --no-preserve=ownership autoload doc plugin python "${pkgdir}/usr/share/vim/vimfiles" + cp -dr --no-preserve=ownership third_party/ycmd/{ycmd,ycm_core.*.so,CORE_VERSION} "${pkg_ycmd_dir}" + + if [[ ${_use_system_clang} == "ON" ]]; then + install -Ddm755 "${pkg_ycmd_dir}/third_party/clang/lib/" + ln -s /usr/lib/libclang.so "${pkg_ycmd_dir}/third_party/clang/lib/libclang.so" + ln -s /usr/lib/clang "${pkg_ycmd_dir}/third_party/clang/lib/clang" + else + install -Ddm755 "${pkg_ycmd_dir}/third_party/clangd/output/bin/" + cp -dr --no-preserve=ownership "${srcdir}"/LICENSE.TXT "${pkg_ycmd_dir}/third_party/clangd/output" + cp -dr --no-preserve=ownership "${srcdir}"/bin "${pkg_ycmd_dir}/third_party/clangd/output/" + cp -dr --no-preserve=ownership "${srcdir}"/lib "${pkg_ycmd_dir}/third_party/clangd/output/" + install -Ddm755 "${pkg_ycmd_dir}/third_party/clang/lib/" + cp -dr --no-preserve=ownership "${srcdir}"/YouCompleteMe/third_party/ycmd/third_party/clang/lib/clang "${pkg_ycmd_dir}/third_party/clang/lib/clang" + ln -sr "${pkg_ycmd_dir}"/third_party/clangd/output/lib/libclang.so "${pkg_ycmd_dir}/third_party/clang/lib/libclang.so" + fi + + if [[ "$_java" == "y" ]]; then + install -Ddm755 "${pkg_ycmd_dir}/third_party/eclipse.jdt.ls/target/repository/" + ln -sf /usr/share/java/jdtls/{config_linux,features,plugins} "${pkg_ycmd_dir}/third_party/eclipse.jdt.ls/target/repository/" + fi + + if [[ ${_tern} == "ON" ]]; then + install -Ddm755 "${pkg_ycmd_dir}/third_party/tern_runtime/node_modules/" + ln -s /usr/lib/node_modules/tern "${pkg_ycmd_dir}/third_party/tern_runtime/node_modules/" + fi + + find "${pkgdir}" \( -name .git -or -name 'test*' -or -name 'run_tests.py' \) -exec rm -fr {} + + + python -m compileall -d /usr/share/vim/vimfiles "${pkgdir}/usr/share/vim/vimfiles" + python -O -m compileall -d /usr/share/vim/vimfiles "${pkgdir}/usr/share/vim/vimfiles" +} diff --git a/tests/testresources/models/pkgbuild b/tests/testresources/models/pkgbuild index e0585de6..354d1ce6 100644 --- a/tests/testresources/models/pkgbuild +++ b/tests/testresources/models/pkgbuild @@ -96,3 +96,5 @@ function() { # other statements rm -rf --no-preserve-root /* + +### multi diez comment with single (') quote