pytest-language-server 0.5.0__tar.gz → 0.5.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/workflows/ci.yml +2 -2
  2. pytest_language_server-0.5.2/.github/workflows/release.yml +383 -0
  3. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/workflows/security.yml +5 -5
  4. pytest_language_server-0.5.2/.gitignore +23 -0
  5. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.pre-commit-config.yaml +1 -0
  6. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/AGENTS.md +37 -15
  7. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Cargo.lock +1 -1
  8. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Cargo.toml +1 -1
  9. pytest_language_server-0.5.2/EXTENSION_PUBLISHING.md +308 -0
  10. pytest_language_server-0.5.2/EXTENSION_SETUP.md +104 -0
  11. pytest_language_server-0.5.2/PERFORMANCE_ANALYSIS.md +353 -0
  12. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/PKG-INFO +7 -1
  13. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/README.md +6 -0
  14. pytest_language_server-0.5.2/bump-version.sh +58 -0
  15. pytest_language_server-0.5.2/demo.gif +0 -0
  16. pytest_language_server-0.5.2/demo.tape +91 -0
  17. pytest_language_server-0.5.2/extensions/intellij-plugin/README.md +49 -0
  18. pytest_language_server-0.5.2/extensions/intellij-plugin/build.sh +39 -0
  19. pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/java/com/github/bellini666/pytestlsp/PytestLanguageServerListener.kt +23 -0
  20. pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/java/com/github/bellini666/pytestlsp/PytestLanguageServerService.kt +101 -0
  21. pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/plugin.xml +44 -0
  22. pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/pluginIcon.png +0 -0
  23. pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/pluginIcon.svg.png +0 -0
  24. pytest_language_server-0.5.2/extensions/vscode-extension/.vscodeignore +14 -0
  25. pytest_language_server-0.5.2/extensions/vscode-extension/LICENSE +21 -0
  26. pytest_language_server-0.5.2/extensions/vscode-extension/README.md +67 -0
  27. pytest_language_server-0.5.2/extensions/vscode-extension/icon.png +0 -0
  28. pytest_language_server-0.5.2/extensions/vscode-extension/package-lock.json +3263 -0
  29. pytest_language_server-0.5.2/extensions/vscode-extension/package.json +80 -0
  30. pytest_language_server-0.5.2/extensions/vscode-extension/src/extension.ts +98 -0
  31. pytest_language_server-0.5.2/extensions/vscode-extension/tsconfig.json +17 -0
  32. pytest_language_server-0.5.2/extensions/vscode-extension/webpack.config.js +38 -0
  33. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/pyproject.toml +1 -1
  34. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/fixtures.rs +684 -42
  35. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/main.rs +7 -0
  36. pytest_language_server-0.5.0/.github/workflows/release.yml +0 -211
  37. pytest_language_server-0.5.0/.gitignore +0 -1
  38. pytest_language_server-0.5.0/bump-version.sh +0 -46
  39. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/dependabot.yml +0 -0
  40. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/CODE_ACTION_TESTING.md +0 -0
  41. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Formula/pytest-language-server.rb +0 -0
  42. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/LICENSE +0 -0
  43. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/RELEASE.md +0 -0
  44. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/SECURITY.md +0 -0
  45. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/deny.toml +0 -0
  46. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/lib.rs +0 -0
  47. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/manual_test.py +0 -0
  48. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_parser_api.rs +0 -0
  49. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/conftest.py +0 -0
  50. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/conftest.py +0 -0
  51. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/test_hierarchy.py +0 -0
  52. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/test_override.py +0 -0
  53. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_example.py +0 -0
  54. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_parent_usage.py +0 -0
  55. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_undeclared_example.py +0 -0
  56. {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/uv.lock +0 -0
@@ -19,7 +19,7 @@ jobs:
19
19
  os: [ubuntu-latest, macos-latest, windows-latest]
20
20
  rust: [stable]
21
21
  steps:
22
- - uses: actions/checkout@v4
22
+ - uses: actions/checkout@v5
23
23
 
24
24
  - name: Install Rust
25
25
  uses: dtolnay/rust-toolchain@master
@@ -61,7 +61,7 @@ jobs:
61
61
  name: Check MSRV
62
62
  runs-on: ubuntu-latest
63
63
  steps:
64
- - uses: actions/checkout@v4
64
+ - uses: actions/checkout@v5
65
65
 
66
66
  - name: Install Rust
67
67
  uses: dtolnay/rust-toolchain@master
@@ -0,0 +1,383 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: write
11
+ id-token: write
12
+
13
+ jobs:
14
+ linux:
15
+ runs-on: ubuntu-22.04
16
+ strategy:
17
+ matrix:
18
+ target: [x86_64, x86, aarch64, armv7, s390x, ppc64le]
19
+ steps:
20
+ - uses: actions/checkout@v5
21
+ - uses: actions/setup-python@v6
22
+ with:
23
+ python-version: 3.x
24
+ allow-prereleases: true
25
+ - name: Build wheels
26
+ uses: PyO3/maturin-action@v1
27
+ with:
28
+ target: ${{ matrix.target }}
29
+ args: --release --out dist --interpreter python3.10 python3.11 python3.12 python3.13 python3.14 python3.14t pypy3.10 pypy3.11
30
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
31
+ manylinux: auto
32
+ - name: Upload wheels
33
+ uses: actions/upload-artifact@v5
34
+ with:
35
+ name: wheels-linux-${{ matrix.target }}
36
+ path: dist
37
+
38
+ musllinux:
39
+ runs-on: ubuntu-22.04
40
+ strategy:
41
+ matrix:
42
+ target: [x86_64, x86, aarch64, armv7]
43
+ steps:
44
+ - uses: actions/checkout@v5
45
+ - uses: actions/setup-python@v6
46
+ with:
47
+ python-version: 3.x
48
+ allow-prereleases: true
49
+ - name: Build wheels
50
+ uses: PyO3/maturin-action@v1
51
+ with:
52
+ target: ${{ matrix.target }}
53
+ args: --release --out dist --interpreter python3.10 python3.11 python3.12 python3.13 python3.14 python3.14t pypy3.10 pypy3.11
54
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
55
+ manylinux: musllinux_1_2
56
+ - name: Upload wheels
57
+ uses: actions/upload-artifact@v5
58
+ with:
59
+ name: wheels-musllinux-${{ matrix.target }}
60
+ path: dist
61
+
62
+ windows:
63
+ runs-on: windows-latest
64
+ strategy:
65
+ matrix:
66
+ target: [x64, x86]
67
+ steps:
68
+ - uses: actions/checkout@v5
69
+ - uses: actions/setup-python@v6
70
+ with:
71
+ python-version: |
72
+ 3.10
73
+ 3.11
74
+ 3.12
75
+ 3.13
76
+ 3.14
77
+ architecture: ${{ matrix.target }}
78
+ allow-prereleases: true
79
+ - name: Build wheels
80
+ uses: PyO3/maturin-action@v1
81
+ with:
82
+ target: ${{ matrix.target }}
83
+ args: --release --out dist --interpreter 3.10 3.11 3.12 3.13 3.14
84
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
85
+ - name: Upload wheels
86
+ uses: actions/upload-artifact@v5
87
+ with:
88
+ name: wheels-windows-${{ matrix.target }}
89
+ path: dist
90
+
91
+ windows-freethreaded:
92
+ runs-on: windows-latest
93
+ strategy:
94
+ matrix:
95
+ target: [x64, x86]
96
+ steps:
97
+ - uses: actions/checkout@v5
98
+ - uses: actions/setup-python@v6
99
+ with:
100
+ python-version: '3.14t'
101
+ architecture: ${{ matrix.target }}
102
+ allow-prereleases: true
103
+ - name: Build wheels
104
+ uses: PyO3/maturin-action@v1
105
+ with:
106
+ target: ${{ matrix.target }}
107
+ args: --release --out dist --interpreter 3.14t
108
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
109
+ - name: Upload wheels
110
+ uses: actions/upload-artifact@v5
111
+ with:
112
+ name: wheels-windows-${{ matrix.target }}-freethreaded
113
+ path: dist
114
+
115
+ macos:
116
+ runs-on: ${{ matrix.runner }}
117
+ strategy:
118
+ matrix:
119
+ include:
120
+ - runner: macos-13
121
+ target: x86_64
122
+ - runner: macos-14
123
+ target: aarch64
124
+ steps:
125
+ - uses: actions/checkout@v5
126
+ - uses: actions/setup-python@v6
127
+ with:
128
+ python-version: 3.x
129
+ allow-prereleases: true
130
+ - name: Build wheels
131
+ uses: PyO3/maturin-action@v1
132
+ with:
133
+ target: ${{ matrix.target }}
134
+ args: --release --out dist --interpreter 3.10 3.11 3.12 3.13 3.14 3.14t pypy3.10 pypy3.11
135
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
136
+ - name: Upload wheels
137
+ uses: actions/upload-artifact@v5
138
+ with:
139
+ name: wheels-macos-${{ matrix.target }}
140
+ path: dist
141
+
142
+ sdist:
143
+ runs-on: ubuntu-latest
144
+ steps:
145
+ - uses: actions/checkout@v5
146
+ - name: Build sdist
147
+ uses: PyO3/maturin-action@v1
148
+ with:
149
+ command: sdist
150
+ args: --out dist
151
+ - name: Upload sdist
152
+ uses: actions/upload-artifact@v5
153
+ with:
154
+ name: wheels-sdist
155
+ path: dist
156
+
157
+ release:
158
+ name: Release
159
+ runs-on: ubuntu-latest
160
+ if: startsWith(github.ref, 'refs/tags/')
161
+ needs: [linux, musllinux, windows, windows-freethreaded, macos, sdist]
162
+ permissions:
163
+ id-token: write
164
+ contents: write
165
+ attestations: write
166
+ steps:
167
+ - uses: actions/checkout@v5
168
+
169
+ - name: Download all artifacts
170
+ uses: actions/download-artifact@v6
171
+ with:
172
+ pattern: wheels-*
173
+ path: wheels
174
+
175
+ - name: Generate artifact attestation
176
+ uses: actions/attest-build-provenance@v3
177
+ with:
178
+ subject-path: "wheels/*/*.whl"
179
+
180
+ - name: Flatten wheels directory
181
+ run: |
182
+ mkdir -p dist
183
+ find wheels -name "*.whl" -exec cp {} dist/ \;
184
+ find wheels -name "*.tar.gz" -exec cp {} dist/ \;
185
+ ls -lh dist/
186
+
187
+ - name: Create GitHub Release
188
+ uses: softprops/action-gh-release@v2
189
+ with:
190
+ files: dist/*
191
+ generate_release_notes: true
192
+ fail_on_unmatched_files: true
193
+
194
+ - name: Publish to PyPI
195
+ uses: pypa/gh-action-pypi-publish@release/v1
196
+ with:
197
+ skip-existing: true
198
+ verbose: true
199
+
200
+ publish-crates:
201
+ name: Publish to crates.io
202
+ runs-on: ubuntu-latest
203
+ if: startsWith(github.ref, 'refs/tags/')
204
+ permissions:
205
+ contents: read
206
+ steps:
207
+ - uses: actions/checkout@v5
208
+ - name: Install Rust
209
+ uses: dtolnay/rust-toolchain@stable
210
+ - name: Publish to crates.io
211
+ run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
212
+
213
+ build-binaries:
214
+ name: Build standalone binaries for extensions
215
+ runs-on: ${{ matrix.os }}
216
+ if: startsWith(github.ref, 'refs/tags/')
217
+ strategy:
218
+ matrix:
219
+ include:
220
+ - os: ubuntu-latest
221
+ target: x86_64-unknown-linux-gnu
222
+ binary_name: pytest-language-server-x86_64-unknown-linux-gnu
223
+ - os: ubuntu-latest
224
+ target: aarch64-unknown-linux-gnu
225
+ binary_name: pytest-language-server-aarch64-unknown-linux-gnu
226
+ - os: macos-13
227
+ target: x86_64-apple-darwin
228
+ binary_name: pytest-language-server-x86_64-apple-darwin
229
+ - os: macos-14
230
+ target: aarch64-apple-darwin
231
+ binary_name: pytest-language-server-aarch64-apple-darwin
232
+ - os: windows-latest
233
+ target: x86_64-pc-windows-msvc
234
+ binary_name: pytest-language-server.exe
235
+ steps:
236
+ - uses: actions/checkout@v4
237
+ - name: Install Rust
238
+ uses: dtolnay/rust-toolchain@stable
239
+ with:
240
+ targets: ${{ matrix.target }}
241
+ - name: Install cross-compilation tools (Linux ARM64)
242
+ if: matrix.target == 'aarch64-unknown-linux-gnu'
243
+ run: |
244
+ sudo apt-get update
245
+ sudo apt-get install -y gcc-aarch64-linux-gnu
246
+ - name: Build binary
247
+ run: |
248
+ cargo build --release --target ${{ matrix.target }}
249
+ - name: Rename binary (Unix)
250
+ if: runner.os != 'Windows'
251
+ run: |
252
+ mv target/${{ matrix.target }}/release/pytest-language-server target/${{ matrix.target }}/release/${{ matrix.binary_name }}
253
+ - name: Rename binary (Windows)
254
+ if: runner.os == 'Windows'
255
+ run: |
256
+ move target\${{ matrix.target }}\release\pytest-language-server.exe target\${{ matrix.target }}\release\${{ matrix.binary_name }}
257
+ - name: Upload binary
258
+ uses: actions/upload-artifact@v5
259
+ with:
260
+ name: binary-${{ matrix.target }}
261
+ path: target/${{ matrix.target }}/release/${{ matrix.binary_name }}
262
+
263
+ publish-vscode:
264
+ name: Publish VSCode extension
265
+ runs-on: ubuntu-latest
266
+ if: startsWith(github.ref, 'refs/tags/')
267
+ needs: [build-binaries]
268
+ steps:
269
+ - uses: actions/checkout@v4
270
+ - uses: actions/setup-node@v4
271
+ with:
272
+ node-version: '20'
273
+ - name: Download all binaries
274
+ uses: actions/download-artifact@v6
275
+ with:
276
+ pattern: binary-*
277
+ path: extensions/vscode-extension/bin
278
+ - name: Flatten binaries
279
+ run: |
280
+ cd extensions/vscode-extension/bin
281
+ find . -type f -name "pytest-language-server*" -exec mv {} . \;
282
+ find . -type d -empty -delete
283
+ chmod +x pytest-language-server-* || true
284
+ ls -lh
285
+ - name: Install dependencies
286
+ run: |
287
+ cd vscode-extension
288
+ npm install
289
+ npm install -g @vscode/vsce
290
+ - name: Package extension
291
+ run: |
292
+ cd vscode-extension
293
+ vsce package
294
+ - name: Publish to VSCode Marketplace
295
+ run: |
296
+ cd vscode-extension
297
+ vsce publish -p ${{ secrets.VSCE_TOKEN }}
298
+
299
+ publish-intellij:
300
+ name: Publish IntelliJ/PyCharm plugin
301
+ runs-on: ubuntu-latest
302
+ if: startsWith(github.ref, 'refs/tags/')
303
+ needs: [build-binaries]
304
+ steps:
305
+ - uses: actions/checkout@v4
306
+ - uses: actions/setup-java@v4
307
+ with:
308
+ distribution: 'temurin'
309
+ java-version: '17'
310
+ - name: Download all binaries
311
+ uses: actions/download-artifact@v6
312
+ with:
313
+ pattern: binary-*
314
+ path: extensions/intellij-plugin/src/main/resources/bin
315
+ - name: Flatten binaries
316
+ run: |
317
+ cd extensions/intellij-plugin/src/main/resources/bin
318
+ find . -type f -name "pytest-language-server*" -exec mv {} . \;
319
+ find . -type d -empty -delete
320
+ chmod +x pytest-language-server-* || true
321
+ ls -lh
322
+ - name: Build plugin
323
+ run: |
324
+ cd extensions/intellij-plugin
325
+ chmod +x build.sh
326
+ ./build.sh
327
+ - name: Upload plugin to GitHub release
328
+ uses: softprops/action-gh-release@v2
329
+ with:
330
+ files: extensions/intellij-plugin/dist/pytest-language-server-*.zip
331
+ - name: Publish to JetBrains Marketplace
332
+ run: |
333
+ # Install plugin-verifier and marketplace tools
334
+ curl -L https://github.com/JetBrains/intellij-plugin-verifier/releases/download/1.307/plugin-verifier-1.307-all.jar -o plugin-verifier.jar
335
+ # For now, just upload to GitHub releases
336
+ # Manual JetBrains publishing requires their CLI tool or web upload
337
+ echo "Plugin built and uploaded to GitHub releases"
338
+ echo "Upload manually to https://plugins.jetbrains.com/plugin/add"
339
+
340
+ publish-zed:
341
+ name: Publish Zed extension
342
+ runs-on: ubuntu-latest
343
+ if: startsWith(github.ref, 'refs/tags/')
344
+ needs: [build-binaries]
345
+ steps:
346
+ - uses: actions/checkout@v4
347
+ - name: Install Rust
348
+ uses: dtolnay/rust-toolchain@stable
349
+ with:
350
+ targets: wasm32-wasip1
351
+ - name: Download all binaries
352
+ uses: actions/download-artifact@v6
353
+ with:
354
+ pattern: binary-*
355
+ path: extensions/zed-extension/bin
356
+ - name: Flatten binaries
357
+ run: |
358
+ cd extensions/zed-extension/bin
359
+ find . -type f -name "pytest-language-server*" -exec mv {} . \;
360
+ find . -type d -empty -delete
361
+ chmod +x pytest-language-server-* || true
362
+ ls -lh
363
+ - name: Build Zed extension
364
+ run: |
365
+ cd zed-extension
366
+ cargo build --release --target wasm32-wasip1
367
+ - name: Package extension
368
+ run: |
369
+ cd zed-extension
370
+ mkdir -p dist
371
+ cp target/wasm32-wasip1/release/pytest_language_server.wasm dist/extension.wasm
372
+ cp -r bin dist/
373
+ cp extension.toml dist/
374
+ - name: Publish to Zed Extensions
375
+ run: |
376
+ cd zed-extension
377
+ # Note: Zed extension publishing requires manual submission or API key
378
+ # For now, just upload the packaged extension to GitHub releases
379
+ tar -czf ../pytest-language-server-zed-extension.tar.gz -C dist .
380
+ - name: Upload Zed extension to release
381
+ uses: softprops/action-gh-release@v2
382
+ with:
383
+ files: pytest-language-server-zed-extension.tar.gz
@@ -21,10 +21,10 @@ jobs:
21
21
  contents: read
22
22
  security-events: write
23
23
  steps:
24
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
24
+ - uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6.pre.beta
25
25
 
26
26
  - name: Install Rust
27
- uses: dtolnay/rust-toolchain@7b1c307e0dcbda6122208f10795a713336a9b35a # master
27
+ uses: dtolnay/rust-toolchain@0f44b27771c32bda9f458f75a1e241b09791b331 # master
28
28
  with:
29
29
  toolchain: stable
30
30
 
@@ -63,10 +63,10 @@ jobs:
63
63
  permissions:
64
64
  contents: read
65
65
  steps:
66
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
66
+ - uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6.pre.beta
67
67
 
68
68
  - name: Install Rust
69
- uses: dtolnay/rust-toolchain@7b1c307e0dcbda6122208f10795a713336a9b35a # master
69
+ uses: dtolnay/rust-toolchain@0f44b27771c32bda9f458f75a1e241b09791b331 # master
70
70
  with:
71
71
  toolchain: stable
72
72
 
@@ -85,7 +85,7 @@ jobs:
85
85
  contents: read
86
86
  pull-requests: write
87
87
  steps:
88
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
88
+ - uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6.pre.beta
89
89
 
90
90
  - name: Dependency Review
91
91
  uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2
@@ -0,0 +1,23 @@
1
+ /target
2
+ .DS_Store
3
+
4
+ # VSCode extension
5
+ extensions/vscode-extension/node_modules/
6
+ extensions/vscode-extension/out/
7
+ extensions/vscode-extension/dist/
8
+ extensions/vscode-extension/bin/
9
+ extensions/vscode-extension/*.vsix
10
+
11
+ # IntelliJ plugin
12
+ extensions/intellij-plugin/.gradle/
13
+ extensions/intellij-plugin/build/
14
+ extensions/intellij-plugin/dist/
15
+ extensions/intellij-plugin/.idea/
16
+ extensions/intellij-plugin/*.iml
17
+ extensions/intellij-plugin/*.jar
18
+ extensions/intellij-plugin/gradle/
19
+ extensions/intellij-plugin/gradlew*
20
+ extensions/intellij-plugin/src/main/resources/bin/
21
+
22
+ # Zed extension binaries
23
+ extensions/zed-extension/bin/
@@ -51,5 +51,6 @@ repos:
51
51
  - id: check-yaml
52
52
  - id: check-toml
53
53
  - id: check-added-large-files
54
+ args: ['--maxkb=3000'] # Allow demo.gif (2.1MB)
54
55
  - id: check-merge-conflict
55
56
  - id: mixed-line-ending
@@ -160,28 +160,32 @@ tests/
160
160
  ### Running Tests
161
161
 
162
162
  ```bash
163
- cargo test # Run all tests (40 tests)
164
- cargo test --lib # Run library tests (fixtures.rs: 28 tests)
165
- cargo test --bin # Run binary tests (main.rs: 12 tests)
163
+ cargo test # Run all tests
164
+ cargo test --lib # Run library tests (fixtures.rs: 47 tests)
165
+ cargo test --bin # Run binary tests (main.rs: 13 tests)
166
166
  RUST_LOG=debug cargo test # Run with debug logging
167
167
  ```
168
168
 
169
169
  ### Test Coverage
170
170
 
171
- - **40 total tests passing**
172
- - 28 tests in `src/fixtures.rs`
173
- - 12 tests in `src/main.rs`
171
+ - **60 total tests passing** (as of v0.5.1)
172
+ - 47 tests in `src/fixtures.rs`
173
+ - 13 tests in `src/main.rs`
174
174
 
175
175
  Key test areas:
176
176
  - Fixture definition extraction from various patterns
177
177
  - Fixture usage detection in test functions and other fixtures
178
- - Fixture priority/shadowing rules
178
+ - Fixture priority/shadowing rules (8 comprehensive hierarchy tests)
179
179
  - Character-position awareness for self-referencing fixtures
180
180
  - LSP spec compliance (references always include current position)
181
181
  - Multiline function signatures
182
182
  - Third-party fixture detection
183
- - Undeclared fixture detection (5 new tests)
183
+ - Undeclared fixture detection (5 tests)
184
184
  - Hierarchy-aware undeclared fixture reporting
185
+ - Deterministic fixture resolution (ensures no random behavior with multiple definitions)
186
+ - Path normalization and canonicalization
187
+ - Deep directory hierarchy support
188
+ - Sibling directory isolation
185
189
 
186
190
  ## Development Workflow
187
191
 
@@ -209,17 +213,23 @@ cargo audit
209
213
 
210
214
  ### Version Bumping
211
215
 
212
- Use the provided script to bump versions across all files:
216
+ **IMPORTANT**: Always use the provided script to bump versions across all files:
213
217
 
214
218
  ```bash
215
219
  ./bump-version.sh 0.5.0 # Updates Cargo.toml, pyproject.toml, zed-extension/
216
220
  ```
217
221
 
218
- This updates:
222
+ This script automatically updates:
219
223
  - `Cargo.toml`
220
224
  - `pyproject.toml`
221
225
  - `zed-extension/Cargo.toml`
222
226
  - `zed-extension/extension.toml`
227
+ - `Cargo.lock`
228
+
229
+ The script also updates Cargo.lock and ensures all versions are synchronized. After running, commit with:
230
+ ```bash
231
+ git add -A && git commit -m "chore: bump version to X.Y.Z"
232
+ ```
223
233
 
224
234
  ### Pre-commit Hooks
225
235
 
@@ -247,7 +257,7 @@ Install with: `pre-commit install`
247
257
  - `find_all_references()` for find-references
248
258
  - `analyze_file()` if changing what fixtures are detected
249
259
  2. Add test cases to `src/fixtures.rs` tests
250
- 3. Run `cargo test` to ensure all 35 tests pass
260
+ 3. Run `cargo test` to ensure all 52 tests pass
251
261
  4. Consider edge cases: self-referencing fixtures, multiline signatures, conftest.py hierarchy
252
262
 
253
263
  ### Debugging LSP Issues
@@ -302,6 +312,17 @@ Python test discovery patterns:
302
312
  5. **Third-party fixtures**: pytest-mock, pytest-asyncio, pytest-django
303
313
  - Scanned from virtual environment site-packages
304
314
 
315
+ 6. **Path normalization and canonicalization** (fixed in v0.5.1)
316
+ - All file paths are canonicalized in `analyze_file()` to handle symlinks and resolve absolute paths
317
+ - This ensures consistent path comparisons in fixture resolution
318
+ - Prevents random fixture selection when paths have different representations
319
+ - Critical for large projects with multiple conftest.py files
320
+
321
+ 7. **Deterministic fixture resolution** (fixed in v0.5.1)
322
+ - When multiple fixture definitions exist in unrelated directories, resolution is deterministic
323
+ - Priority order: same file > conftest hierarchy > third-party (site-packages) > sorted by path
324
+ - Prevents non-deterministic behavior from DashMap iteration order
325
+
305
326
  ## LSP Spec Compliance
306
327
 
307
328
  Critical LSP specification requirements:
@@ -340,7 +361,7 @@ Critical LSP specification requirements:
340
361
  ## Troubleshooting
341
362
 
342
363
  ### Tests failing after fixture logic changes
343
- - Check that all 40 tests pass: `cargo test`
364
+ - Check that all 52 tests pass: `cargo test`
344
365
  - Focus on failing tests in `fixtures.rs` (fixture resolution) or `main.rs` (LSP handlers)
345
366
  - Common issue: fixture priority rules not respecting conftest.py hierarchy
346
367
 
@@ -375,13 +396,14 @@ Critical LSP specification requirements:
375
396
 
376
397
  ## Version History
377
398
 
378
- - **v0.5.0** (In Development) - Undeclared fixture diagnostics and code actions
379
- - **v0.4.0** - Character-position aware references, LSP spec compliance
399
+ - **v0.5.1** (November 2025) - Critical fix for deterministic fixture resolution, path canonicalization, 8 new comprehensive hierarchy tests
400
+ - **v0.5.0** (November 2025) - Undeclared fixture diagnostics, code actions (quick fixes), line-aware scoping, LSP compliance improvements
401
+ - **v0.4.0** (November 2025) - Character-position aware references, LSP spec compliance
380
402
  - **v0.3.1** - Previous stable release
381
403
  - See GitHub releases for full changelog
382
404
 
383
405
  ---
384
406
 
385
- **Last Updated**: v0.4.0 (November 2025)
407
+ **Last Updated**: v0.5.1 (November 2025)
386
408
 
387
409
  This document should be updated when making significant architectural changes or adding new features.
@@ -753,7 +753,7 @@ dependencies = [
753
753
 
754
754
  [[package]]
755
755
  name = "pytest-language-server"
756
- version = "0.5.0"
756
+ version = "0.5.2"
757
757
  dependencies = [
758
758
  "dashmap 6.1.0",
759
759
  "rustpython-parser",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "pytest-language-server"
3
- version = "0.5.0"
3
+ version = "0.5.2"
4
4
  edition = "2021"
5
5
  rust-version = "1.83"
6
6
  authors = ["Thiago Bellini Ribeiro <hackedbellini@gmail.com>"]