diff --git a/lua/lint/linters/shellcheck_ebuild/.gitignore b/lua/lint/linters/shellcheck_ebuild/.gitignore new file mode 100644 index 00000000..2d19fc76 --- /dev/null +++ b/lua/lint/linters/shellcheck_ebuild/.gitignore @@ -0,0 +1 @@ +*.html diff --git a/lua/lint/linters/shellcheck_ebuild/create.sh b/lua/lint/linters/shellcheck_ebuild/create.sh new file mode 100755 index 00000000..c2eeaf04 --- /dev/null +++ b/lua/lint/linters/shellcheck_ebuild/create.sh @@ -0,0 +1,91 @@ +#!/usr/bin/sh + +scriptDir="$(realpath --canonicalize-missing "$0/..")" + +regenHTML="$1" + +ebuildHTML="$scriptDir/ebuild-vars.html" + +endingTagSearch=false +{ + [ ! -f "$ebuildHTML" ] || [ "$regenHTML" = true ] +} && +curl --silent 'https://devmanual.gentoo.org/ebuild-writing/variables/index.html' > "$ebuildHTML" + +echo "return [[" > "$scriptDir/ebuild-vars.lua" + +while IFS='' read -r line; do + $endingTagSearch && { + case "$line" in + '') + endingTagSearch=false + ;; + *) + echo "$line" + ;; + esac + } || { + case "$line" in + '

'*) + echo "$line" + endingTagSearch=true + ;; + '

'*) + echo "$line" + endingTagSearch=true + ;; + '

'*) + echo "$line" + endingTagSearch=true + ;; + esac + } +done < "$ebuildHTML" | +sed -nE 's|^\s*([A-Z][^<]*)$|export \1|p' >> "$scriptDir/ebuild-vars.lua" + +eclassParse(){ + eclassHTML="$scriptDir/$1-eclass.html" + + endingTagSearch=false + { + [ ! -f "$eclassHTML" ] || [ "$regenHTML" = true ] + } && + curl --silent "https://devmanual.gentoo.org/eclass-reference/$1.eclass/index.html" > "$eclassHTML" + + while IFS='' read -r line; do + $endingTagSearch && { + case "$line" in + 'ECLASS VARIABLES

