skillby jetbrains
ssr
Guide for using Structural Search and Replace in IntelliJ. Use when creating or modifying SSR inspections or search patterns.
Installs: 0
Used in: 1 repos
Updated: 2h ago
$
npx ai-builder add skill jetbrains/ssrInstalls to .claude/skills/ssr/
# Structural Search and Replace
- You must use terminal search (`ls`, `cat` and `grep`) to read directory `.idea`. Do not use IDE search.
- The contents of structural search inspections is located in `.idea/inspectionProfiles/idea_default.xml`
- Here is an example of a Structural Search and Replace inspection:
```xml
<replaceConfiguration name="Use Strings.areSameInstance instead of =="
description="Comparing Strings by references usually indicate a mistake, if you really need to do this (for performance reeasons or to implement "Sentinel" pattern), use Strings.areSameInstance method to make the intention explicit and get rid of warning."
suppressId="StringEqualitySSR"
problemDescriptor="Use !Strings.areSameInstance instead of '!=' if you really need to compare strings by reference"
text="$s1$ == $s2$" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default"
search_injected="false" reformatAccordingToStyle="false" shortenFQN="true"
replacement="com.intellij.openapi.util.text.Strings.areSameInstance($s1$, $s2$)">
<constraint name="__context__" within="" contains=""/>
<constraint name="s1" nameOfExprType="java\.lang\.String" within="" contains=""/>
<constraint name="s2" nameOfExprType="java\.lang\.String" within="" contains=""/>
</replaceConfiguration>
```
This node should be located under `<inspection_tool class="SSBasedInspection"` tag.
- Here is an example of a Structural Search inspection:
```xml
<searchConfiguration name="Raw coroutine scope creation" uuid="e11e9d2f-7cc2-3359-a78a-24f67cbe0850"
description="Coroutine scope should be created: <ul> <li>by a coroutine builder (<code>launch</code>, <code>async</code>, <code>runBlockingCancellable</code>);</li> <li>by a scoping function (<code>withContext</code>, <code>coroutineScope</code>, <code>supervisorScope</code>);</li> <li>by injecting it into a service constructor;</li> <li>by explicitly creating a child scope (<code>childScope</code>, <code>namedChildScope</code>)</li> </ul> "
suppressId="RAW_SCOPE_CREATION"
problemDescriptor="Raw scope might not be linked to any parent unintentionally (if passed context does not have any <code>Job</code>, or if passed <code>Job</code> does not have any parent). Use <code>namedChildScope()</code> on some existing scope instead. If no parent is actually intended, use <code>GlobalScope.namedScope()</code>."
text="CoroutineScope($args$)" recursive="true" caseInsensitive="true" type="Kotlin" pattern_context="default"
search_injected="false">
<constraint name="__context__" within="" contains=""/>
<constraint name="args" within="" contains=""/>
</searchConfiguration>
```
This node should be located under `<inspection_tool class="SSBasedInspection"` tag.
- To configure the scope of inspection, you need to make changes similar to this pattern, where class is UUID of the created replace
configuration.
```xml
<inspection_tool class="e5d3c6f8-12ab-4cc9-8e51-8a8f1bd1c3e2" enabled="true" level="WARNING" enabled_by_default="false">
<scope name="IDE Testing Framework" level="WARNING" enabled="true"/>
<scope name="Tests" level="WARNING" enabled="true"/>
<scope name="test-framework" level="WARNING" enabled="true"/>
</inspection_tool>
```
- You must run `InspectionProfileConsistencyTest` after changing xml filesQuick Install
$
npx ai-builder add skill jetbrains/ssrDetails
- Type
- skill
- Author
- jetbrains
- Slug
- jetbrains/ssr
- Created
- 2h ago