| Commit message (Collapse) | Author | Age |
| ... | |
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stable names
* tests, options and ci for stable names
* Add back compat design document
* fix warnings
* formatting
* comment
* neaten
* regenerate command line reference
* consolidate ci scripts
* faster ci
* remove libreadline
* Move new function to end of interface
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
| |
* Generate "OpExecutionMode PointMode" for tessellation shaders instead of the incorrect geometry and mesh shader specific "OpExecutionMode OutputPoints".
* Add a test case verifying the OpExecutionMode is correct.
Fixes #7660
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
constraints (#7578)
* fix problem
* cleanup comment
* format code
* make change more restrictive
* format code
* push logic update
* format code
* push test fix
* make test more general
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add error for forward references in generic constraints
Change addresses issue #6545.
The slang compiler's type checker is unable to support cases where
a generic type parameter is referenced as a constraint before it is
declared. For example code like:
````
interface IFoo<T : IFloat>
{
}
void bar<Foo : IFoo<T>, T : IFloat>()
{
}
````
Is not supported, but will currently report a generic error like,
"(0): error 99999: Slang compilation aborted due to an exception
of class Slang::InternalError: unexpected: generic type constraint
during lowering"
This change adds a new check for this kind of code and reports an
error like,
"error 30117: generic constraint for parameter 'Foo' references type
parameter 'T' before it is declared"
when detected. Basic testing of this error is also added in a new
diagnostic test.
* Add error for forward refs in generic constiants update 1
* Add error for forward refs in generic constraints update 2
Revised algo in checkForwardReferencesInGenericConstraint to run
in O(n) instead of the previous O(n^2) using HashSets.
* Add error for forward refs in generic constraints update 3
-Update logic adding referenced decl's in collectReferencedDecls.
-Simplified error string logic.
* Add error for forward refs in generic constraints update 4
-Declare collectReferencedDecls in slang-check.h such that it can
be used as a general utility function.
* format code
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add category list at end of slangc -h output
* Use value category for categories
* format code (#12)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* Regenerate cmdline reference
---------
Co-authored-by: slangbot <ellieh+slangbot@nvidia.com>
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* bottleneck ir module reading and writing
* compute/simple working
* more complex tests working
* neaten
* factor out SourceLoc serialization
* document changes
* Appease clang
* Correct name serialization
* remove unnecessary code
* neaten
* neaten
|
| |
|
|
|
| |
* Language server: sort completion candidate by relevance.
* Small adjustment.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Initial plan
* Implement copysign forward and backward derivatives
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Fix copysign test format to use expected.txt file
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Add wgsl support to copysign and fix y==0 derivative case
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Add wgsl support to copysign helper functions
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Fix copysign derivative to return 0 when either x or y is 0
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Language Server: auto-select the best candidate in signature help.
* Fix constructor call highlighting + goto definition.
* Add test.
* format code
* Improve ctor signature help.
* Add tests.
* Fix decl path printing for extension children.
* Allow goto definition to show core module source.
* c++ compile fix.
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
| |
* Replace SLANG_ALIGN_OF with C++11 alignof
* Fix formatting (again)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add test for mixed use of uniform/ParameterBlock
Adds a test that uses the same struct as a parameter and as a
ParameterBlock.
* Fix for SPIRV block declaration issue
Fixes #7431
* Fix formatting
* Collect struct param usage in first pass
Reduces number of iterations over the entire program.
* more formatting fixes
* formatting
* Remove unused variable
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* don't use access::sample for multisample texture
* Add test case
* format code (#7603)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
---------
Co-authored-by: slangbot <ellieh+slangbot@nvidia.com>
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Initial plan
* Fix crash in WGSL L-value cast lowering with type mismatches
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Apply formatting to fix
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Update test to verify successful compilation instead of error checking
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
Co-authored-by: Yong He <yonghe@outlook.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* emit var and hoist out OpSelect if Composite
* cleanup comment
* address review
check for version in spv context
use phi node instead of using var
move inst's using a list (not in-place modification)
* format code
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
| |
* alias amplification shader as task shader and add mesh shader profile
* add task shader stage alias to capabilities
* regenerate command line reference
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Initial plan
* Fix spurious vk::binding warnings when attribute is present
- Modified _maybeDiagnoseMissingVulkanLayoutModifier to check for GLSLBindingAttribute before warning
- Changed function to return bool indicating if warning was actually issued
- Updated call sites to properly track warning state to reduce duplicates
- Tested fix resolves the issue while preserving correct warnings when needed
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Add test case for vk::binding spurious warning fix
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Update test to use filecheck format as requested
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Remove full file path from CHECK directives as requested
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Fix code formatting with clang-format
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
* Fix behavioral regression in vk-bindings test caused by warning flag logic
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
Co-authored-by: Yong He <yonghe@outlook.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix diagnostics not appearing when semantic tokens are disabled (#7477)
Previously, the language server only triggered module loading and compilation
through semantic token requests. When semantic tokens were disabled,
didOpenTextDocument and didChangeTextDocument would only update the workspace
without compiling modules, meaning no diagnostics were generated.
This change:
- Adds module loading to didOpenTextDocument for .slang/.hlsl files
- Adds module loading to didChangeTextDocument for .slang/.hlsl files
- Triggers diagnostic updates via resetDiagnosticUpdateTime for Slang files
- Ensures diagnostics appear immediately when opening/editing files
- Maintains backward compatibility with existing LSP features
Additionally fixes JSON serialization to properly handle NullResponse types
by serializing them as JSON null instead of empty objects, improving LSP
protocol compliance.
Now diagnostics work correctly regardless of semantic token settings.
* Revert: Remove unrelated change - will pick up in seprate PR
* Fix module state corruption when checkAllTranslationUnits throws
Add try/catch in Linkage::loadParsedModule to properly clean up
module maps when checkAllTranslationUnits() fails with an exception. This
prevents incorrect state in WorkspaceVersion::getOrLoadModule where
failed modules remained in the loaded modules map, causing
subsequent calls to return stale/invalid module references.
* Update to address review comments
* update: remove explicit checking for .slang and .hlsl
|
| |
|
|
|
|
|
|
|
| |
* WIP opaque type decoration fix
* Clearer intent
* Formatting
* Added test for fix
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Defer immutable buffer loads when emitting spirv.
* Fix.
* Fix.
* Fix.
* Fix tests.
* Fix test.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Misc language server improvements.
* Fix.
* Fix decl path printing for existential lookup.
* More existential decl path fix.
* Polish.
* Fix test.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add fkYAML submodule
* Generate slang-ir-inst-defs.h from slang-ir-inst-defs.yaml
* generate ir-inst-defs.h
* neaten things
* neaten inst def parser
* add rapidyaml submodule
* remove fkyaml
* remove fkyaml submodule
* remove use of ir-inst-defs.h
* format and warnings
* fix wasm build
* tidy
* remove rapidyaml
* Extend fiddle to allow custom splices in more places
* Use lua to describe ir insts
* fix
* neaten
* neaten
* neaten
* spelling
* neaten
* comment comment out assert
* merge
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
functionality (#7067)
* Add link time array layout test
* Add link time constant array size compilation test
* Link time constant array size test
* Allow getting link time array size
Closes https://github.com/shader-slang/slang/issues/6753
* format
* Switch to SIMPLE test and check output
* Implement without binary api changes
* diagnose on link time constant sized array
* fix test
---------
Co-authored-by: Yong He <yonghe@outlook.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Implement -fp-denorm-mode slangc arg
* Split fp-denorm-mode into 3 args for fp16/32/64
* Remove redundant option categories
* Use emitInst for multiple of the same OpExecutionMode
* Fix formatting
* Remove -denorm any
* Re-add option categories
* emitinst for ftz
* Use enums for type text
* Remove extra categories again
* Add tests for denorm mode
* Move denorm mode to post linking
* format code (#8)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* regenerate command line reference (#9)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* Clean up tests
* Fix option text
* format code (#10)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* Add tests for "any" mode
* Return "any" enum if option not set
* Simplify emission logic
* Add support for generic entrypoints
* Move denorm modes to end of CompilerOptionName enum
* format code (#11)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* Move new enum members to before CountOf
* Add not checks to tests, fix generic test, add functionality tests
* Rename denorm to fpDenormal
* Clean up functional test
* Rename denorm test dir
* Fix formatting, regenerate cmdline ref
* Fold simple tests into functional tests, add more dxil checks
* Remove no-op DX tests, make tests more consistent
* Disable VK functionality tests that will fail on the CI configs
* Fix formatting
* Add comments to disabled tests explaining why
---------
Co-authored-by: slangbot <ellieh+slangbot@nvidia.com>
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Remove some cruft/complexity from IR serialization
This is a very simple cleanup to unnecessary code paths and remove some flexibility that isn't actually needed, to hopefully simplify the task of more completely overhauling the approach to IR serialization in a later change.
The concrete feature that gets removed here is a debug-only feature (which thus shouldn't be affecting any users of Slang) that was added long ago in the life of the compiler as we were working to truly separate the front- and back-ends.
At the time there was a lot of code in the compiler back-end that still made use of AST-level data structures, and thus got in the way of our goal to support separate compilation and linking (such that final code generation can only depend on the IR, and not the AST).
The option was used to cause the Slang IR to be serialized out and then read back in as part of compilation, to try and enforce that only the wanted constructs could pass through that bottleneck.
The idea was only ever half implemented, however, because it made use of a secondary implementation path in IR serialization that supported serializing the "raw" source locations (which are heavily dependent on AST-level information, even down to the number of bytes in source files).
This change removes the feature entirely, since it is no longer useful for its intended purpose, and its presence causes there to be entire second code path for source locations in IR serialization that would need to have test coverage if we wanted to be sure it kept working.
In addition, our pre-existing infrastructure for module serialization had various options that have either stopped being useful, or were not really useful at the time they were introduced.
For example: there are no places in the code today where we attempt to serialize out a module without including both the serialized AST and IR.
If that was a feature that we ever supported, the relevant code got removed at some preceding point without breaking any of our tests or (seemingly) upsetting users.
Similarly, the options being passed into writing of a serialized module included both a flag to control whether source locations should be serialized *and* a pointer to the `SourceManager` to use in that case... but it was only ever meaningful to set both, or neither.
The option has been changed to just be the `SourceManager` pointer, and the name has been updated to reflect its very narrow intended use case.
* format code
* fixup
* regenerate command line reference
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
Co-authored-by: Yong He <yonghe@outlook.com>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Removes the PayloadAttribute class and related infrastructure that was made redundant by PR #6595, which added ray payload access qualifiers (PAQs) per the DXR spec. The new [raypayload] attribute with access qualifiers provides the same functionality.
Changes:
- Remove PayloadAttribute class from slang-ast-modifier.h
- Remove [payload] attribute syntax from core.meta.slang
- Remove PayloadDecoration IR instruction and related processing
- Remove HLSL emission of [payload] attribute
- Remove IR lowering support for old PayloadAttribute
The new [raypayload] attribute with PAQ support remains unchanged.
|
| |
|
|
|
|
|
|
|
|
|
| |
* fix #7554
* format code
* test ms and non ms texture
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add MLP training examples.
* Formatting fix.
* Fix.
* Improve documentation on coopvector.
* Improve doc.
* Update doc.
* Fix typo.
* Cleanup shader.
* Cleanup.
* Fix test.
* Fix type check recursion.
* Fix.
* Fix.
* Fix override check.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Test for IFloat.scale usage
Test that using IFloat.scale doesn't cause an internal compiler error.
* Generic implementation of IFloat.scale()
Fixes #7156
* Implement IFloat.scale for matrix
Adds matrix implementation and test coverage.
* Avoid explicitly constructing a matrix
* Remove intrinsicOp from IFloat.scale impls
Updates IFloat.scale implementations:
- Remove __intrinsic_op($(kIROp_Mul)) since we're providing an
implementation
- Add [__unsafeForceInlineEarly] where missing
|
| |
|
|
|
|
|
|
|
|
|
| |
* Support DeviceIndex
* format code
* regenerate command line reference
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Parse optional witness syntax
* Allow failing optional constraint
* Make `is` work with optional constraint
* Allow using optional constraint in checked if statements
* Fix tests
* Make it work with structs
* Fix MSVC build error
* Disallow using `as` with optional constraints
* Update test to match split is/as errors
* Add tests
* Fix uninitialized variables in tests
* Add tests of incorrect uses & fix related bugs
* Mention optional constraints in docs
* format code
* Fix type unification with NoneWitness
* Fix formatting
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
Co-authored-by: Nathan V. Morrical <natemorrical@gmail.com>
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Move separate-debug-info arg to target options
The separate-debug-info command line option is listed under debugging
options, move this to the target options section which includes other
similar flags like -g and -emit-spirv-directly.
* regenerate command line reference
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Atomic reflection unit test
Test that Atomic<int> is reflected as a scalar/int instead of a struct
named Atomic.
* Hide AtomicType from reflection
Leverage the fact that returned variables go through convert() to
centralize the unwrapping of the AtomicType struct.
Fixes #6257
* Clean up unit test a bit
- rename bar to buf (since one of them is not Atomic and thus not a
barrier)
- validate deeper into the fields of bufC
- remove debug code
|
| | |
|
| |
|
|
|
| |
* Fix tuple AST & IR layout size queries
* Don't peephole sizeof if size is still indeterminate
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix for OpUConvert outputting scalar type for mixed sign vector type conversions
* Fix compiler warning
* Added regression test for UConvert vector fix
* Formatting
* getUnsignedType helper
* Formatting
* Fix for addtional int types
* Helper function to convert signed type to unsigned type
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix the invalid SPIRV decoration issue
Close #7508.
SPIRV doesn't allow decoration on type with Private or Function storage
class.
In our lowering logic, if the array type is used by buffer type it
will always have stride operand after lowering, so if the array is not
used by buffer type, it must be used only by thread_local or
group_shared variable, and it will not have stride operand. For this
case, we don't need to emit stride decoration for SPIRV.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Correct the scope for DebugLocalVariable
All of the DebugLocalVariable instructions have their scope
set to DebugCompilationUnit. The scope should instead be set
to a DebugFunction, or a DebugLexicalBlock which is recursively
inside a DebugFunction.
Register the debug info for the function instructions, which
helps findDebugScope() to find the right DebugFunction scope
for DebugLocalVariable.
* Add a test for DebugLocalVariable
To check the scope, which should be a DebugFunction.
|
| |
|
|
| |
Slangpy uses AddDllDirectory to specify locations of Slang DLL files.
LoadLibraryA ignores this so instead use LoadLibraryExA.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With the test code in the issue, a crash was observed inside Slang::DeclRefBase::getParent()
while accessing the astbuilder which was nullptr. This PR adds a fix for that.
For the test code in the issue, we now get:
================================================
found Outer<float>::Inner: true
found foo function: true
function name: "foo"
parameter count: 1
attempting getParameterByIndex(0): true
getParameterByIndex(0) succeeded: true
parameter name: "param"
parameter type: "float"
================================================
Fixes #6546
|
| |
|
|
|
|
|
|
|
|
|
| |
* Add matrix operand for OpCooperativeVectorMatrixMulAddNV
* update tests to use the supported UINT32 input component type
* Add MatrixCSignedComponentsKHR for coopVecMatMulAddPacked
---------
Co-authored-by: Jay Kwak <82421531+jkwak-work@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
| |
(#7499)
* Make phi elimination pass modify branches in-place
* Add test and fix formatting
* Avoid double removal of param insts
|
| |
|
|
|
|
| |
Close #7509.
When there are both `export` and `extern` decls in lookup result,
we should remove all `extern` decls.
|
| |
|
|
|
|
|
|
|
| |
* Fix generation of wgsl case arms
* Added test case to test generation of switch case
---------
Co-authored-by: Harsh Aggarwal (NVIDIA) <haaggarwal@nvidia.com>
|
| |
|
| |
Co-authored-by: Nathan V. Morrical <natemorrical@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Revert "Disable OptiX tests by default. (#1331)"
This reverts commit e45f8c1f49855cebe90b6722324ec24146ff5a3d.
* Enable optix submodule to build
Add support for default entry points in compilation
Implemented logic to check for defined entry points in the module
when no explicit entry points are provided. If found, these entry points
are added to the `specializedEntryPoints` list, with the assumption that
no specialization is needed for them at this time.
* Disable optix if cuda is not enabled
* Add submodule OptixSDK path in search
* Distinguish user-explicit vs auto-detected SLANG_ENABLE_OPTIX
When SLANG_ENABLE_OPTIX is explicitly set by user and CUDA is not available,
show SEND_ERROR to maintain strict validation. When OptiX is auto-detected
(e.g., local submodule present) but CUDA unavailable, gracefully disable
with STATUS message to allow builds to continue.
This addresses review feedback to keep error for explicit requests while
handling auto-detection gracefully.
* Apply CMake formatting to SLANG_ENABLE_OPTIX validation logic
* revert: slang-rhi changes
as those are merged independently as in PR # slang-rhi#400
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* Fix cuda_fp16 header issue
This fixes the header include issue. However, it does not add a
diagnostic. That will be added in a separate PR.
* format code
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
|