wafer-lsp 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl
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.
- wafer_lsp/handlers/__init__.py +30 -0
- wafer_lsp/handlers/diagnostics.py +26 -1
- wafer_lsp/handlers/document_symbol.py +93 -4
- wafer_lsp/handlers/hip_diagnostics.py +303 -0
- wafer_lsp/handlers/hover.py +45 -9
- wafer_lsp/handlers/inlay_hint.py +180 -0
- wafer_lsp/handlers/semantic_tokens.py +146 -46
- wafer_lsp/languages/detector.py +82 -9
- wafer_lsp/languages/registry.py +22 -1
- wafer_lsp/parsers/__init__.py +18 -0
- wafer_lsp/parsers/hip_parser.py +688 -0
- wafer_lsp/services/__init__.py +17 -0
- wafer_lsp/services/hip_docs.py +806 -0
- wafer_lsp/services/hip_hover_service.py +412 -0
- {wafer_lsp-0.1.0.dist-info → wafer_lsp-0.1.2.dist-info}/METADATA +4 -1
- {wafer_lsp-0.1.0.dist-info → wafer_lsp-0.1.2.dist-info}/RECORD +18 -14
- {wafer_lsp-0.1.0.dist-info → wafer_lsp-0.1.2.dist-info}/WHEEL +0 -0
- {wafer_lsp-0.1.0.dist-info → wafer_lsp-0.1.2.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
"""
|
|
2
|
+
HIP Hover Service.
|
|
3
|
+
|
|
4
|
+
Provides rich hover documentation for HIP code including:
|
|
5
|
+
- HIP API functions (hipMalloc, hipMemcpy, etc.)
|
|
6
|
+
- Memory qualifiers (__device__, __shared__, __constant__)
|
|
7
|
+
- Wavefront intrinsics (__shfl, __ballot, etc.)
|
|
8
|
+
- Thread indexing (threadIdx, blockIdx, etc.)
|
|
9
|
+
- Kernel function information
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from lsprotocol.types import Hover, MarkupContent, MarkupKind, Position
|
|
13
|
+
|
|
14
|
+
from ..parsers.hip_parser import (
|
|
15
|
+
HIPKernel,
|
|
16
|
+
HIPDeviceFunction,
|
|
17
|
+
SharedMemoryAllocation,
|
|
18
|
+
KernelLaunchSite,
|
|
19
|
+
HIPParser,
|
|
20
|
+
)
|
|
21
|
+
from .hip_docs import (
|
|
22
|
+
HIPDocsService,
|
|
23
|
+
HIPAPIDoc,
|
|
24
|
+
MemoryQualifierDoc,
|
|
25
|
+
IntrinsicDoc,
|
|
26
|
+
ThreadIndexDoc,
|
|
27
|
+
create_hip_docs_service,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class HIPHoverService:
|
|
32
|
+
"""Provides hover documentation for HIP code."""
|
|
33
|
+
|
|
34
|
+
def __init__(self, docs_service: HIPDocsService | None = None):
|
|
35
|
+
self._docs = docs_service or create_hip_docs_service()
|
|
36
|
+
self._parser = HIPParser()
|
|
37
|
+
|
|
38
|
+
def get_hover(self, content: str, position: Position, uri: str) -> Hover | None:
|
|
39
|
+
"""Get hover information for a position in HIP code.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
content: The document content
|
|
43
|
+
position: The cursor position
|
|
44
|
+
uri: The document URI
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
Hover information or None
|
|
48
|
+
"""
|
|
49
|
+
word = self._get_word_at_position(content, position)
|
|
50
|
+
if not word:
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
# Try different types of hover in order of specificity
|
|
54
|
+
|
|
55
|
+
# 1. Check for HIP API functions
|
|
56
|
+
api_doc = self._docs.get_api_doc(word)
|
|
57
|
+
if api_doc:
|
|
58
|
+
return self._format_api_hover(api_doc)
|
|
59
|
+
|
|
60
|
+
# 2. Check for memory qualifiers (including in context)
|
|
61
|
+
qualifier_doc = self._docs.get_memory_qualifier_doc(word)
|
|
62
|
+
if qualifier_doc:
|
|
63
|
+
return self._format_qualifier_hover(qualifier_doc)
|
|
64
|
+
|
|
65
|
+
# 3. Check for intrinsics
|
|
66
|
+
intrinsic_doc = self._docs.get_intrinsic_doc(word)
|
|
67
|
+
if intrinsic_doc:
|
|
68
|
+
return self._format_intrinsic_hover(intrinsic_doc)
|
|
69
|
+
|
|
70
|
+
# 4. Check for thread indexing variables
|
|
71
|
+
thread_doc = self._docs.get_thread_index_doc(word)
|
|
72
|
+
if thread_doc:
|
|
73
|
+
return self._format_thread_index_hover(thread_doc)
|
|
74
|
+
|
|
75
|
+
# 5. Check for kernels/device functions in the file
|
|
76
|
+
parsed = self._parser.parse_file(content)
|
|
77
|
+
|
|
78
|
+
for kernel in parsed.get("kernels", []):
|
|
79
|
+
if kernel.name == word:
|
|
80
|
+
return self._format_kernel_hover(kernel)
|
|
81
|
+
|
|
82
|
+
for device_func in parsed.get("device_functions", []):
|
|
83
|
+
if device_func.name == word:
|
|
84
|
+
return self._format_device_function_hover(device_func)
|
|
85
|
+
|
|
86
|
+
# 6. Check for shared memory variables
|
|
87
|
+
for shared_var in parsed.get("shared_memory", []):
|
|
88
|
+
if shared_var.name == word:
|
|
89
|
+
return self._format_shared_memory_hover(shared_var)
|
|
90
|
+
|
|
91
|
+
# 7. Check for kernel launch (when hovering on kernel name at launch site)
|
|
92
|
+
for launch in parsed.get("launch_sites", []):
|
|
93
|
+
if launch.kernel_name == word and position.line == launch.line:
|
|
94
|
+
return self._format_launch_site_hover(launch)
|
|
95
|
+
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
def _get_word_at_position(self, content: str, position: Position) -> str:
|
|
99
|
+
"""Extract the word at the given position."""
|
|
100
|
+
lines = content.split("\n")
|
|
101
|
+
if position.line >= len(lines):
|
|
102
|
+
return ""
|
|
103
|
+
|
|
104
|
+
line = lines[position.line]
|
|
105
|
+
if position.character >= len(line):
|
|
106
|
+
return ""
|
|
107
|
+
|
|
108
|
+
# Find word boundaries (include underscores for __global__ etc.)
|
|
109
|
+
start = position.character
|
|
110
|
+
while start > 0 and (line[start - 1].isalnum() or line[start - 1] == "_"):
|
|
111
|
+
start -= 1
|
|
112
|
+
|
|
113
|
+
end = position.character
|
|
114
|
+
while end < len(line) and (line[end].isalnum() or line[end] == "_"):
|
|
115
|
+
end += 1
|
|
116
|
+
|
|
117
|
+
return line[start:end]
|
|
118
|
+
|
|
119
|
+
def _format_api_hover(self, doc: HIPAPIDoc) -> Hover:
|
|
120
|
+
"""Format hover content for a HIP API function."""
|
|
121
|
+
lines = [
|
|
122
|
+
f"### `{doc.name}`",
|
|
123
|
+
"",
|
|
124
|
+
f"```cpp",
|
|
125
|
+
doc.signature,
|
|
126
|
+
"```",
|
|
127
|
+
"",
|
|
128
|
+
doc.description,
|
|
129
|
+
"",
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
if doc.parameters:
|
|
133
|
+
lines.append("**Parameters:**")
|
|
134
|
+
for param_name, param_desc in doc.parameters:
|
|
135
|
+
lines.append(f"- `{param_name}`: {param_desc}")
|
|
136
|
+
lines.append("")
|
|
137
|
+
|
|
138
|
+
lines.append(f"**Returns:** {doc.return_value}")
|
|
139
|
+
lines.append("")
|
|
140
|
+
|
|
141
|
+
if doc.amd_notes:
|
|
142
|
+
lines.append("**AMD Notes:**")
|
|
143
|
+
lines.append(f"> {doc.amd_notes}")
|
|
144
|
+
lines.append("")
|
|
145
|
+
|
|
146
|
+
if doc.example:
|
|
147
|
+
lines.append("**Example:**")
|
|
148
|
+
lines.append("```cpp")
|
|
149
|
+
lines.extend(doc.example.replace("\\n", "\n").split("\n"))
|
|
150
|
+
lines.append("```")
|
|
151
|
+
lines.append("")
|
|
152
|
+
|
|
153
|
+
if doc.related:
|
|
154
|
+
lines.append(f"**Related:** {', '.join(f'`{r}`' for r in doc.related)}")
|
|
155
|
+
|
|
156
|
+
if doc.doc_url:
|
|
157
|
+
lines.append("")
|
|
158
|
+
lines.append(f"[📖 Documentation]({doc.doc_url})")
|
|
159
|
+
|
|
160
|
+
return Hover(contents=MarkupContent(
|
|
161
|
+
kind=MarkupKind.Markdown,
|
|
162
|
+
value="\n".join(lines)
|
|
163
|
+
))
|
|
164
|
+
|
|
165
|
+
def _format_qualifier_hover(self, doc: MemoryQualifierDoc) -> Hover:
|
|
166
|
+
"""Format hover content for a memory qualifier."""
|
|
167
|
+
lines = [
|
|
168
|
+
f"### `{doc.name}`",
|
|
169
|
+
"",
|
|
170
|
+
doc.description,
|
|
171
|
+
"",
|
|
172
|
+
"**AMD Architecture:**",
|
|
173
|
+
doc.amd_details,
|
|
174
|
+
"",
|
|
175
|
+
"**Performance Tips:**",
|
|
176
|
+
doc.performance_tips,
|
|
177
|
+
]
|
|
178
|
+
|
|
179
|
+
if doc.example:
|
|
180
|
+
lines.append("")
|
|
181
|
+
lines.append("**Example:**")
|
|
182
|
+
lines.append("```cpp")
|
|
183
|
+
lines.extend(doc.example.split("\n"))
|
|
184
|
+
lines.append("```")
|
|
185
|
+
|
|
186
|
+
return Hover(contents=MarkupContent(
|
|
187
|
+
kind=MarkupKind.Markdown,
|
|
188
|
+
value="\n".join(lines)
|
|
189
|
+
))
|
|
190
|
+
|
|
191
|
+
def _format_intrinsic_hover(self, doc: IntrinsicDoc) -> Hover:
|
|
192
|
+
"""Format hover content for a wavefront intrinsic."""
|
|
193
|
+
lines = [
|
|
194
|
+
f"### `{doc.name}`",
|
|
195
|
+
"",
|
|
196
|
+
f"```cpp",
|
|
197
|
+
doc.signature,
|
|
198
|
+
"```",
|
|
199
|
+
"",
|
|
200
|
+
doc.description,
|
|
201
|
+
"",
|
|
202
|
+
"**⚠️ AMD Wavefront Behavior:**",
|
|
203
|
+
f"> {doc.amd_behavior}",
|
|
204
|
+
"",
|
|
205
|
+
]
|
|
206
|
+
|
|
207
|
+
if doc.parameters:
|
|
208
|
+
lines.append("**Parameters:**")
|
|
209
|
+
for param_name, param_desc in doc.parameters:
|
|
210
|
+
lines.append(f"- `{param_name}`: {param_desc}")
|
|
211
|
+
lines.append("")
|
|
212
|
+
|
|
213
|
+
lines.append(f"**Returns:** {doc.return_value}")
|
|
214
|
+
lines.append("")
|
|
215
|
+
|
|
216
|
+
if doc.example:
|
|
217
|
+
lines.append("**Example:**")
|
|
218
|
+
lines.append("```cpp")
|
|
219
|
+
lines.extend(doc.example.replace("\\n", "\n").split("\n"))
|
|
220
|
+
lines.append("```")
|
|
221
|
+
lines.append("")
|
|
222
|
+
|
|
223
|
+
if doc.cuda_equivalent:
|
|
224
|
+
lines.append(f"**CUDA Equivalent:** `{doc.cuda_equivalent}`")
|
|
225
|
+
|
|
226
|
+
return Hover(contents=MarkupContent(
|
|
227
|
+
kind=MarkupKind.Markdown,
|
|
228
|
+
value="\n".join(lines)
|
|
229
|
+
))
|
|
230
|
+
|
|
231
|
+
def _format_thread_index_hover(self, doc: ThreadIndexDoc) -> Hover:
|
|
232
|
+
"""Format hover content for thread indexing variables."""
|
|
233
|
+
lines = [
|
|
234
|
+
f"### `{doc.name}`",
|
|
235
|
+
"",
|
|
236
|
+
doc.description,
|
|
237
|
+
"",
|
|
238
|
+
"**AMD Context:**",
|
|
239
|
+
f"> {doc.amd_context}",
|
|
240
|
+
"",
|
|
241
|
+
]
|
|
242
|
+
|
|
243
|
+
if doc.common_patterns:
|
|
244
|
+
lines.append("**Common Patterns:**")
|
|
245
|
+
lines.append("```cpp")
|
|
246
|
+
for pattern in doc.common_patterns:
|
|
247
|
+
lines.append(pattern)
|
|
248
|
+
lines.append("```")
|
|
249
|
+
|
|
250
|
+
return Hover(contents=MarkupContent(
|
|
251
|
+
kind=MarkupKind.Markdown,
|
|
252
|
+
value="\n".join(lines)
|
|
253
|
+
))
|
|
254
|
+
|
|
255
|
+
def _format_kernel_hover(self, kernel: HIPKernel) -> Hover:
|
|
256
|
+
"""Format hover content for a kernel function."""
|
|
257
|
+
lines = [
|
|
258
|
+
f"### 🚀 HIP Kernel: `{kernel.name}`",
|
|
259
|
+
"",
|
|
260
|
+
]
|
|
261
|
+
|
|
262
|
+
if kernel.docstring:
|
|
263
|
+
lines.append(kernel.docstring)
|
|
264
|
+
lines.append("")
|
|
265
|
+
|
|
266
|
+
# Build signature
|
|
267
|
+
params_str = ", ".join(kernel.parameters) if kernel.parameters else ""
|
|
268
|
+
lines.append("```cpp")
|
|
269
|
+
if kernel.attributes:
|
|
270
|
+
for attr in kernel.attributes:
|
|
271
|
+
lines.append(attr)
|
|
272
|
+
lines.append(f"__global__ void {kernel.name}({params_str})")
|
|
273
|
+
lines.append("```")
|
|
274
|
+
lines.append("")
|
|
275
|
+
|
|
276
|
+
if kernel.parameter_info:
|
|
277
|
+
lines.append("**Parameters:**")
|
|
278
|
+
for param in kernel.parameter_info:
|
|
279
|
+
type_info = f" (`{param.type_str}`)" if param.type_str else ""
|
|
280
|
+
lines.append(f"- `{param.name}`{type_info}")
|
|
281
|
+
lines.append("")
|
|
282
|
+
|
|
283
|
+
lines.append(f"**Location:** Lines {kernel.line + 1} - {kernel.end_line + 1}")
|
|
284
|
+
lines.append("")
|
|
285
|
+
lines.append("**AMD GPU Execution:**")
|
|
286
|
+
lines.append("- Executed on GPU Compute Units")
|
|
287
|
+
lines.append("- Threads grouped into 64-thread wavefronts (CDNA)")
|
|
288
|
+
lines.append("- Use `<<<grid, block>>>` or `hipLaunchKernelGGL` to launch")
|
|
289
|
+
|
|
290
|
+
return Hover(contents=MarkupContent(
|
|
291
|
+
kind=MarkupKind.Markdown,
|
|
292
|
+
value="\n".join(lines)
|
|
293
|
+
))
|
|
294
|
+
|
|
295
|
+
def _format_device_function_hover(self, func: HIPDeviceFunction) -> Hover:
|
|
296
|
+
"""Format hover content for a device function."""
|
|
297
|
+
lines = [
|
|
298
|
+
f"### ⚡ Device Function: `{func.name}`",
|
|
299
|
+
"",
|
|
300
|
+
]
|
|
301
|
+
|
|
302
|
+
# Build signature
|
|
303
|
+
params_str = ", ".join(func.parameters) if func.parameters else ""
|
|
304
|
+
inline_str = "__forceinline__ " if func.is_inline else ""
|
|
305
|
+
lines.append("```cpp")
|
|
306
|
+
lines.append(f"__device__ {inline_str}{func.return_type} {func.name}({params_str})")
|
|
307
|
+
lines.append("```")
|
|
308
|
+
lines.append("")
|
|
309
|
+
|
|
310
|
+
if func.parameter_info:
|
|
311
|
+
lines.append("**Parameters:**")
|
|
312
|
+
for param in func.parameter_info:
|
|
313
|
+
type_info = f" (`{param.type_str}`)" if param.type_str else ""
|
|
314
|
+
lines.append(f"- `{param.name}`{type_info}")
|
|
315
|
+
lines.append("")
|
|
316
|
+
|
|
317
|
+
lines.append(f"**Returns:** `{func.return_type}`")
|
|
318
|
+
lines.append("")
|
|
319
|
+
lines.append(f"**Location:** Lines {func.line + 1} - {func.end_line + 1}")
|
|
320
|
+
lines.append("")
|
|
321
|
+
lines.append("**Note:** Device functions can only be called from kernel or other device functions.")
|
|
322
|
+
|
|
323
|
+
return Hover(contents=MarkupContent(
|
|
324
|
+
kind=MarkupKind.Markdown,
|
|
325
|
+
value="\n".join(lines)
|
|
326
|
+
))
|
|
327
|
+
|
|
328
|
+
def _format_shared_memory_hover(self, shared: SharedMemoryAllocation) -> Hover:
|
|
329
|
+
"""Format hover content for a shared memory allocation."""
|
|
330
|
+
lines = [
|
|
331
|
+
f"### 📦 Shared Memory (LDS): `{shared.name}`",
|
|
332
|
+
"",
|
|
333
|
+
f"**Type:** `{shared.type_str}`",
|
|
334
|
+
]
|
|
335
|
+
|
|
336
|
+
if shared.array_size:
|
|
337
|
+
lines.append(f"**Array Size:** `[{shared.array_size}]`")
|
|
338
|
+
|
|
339
|
+
if shared.size_bytes:
|
|
340
|
+
if shared.size_bytes >= 1024:
|
|
341
|
+
size_str = f"{shared.size_bytes / 1024:.1f} KB"
|
|
342
|
+
else:
|
|
343
|
+
size_str = f"{shared.size_bytes} bytes"
|
|
344
|
+
lines.append(f"**Size:** {size_str}")
|
|
345
|
+
|
|
346
|
+
if shared.is_dynamic:
|
|
347
|
+
lines.append("**Allocation:** Dynamic (extern)")
|
|
348
|
+
else:
|
|
349
|
+
lines.append("**Allocation:** Static")
|
|
350
|
+
|
|
351
|
+
lines.append("")
|
|
352
|
+
lines.append("**AMD LDS Details:**")
|
|
353
|
+
lines.append("- On-chip memory with ~100x lower latency than HBM")
|
|
354
|
+
lines.append("- 64 KB per Compute Unit")
|
|
355
|
+
lines.append("- Shared by all threads in the block")
|
|
356
|
+
lines.append("- 32 banks of 4 bytes each")
|
|
357
|
+
lines.append("")
|
|
358
|
+
lines.append("💡 **Tip:** Avoid bank conflicts by using padding: `[SIZE + 1]`")
|
|
359
|
+
|
|
360
|
+
return Hover(contents=MarkupContent(
|
|
361
|
+
kind=MarkupKind.Markdown,
|
|
362
|
+
value="\n".join(lines)
|
|
363
|
+
))
|
|
364
|
+
|
|
365
|
+
def _format_launch_site_hover(self, launch: KernelLaunchSite) -> Hover:
|
|
366
|
+
"""Format hover content for a kernel launch site."""
|
|
367
|
+
lines = [
|
|
368
|
+
f"### 🎯 Kernel Launch: `{launch.kernel_name}`",
|
|
369
|
+
"",
|
|
370
|
+
]
|
|
371
|
+
|
|
372
|
+
if launch.is_hip_launch_kernel_ggl:
|
|
373
|
+
lines.append("**Launch Method:** `hipLaunchKernelGGL`")
|
|
374
|
+
else:
|
|
375
|
+
lines.append("**Launch Method:** `<<<>>>` syntax")
|
|
376
|
+
|
|
377
|
+
lines.append("")
|
|
378
|
+
|
|
379
|
+
if launch.grid_dim:
|
|
380
|
+
lines.append(f"**Grid Dimensions:** `{launch.grid_dim}`")
|
|
381
|
+
if launch.block_dim:
|
|
382
|
+
lines.append(f"**Block Dimensions:** `{launch.block_dim}`")
|
|
383
|
+
# Try to parse block dimensions for wavefront info
|
|
384
|
+
self._add_wavefront_info(lines, launch.block_dim)
|
|
385
|
+
|
|
386
|
+
if launch.shared_mem_bytes:
|
|
387
|
+
lines.append(f"**Dynamic Shared Memory:** `{launch.shared_mem_bytes}`")
|
|
388
|
+
if launch.stream:
|
|
389
|
+
lines.append(f"**Stream:** `{launch.stream}`")
|
|
390
|
+
|
|
391
|
+
return Hover(contents=MarkupContent(
|
|
392
|
+
kind=MarkupKind.Markdown,
|
|
393
|
+
value="\n".join(lines)
|
|
394
|
+
))
|
|
395
|
+
|
|
396
|
+
def _add_wavefront_info(self, lines: list[str], block_dim: str) -> None:
|
|
397
|
+
"""Add wavefront information based on block dimensions.
|
|
398
|
+
|
|
399
|
+
Only adds info when block_dim is a simple numeric literal we can parse.
|
|
400
|
+
For complex expressions (variables, dim3, etc.), we don't display wavefront count
|
|
401
|
+
because we can't determine the value at parse time.
|
|
402
|
+
"""
|
|
403
|
+
# Only handle simple numeric block size - we don't guess at complex expressions
|
|
404
|
+
if block_dim.isdigit():
|
|
405
|
+
block_size = int(block_dim)
|
|
406
|
+
wavefronts = (block_size + 63) // 64
|
|
407
|
+
lines.append(f"**Wavefronts per Block:** {wavefronts} (64 threads each on CDNA)")
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def create_hip_hover_service(docs_service: HIPDocsService | None = None) -> HIPHoverService:
|
|
411
|
+
"""Create a HIP hover service instance."""
|
|
412
|
+
return HIPHoverService(docs_service)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wafer-lsp
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Language Server Protocol server for GPU programming languages
|
|
5
5
|
Author-email: Wafer <support@wafer.ai>
|
|
6
6
|
License: MIT
|
|
@@ -16,6 +16,9 @@ Requires-Python: >=3.12
|
|
|
16
16
|
Requires-Dist: lsprotocol>=2024.0.0
|
|
17
17
|
Requires-Dist: pygls>=1.0.0
|
|
18
18
|
Requires-Dist: wafer-core
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
21
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
19
22
|
Description-Content-Type: text/markdown
|
|
20
23
|
|
|
21
24
|
# Wafer LSP
|
|
@@ -4,37 +4,41 @@ wafer_lsp/server.py,sha256=ZGFXghuPdKJH7aLhrYvOiKp6zfOdtoqWavdtDwg8Bk4,1938
|
|
|
4
4
|
wafer_lsp/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
wafer_lsp/analyzers/compiler_integration.py,sha256=SLyIZXk52nKP1b04s9Wo77cRLFn5auc4jGRo59Vl9Wc,341
|
|
6
6
|
wafer_lsp/analyzers/docs_index.py,sha256=hrrBgPzIM_mJewCzHyw-2YEWdIchuB3SAMXI8PhtDq0,1309
|
|
7
|
-
wafer_lsp/handlers/__init__.py,sha256=
|
|
7
|
+
wafer_lsp/handlers/__init__.py,sha256=tPFuceRrlCkyW7N5BSRZJY7IMx9Etb6D5c54pZZHJ-w,926
|
|
8
8
|
wafer_lsp/handlers/code_action.py,sha256=PTWs4X3CkfprMmzqC3cg7uEWdfivNNH9thU4E-c6ztQ,1411
|
|
9
9
|
wafer_lsp/handlers/code_lens.py,sha256=mhdJtbS2LMNHGOirJbXUfatqhqMBess5wndfBBOLnok,1301
|
|
10
10
|
wafer_lsp/handlers/completion.py,sha256=qz36GIJXu2fG6K-FdbFNGCCTYSpyV5A6-WOHHNne7QI,142
|
|
11
|
-
wafer_lsp/handlers/diagnostics.py,sha256=
|
|
12
|
-
wafer_lsp/handlers/document_symbol.py,sha256=
|
|
13
|
-
wafer_lsp/handlers/
|
|
14
|
-
wafer_lsp/handlers/
|
|
15
|
-
wafer_lsp/handlers/
|
|
11
|
+
wafer_lsp/handlers/diagnostics.py,sha256=zSaBYdZCqBK2Nb2WhCyQfKDATf8nsj6jMv-K1lvxnQc,1137
|
|
12
|
+
wafer_lsp/handlers/document_symbol.py,sha256=H9rehZlbJKZ-2ueyvTYvz0_-0xfiGaAEPXSWbp76JUk,6465
|
|
13
|
+
wafer_lsp/handlers/hip_diagnostics.py,sha256=YFaSBuwBb7DJNWhBQpwVzYDJvA0KmMV5X9aEEk4X8eM,10923
|
|
14
|
+
wafer_lsp/handlers/hover.py,sha256=F3vweiSHcFlF66qvneJkX02hTq3iaxfXK2h9EkufL7w,8788
|
|
15
|
+
wafer_lsp/handlers/inlay_hint.py,sha256=HW-AFeWps2VbEGPMTAG9KHyiT1s2JS81F71BXq7rwoA,7765
|
|
16
|
+
wafer_lsp/handlers/semantic_tokens.py,sha256=JNJetP7Flh6yxNFzkGM3Ho9D4HaHsVSmoXdgcJnJtZM,7447
|
|
16
17
|
wafer_lsp/handlers/workspace_symbol.py,sha256=YGSkf6doChh1BjVezEQFgIsI2NsQHhOjLchoF5bfBK4,2934
|
|
17
18
|
wafer_lsp/languages/README.md,sha256=hLBqOBvKSqeCrNH9Wrr6XAHa8eBnd81IargPDurodU8,5527
|
|
18
19
|
wafer_lsp/languages/__init__.py,sha256=5cXQkPRsh4JLyZd2QubvTxvuip10695Hb2zjyGF6Frc,472
|
|
19
20
|
wafer_lsp/languages/converter.py,sha256=LPKJfkUV-rNXyJg7Tr5AZ1AlREKH4ulfjDHWlUNvyXU,2487
|
|
20
|
-
wafer_lsp/languages/detector.py,sha256=
|
|
21
|
+
wafer_lsp/languages/detector.py,sha256=7FDQZlnfnkI7DCeySzecIarYnNLINlIRgRkCj7L3SQY,4235
|
|
21
22
|
wafer_lsp/languages/parser_manager.py,sha256=RBYS0w2wIRkKlrEDYvMEGKbsTkOSEpfUB3fjH_9X0Hk,945
|
|
22
|
-
wafer_lsp/languages/registry.py,sha256=
|
|
23
|
+
wafer_lsp/languages/registry.py,sha256=Ka9WDURUniqUAZDpdrQtRTLLzS36n4hq2dIwqj_AFdc,3703
|
|
23
24
|
wafer_lsp/languages/types.py,sha256=c22sDECraXHvazqJSF7WC1ntFNyf9Mbx60EXA9jrbWk,624
|
|
24
|
-
wafer_lsp/parsers/__init__.py,sha256=
|
|
25
|
+
wafer_lsp/parsers/__init__.py,sha256=yh41cxz8Siuv0doHXnhuSY-JPoN82XtqDiOrbJAGeEg,709
|
|
25
26
|
wafer_lsp/parsers/base_parser.py,sha256=RQjk5QOHrS398CrUGP2ZtSsisSl6Kh0KgWLPssSv8ss,176
|
|
26
27
|
wafer_lsp/parsers/cuda_parser.py,sha256=X2EX8gFcZCK8-lSsedby1-vSgYsl2CHLxRxzwr5yIlI,2621
|
|
27
28
|
wafer_lsp/parsers/cutedsl_parser.py,sha256=1r2gdAuwFrp4fQQNEQCRpkwtfunus-hq4h92j2MZyFE,3711
|
|
28
|
-
wafer_lsp/
|
|
29
|
+
wafer_lsp/parsers/hip_parser.py,sha256=nJdwsyTWxdeRJkLMHzUC_4px2fWvtwxd5FgdqOvIXAU,26465
|
|
30
|
+
wafer_lsp/services/__init__.py,sha256=lMMuCBSMfKQeTlUnSo82tXuMGN9rmeoTmCfUigZReL0,1191
|
|
29
31
|
wafer_lsp/services/analysis_service.py,sha256=J6jcg0YQZh9iQYyOXO9bF5NqaJDfnIKhwssCLNcUJjA,619
|
|
30
32
|
wafer_lsp/services/docs_service.py,sha256=ltjkPuQ4DUmuc95AZVfQ6GSWgpjKqv_6-Luh2CFPocQ,1393
|
|
31
33
|
wafer_lsp/services/document_service.py,sha256=gdQ-leIUSK7tiffFsi4UsseIyBx2TO_WIlBPFh57GU8,559
|
|
34
|
+
wafer_lsp/services/hip_docs.py,sha256=mmbFy89Jpj3KUXLO_0M73f0zrkiIw6omtqwCva0Y7Jw,40442
|
|
35
|
+
wafer_lsp/services/hip_hover_service.py,sha256=zbnjdsU6jlCIJh38EDM0sGnLr8I7VKbLABaULJxcXwE,14112
|
|
32
36
|
wafer_lsp/services/hover_service.py,sha256=Zby2lhMO4US2IVTAVuU-ntkRKWrrR7HEjWdlGFSRQj4,9743
|
|
33
37
|
wafer_lsp/services/language_registry_service.py,sha256=qvMR9oI1pUrSv09Q-WRF5-sEu2Nma2fZeUhdydIWaqg,864
|
|
34
38
|
wafer_lsp/services/position_service.py,sha256=Nx-_AuBEr_yUXjAYPfJ_wmeGM_Gy5vbIUW163GqblCU,2831
|
|
35
39
|
wafer_lsp/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
40
|
wafer_lsp/utils/lsp_helpers.py,sha256=pXYvm_gJiJ_TAwwyGxhqvWJQx6CBecYK1c6tVY7gUF8,2739
|
|
37
|
-
wafer_lsp-0.1.
|
|
38
|
-
wafer_lsp-0.1.
|
|
39
|
-
wafer_lsp-0.1.
|
|
40
|
-
wafer_lsp-0.1.
|
|
41
|
+
wafer_lsp-0.1.2.dist-info/METADATA,sha256=nGBlPcHE---A85ZbfH8lH9efnWr_noq9FSs9TL3OYXo,1741
|
|
42
|
+
wafer_lsp-0.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
43
|
+
wafer_lsp-0.1.2.dist-info/entry_points.txt,sha256=XHcM0QZy6GzCYY2ajejqL0tZ2X6y6zYWP0Lg1egxGW4,54
|
|
44
|
+
wafer_lsp-0.1.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|