brucegithub/namespace-protector

保护您的命名空间工具

0.1.0 2022-04-11 18:58 UTC

This package is auto-updated.

Last update: 2024-09-22 23:49:52 UTC


README

验证命名空间的工具

Latest Stable Version Latest Unstable Version License Build Status Scrutinizer Code Quality codecov

灵感来自

还有...

动机

允许在命名空间级别提高信息隐藏,类似于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 asciicast

使用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" asciicast

使用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

example output

目前它是一个实验室项目,但...