Skip to content

Commit d66f0fa

Browse files
committed
Document specially integrated modules and integration process.
1 parent 8febede commit d66f0fa

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,49 @@ See [Declarative String Processing Overview][decl-string]
99
## Requirements
1010

1111
- [Swift Trunk Development Snapshot](https://www.swift.org/download/#snapshots) DEVELOPMENT-SNAPSHOT-2022-02-03 or later.
12+
13+
## Integration with Swift
14+
15+
`_MatchingEngine`, `_CUnicode` and `_StringProcessing` are specially integrated modules that are built as part of apple/swift.
16+
17+
Specifically, `_MatchingEngine` contains the parser for regular expression literals and is built both as part of the compiler and as a core library. `_CUnicode` and `_StringProcessing` are built together as a core library named `_StringProcessing`.
18+
19+
| Module | Swift toolchain component |
20+
| ------------------- | ------------------------------------------------------------------------------------ |
21+
| `_MatchingEngine` | `SwiftCompilerSources/Sources/ExperimentalRegex` and `stdlib/public/_MatchingEngine` |
22+
| `_CUnicode` | `stdlib/public/_StringProcessing` |
23+
| `_StringProcessing` | `stdlib/public/_StringProcessing` |
24+
25+
## Pull request testing
26+
27+
Pull requests are tested via Swift CI. Unlike other packages, sources from this package (the `_MatchingEngine` module) are used directly by the Swift compiler, so any change to these sources will be cross-tested with the compiler using `build-script` in addition to SwiftPM testing. Other sources are tested using SwiftPM only.
28+
29+
### Workflow
30+
31+
- Create pull requests.
32+
- Create a pull request in apple/swift-experimental-string-processing from `main` to `swift/main`, e.g. "[Integration] main -> swift/main".
33+
- If apple/swift needs to be modified together, create a pull request in apple/swift.
34+
- Trigger CI.
35+
- In the apple/swift-experimental-string-processing pull request, trigger CI using the following command (replacing `<PR NUMBER>` with the apple/swift pull request number, if any):
36+
```
37+
apple/swift#<PR NUMBER> # use this line only if there is an corresponding apple/swift PR
38+
@swift-ci please test
39+
```
40+
- In the apple/swift pull request (if any), trigger CI using the following command (replacing `<PR NUMBER>` with the apple/swift-experimental-string-processing pull request number):
41+
```
42+
apple/swift-experimental-string-processing#<PR NUMBER>
43+
@swift-ci please test
44+
```
45+
- Merge when approved.
46+
- Merge the pull request in apple/swift-experimental-string-processing as a **merge commit**.
47+
- Merge the pull request in apple/swift, if any.
48+
49+
## Development notes
50+
51+
Compiler integration can be tricky. Use special caution when developing `_MatchingEngine`, `_CUnicode` and `_StringProcessing` modules.
52+
53+
- Do not change the names of these modules without due approval from compiler and infrastructure teams.
54+
- Do not modify the existing ABI between the regular expression parser and the Swift compiler unless absolutely necessary.
55+
- Always minimize the number of lockstep integrations, i.e. when apple/swift-experimental-string-processing and apple/swift have to change together.
56+
- In `_StringProcessing`, do not write fully qualified references to symbols in `_CUnicode`, and always wrap `import _CUnicode` in a `#if canImport(_CUnicode)`. This is because `_CUnicode` is built as part of `_StringProcessing` with CMake.
57+
- In `_MatchingEngine`, do not write fully qualified references to `_MatchingEngine` itself. This is because `_MatchingEngine` is built as `ExperimentalRegex` in `SwiftCompilerSources/` with CMake.

0 commit comments

Comments
 (0)