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.
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/workflows/ci.yml +2 -2
- pytest_language_server-0.5.2/.github/workflows/release.yml +383 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/workflows/security.yml +5 -5
- pytest_language_server-0.5.2/.gitignore +23 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.pre-commit-config.yaml +1 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/AGENTS.md +37 -15
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Cargo.lock +1 -1
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Cargo.toml +1 -1
- pytest_language_server-0.5.2/EXTENSION_PUBLISHING.md +308 -0
- pytest_language_server-0.5.2/EXTENSION_SETUP.md +104 -0
- pytest_language_server-0.5.2/PERFORMANCE_ANALYSIS.md +353 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/PKG-INFO +7 -1
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/README.md +6 -0
- pytest_language_server-0.5.2/bump-version.sh +58 -0
- pytest_language_server-0.5.2/demo.gif +0 -0
- pytest_language_server-0.5.2/demo.tape +91 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/README.md +49 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/build.sh +39 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/java/com/github/bellini666/pytestlsp/PytestLanguageServerListener.kt +23 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/java/com/github/bellini666/pytestlsp/PytestLanguageServerService.kt +101 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/plugin.xml +44 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/pluginIcon.png +0 -0
- pytest_language_server-0.5.2/extensions/intellij-plugin/src/main/resources/META-INF/pluginIcon.svg.png +0 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/.vscodeignore +14 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/LICENSE +21 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/README.md +67 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/icon.png +0 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/package-lock.json +3263 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/package.json +80 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/src/extension.ts +98 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/tsconfig.json +17 -0
- pytest_language_server-0.5.2/extensions/vscode-extension/webpack.config.js +38 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/pyproject.toml +1 -1
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/fixtures.rs +684 -42
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/main.rs +7 -0
- pytest_language_server-0.5.0/.github/workflows/release.yml +0 -211
- pytest_language_server-0.5.0/.gitignore +0 -1
- pytest_language_server-0.5.0/bump-version.sh +0 -46
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/dependabot.yml +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/CODE_ACTION_TESTING.md +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/Formula/pytest-language-server.rb +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/LICENSE +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/RELEASE.md +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/SECURITY.md +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/deny.toml +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/src/lib.rs +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/manual_test.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_parser_api.rs +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/conftest.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/conftest.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/test_hierarchy.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/subdir/test_override.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_example.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_parent_usage.py +0 -0
- {pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/tests/test_project/test_undeclared_example.py +0 -0
- {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@
|
|
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@
|
|
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
|
{pytest_language_server-0.5.0 → pytest_language_server-0.5.2}/.github/workflows/security.yml
RENAMED
|
@@ -21,10 +21,10 @@ jobs:
|
|
|
21
21
|
contents: read
|
|
22
22
|
security-events: write
|
|
23
23
|
steps:
|
|
24
|
-
- uses: actions/checkout@
|
|
24
|
+
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6.pre.beta
|
|
25
25
|
|
|
26
26
|
- name: Install Rust
|
|
27
|
-
uses: dtolnay/rust-toolchain@
|
|
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@
|
|
66
|
+
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6.pre.beta
|
|
67
67
|
|
|
68
68
|
- name: Install Rust
|
|
69
|
-
uses: dtolnay/rust-toolchain@
|
|
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@
|
|
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/
|
|
@@ -160,28 +160,32 @@ tests/
|
|
|
160
160
|
### Running Tests
|
|
161
161
|
|
|
162
162
|
```bash
|
|
163
|
-
cargo test # Run all tests
|
|
164
|
-
cargo test --lib # Run library tests (fixtures.rs:
|
|
165
|
-
cargo test --bin # Run binary tests (main.rs:
|
|
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
|
-
- **
|
|
172
|
-
-
|
|
173
|
-
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
379
|
-
- **v0.
|
|
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.
|
|
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.
|