brucegithub / namespace-protector
保护您的命名空间工具
0.1.0
2022-04-11 18:58 UTC
Requires
- php: ^8
- ext-json: *
- brucegithub/minimal-vo: dev-main
- graphp/graphviz: 0.2.*
- nikic/php-parser: ^4.4
- psr/event-dispatcher: ^1.0
- psr/simple-cache: ^1.0
- symfony/console: ^5.1
- thecodingmachine/safe: ^1.1
- webmozart/assert: ^1.8
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9
- roave/security-advisories: dev-master
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-09-22 23:49:52 UTC
README
验证命名空间的工具
灵感来自
- https://www.slideshare.net/MicheleOrselli/comunicare-condividere-e-mantenere-decisioni-architetturali-nei-team-di-sviluppo-approcci-e-strumenti
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers#:~:text=Class%20members%2C%20including%20nested%20classes,from%20outside%20the%20containing%20type.
- https://wiki.php.net/rfc/namespace-visibility
还有...
动机
允许在命名空间级别提高信息隐藏,类似于C#/Java的public/private类。想法是,在某些情况下,命名空间可以除了特定的入口点外都是私有的。例如,第三方库的命名空间。
本项目的架构遵循以下规则
- 不允许NULL
- 不允许使用instanceof
- 不允许使用switch
- 不允许使用static
最好有
- 最小化@var注释
待办事项
10/10/2021
- [] 审查db命名空间
- [] 删除psalm-suppress
- [] 删除psalm次要问题
等待
- [] 添加DISCOVER_CONFIG模式,因此对于在composer.json的
extra
节点中声明命名空间库可见性设置的每个库,它可以自主执行有效性验证。
完成
- 添加构建冲突图的命令
最小配置
通过JSON配置,可以定义
{ "version": "0.1.0", "start-path": "src", "composer-json-path": "./", "public-entries": [], "private-entries": [], "mode": "MODE_MAKE_VENDOR_PRIVATE" }
速度快,因为每个AST都被缓存并重用,直到目标文件更改
- 模式
public
默认模式,在此配置中,只有私有命名空间被验证 - 模式
private vendor
,在此模式中,每个对供应商命名空间的访问都会触发违规,如果未添加公开命名空间。
安装和运行
使用Composer
composer require --dev brucegithub/namespace-protector
使用Phar
将其添加到composer.json中
"repositories": [{ "type": "vcs", "url": "https://github.com/brucegithub/namespace-protector-phar.git" }],
composer require --dev brucegithub/namespace-protector-phar --no-cache "dev-main"
使用Docker
docker run --rm -it -v $(pwd):/namespace-protector brucedockerhub/namespace-protector:0.1.0 create-config
docker run --rm -it -v $(pwd):/namespace-protector brucedockerhub/namespace-protector:0.1.0 validate-namespace
设置
vendor/bin/namespace-protector create-config
运行
vendor/bin/namespace-protector validate-namespace
➜ namespace-protector git:(master) ✗ vendor/bin/namespace-protector validate-namespace |Dump config: |> Version: 0.1.0 |> Cache: FALSE |> Plotter: plotter-terminal |> Path start: tests/Stub/RealProject/src |> Composer Json path: ./ |> Mode: PUBLIC |> Private entries: | >NamespaceProtector\Common\ | >NamespaceProtector\Scanner\ | >PhpParser | |> Public entries: Load data... Loaded 3 files to validate Loaded 5031 built in symbols Start analysis... Processed file: tests/Stub/RealProject/src/NamespaceProtectorProcessorFactory.php > ERROR Line: 7 of use PhpParser\NodeTraverser > ERROR Line: 8 of use PhpParser\ParserFactory > ERROR Line: 14 of use NamespaceProtector\Scanner\ComposerJson > ERROR Line: 16 of use NamespaceProtector\Common\FileSystemPath > ERROR Line: 19 of use NamespaceProtector\Scanner\FileSystemScanner Processed file: tests/Stub/RealProject/src/Analyser.php > ERROR Line: 8 of use NamespaceProtector\Common\PathInterface Processed file: tests/Stub/RealProject/src/EnvironmentDataLoader.php > ERROR Line: 8 of use NamespaceProtector\Scanner\ComposerJson Total files: 3 Total errors: 7 Elapsed time: 0.68148
Example of output in png format.
➜ vendord/bin/namespace-protector validate-namespace plotter-png
目前它是一个实验室项目,但...