Skip to content

Commit e6726ba

Browse files
Monviechfichtner
authored andcommitted
lint: Add linter that finds unused imports in php classes
1 parent aaf9a1c commit e6726ba

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

Mk/lint.mk

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ lint-acl:
111111
lint-class:
112112
@${COREREFDIR}/Scripts/class-filename.sh ${COREREFDIR}
113113

114+
lint-import:
115+
@${COREREFDIR}/Scripts/class-import.sh ${COREREFDIR}
116+
114117
SCRIPTDIRS!= if [ -d ${.CURDIR}/src/opnsense/scripts ]; then find ${.CURDIR}/src/opnsense/scripts -type d -depth 1; fi
115118

116119
lint-exec:
@@ -154,4 +157,4 @@ lint-plist:
154157
@rm ${WRKDIR}/plist.*
155158
.endif
156159

157-
lint: lint-plist lint-desc lint-shell lint-xml lint-model lint-acl lint-class lint-exec lint-php
160+
lint: lint-plist lint-desc lint-shell lint-xml lint-model lint-acl lint-class lint-import lint-exec lint-php

Scripts/class-import.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/sh
2+
3+
# Copyright (c) 2026 Deciso B.V.
4+
#
5+
# Redistribution and use in source and binary forms, with or without
6+
# modification, are permitted provided that the following conditions
7+
# are met:
8+
#
9+
# 1. Redistributions of source code must retain the above copyright
10+
# notice, this list of conditions and the following disclaimer.
11+
#
12+
# 2. Redistributions in binary form must reproduce the above copyright
13+
# notice, this list of conditions and the following disclaimer in the
14+
# documentation and/or other materials provided with the distribution.
15+
#
16+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22+
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24+
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25+
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26+
# SUCH DAMAGE.
27+
28+
RET=0
29+
30+
cd "${1}" || exit ${RET}
31+
32+
if [ ! -d src ]; then
33+
exit ${RET}
34+
fi
35+
36+
for FILE in $(find src -name "*.php"); do
37+
for LINE in $(grep '^use ' ${FILE} || true); do
38+
IMPORT=$(echo "${LINE}" | sed 's/^use //; s/;//')
39+
CLASS=${IMPORT##*\\}
40+
41+
COUNT=$(grep -w "${CLASS}" ${FILE} | wc -l)
42+
43+
if [ "${COUNT}" -le 1 ]; then
44+
echo "${FILE}: warning: stale import use ${IMPORT}"
45+
fi
46+
done
47+
done
48+
49+
exit ${RET}

0 commit comments

Comments
 (0)