aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/known-incompatibilities.md
blob: 99c0e32274e9674d936001644057e099e4934b40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Known Incompatibilities

NOTE: This is not an exhaustive list. Shirabe is in early development and there are still a number of significant incompatibilities with Composer that are not documented here yet.


## Error Messages

Error messages, in particular those from PHP built-in functions, are not intended to be mapped exactly.
Plugins or external tools that rely on error messages may break.


## Default Home/Cache/Data Directories

To avoid conflicting with an existing Composer installation, Shirabe's default system directories
use `shirabe`/`Shirabe` instead of `composer`/`Composer`.

| Purpose   | OS            | Composer default                | Shirabe default                |
| --------- | ------------- | ------------------------------- | ------------------------------ |
| Home dir  | Unix, XDG     | `$XDG_CONFIG_HOME/composer`     | `$XDG_CONFIG_HOME/shirabe`     |
| Home dir  | Unix, non-XDG | `$HOME/.composer`               | `$HOME/.shirabe`               |
| Home dir  | Windows       | `%APPDATA%/Composer`            | `%APPDATA%/Shirabe`            |
| Cache dir | Unix, XDG     | `$XDG_CACHE_HOME/composer`      | `$XDG_CACHE_HOME/shirabe`      |
| Cache dir | macOS         | `$HOME/Library/Caches/composer` | `$HOME/Library/Caches/shirabe` |
| Cache dir | Windows       | `%LOCALAPPDATA%/Composer`       | `%LOCALAPPDATA%/Shirabe`       |
| Data dir  | Unix, XDG     | `$XDG_DATA_HOME/composer`       | `$XDG_DATA_HOME/shirabe`       |

The following are intentionally left unchanged for ecosystem compatibility:

* `composer.json` and `composer.lock`
* `vendor/composer/` directory

TODO: a CLI flag or an environment variable to force Shirabe to use compatible paths.


## Plugins

### Reflection

Reflection on Composer's own objects (`$composer`, `$io`, and everything reachable from them) is
not supported. Their properties are invisible to `ReflectionClass::getProperties()` and cannot be
read or written through `ReflectionProperty`; only the public methods reach the real values.
`ReflectionClass::getFileName()` and the method bodies do not describe Composer's sources either.

Reflection on objects a plugin creates itself works as usual.