') + echo "$line" + endingTagSearch=true + ;; + esac + } + done < "$eclassHTML" | + sed -nE 's|^
([^<]*)<.+|export \1|p' >> "$scriptDir/ebuild-vars.lua" +} + +eclassGroupsHTML="$scriptDir/eclass-list.html" + +endingTagSearch=false +{ + [ ! -f "$eclassGroupsHTML" ] || [ "$regenHTML" = true ] +} && +curl --silent "https://devmanual.gentoo.org/eclass-reference/index.html" > "$eclassGroupsHTML" + +sed -nE 's|
  • > "$scriptDir/ebuild-vars.lua" + +sed -i -E '/^export .*[&;].*/d' "$scriptDir/ebuild-vars.lua" diff --git a/lua/lint/linters/shellcheck_ebuild/ebuild-vars.lua b/lua/lint/linters/shellcheck_ebuild/ebuild-vars.lua new file mode 100644 index 00000000..563eee31 --- /dev/null +++ b/lua/lint/linters/shellcheck_ebuild/ebuild-vars.lua @@ -0,0 +1,876 @@ +return [[ +export P +export PN +export PV +export PR +export PVR +export PF +export A +export CATEGORY +export FILESDIR +export WORKDIR +export T +export D +export HOME +export ROOT +export DISTDIR +export EPREFIX +export ED +export EROOT +export BROOT +export SYSROOT +export ESYSROOT +export MERGE_TYPE +export REPLACING_VERSIONS +export REPLACED_BY_VERSION +export EAPI +export DESCRIPTION +export HOMEPAGE +export SRC_URI +export LICENSE +export SLOT +export KEYWORDS +export IUSE +export REQUIRED_USE +export PROPERTIES +export RESTRICT +export DEPEND +export BDEPEND +export RDEPEND +export PDEPEND +export S +export DOCS +export HTML_DOCS +export AR +export ARFLAGS +export AS +export ASFLAGS +export CC +export CFLAGS +export CPPFLAGS +export CXX +export CXXFLAGS +export LD +export LDFLAGS +export LEX +export LFLAGS +export NM +export RANLIB +export YACC +export YFLAGS +export ACCT_GROUP_NAME +export ACCT_GROUP_ID +export ACCT_GROUP_ENFORCE_ID +export ACCT_USER_NAME +export ACCT_USER_ID +export ACCT_USER_ENFORCE_ID +export ACCT_USER_NO_MODIFY +export ACCT_USER_COMMENT +export ACCT_USER_SHELL +export ACCT_USER_HOME +export ACCT_USER_HOME_OWNER +export ACCT_USER_HOME_PERMS +export ACCT_USER_GROUPS +export ADA_DEPS +export ADA_REQUIRED_USE +export ADA_USEDEP +export SOURCE +export ALTERNATIVES +export GENTOO_PATCHNAME +export GENTOO_PATCHDIR +export MY_MPM +export MY_CONF +export MY_MODS +export ALTERNATIVES +export ASPELL_LANG +export ASPELL_SPELLANG +export ASPELL_VERSION +export WANT_AUTOCONF +export WANT_AUTOMAKE +export WANT_LIBTOOL +export AUTOTOOLS_DEPEND +export AUTOTOOLS_AUTO_DEPEND +export AM_OPTS +export AT_NOEAUTOHEADER +export AT_NOEAUTOMAKE +export AT_NOELIBTOOLIZE +export AT_M4DIR +export BRANDING_OS_NAME +export BRANDING_OS_ID +export BRANDING_OS_ID_LIKE +export BRANDING_OS_HOME_URL +export BRANDING_OS_SUPPORT_URL +export BRANDING_OS_BUG_REPORT_URL +export BRANDING_OS_VERSION +export BRANDING_OS_VERSION_ID +export BRANDING_OS_PRETTY_NAME +export CRATES +export CRATE_PATHS_OVERRIDE +export GIT_CRATES +export CARGO_BOOTSTRAP +export CARGO_OPTIONAL +export myfeatures +export ECARGO_HOME +export ECARGO_REGISTRY_DIR +export ECARGO_OFFLINE +export ECARGO_VENDOR +export EVCS_UMASK +export CARGO_CRATE_URIS +export CDROM_OPTIONAL +export CHECKREQS_MEMORY +export CHECKREQS_DISK_BUILD +export CHECKREQS_DISK_USR +export CHECKREQS_DISK_VAR +export CHECKREQS_DONOTHING +export CHROMIUM_LANGS +export BUILD_DIR +export CMAKE_BINARY +export CMAKE_BUILD_TYPE +export CMAKE_IN_SOURCE_BUILD +export CMAKE_MAKEFILE_GENERATOR +export CMAKE_REMOVE_MODULES_LIST +export CMAKE_USE_DIR +export CMAKE_VERBOSE +export CMAKE_WARN_UNUSED_CLI +export CMAKE_ECM_MODE +export CMAKE_EXTRA_CACHE_FILE +export CMAKE_QA_COMPAT_SKIP +export _CMAKE_MINREQVER_CMAKE305 +export _CMAKE_MINREQVER_CMAKE310 +export _CMAKE_MINREQVER_CMAKE316 +export CMAKE_QA_SRC_DIR_READONLY +export CMAKE_SKIP_TESTS +export MYCMAKEARGS +export CTEST_JOBS +export CTEST_LOADAVG +export CMAKE_ECLASS +export CLIMPLEMENTATIONS +export CLSOURCEROOT +export CLSYSTEMROOT +export CLPACKAGE +export NVCCFLAGS +export CUDA_VERBOSE +export ECVS_CVS_COMPRESS +export ECVS_CVS_OPTIONS +export ECVS_CVS_COMMAND +export ECVS_UP_OPTS +export ECVS_CO_OPTS +export ECVS_OFFLINE +export ECVS_LOCAL +export ECVS_LOCALNAME +export ECVS_TOP_DIR +export ECVS_SERVER +export ECVS_MODULE +export ECVS_DATE +export ECVS_BRANCH +export ECVS_AUTH +export ECVS_USER +export ECVS_PASS +export ECVS_SSH_HOST_KEY +export ECVS_SSH_EXTRA_OPTS +export ECVS_CLEAN +export APACHE_VERSION +export APXS +export APACHE_BIN +export APACHE_CTL +export APACHE_BASEDIR +export APACHE_CONFDIR +export APACHE_MODULES_CONFDIR +export APACHE_VHOSTS_CONFDIR +export APACHE_MODULESDIR +export APACHE_DEPEND +export APACHE2_DEPEND +export APACHE2_2_DEPEND +export APACHE2_4_DEPEND +export _DESKTOP_IDS +export KERNEL_EFI_ZBOOT +export DISTUTILS_EXT +export DISTUTILS_OPTIONAL +export DISTUTILS_SINGLE_IMPL +export DISTUTILS_USE_PEP517 +export DISTUTILS_UPSTREAM_PEP517 +export DISTUTILS_DEPS +export DISTUTILS_ALLOW_WHEEL_REUSE +export BUILD_DIR +export DISTUTILS_ALL_SUBPHASE_IMPLS +export DISTUTILS_ARGS +export DISTUTILS_CONFIG_SETTINGS_JSON +export DOCS_BUILDER +export DOCS_DIR +export DOCS_DEPEND +export DOCS_AUTODOC +export DOCS_OUTDIR +export DOCS_CONFIG_NAME +export DOCS_INITIALIZE_GIT +export USE_DOTNET +export DOTNET_VERBOSITY +export DOTNET_PKG_COMPAT +export DOTNET_PKG_RDEPS +export DOTNET_PKG_BDEPS +export DOTNET_PKG_RUNTIME +export DOTNET_PKG_EXECUTABLE +export DOTNET_PKG_CONFIGURATION +export DOTNET_PKG_OUTPUT +export DOTNET_PKG_BAD_PROJECTS +export DOTNET_PKG_PROJECTS +export DOTNET_PKG_RESTORE_EXTRA_ARGS +export DOTNET_PKG_BUILD_EXTRA_ARGS +export DOTNET_PKG_TEST_EXTRA_ARGS +export DUNE_PKG_NAME +export KFMIN +export KF5_BDEPEND +export KF6_BDEPEND +export ECM_I18N +export ECM_HANDBOOK +export ECM_HANDBOOK_DIRS +export ECM_INSTALL_FILES +export ECM_INSTALL_ICONS +export ECM_KCM_TARGETS +export CMAKE_ECM_MODE +export VIRTUALX_REQUIRED +export ECM_NONGUI +export ECM_DEBUG +export ECM_DESIGNERPLUGIN +export ECM_EXAMPLES +export ECM_HANDBOOK +export ECM_HANDBOOK_DIR +export ECM_PO_DIRS +export ECM_PYTHON_BINDINGS +export ECM_QTHELP +export ECM_REMOVE_FROM_INSTALL +export ECM_TEST +export KFMIN +export KDE_GCC_MINIMAL +export SITELISP +export SITEETC +export EMACSMODULES +export EMACS +export EMACSFLAGS +export BYTECOMPFLAGS +export NEED_EMACS +export NEED_EMACS +export ELISP_PATCHES +export ELISP_REMOVE +export SITEFILE +export ELISP_TEXINFO +export EBO_DESCRIPTION +export FILECAPS +export FCAPS_DENY_WORLD_READ +export FONT_SUFFIX +export FONT_S +export FONT_PN +export FONTDIR +export FONT_CONF +export FONT_OPENTYPE_COMPAT +export FORTRAN_NEED_OPENMP +export FORTRAN_STANDARD +export FORTRAN_NEEDED +export KDE_CATV +export FREEDICT_P +export GAP_PKG_EXTRA_INSTALL +export GAP_PKG_HTML_DOCDIR +export EGIT_LFS +export EGIT_CLONE_TYPE +export EGIT_MIN_CLONE_TYPE +export EGIT_LFS_CLONE_TYPE +export EVCS_STORE_DIRS +export EGIT3_STORE_DIR +export EGIT_MIRROR_URI +export EGIT_REPO_URI +export EVCS_OFFLINE +export EVCS_UMASK +export EGIT_BRANCH +export EGIT_COMMIT +export EGIT_COMMIT_DATE +export EGIT_CHECKOUT_DIR +export EGIT_SUBMODULES +export PLUGIN_SO +export PLUGIN_SERVER_SO +export PLUGIN_DOCS +export GNOME2_EAUTORECONF +export ELTCONF +export GNOME2_LA_PUNT +export GLIB_COMPILE_RESOURCES +export GLIB_COMPILE_SCHEMAS +export GNOME_TARBALL_SUFFIX +export GNOME_ORG_MODULE +export GNOME_ORG_PV +export GNUCONFIG_DEPEND +export GNUCONFIG_AUTO_DEPEND +export EGO_PN +export EGO_BUILD_FLAGS +export EGO_PN +export EGO_PN +export EGO_STORE_DIR +export EVCS_OFFLINE +export EVCS_UMASK +export EGO_VENDOR +export EGO_SUM +export _GOMODULE_GOPROXY_BASEURI +export _GOMODULE_GOSUM_REVERSE_MAP +export GO_OPTIONAL +export GREADME_SHOW +export GREADME_DISABLE_AUTOFORMAT +export GST_PLUGINS_ENABLED +export GST_PLUGINS_NOAUTO +export GST_PLUGINS_BUILD_DIR +export GST_TARBALL_SUFFIX +export GST_ORG_MODULE +export GUILE_USEDEP +export GUILE_COMPAT +export GUILE_COMPAT +export GUILE_COMPAT +export GUILE_REQ_USE +export GUILE_USEDEP +export GUILE_DEPS +export CABAL_EXTRA_CONFIGURE_FLAGS +export CABAL_EXTRA_BUILD_FLAGS +export GHC_BOOTSTRAP_FLAGS +export CABAL_EXTRA_HADDOCK_FLAGS +export CABAL_EXTRA_HOOGLE_FLAGS +export CABAL_EXTRA_HSCOLOUR_FLAGS +export CABAL_EXTRA_TEST_FLAGS +export CABAL_DEBUG_LOOSENING +export CABAL_REPORT_OTHER_BROKEN_PACKAGES +export CABAL_HACKAGE_REVISION +export CABAL_PN +export CABAL_PV +export CABAL_P +export CABAL_FILE +export CABAL_DISTFILE +export CABAL_CHDEPS +export CABAL_LIVE_VERSION +export GHC_BOOTSTRAP_PACKAGES +export CABAL_TEST_REQUIRED_BINS +export CABAL_HADDOCK_TARGETS +export CABAL_CHBINS +export JAVA_PKG_IUSE +export JAVA_PKG_OPT_USE +export JAVA_GENTOO_CLASSPATH +export JAVA_GENTOO_CLASSPATH_EXTRA +export JAVA_CLASSPATH_EXTRA +export JAVA_NEEDS_TOOLS +export JAVA_SRC_DIR +export JAVA_RESOURCE_DIRS +export JAVA_ENCODING +export JAVAC_ARGS +export JAVA_MAIN_CLASS +export JAVA_AUTOMATIC_MODULE_NAME +export JAVADOC_ARGS +export JAVA_JAR_FILENAME +export JAVA_BINJAR_FILENAME +export JAVA_LAUNCHER_FILENAME +export JAVA_TESTING_FRAMEWORKS +export JAVA_TEST_RUN_ONLY +export JAVA_TEST_EXCLUDES +export JAVA_TEST_GENTOO_CLASSPATH +export JAVA_TEST_SRC_DIR +export JAVA_TEST_RESOURCE_DIRS +export JAVA_INTERMEDIATE_JAR_NAME +export JAVA_MODULE_INFO_OUT +export JAVA_MODULE_INFO_RELEASE +export JAVA_RELEASE_SRC_DIRS +export JAVA_PKG_ALLOW_VM_CHANGE +export JAVA_PKG_FORCE_VM +export JAVA_PKG_NO_CLEAN +export JAVA_PKG_WANT_BUILD_VM +export JAVA_PKG_WANT_SOURCE +export JAVA_PKG_WANT_TARGET +export JAVA_TEST_EXTRA_ARGS +export JAVA_TEST_RUNNER_EXTRA_ARGS +export JAVA_PKG_DEBUG +export JAVA_RM_FILES +export JAVA_PKG_FORCE_ANT_TASKS +export JAVADOC_CLASSPATH +export JAVADOC_SRC_DIRS +export JAVA_DISABLE_DEPEND_ON_JAVA_DEP_CHECK +export JAVA_VM_BUILD_ONLY +export JAVA_TEST_SELECTION_METHOD +export JAVA_JUNIT_CONSOLE_ARGS +export JAVA_JUNIT_CONSOLE_COLOR +export KDE_BUILD_TYPE +export KDE_ORG_CATEGORY +export KDE_ORG_COMMIT +export KDE_ORG_NAME +export KDE_ORG_SCHEDULE_URI +export KDE_SELINUX_MODULE +export KDE_ORG_TAR_PN +export KDE_ORG_UNRELEASED +export EGIT_MIRROR +export EGIT_REPONAME +export CKV +export EXTRAVERSION +export H_SUPPORTEDARCH +export K_BASE_VER +export K_DEBLOB_AVAILABLE +export K_DEBLOB_TAG +export K_DEFCONFIG +export K_EXP_GENPATCHES_PULL +export K_EXP_GENPATCHES_NOUSE +export K_EXP_GENPATCHES_LIST +export K_EXTRAEINFO +export K_EXTRAELOG +export K_EXTRAEWARN +export K_FROM_GIT +export K_GENPATCHES_VER +export K_LONGTERM +export K_NODRYRUN +export K_NOSETEXTRAVERSION +export K_NOUSENAME +export K_NOUSEPR +export K_PREDEBLOBBED +export K_PREPATCHED +export K_SECURITY_UNSUPPORTED +export K_SYMLINK +export K_USEPV +export K_WANT_GENPATCHES +export KERNEL_URI +export KV +export KV_FULL +export KV_MAJOR +export KV_MINOR +export KV_PATCH +export LINUX_HOSTCFLAGS +export OKV +export RELEASE +export RELEASETYPE +export UNIPATCH_DOCS +export UNIPATCH_EXCLUDE +export UNIPATCH_LIST +export UNIPATCH_STRICTORDER +export KV_FULL +export MODULES_SIGN_HASH +export MODULES_SIGN_KEY +export MODULES_SIGN_CERT +export KERNEL_GENERIC_UKI_CMDLINE +export KERNEL_IUSE_GENERIC_UKI +export KV_FULL +export KV_LOCALVERSION +export TEXMF +export SUPPLIER +export LATEX_ENGINE +export LATEX_DOC_ARGUMENTS +export LIBRETRO_CORE_NAME +export LIBRETRO_COMMIT_SHA +export LIBRETRO_REPO_NAME +export LIBTOOL_DEPEND +export LIBTOOL_AUTO_DEPEND +export CHECKCONFIG_DONOTHING +export KERNEL_DIR +export CONFIG_CHECK +export KBUILD_OUTPUT +export KV_FULL +export KV_MAJOR +export KV_MINOR +export KV_PATCH +export KV_EXTRA +export KV_LOCAL +export KV_DIR +export KV_OUT_DIR +export SKIP_KERNEL_CHECK +export SKIP_KERNEL_BINPKG_ENV_RESET +export MODULES_OPTIONAL_USE +export MODULES_OPTIONAL_USE_IUSE_DEFAULT +export KERNEL_DIR +export ECONF_PARAMS +export BUILD_PARAMS +export BUILD_TARGETS +export MODULE_NAMES +export KERNEL_CHOST +export MODULES_EXTRA_EMAKE +export MODULES_I_WANT_FULL_CONTROL +export MODULES_INITRAMFS_IUSE +export MODULES_SIGN_HASH +export MODULES_SIGN_KEY +export MODULES_SIGN_CERT +export MODULES_KERNEL_MAX +export MODULES_KERNEL_MIN +export MODULES_OPTIONAL_IUSE +export MODULES_MAKEARGS +export LLVM_MAX_SLOT +export LLVM_MAJOR +export LLVM_VERSION +export LLVM_COMPONENTS +export LLVM_TEST_COMPONENTS +export LLVM_MANPAGES +export LLVM_PATCHSET +export LLVM_USE_TARGETS +export ALL_LLVM_EXPERIMENTAL_TARGETS +export ALL_LLVM_PRODUCTION_TARGETS +export ALL_LLVM_TARGET_FLAGS +export LLVM_SOABI +export LIT_JOBS +export LLVM_COMPAT +export LLVM_OPTIONAL +export LLVM_REQUIRED_USE +export LLVM_USEDEP +export LLVM_COMPAT +export LLVM_OPTIONAL +export LLVM_REQUIRED_USE +export LLVM_USEDEP +export LUA_COMPAT +export LUA_COMPAT_OVERRIDE +export LUA_REQ_USE +export BUILD_DIR +export LUA_DEPS +export LUA_REQUIRED_USE +export LUA_USEDEP +export LUA_COMPAT +export LUA_COMPAT_OVERRIDE +export LUA_REQ_USE +export LUA_DEPS +export LUA_REQUIRED_USE +export LUA_SINGLE_USEDEP +export LUA_USEDEP +export ELUA +export LUA +export MATE_DESKTOP_ORG_PN +export MATE_DESKTOP_ORG_PV +export MATE_BRANCH +export MATE_LA_PUNT +export MATE_FORCE_AUTORECONF +export EHG_REPO_URI +export EHG_REVISION +export EHG_STORE_DIR +export EHG_PROJECT +export EHG_CHECKOUT_DIR +export EHG_QUIET +export EHG_CONFIG +export EHG_CLONE_CMD +export EHG_PULL_CMD +export EHG_OFFLINE +export EHG_BOOTSTRAP +export BUILD_DIR +export MESON_VERBOSE +export EMESON_BUILDTYPE +export EMESON_SOURCE +export DONT_MOUNT_BOOT +export DONT_MOUNT_ESP +export MOZILLA_FIVE_HOME +export MOZEXTENSION_TARGET +export MOZ_LANGS +export MOZ_PV +export MOZ_PN +export MOZ_P +export MOZ_FTP_URI +export MOZ_HTTP_URI +export MOZ_LANGPACK_HTTP_URI +export MOZ_LANGPACK_PREFIX +export MOZ_LANGPACK_SUFFIX +export MOZ_LANGPACK_UNOFFICIAL +export MOZ_GENERATE_LANGPACKS +export MOZ_L10N_SOURCEDIR +export MOZ_L10N_URI_PREFIX +export MOZ_L10N_URI_SUFFIX +export MOZ_FORCE_UPSTREAM_L10N +export MOZ_INSTALL_L10N_XPIFILE +export MULTIBUILD_VARIANTS +export MULTIBUILD_VARIANT +export MULTIBUILD_ID +export BUILD_DIR +export MULTILIB_COMPAT +export MULTILIB_USEDEP +export MULTILIB_ABI_FLAG +export MULTILIB_WRAPPED_HEADERS +export MULTILIB_CHOST_TOOLS +export MYSPELL_DICT +export MYSPELL_HYPH +export MYSPELL_THES +export NGINX_SUBSYSTEMS +export NGINX_MODULES +export NGINX_UPDATE_STREAM +export NGX_UPDATE_STREAMS_LIST +export NGINX_TESTS_COMMIT +export NGINX_GIT_URI +export NGINX_GIT_TESTS_URI +export NGINX_MISC_FILES +export OVERRIDE_NGINX_MOD_REQUIRED_USE +export OVERRIDE_NGINX_MOD_DEPEND +export OVERRIDE_NGINX_MOD_TEST_DEPEND +export NGX_TESTS_S +export NGINX_MOD_S +export NGINX_MOD_CONFIG_DIR +export NGINX_MOD_SHARED_OBJECTS +export NGX_MOD_TO_SONAME +export NGINX_MOD_LINK_MODULES +export NGINX_MOD_OVERRIDE_LINK_DEPEND +export NGINX_MOD_OPENRESTY_TESTS +export NGINX_MOD_TEST_DIR +export NGINX_MOD_TEST_LOAD_ORDER +export NGINX_MOD_OVERRIDE_TEST_BDEPEND +export NINJA +export NINJA_DEPEND +export NINJAOPTS +export NINJA_VERBOSE +export NUGET_SYSTEM_NUGETS +export NUGET_APIS +export NUGET_PACKAGES +export NUGETS +export NUGET_URIS +export OFFICE_REQ_USE +export OFFICE_IMPLEMENTATIONS +export OFFICE_EXTENSIONS +export OFFICE_EXTENSIONS_LOCATION +export OPAM_INSTALLER_DEP +export OPAM_INSTALLER +export BUILD_DIR +export PAX_MARKINGS +export GENTOO_DEPEND_ON_PERL +export PERL_USEDEP +export DIST_NAME +export DIST_VERSION +export DIST_A_EXT +export DIST_A +export DIST_AUTHOR +export DIST_SECTION +export DIST_EXAMPLES +export DIST_WIKI +export DIST_MAKE +export DIST_TEST +export DIST_TEST_OVERRIDE +export PHP_EXT_PECL_PKG +export PHP_EXT_PECL_FILENAME +export PHP_EXT_NAME +export PHP_EXT_INI +export PHP_EXT_ZENDEXT +export USE_PHP +export PHP_EXT_OPTIONAL_USE +export PHP_EXT_S +export PHP_EXT_SAPIS +export PHP_INI_NAME +export PHP_EXT_NEEDED_USE +export PHP_EXT_SKIP_PHPIZE +export PHP_EXT_SKIP_PATCHES +export PHP_EXT_ECONF_ARGS +export PHP_PEAR_PKG_NAME +export PEAR_PV +export PHP_PEAR_DOMAIN +export PHP_PEAR_CHANNEL +export KDE_CATV +export PLOCALES +export PLOCALE_BACKUP +export POSTGRES_COMPAT +export POSTGRES_DEP +export POSTGRES_USEDEP +export POSTGRES_REQ_USE +export PG_SLOT +export PG_CONFIG +export POSTGRES_COMPAT +export EPREFIX +export PYPI_NO_NORMALIZE +export PYPI_PN +export PYPI_VERIFY_REPO +export PYTHON_COMPAT +export PYTHON_COMPAT_OVERRIDE +export PYTHON_REQ_USE +export PYTHON_DEPS +export PYTHON_USEDEP +export PYTHON_SINGLE_USEDEP +export PYTHON_COMPAT +export PYTHON_COMPAT_OVERRIDE +export PYTHON_REQ_USE +export PYTHON_DEPS +export PYTHON_USEDEP +export PYTHON_SINGLE_USEDEP +export PYTHON_REQUIRED_USE +export BUILD_DIR +export PYTHON_COMPAT +export PYTHON_COMPAT_OVERRIDE +export PYTHON_REQ_USE +export PYTHON_DEPS +export PYTHON_SINGLE_USEDEP +export PYTHON_USEDEP +export PYTHON_REQUIRED_USE +export PYTHON +export EPYTHON +export EPYTEST_PLUGINS +export EPYTEST_PLUGIN_AUTOLOAD +export EPYTEST_PLUGIN_LOAD_VIA_ENV +export EPYTEST_RERUNS +export EPYTEST_TIMEOUT +export EPYTEST_XDIST +export EPYTEST_JOBS +export EPYTEST_FLAGS +export QT5_BUILD_TYPE +export QT5_KDEPATCHSET_REV +export QT5_MODULE +export QT5_PV +export QT5_TARGET_SUBDIRS +export QT5_GENTOO_CONFIG +export QT5_GENTOO_PRIVATE_CONFIG +export VIRTUALX_REQUIRED +export QT5_BUILD_DIR +export QT6_BUILD_TYPE +export QT6_MODULE +export QT6_HAS_STATIC_LIBS +export QT6_RESTRICT_TESTS +export DOC_CONTENTS +export DISABLE_AUTOFORMATTING +export FORCE_PRINT_ELOG +export README_GENTOO_SUFFIX +export REBAR_PROFILE +export REBAR_APP_SRC +export ROCM_VERSION +export ROCM_REQUIRED_USE +export ROCM_USEDEP +export ROCM_SKIP_GLOBALS +export RUBY_FAKEGEM_NAME +export RUBY_FAKEGEM_VERSION +export RUBY_FAKEGEM_TASK_DOC +export RUBY_FAKEGEM_RECIPE_TEST +export RUBY_FAKEGEM_TASK_TEST +export RUBY_FAKEGEM_RECIPE_DOC +export RUBY_FAKEGEM_DOCDIR +export RUBY_FAKEGEM_EXTRADOC +export RUBY_FAKEGEM_DOC_SOURCES +export RUBY_FAKEGEM_BINWRAP +export RUBY_FAKEGEM_BINDIR +export RUBY_FAKEGEM_REQUIRE_PATHS +export RUBY_FAKEGEM_GEMSPEC +export RUBY_FAKEGEM_EXTRAINSTALL +export RUBY_FAKEGEM_EXTENSIONS +export RUBY_FAKEGEM_EXTENSION_OPTIONS +export RUBY_FAKEGEM_EXTENSION_LIBDIR +export USE_RUBY +export RUBY_PATCHES +export RUBY_OPTIONAL +export RUBY_S +export RUBY_QA_ALLOWED_LIBS +export RUBY_GNOME2_NEED_VIRTX +export USE_RUBY +export RUBY_DEPS +export ERUST_SLOT_OVERRIDE +export ERUST_TYPE_OVERRIDE +export RUST_MAX_VER +export RUST_MIN_VER +export RUST_SLOT +export RUST_TYPE +export RUST_NEEDS_LLVM +export RUST_MULTILIB +export RUST_DEPEND +export RUST_OPTIONAL +export RUST_REQ_USE +export RUST_TOOLCHAIN_BASEURL +export SCONS_MIN_VERSION +export SCONSOPTS +export EXTRA_ESCONS +export SEC_KEYS_VALIDPGPKEYS +export SECUREBOOT_SIGN_KEY +export SECUREBOOT_SIGN_CERT +export MODS +export BASEPOL +export POLICY_PATCH +export POLICY_FILES +export SELINUX_GIT_REPO +export SELINUX_GIT_BRANCH +export SSL_CERT_MANDATORY +export SSL_CERT_USE +export SSL_DEPS_SKIP +export DICT_SUFFIX +export DICT_P +export ESVN_STORE_DIR +export ESVN_FETCH_CMD +export ESVN_UPDATE_CMD +export ESVN_SWITCH_CMD +export ESVN_OPTIONS +export ESVN_REPO_URI +export ESVN_REVISION +export ESVN_USER +export ESVN_PASSWORD +export ESVN_PROJECT +export ESVN_RESTRICT +export ESVN_OFFLINE +export ESVN_UMASK +export ESVN_UP_FREQ +export ESCM_LOGDIR +export CTAN_MIRROR_URL +export TEXLIVE_SCRIPTS_W_FILE_EXT +export TEXLIVE_MODULE_CONTENTS +export TEXLIVE_MODULE_DOC_CONTENTS +export TEXLIVE_MODULE_SRC_CONTENTS +export TEXLIVE_MODULE_BINSCRIPTS +export TEXLIVE_MODULE_BINLINKS +export TL_MODULE_INFORMATION +export TEXLIVE_MODULE_OPTIONAL_ENGINE +export TMPFILES_OPTIONAL +export TC_AUTOCONF_BREAK_INFOS +export TC_AUTOCONF_INFOPATH +export TC_AUTOCONF_ENVPREFIX +export TOOLCHAIN_GCC_PV +export TOOLCHAIN_GCC_VALIDATE_FAILURES_VERSION +export TOOLCHAIN_USE_GIT_PATCHES +export GCC_TESTS_COMPARISON_DIR +export GCC_TESTS_COMPARISON_SLOT +export GCC_TESTS_IGNORE_NO_BASELINE +export GCC_TESTS_REGEN_BASELINE +export GCC_TESTS_CHECK_TARGET +export GCC_TESTS_RUNTESTFLAGS +export TOOLCHAIN_PATCH_DEV +export TOOLCHAIN_HAS_TESTS +export TOOLCHAIN_PATCH_SUFFIX +export TOOLCHAIN_SET_S +export TS_PV +export TS_BINDINGS +export UNPACKER_BZ2 +export UNPACKER_LZIP +export VALA_MIN_API_VERSION +export VALA_MAX_API_VERSION +export VALA_USE_DEPEND +export VDRPLUGIN +export VDR_CONFD_FILE +export VDR_RCADDON_FILE +export GENTOO_VDR_CONDITIONAL +export PO_SUBDIR +export VERIFY_SIG_METHOD +export VERIFY_SIG_OPENPGP_KEY_PATH +export VERIFY_SIG_CERT_IDENTITY +export VERIFY_SIG_CERT_OIDC_ISSUER +export VERIFY_SIG_OPENPGP_KEYSERVER +export VERIFY_SIG_OPENPGP_KEY_REFRESH +export VIM_PLUGIN_VIM_VERSION +export VIM_SPELL_LANGUAGE +export DESCRIPTION +export HOMEPAGE +export VIRTUALX_REQUIRED +export VIRTUALX_DEPEND +export WAF_VERBOSE +export WAF_BINARY +export WEBAPP_DEPEND +export WEBAPP_NO_AUTO_INSTALL +export WEBAPP_OPTIONAL +export WINE_USEDEP +export WINE_SKIP_INSTALL +export WX_GTK_VER +export XEMACS_PKG_CAT +export XEMACS_EXPERIMENTAL +export XORG_MULTILIB +export XORG_EAUTORECONF +export XORG_BASE_INDIVIDUAL_URI +export XORG_MODULE +export XORG_PACKAGE_NAME +export XORG_TARBALL_SUFFIX +export FONT_DIR +export XORG_DRI +export XORG_DOC +export XORG_MULTILIB +export XORG_BASE_INDIVIDUAL_URI +export XORG_MODULE +export XORG_PACKAGE_NAME +export XORG_TARBALL_SUFFIX +export XORG_DOC +export ZIG_OPTIONAL +export ZBS_DEPENDENCIES +export ZBS_DEPENDENCIES_SRC_URI +export my_zbs_args +export ZBS_ARGS_EXTRA +export ZBS_VERBOSE +export BUILD_DIR +export ZBS_ECLASS_DIR +export ZIG_SLOT +export ZIG_NEEDS_LLVM +export ZIG_OPTIONAL +export ZIG_TARGET +export ZIG_CPU +export ZIG_EXE +export ZIG_VER +]] diff --git a/lua/lint/linters/shellcheck_ebuild/init.lua b/lua/lint/linters/shellcheck_ebuild/init.lua new file mode 100644 index 00000000..7dc65c25 --- /dev/null +++ b/lua/lint/linters/shellcheck_ebuild/init.lua @@ -0,0 +1,72 @@ +---@type string the exported files dir +local exportedFileDir = vim.fs.joinpath(vim.fn.stdpath("cache"), "nvim-lint", "shellcheck_ebuild") +vim.fn.mkdir(exportedFileDir, "p") + +local severities = { + error = vim.diagnostic.severity.ERROR, + warning = vim.diagnostic.severity.WARN, + info = vim.diagnostic.severity.INFO, + style = vim.diagnostic.severity.HINT, +} + +---@return string filepath after cache file creation +local function shellcheck_ebuild_custom_file() + ---@type string the exported file path + local exportedFilePath = vim.fs.joinpath(exportedFileDir, vim.fn.sha256(vim.fn.expand("%:p"))) + local mainfile = io.open(vim.fn.expand("%:p"), "r") + ---@type string the data inside the current file + local fileContent + if mainfile ~= nil then + fileContent = mainfile:read("*a") + mainfile:close() + end + local exportedFile = io.open(exportedFilePath, "w") + if exportedFile ~= nil then + exportedFile:write(fileContent .. "\n" .. require("lint.linters.shellcheck_ebuild.ebuild-vars")) + exportedFile:close() + end + return exportedFilePath +end + +---@type lint.Linter +return { + name = "shellcheck_ebuild", + cmd = "shellcheck", + stdin = false, + append_fname = false, -- Automatically append the file name to `args` if `stdin = false` (default: true) + args = { + "--shell", + "bash", --ebuild is a subset of bash: https://dev.gentoo.org/~ulm/pms/head/pms.html#ebuild-file-format + "--enable", + "quote-safe-variables,require-variable-braces", -- these are often advised + "--format", + "json1", + shellcheck_ebuild_custom_file, + }, + ignore_exitcode = true, + parser = function(output) + if output == "" then + return {} + end + local decoded = vim.json.decode(output) + local diagnostics = {} + for _, item in ipairs(decoded.comments or {}) do + table.insert(diagnostics, { + lnum = item.line - 1, + col = item.column - 1, + end_lnum = item.endLine - 1, + end_col = item.endColumn - 1, + code = item.code, + source = "shellcheck_ebuild", + user_data = { + lsp = { + code = item.code, + }, + }, + severity = assert(severities[item.level], "missing mapping for severity " .. item.level), + message = item.message, + }) + end + return diagnostics + end, +}