mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-15 10:12:07 -04:00
build: run qmllint through Quickshell tooling VFS (#1958)
This commit is contained in:
6
Makefile
6
Makefile
@@ -18,7 +18,7 @@ SHELL_INSTALL_DIR=$(DATA_DIR)/quickshell/dms
|
|||||||
ASSETS_DIR=assets
|
ASSETS_DIR=assets
|
||||||
APPLICATIONS_DIR=$(DATA_DIR)/applications
|
APPLICATIONS_DIR=$(DATA_DIR)/applications
|
||||||
|
|
||||||
.PHONY: all build clean install install-bin install-shell install-completions install-systemd install-icon install-desktop uninstall uninstall-bin uninstall-shell uninstall-completions uninstall-systemd uninstall-icon uninstall-desktop help
|
.PHONY: all build clean lint-qml install install-bin install-shell install-completions install-systemd install-icon install-desktop uninstall uninstall-bin uninstall-shell uninstall-completions uninstall-systemd uninstall-icon uninstall-desktop help
|
||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
@@ -32,6 +32,9 @@ clean:
|
|||||||
@$(MAKE) -C $(CORE_DIR) clean
|
@$(MAKE) -C $(CORE_DIR) clean
|
||||||
@echo "Clean complete"
|
@echo "Clean complete"
|
||||||
|
|
||||||
|
lint-qml:
|
||||||
|
@./quickshell/scripts/qmllint-entrypoints.sh
|
||||||
|
|
||||||
# Installation targets
|
# Installation targets
|
||||||
install-bin:
|
install-bin:
|
||||||
@echo "Installing $(BINARY_NAME) to $(INSTALL_DIR)..."
|
@echo "Installing $(BINARY_NAME) to $(INSTALL_DIR)..."
|
||||||
@@ -130,6 +133,7 @@ help:
|
|||||||
@echo " all (default) - Build the DMS binary"
|
@echo " all (default) - Build the DMS binary"
|
||||||
@echo " build - Same as 'all'"
|
@echo " build - Same as 'all'"
|
||||||
@echo " clean - Clean build artifacts"
|
@echo " clean - Clean build artifacts"
|
||||||
|
@echo " lint-qml - Run qmllint on shell entrypoints using the Quickshell tooling VFS"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "Install:"
|
@echo "Install:"
|
||||||
@echo " install - Build and install everything (requires sudo)"
|
@echo " install - Build and install everything (requires sudo)"
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ qs -v -p shell.qml # Verbose debugging
|
|||||||
|
|
||||||
# Code formatting and linting
|
# Code formatting and linting
|
||||||
qmlfmt -t 4 -i 4 -b 250 -w /path/to/file.qml # Format QML (don't use qmlformat)
|
qmlfmt -t 4 -i 4 -b 250 -w /path/to/file.qml # Format QML (don't use qmlformat)
|
||||||
qmllint **/*.qml # Lint all QML files
|
make -C .. lint-qml # From quickshell/, call the repo-root lint target; requires the generated .qmlls.ini VFS from `qs -p .`
|
||||||
./qmlformat-all.sh # Format all QML files
|
./qmlformat-all.sh # Format all QML files
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -783,7 +783,7 @@ When modifying the shell:
|
|||||||
|
|
||||||
**QML Frontend:**
|
**QML Frontend:**
|
||||||
1. **Test changes**: `qs -p .` (automatic reload on file changes)
|
1. **Test changes**: `qs -p .` (automatic reload on file changes)
|
||||||
2. **Code quality**: Run `./qmlformat-all.sh` or `qmlformat -i **/*.qml` and `qmllint **/*.qml`
|
2. **Code quality**: Run `./qmlformat-all.sh` or `qmlformat -i **/*.qml`, then from repo root run `make lint-qml` after Quickshell has generated the local `.qmlls.ini` VFS with `qs -p .`
|
||||||
3. **Performance**: Ensure animations remain smooth (60 FPS target)
|
3. **Performance**: Ensure animations remain smooth (60 FPS target)
|
||||||
4. **Theming**: Use `Theme.propertyName` for Material Design 3 consistency
|
4. **Theming**: Use `Theme.propertyName` for Material Design 3 consistency
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ quickshell -p quickshell/
|
|||||||
**Code formatting:**
|
**Code formatting:**
|
||||||
```bash
|
```bash
|
||||||
qmlfmt -t 4 -i 4 -b 250 -w path/to/file.qml
|
qmlfmt -t 4 -i 4 -b 250 -w path/to/file.qml
|
||||||
qmllint **/*.qml
|
make lint-qml # Run from repo root; requires a generated quickshell/.qmlls.ini VFS from `qs -p quickshell/`
|
||||||
```
|
```
|
||||||
|
|
||||||
## Components
|
## Components
|
||||||
|
|||||||
97
quickshell/scripts/qmllint-entrypoints.sh
Executable file
97
quickshell/scripts/qmllint-entrypoints.sh
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
script_dir="$(
|
||||||
|
CDPATH=''
|
||||||
|
cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd
|
||||||
|
)"
|
||||||
|
repo_root="$(
|
||||||
|
CDPATH=''
|
||||||
|
cd -- "${script_dir}/../.." && pwd
|
||||||
|
)"
|
||||||
|
quickshell_dir="${repo_root}/quickshell"
|
||||||
|
qmllint_bin="${QMLLINT:-qmllint}"
|
||||||
|
qmlls_config="${quickshell_dir}/.qmlls.ini"
|
||||||
|
|
||||||
|
if ! command -v -- "${qmllint_bin}" >/dev/null 2>&1; then
|
||||||
|
printf 'error: qmllint not found in PATH (override with QMLLINT=/path/to/qmllint)\n' >&2
|
||||||
|
exit 127
|
||||||
|
fi
|
||||||
|
|
||||||
|
trim_ini_value() {
|
||||||
|
local value="$1"
|
||||||
|
value="${value#\"}"
|
||||||
|
value="${value%\"}"
|
||||||
|
printf '%s\n' "${value}"
|
||||||
|
}
|
||||||
|
|
||||||
|
read_ini_value() {
|
||||||
|
local key="$1"
|
||||||
|
local file="$2"
|
||||||
|
local raw
|
||||||
|
|
||||||
|
raw="$(sed -n "s/^${key}=//p" "${file}" | head -n 1)"
|
||||||
|
if [[ -z "${raw}" ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
trim_ini_value "${raw}"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_vfs_recovery() {
|
||||||
|
printf 'Generate it by starting the local shell config once, for example:\n' >&2
|
||||||
|
printf ' dms -c %q run\n' "${quickshell_dir}" >&2
|
||||||
|
printf ' qs -p %q\n' "${quickshell_dir}" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ! -e "${qmlls_config}" ]]; then
|
||||||
|
printf 'error: %s is missing. lint-qml requires the Quickshell tooling VFS.\n' "${qmlls_config}" >&2
|
||||||
|
print_vfs_recovery
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! build_dir="$(read_ini_value "buildDir" "${qmlls_config}")"; then
|
||||||
|
printf 'error: %s does not contain a buildDir entry.\n' "${qmlls_config}" >&2
|
||||||
|
print_vfs_recovery
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! import_paths_raw="$(read_ini_value "importPaths" "${qmlls_config}")"; then
|
||||||
|
printf 'error: %s does not contain an importPaths entry.\n' "${qmlls_config}" >&2
|
||||||
|
print_vfs_recovery
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "${build_dir}" || ! -f "${build_dir}/qs/qmldir" ]]; then
|
||||||
|
printf 'error: Quickshell tooling VFS is missing or stale: %s\n' "${build_dir}" >&2
|
||||||
|
print_vfs_recovery
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
targets=(
|
||||||
|
"${quickshell_dir}/shell.qml"
|
||||||
|
"${quickshell_dir}/DMSShell.qml"
|
||||||
|
"${quickshell_dir}/DMSGreeter.qml"
|
||||||
|
)
|
||||||
|
|
||||||
|
qmllint_args=(
|
||||||
|
--ignore-settings
|
||||||
|
-W 0
|
||||||
|
-I "${build_dir}"
|
||||||
|
)
|
||||||
|
|
||||||
|
IFS=':' read -r -a import_paths <<< "${import_paths_raw}"
|
||||||
|
for path in "${import_paths[@]}"; do
|
||||||
|
if [[ -n "${path}" ]]; then
|
||||||
|
qmllint_args+=(-I "${path}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if ! output="$("${qmllint_bin}" "${qmllint_args[@]}" "${targets[@]}" 2>&1)"; then
|
||||||
|
printf '%s\n' "${output}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${output}" ]]; then
|
||||||
|
printf '%s\n' "${output}"
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user