This commit is contained in:
me
2026-01-29 20:32:59 +08:00
parent de68ced39e
commit d3d99fa223
98 changed files with 17233 additions and 52 deletions

View File

@@ -0,0 +1,108 @@
# Slint LSP Integration Design
**Date:** 2026-01-29
**Status:** Approved
**Phase:** Phase 1 - Core LSP Features
## Overview
Implement complete Slint LSP integration into IntelliJ IDEA, enabling standard LSP features (diagnostics, completion, goto definition, hover, formatting, etc.) through IntelliJ's built-in LSP framework.
## Architecture
### Component Structure
```
IntelliJ IDEA (LSP Client)
SlintLspServerSupportProvider (Entry point)
SlintLspServerDescriptor (Server configuration)
Slint LSP Server (External process)
```
### Core Components
1. **File Type System**
- `SlintLanguage`: Language definition
- `SlintFileType`: File type definition with .slint extension
- File icon and description
2. **LSP Server Integration**
- `SlintLspServerSupportProvider`: LSP entry point (exists, needs refinement)
- `SlintLspServerDescriptor`: Server configuration (rename from FooLspServerDescriptor)
- Automatic capability negotiation via LSP initialize handshake
3. **Syntax Highlighting**
- Use TextMate grammar from official Slint VSCode extension
- `SlintTextMateProvider`: TextMate bundle provider
4. **LSP Feature Mapping** (automatic via IntelliJ)
- Diagnostics → Error/warning annotations
- Completion → Code completion UI
- Goto Definition → Ctrl+Click navigation
- Hover → Quick documentation
- Formatting → Code formatting actions
- References → Find usages
- Rename → Refactor rename
## Implementation Plan
### 1. File Type System
**Files to create:**
- `src/main/kotlin/me/zhouxi/slint/lang/SlintLanguage.kt`
- `src/main/kotlin/me/zhouxi/slint/lang/SlintFileType.kt`
**Changes to plugin.xml:**
- Register `<fileType>` extension
### 2. LSP Server Configuration
**Files to modify:**
- `src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt`
- Rename `FooLspServerDescriptor``SlintLspServerDescriptor`
- Use `file.fileType == SlintFileType` instead of string comparison
### 3. Syntax Highlighting
**Resources to add:**
- Download `slint.tmLanguage.json` from Slint GitHub
- Place in `src/main/resources/textmate/`
**Files to create:**
- `src/main/kotlin/me/zhouxi/slint/lang/syntax/SlintTextMateProvider.kt`
**Changes to plugin.xml:**
- Register `<textMate.bundleProvider>` extension
### 4. Testing
**Test files to create:**
- Sample .slint files for manual testing
- Verify: diagnostics, completion, goto definition, hover, formatting
## Design Decisions
- **Use IntelliJ LSP Framework**: Leverage built-in LSP client, no manual protocol implementation
- **TextMate for Syntax**: Use official grammar, zero maintenance
- **Minimal Custom Code**: Only implement required extension points
- **Type-Safe File Detection**: Use FileType comparison instead of string extension checks
## Out of Scope (Phase 2)
- Live Preview integration (Slint-specific feature)
- Custom UI components
- Advanced project configuration
## Success Criteria
- .slint files recognized by IntelliJ
- LSP server starts automatically when .slint file opened
- Syntax highlighting works
- Code completion provides suggestions
- Diagnostics show errors/warnings
- Goto definition navigates correctly
- Hover shows documentation
- Code formatting works

View File

@@ -0,0 +1,547 @@
# Slint LSP Integration Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** Implement complete Slint LSP integration into IntelliJ IDEA with file type system, LSP server configuration, and syntax highlighting.
**Architecture:** Use IntelliJ's built-in LSP framework to connect to Slint LSP server. Register .slint file type, configure LSP server descriptor, and add TextMate-based syntax highlighting.
**Tech Stack:** Kotlin, IntelliJ Platform SDK, LSP API, TextMate grammar
---
## Task 1: Create Slint Language Definition
**Files:**
- Create: `src/main/kotlin/me/zhouxi/slint/lang/SlintLanguage.kt`
**Step 1: Create SlintLanguage object**
Create the file with this content:
```kotlin
package me.zhouxi.slint.lang
import com.intellij.lang.Language
object SlintLanguage : Language("Slint") {
override fun getDisplayName(): String = "Slint"
}
```
**Step 2: Verify compilation**
Run: `./gradlew compileKotlin`
Expected: BUILD SUCCESSFUL
**Step 3: Commit**
```bash
git add src/main/kotlin/me/zhouxi/slint/lang/SlintLanguage.kt
git commit -m "feat: add Slint language definition"
```
---
## Task 2: Create Slint File Type
**Files:**
- Create: `src/main/kotlin/me/zhouxi/slint/lang/SlintFileType.kt`
**Step 1: Create SlintFileType object**
Create the file with this content:
```kotlin
package me.zhouxi.slint.lang
import com.intellij.openapi.fileTypes.LanguageFileType
import me.zhouxi.slint.icons.SlintIcons
import javax.swing.Icon
object SlintFileType : LanguageFileType(SlintLanguage) {
override fun getName(): String = "Slint"
override fun getDescription(): String = "Slint UI file"
override fun getDefaultExtension(): String = "slint"
override fun getIcon(): Icon = SlintIcons.Primary
}
```
**Step 2: Verify compilation**
Run: `./gradlew compileKotlin`
Expected: BUILD SUCCESSFUL
**Step 3: Commit**
```bash
git add src/main/kotlin/me/zhouxi/slint/lang/SlintFileType.kt
git commit -m "feat: add Slint file type definition"
```
---
## Task 3: Register File Type in plugin.xml
**Files:**
- Modify: `src/main/resources/META-INF/plugin.xml`
**Step 1: Add fileType extension**
Add this inside the `<extensions defaultExtensionNs="com.intellij">` block:
```xml
<fileType
name="Slint"
implementationClass="me.zhouxi.slint.lang.SlintFileType"
fieldName="INSTANCE"
language="Slint"
extensions="slint"/>
```
The complete extensions block should look like:
```xml
<extensions defaultExtensionNs="com.intellij">
<fileType
name="Slint"
implementationClass="me.zhouxi.slint.lang.SlintFileType"
fieldName="INSTANCE"
language="Slint"
extensions="slint"/>
<platform.lsp.serverSupportProvider implementation="me.zhouxi.slint.lsp.SlintLspServerSupportProvider"/>
</extensions>
```
**Step 2: Verify plugin configuration**
Run: `./gradlew verifyPluginProjectConfiguration`
Expected: BUILD SUCCESSFUL
**Step 3: Commit**
```bash
git add src/main/resources/META-INF/plugin.xml
git commit -m "feat: register Slint file type in plugin.xml"
```
---
## Task 4: Update LSP Server Descriptor
**Files:**
- Modify: `src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt`
**Step 1: Add import for SlintFileType**
Add this import at the top:
```kotlin
import me.zhouxi.slint.lang.SlintFileType
```
**Step 2: Rename FooLspServerDescriptor to SlintLspServerDescriptor**
Change line 20 from:
```kotlin
serverStarter.ensureServerStarted(FooLspServerDescriptor(project))
```
To:
```kotlin
serverStarter.ensureServerStarted(SlintLspServerDescriptor(project))
```
Change line 34 from:
```kotlin
private class FooLspServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "Slint") {
```
To:
```kotlin
private class SlintLspServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "Slint") {
```
**Step 3: Update file type checking to use SlintFileType**
Change line 19 from:
```kotlin
if (file.extension == "slint") {
```
To:
```kotlin
if (file.fileType == SlintFileType) {
```
Change line 35 from:
```kotlin
override fun isSupportedFile(file: VirtualFile) = file.extension == "slint"
```
To:
```kotlin
override fun isSupportedFile(file: VirtualFile) = file.fileType == SlintFileType
```
**Step 4: Verify compilation**
Run: `./gradlew compileKotlin`
Expected: BUILD SUCCESSFUL
**Step 5: Commit**
```bash
git add src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt
git commit -m "refactor: use SlintFileType for type-safe file detection"
```
---
## Task 5: Download TextMate Grammar File
**Files:**
- Create: `src/main/resources/textmate/slint.tmLanguage.json`
**Step 1: Create textmate directory**
Run: `mkdir -p src/main/resources/textmate`
**Step 2: Download Slint TextMate grammar**
Run:
```bash
curl -o src/main/resources/textmate/slint.tmLanguage.json \
https://raw.githubusercontent.com/slint-ui/slint/master/editors/vscode/syntaxes/slint.tmLanguage.json
```
Expected: File downloaded successfully
**Step 3: Verify file exists and is valid JSON**
Run: `cat src/main/resources/textmate/slint.tmLanguage.json | head -20`
Expected: Should see JSON content starting with `{` and containing `"scopeName": "source.slint"`
**Step 4: Commit**
```bash
git add src/main/resources/textmate/slint.tmLanguage.json
git commit -m "feat: add Slint TextMate grammar for syntax highlighting"
```
---
## Task 6: Create TextMate Bundle Provider
**Files:**
- Create: `src/main/kotlin/me/zhouxi/slint/lang/syntax/SlintTextMateProvider.kt`
**Step 1: Create syntax directory**
Run: `mkdir -p src/main/kotlin/me/zhouxi/slint/lang/syntax`
**Step 2: Create SlintTextMateProvider class**
Create the file with this content:
```kotlin
package me.zhouxi.slint.lang.syntax
import org.jetbrains.plugins.textmate.api.TextMateBundle
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider
class SlintTextMateProvider : TextMateBundleProvider {
override fun getBundles(): List<TextMateBundle> {
return listOf(
TextMateBundle(
"Slint",
"textmate/slint.tmLanguage.json",
SlintTextMateProvider::class.java.classLoader
)
)
}
}
```
**Step 3: Verify compilation**
Run: `./gradlew compileKotlin`
Expected: BUILD SUCCESSFUL
**Step 4: Commit**
```bash
git add src/main/kotlin/me/zhouxi/slint/lang/syntax/SlintTextMateProvider.kt
git commit -m "feat: add TextMate bundle provider for Slint syntax highlighting"
```
---
## Task 7: Register TextMate Bundle Provider
**Files:**
- Modify: `src/main/resources/META-INF/plugin.xml`
**Step 1: Add textMate.bundleProvider extension**
Add this inside the `<extensions defaultExtensionNs="com.intellij">` block:
```xml
<textMate.bundleProvider implementation="me.zhouxi.slint.lang.syntax.SlintTextMateProvider"/>
```
The complete extensions block should now look like:
```xml
<extensions defaultExtensionNs="com.intellij">
<fileType
name="Slint"
implementationClass="me.zhouxi.slint.lang.SlintFileType"
fieldName="INSTANCE"
language="Slint"
extensions="slint"/>
<platform.lsp.serverSupportProvider implementation="me.zhouxi.slint.lsp.SlintLspServerSupportProvider"/>
<textMate.bundleProvider implementation="me.zhouxi.slint.lang.syntax.SlintTextMateProvider"/>
</extensions>
```
**Step 2: Verify plugin configuration**
Run: `./gradlew verifyPluginProjectConfiguration`
Expected: BUILD SUCCESSFUL
**Step 3: Commit**
```bash
git add src/main/resources/META-INF/plugin.xml
git commit -m "feat: register TextMate bundle provider in plugin.xml"
```
---
## Task 8: Build and Test Plugin
**Files:**
- Create: `test-files/hello.slint` (for manual testing)
**Step 1: Create test directory and sample Slint file**
Run:
```bash
mkdir -p test-files
cat > test-files/hello.slint << 'EOF'
import { Button, VerticalBox } from "std-widgets.slint";
export component HelloWorld inherits Window {
width: 400px;
height: 300px;
VerticalBox {
alignment: center;
Text {
text: "Hello, World!";
font-size: 24px;
}
Button {
text: "Click me";
clicked => {
debug("Button clicked!");
}
}
}
}
EOF
```
**Step 2: Build the plugin**
Run: `./gradlew buildPlugin`
Expected: BUILD SUCCESSFUL, plugin ZIP created in `build/distributions/`
**Step 3: Run plugin in sandbox IDE**
Run: `./gradlew runIde`
Expected: IntelliJ IDEA opens with plugin installed
**Step 4: Manual testing checklist**
In the sandbox IDE:
1. Open `test-files/hello.slint`
2. Verify: File icon shows Slint logo
3. Verify: Syntax highlighting is applied (keywords, strings, comments colored)
4. Verify: LSP server starts (check status bar widget)
5. Verify: Type `Butt` and trigger completion (Ctrl+Space) - should suggest `Button`
6. Verify: Hover over `Button` - should show documentation
7. Verify: Ctrl+Click on `Button` - should jump to definition
8. Verify: Introduce syntax error (e.g., remove semicolon) - should show red underline
9. Verify: Format code (Ctrl+Alt+L) - should format the file
**Step 5: Document test results**
Create a file documenting what works:
```bash
cat > test-files/TEST_RESULTS.md << 'EOF'
# Slint LSP Integration Test Results
Date: 2026-01-29
## Test Environment
- IntelliJ IDEA: 2025.2.4
- Slint LSP Version: 1.14.1
- Plugin Version: 1.0-SNAPSHOT
## Test Results
### File Type Recognition
- [ ] .slint files show Slint icon
- [ ] File type is recognized as "Slint"
### Syntax Highlighting
- [ ] Keywords highlighted (import, export, component, inherits)
- [ ] Strings highlighted
- [ ] Comments highlighted
- [ ] Properties highlighted
### LSP Features
- [ ] LSP server starts automatically
- [ ] Code completion works
- [ ] Hover documentation works
- [ ] Goto definition works
- [ ] Diagnostics show errors/warnings
- [ ] Code formatting works
- [ ] Find references works
- [ ] Rename refactoring works
## Issues Found
(Document any issues here)
## Notes
(Any additional observations)
EOF
```
**Step 6: Commit test files**
```bash
git add test-files/
git commit -m "test: add sample Slint file and test results template"
```
---
## Task 9: Update CLAUDE.md Documentation
**Files:**
- Modify: `CLAUDE.md`
**Step 1: Add testing section to CLAUDE.md**
Add this section before "## Development Notes":
```markdown
## Testing the Plugin
### Manual Testing
1. **Build and run in sandbox:**
```bash
./gradlew runIde
```
2. **Test with sample file:**
- Open `test-files/hello.slint`
- Verify file icon, syntax highlighting, and LSP features
3. **Test LSP features:**
- Code completion: Type and press Ctrl+Space
- Goto definition: Ctrl+Click on symbols
- Hover: Mouse over symbols
- Diagnostics: Introduce syntax errors
- Formatting: Ctrl+Alt+L
### Verify LSP Server
Check LSP server status in the status bar (bottom right). Should show "Slint" when a .slint file is open.
### Common Issues
- **LSP server not starting**: Check that LSP binary exists in sandbox at `sandbox/plugins/slint/lsp/slint-lsp-{platform}`
- **No syntax highlighting**: Verify TextMate grammar file is in resources
- **No completion**: Check LSP server logs in `idea.log`
```
**Step 2: Commit documentation update**
```bash
git add CLAUDE.md
git commit -m "docs: add testing instructions to CLAUDE.md"
```
---
## Task 10: Final Verification and Cleanup
**Step 1: Run all verification tasks**
Run:
```bash
./gradlew clean build verifyPlugin
```
Expected: All tasks complete successfully
**Step 2: Check plugin structure**
Run: `./gradlew buildPlugin && unzip -l build/distributions/slint-1.0-SNAPSHOT.zip | grep -E "(slint-lsp|\.slint\.tmLanguage)"`
Expected: Should see LSP binaries and TextMate grammar in the plugin ZIP
**Step 3: Review all changes**
Run: `git log --oneline --graph`
Expected: Should see all commits from this implementation
**Step 4: Create final summary commit**
```bash
git add -A
git commit -m "feat: complete Slint LSP integration with file type, syntax highlighting, and LSP features
- Added SlintLanguage and SlintFileType definitions
- Registered .slint file type with IntelliJ
- Integrated Slint LSP server with type-safe file detection
- Added TextMate-based syntax highlighting
- Included test files and documentation
- All standard LSP features now available: completion, diagnostics, goto definition, hover, formatting, references, rename"
```
---
## Success Criteria
✅ .slint files recognized by IntelliJ with proper icon
✅ Syntax highlighting works using TextMate grammar
✅ LSP server starts automatically when .slint file opened
✅ Code completion provides suggestions
✅ Diagnostics show errors and warnings
✅ Goto definition navigates correctly
✅ Hover shows documentation
✅ Code formatting works
✅ Find references works
✅ Rename refactoring works
✅ Plugin builds and runs in sandbox IDE
✅ All changes committed with clear messages
## Next Steps (Phase 2)
- Implement live preview integration (Slint-specific feature)
- Add project configuration UI
- Optimize LSP server startup time
- Add more comprehensive tests

0
gradlew vendored Normal file → Executable file
View File

View File

@@ -0,0 +1,5 @@
<application>
<component name="UpdatesConfigurable">
<option name="CHECK_NEEDED" value="false" />
</component>
</application>

Binary file not shown.

View File

@@ -0,0 +1,248 @@
ByteCodeViewer|Other Tools
JBoss|Deployment
JSIntentionPowerPack|JavaScript Frameworks and Tools
JUnit|Test Tools
JavaScriptDebugger|JavaScript Frameworks and Tools
JavaScript|JavaScript Frameworks and Tools
Karma|JavaScript Frameworks and Tools
Lombook Plugin|JVM Frameworks
NodeJS|JavaScript Frameworks and Tools
Refactor-X|HTML and XML
Remote Development Server|null
TestNG-J|Test Tools
Tomcat|Deployment
com.deadlock.scsyntax|JavaScript Frameworks and Tools
com.intellij.LineProfiler|null
com.intellij.analysis.pwa.java|null
com.intellij.analysis.pwa|null
com.intellij.aop|JVM Frameworks
com.intellij.beanValidation|JVM Frameworks
com.intellij.cdi|JVM Frameworks
com.intellij.completion.ml.ranking|Local AI/ML Tools
com.intellij.configurationScript|null
com.intellij.copyright|Other Tools
com.intellij.css|Style Sheets
com.intellij.database|Database
com.intellij.dev|null
com.intellij.diagram|Other Tools
com.intellij.dsm|Other Tools
com.intellij.freemarker|Template Languages
com.intellij.grpc|Microservices
com.intellij.hibernate|JVM Frameworks
com.intellij.java-i18n|Other Tools
com.intellij.java.ide|null
com.intellij.javaee.app.servers.integration|Deployment
com.intellij.javaee.el|JVM Frameworks
com.intellij.javaee.extensions|JVM Frameworks
com.intellij.javaee.jpa|JVM Frameworks
com.intellij.javaee.web|JVM Frameworks
com.intellij.javaee|JVM Frameworks
com.intellij.java|null
com.intellij.jsonpath|JavaScript Frameworks and Tools
com.intellij.jsp|Template Languages
com.intellij.llmInstaller|Other Tools
com.intellij.micronaut|JVM Frameworks
com.intellij.microservices.jvm|JVM Frameworks
com.intellij.microservices.ui|Microservices
com.intellij.openRewrite|JVM Frameworks
com.intellij.persistence|JVM Frameworks
com.intellij.platform.ide.provisioner|null
com.intellij.platform.images|null
com.intellij.plugins.webcomponents|JavaScript Frameworks and Tools
com.intellij.properties|Languages
com.intellij.quarkus|JVM Frameworks
com.intellij.reactivestreams|JVM Frameworks
com.intellij.react|JavaScript Frameworks and Tools
com.intellij.searcheverywhere.ml|Local AI/ML Tools
com.intellij.spring.boot.initializr|JVM Frameworks
com.intellij.spring.boot|JVM Frameworks
com.intellij.spring.cloud|JVM Frameworks
com.intellij.spring.data|JVM Frameworks
com.intellij.spring.integration|JVM Frameworks
com.intellij.spring.messaging|JVM Frameworks
com.intellij.spring.mvc|JVM Frameworks
com.intellij.spring.security|JVM Frameworks
com.intellij.spring|JVM Frameworks
com.intellij.stylelint|JavaScript Frameworks and Tools
com.intellij.swagger|Microservices
com.intellij.tailwindcss|Style Sheets
com.intellij.tasks.timeTracking|Other Tools
com.intellij.tasks|Other Tools
com.intellij.thymeleaf|Template Languages
com.intellij.tracing.ide|null
com.intellij.turboComplete|Local AI/ML Tools
com.intellij.velocity|Template Languages
com.intellij|null
com.jetbrains.performancePlugin.async|Other Tools
com.jetbrains.performancePlugin.dynamicPlugins|null
com.jetbrains.performancePlugin|Other Tools
com.jetbrains.plugins.webDeployment|Deployment
com.jetbrains.restClient|Microservices
com.jetbrains.restWebServices|JVM Frameworks
com.jetbrains.sh|Languages
com.jetbrains.warmup.performanceTesting|null
idea.plugin.protoeditor|Microservices
intellij.caches.shared|null
intellij.charts|null
intellij.grid.core.impl|null
intellij.grid.impl|null
intellij.indexing.shared.core|null
intellij.indexing.shared|null
intellij.nextjs|JavaScript Frameworks and Tools
intellij.platform.ijent.impl|Deployment
intellij.prettierJS|JavaScript Frameworks and Tools
intellij.vitejs|JavaScript Frameworks and Tools
intellij.webpack|JavaScript Frameworks and Tools
intellij.webp|null
org.editorconfig.editorconfigjetbrains|Other Tools
org.intellij.groovy|Languages
org.intellij.intelliLang|Other Tools
org.intellij.plugins.markdown|Languages
org.intellij.plugins.postcss|Style Sheets
org.jetbrains.completion.full.line|Local AI/ML Tools
org.jetbrains.debugger.streams|Other Tools
org.jetbrains.idea.eclipse|Other Tools
org.jetbrains.idea.maven.ext|Build Tools
org.jetbrains.idea.maven.model|null
org.jetbrains.idea.maven.server.api|null
org.jetbrains.idea.maven|Build Tools
org.jetbrains.idea.reposearch|null
org.jetbrains.java.decompiler|Other Tools
org.jetbrains.kotlin|Languages
org.jetbrains.plugins.less|Style Sheets
org.jetbrains.plugins.node-remote-interpreter|JavaScript Frameworks and Tools
org.jetbrains.plugins.remote-run|null
org.jetbrains.plugins.sass|Style Sheets
org.jetbrains.plugins.terminal|Other Tools
org.jetbrains.plugins.textmate|Other Tools
org.jetbrains.plugins.vue|JavaScript Frameworks and Tools
org.jetbrains.plugins.wsl.remoteSdk|null
org.jetbrains.plugins.yaml|Languages
org.jetbrains.security.package-checker|null
org.toml.lang|Languages
tanvd.grazi|null
tslint|JavaScript Frameworks and Tools

View File

@@ -0,0 +1 @@
<code_scheme name="Default" version="173" />

View File

@@ -0,0 +1,33 @@
AngularJS
AntSupport
Coverage
Docker
Git4Idea
HtmlTools
PerforceDirectPlugin
Subversion
XPathView
com.android.tools.design
com.intellij.flyway
com.intellij.gradle
com.intellij.javaee.reverseEngineering
com.intellij.kubernetes
com.intellij.liquibase
com.intellij.plugins.eclipsekeymap
com.intellij.plugins.netbeanskeymap
com.intellij.plugins.visualstudiokeymap
com.intellij.settingsSync
com.intellij.uiDesigner
com.jetbrains.codeWithMe
com.jetbrains.gateway
com.jetbrains.space
hg4idea
intellij.ktor
org.intellij.qodana
org.jetbrains.android
org.jetbrains.idea.gradle.ext
org.jetbrains.plugins.docker.gateway
org.jetbrains.plugins.github
org.jetbrains.plugins.gitlab
org.jetbrains.plugins.javaFX
training

View File

@@ -0,0 +1,4 @@
ide.experimental.ui
true
idea.plugins.compatible.build

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,348 @@
{
"groups" : [ {
"id" : "mlse.event.log",
"builds" : [ ],
"versions" : [ {
"from" : "1"
} ],
"rules" : {
"event_id" : [ "{enum#__event_id}" ],
"event_data" : {
"code" : [ "{regexp#integer}" ],
"error" : [ "{util#class_name}", "{enum:EMPTY_CONTENT|INVALID_JSON|UNKNOWN}", "{enum:EMPTY_SERVICE_URL|UNREACHABLE_SERVICE|EMPTY_RESPONSE_BODY|ERROR_ON_LOAD}" ],
"error_ts" : [ "{regexp#integer}" ],
"errors" : [ "{regexp#integer}" ],
"external" : [ "{enum#boolean}" ],
"failed" : [ "{regexp#integer}" ],
"paths" : [ "{regexp#hash}" ],
"send" : [ "{regexp#integer}" ],
"stage" : [ "{enum:LOADING|PARSING}" ],
"succeed" : [ "{regexp#integer}" ],
"total" : [ "{regexp#integer}" ],
"version" : [ "{regexp#version}" ]
},
"enums" : {
"__event_id" : [ "logs.send", "loading.config.failed", "metadata.loaded", "metadata.updated", "metadata.update.failed", "metadata.load.failed" ]
}
},
"anonymized_fields" : [ {
"event" : "logs.send",
"fields" : [ "paths" ]
} ]
}, {
"id" : "mlse.log",
"builds" : [ ],
"versions" : [ {
"from" : "2"
} ],
"rules" : {
"event_id" : [ "{enum:sessionFinished|searchRestarted|key.not.computed}" ],
"event_data" : {
"closePopup" : [ "{enum#boolean}" ],
"collectedItems.absentFeatures" : [ "{util#mlse_element_feature}" ],
"collectedItems.actionId" : [ "{util#action}", "{enum#action}" ],
"collectedItems.contributor.contributorId" : [ "{enum:SearchEverywhereContributor.All|ClassSearchEverywhereContributor|FileSearchEverywhereContributor|RecentFilesSEContributor|SymbolSearchEverywhereContributor|ActionSearchEverywhereContributor|RunConfigurationsSEContributor|CommandsContributor|TopHitSEContributor|com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor|TmsSearchEverywhereContributor|YAMLKeysSearchEverywhereContributor|UrlSearchEverywhereContributor|Vcs.Git|AutocompletionContributor|TextSearchContributor|DbSETablesContributor|third.party}", "{enum:SearchEverywhereSpellingCorrectorContributor}", "{enum:SemanticActionSearchEverywhereContributor}" ],
"collectedItems.contributor.contributorIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.contributor.contributorPopularityIndex" : [ "{regexp#integer}" ],
"collectedItems.contributor.contributorPriority" : [ "{regexp#integer}" ],
"collectedItems.contributor.contributorWeight" : [ "{regexp#integer}" ],
"collectedItems.contributorId" : [ "{enum#se_tab}" ],
"collectedItems.features.actionSimilarityScore" : [ "{regexp#float}" ],
"collectedItems.features.allInitialLettersMatch" : [ "{enum#boolean}" ],
"collectedItems.features.asActionPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.authoritiesSize" : [ "{regexp#integer}" ],
"collectedItems.features.directoryDepth" : [ "{regexp#integer}" ],
"collectedItems.features.fileGroup" : [ "{enum:MAIN|BUILD|CHANGELOG|CONFIG|README}" ],
"collectedItems.features.fileStatus" : [ "{enum#vcs_file_status}" ],
"collectedItems.features.fileType" : [ "{util#file_type}" ],
"collectedItems.features.fileTypeMatchesQuery" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsageRatio" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsageRatioToMax" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsageRatioToMin" : [ "{regexp#float}" ],
"collectedItems.features.fileTypeUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.fileTypeUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.fromConfigurable" : [ "{enum#boolean}" ],
"collectedItems.features.globalUsage" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageToMax" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV1" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV2" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV3" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageToMaxV4" : [ "{regexp#float}" ],
"collectedItems.features.globalUsageV1" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV2" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV3" : [ "{regexp#integer}" ],
"collectedItems.features.globalUsageV4" : [ "{regexp#integer}" ],
"collectedItems.features.groupLength" : [ "{regexp#integer}" ],
"collectedItems.features.heuristicPriority" : [ "{regexp#integer}" ],
"collectedItems.features.isAbbreviation" : [ "{enum#boolean}" ],
"collectedItems.features.isAccessibleFromModule" : [ "{enum#boolean}" ],
"collectedItems.features.isAction" : [ "{enum#boolean}" ],
"collectedItems.features.isActionPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.isBookmark" : [ "{enum#boolean}" ],
"collectedItems.features.isBooleanOption" : [ "{enum#boolean}" ],
"collectedItems.features.isChanged" : [ "{enum#boolean}" ],
"collectedItems.features.isDeprecated" : [ "{enum#boolean}" ],
"collectedItems.features.isDirectory" : [ "{enum#boolean}" ],
"collectedItems.features.isEditorAction" : [ "{enum#boolean}" ],
"collectedItems.features.isEnabled" : [ "{enum#boolean}" ],
"collectedItems.features.isExactMatch" : [ "{enum#boolean}" ],
"collectedItems.features.isExactRelativePath" : [ "{enum#boolean}" ],
"collectedItems.features.isFavorite" : [ "{enum#boolean}" ],
"collectedItems.features.isFromLibrary" : [ "{enum#boolean}" ],
"collectedItems.features.isGroup" : [ "{enum#boolean}" ],
"collectedItems.features.isHighPriority" : [ "{enum#boolean}" ],
"collectedItems.features.isIgnored" : [ "{enum#boolean}" ],
"collectedItems.features.isInComment" : [ "{enum#boolean}" ],
"collectedItems.features.isInExcluded" : [ "{enum#boolean}" ],
"collectedItems.features.isInSource" : [ "{enum#boolean}" ],
"collectedItems.features.isInTestSources" : [ "{enum#boolean}" ],
"collectedItems.features.isInvalid" : [ "{enum#boolean}" ],
"collectedItems.features.isNotDefault" : [ "{enum#boolean}" ],
"collectedItems.features.isOpened" : [ "{enum#boolean}" ],
"collectedItems.features.isOption" : [ "{enum#boolean}" ],
"collectedItems.features.isPureSemantic" : [ "{enum#boolean}" ],
"collectedItems.features.isRegistryOption" : [ "{enum#boolean}" ],
"collectedItems.features.isSameFileTypeAsOpenedFile" : [ "{enum#boolean}" ],
"collectedItems.features.isSameModule" : [ "{enum#boolean}" ],
"collectedItems.features.isSearchAction" : [ "{enum#boolean}" ],
"collectedItems.features.isSemanticOnly" : [ "{enum#boolean}" ],
"collectedItems.features.isShared" : [ "{enum#boolean}" ],
"collectedItems.features.isTemporary" : [ "{enum#boolean}" ],
"collectedItems.features.isToggleAction" : [ "{enum#boolean}" ],
"collectedItems.features.isTopLevel" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsAbstract" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInner" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInstantiatable" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsInterface" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsLocalOrAnonymous" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsPrivate" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsProtected" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsPublic" : [ "{enum#boolean}" ],
"collectedItems.features.javaIsStatic" : [ "{enum#boolean}" ],
"collectedItems.features.javaNumberOfAllFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfAllMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfAnnotations" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfDeprecatedFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfDeprecatedMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfFields" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfMethods" : [ "{regexp#integer}" ],
"collectedItems.features.javaNumberOfSupers" : [ "{regexp#integer}" ],
"collectedItems.features.keyIsInTop5RecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.keyIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.keyIsMostRecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.keyNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsAbstract" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsData" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsDocumented" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsEnum" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInline" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInner" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInterface" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsInternal" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsLocalOrAnon" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsObject" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsOpen" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsPrivate" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsProtected" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsPublic" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsSAM" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsSealed" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinIsValue" : [ "{enum#boolean}" ],
"collectedItems.features.kotlinNumberOfDeclarations" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfDocs" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfMethods" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfOverridden" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfProperties" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfReceivers" : [ "{regexp#integer}" ],
"collectedItems.features.kotlinNumberOfSupers" : [ "{regexp#integer}" ],
"collectedItems.features.langIsInTop3MostUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langIsMostUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.langSameAsOpenedFile" : [ "{enum#boolean}" ],
"collectedItems.features.langUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.langUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.langUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.langUsedInLastWeek" : [ "{enum#boolean}" ],
"collectedItems.features.language" : [ "{util#lang}" ],
"collectedItems.features.matchMode" : [ "{enum:NONE|INTENTION|NAME|DESCRIPTION|GROUP|NON_MENU|SYNONYM}" ],
"collectedItems.features.mlScore" : [ "{regexp#float}" ],
"collectedItems.features.nameLength" : [ "{regexp#integer}" ],
"collectedItems.features.packageDistance" : [ "{regexp#integer}" ],
"collectedItems.features.packageDistanceNorm" : [ "{regexp#float}" ],
"collectedItems.features.parentStatIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.parentStatIsMostRecent" : [ "{enum#boolean}" ],
"collectedItems.features.parentStatRecency" : [ "{regexp#integer}" ],
"collectedItems.features.parentStatUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.pluginId" : [ "{util#plugin}" ],
"collectedItems.features.pluginType" : [ "{enum#plugin_type}" ],
"collectedItems.features.predictionScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixExact" : [ "{enum#boolean}" ],
"collectedItems.features.prefixGreedyScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixGreedyWithCaseScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedLastWord" : [ "{enum#boolean}" ],
"collectedItems.features.prefixMatchedWordsRelative" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsWithCaseRelative" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchedWordsWithCaseScore" : [ "{regexp#float}" ],
"collectedItems.features.prefixMatchingType" : [ "{enum#query_matching_type}" ],
"collectedItems.features.prefixSameStartCount" : [ "{regexp#integer}" ],
"collectedItems.features.prefixSkippedWords" : [ "{regexp#integer}" ],
"collectedItems.features.priority" : [ "{regexp#integer}" ],
"collectedItems.features.recentFilesIndex" : [ "{regexp#integer}" ],
"collectedItems.features.relPathPrefixGreedyScore" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixMatchedWordsRelative" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixMatchedWordsScore" : [ "{regexp#float}" ],
"collectedItems.features.relPathPrefixSameStartCount" : [ "{regexp#integer}" ],
"collectedItems.features.runConfigType" : [ "{util#run_config_type}" ],
"collectedItems.features.schemes" : [ "{enum:http|https|ws|wss}" ],
"collectedItems.features.segmentsTotal" : [ "{regexp#integer}" ],
"collectedItems.features.similarityScore" : [ "{regexp#float}" ],
"collectedItems.features.statIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.statIsMostRecent" : [ "{enum#boolean}" ],
"collectedItems.features.statRecency" : [ "{regexp#integer}" ],
"collectedItems.features.statUseCount" : [ "{regexp#integer}" ],
"collectedItems.features.suggestionConfidence" : [ "{regexp#float}" ],
"collectedItems.features.textLength" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastFileTypeUsage" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastModification" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastUsage" : [ "{regexp#integer}" ],
"collectedItems.features.timeSinceLastUsageSe" : [ "{regexp#integer}" ],
"collectedItems.features.totalSymbolsAmount" : [ "{regexp#integer}" ],
"collectedItems.features.type" : [ "{enum:ABBREVIATION|INTENTION|TOP_HIT|OPTION|ACTION}", "{enum:SEMANTIC}" ],
"collectedItems.features.typeWeight" : [ "{regexp#integer}" ],
"collectedItems.features.usage" : [ "{regexp#integer}" ],
"collectedItems.features.usageSe" : [ "{regexp#integer}" ],
"collectedItems.features.usageToMax" : [ "{regexp#float}" ],
"collectedItems.features.usageToMaxSe" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatio" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV1" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV2" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV3" : [ "{regexp#float}" ],
"collectedItems.features.usagesPerUserRatioV4" : [ "{regexp#float}" ],
"collectedItems.features.usersRatio" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV1" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV2" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV3" : [ "{regexp#float}" ],
"collectedItems.features.usersRatioV4" : [ "{regexp#float}" ],
"collectedItems.features.variablesTotal" : [ "{regexp#integer}" ],
"collectedItems.features.wasModifiedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.wasModifiedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastDaySe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastHourSe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMinute" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMinuteSe" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.wasUsedInLastMonthSe" : [ "{enum#boolean}" ],
"collectedItems.features.weight" : [ "{regexp#float}" ],
"collectedItems.features.withIcon" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastDay" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastHour" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastMonth" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileModifiedInLastWeek" : [ "{enum#boolean}" ],
"collectedItems.features.yamlFileRecencyIndex" : [ "{regexp#integer}" ],
"collectedItems.features.yamlKeyIsInTop5RecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyIsMostPopular" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyIsMostRecentlyUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlKeyNeverUsed" : [ "{enum#boolean}" ],
"collectedItems.features.yamlTimeSinceLastModification" : [ "{regexp#integer}" ],
"collectedItems.id" : [ "{regexp#integer}" ],
"collectedItems.mlWeight" : [ "{regexp#float}" ],
"collectedItems.priority" : [ "{regexp#integer}" ],
"contributors.id" : [ "{enum:SearchEverywhereContributor.All|ClassSearchEverywhereContributor|FileSearchEverywhereContributor|RecentFilesSEContributor|SymbolSearchEverywhereContributor|ActionSearchEverywhereContributor|RunConfigurationsSEContributor|CommandsContributor|TopHitSEContributor|com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor|TmsSearchEverywhereContributor|YAMLKeysSearchEverywhereContributor|UrlSearchEverywhereContributor|Vcs.Git|AutocompletionContributor|TextSearchContributor|DbSETablesContributor|third.party}" ],
"contributors.isMostPopular" : [ "{enum#boolean}" ],
"contributors.popularityIndex" : [ "{regexp#integer}" ],
"contributors.priority" : [ "{regexp#integer}" ],
"contributors.weight" : [ "{regexp#integer}" ],
"experimentGroup" : [ "{regexp#integer}" ],
"experimentVersion" : [ "{regexp#integer}" ],
"globalMaxUsage" : [ "{regexp#integer}" ],
"globalMaxUsageV1" : [ "{regexp#integer}" ],
"globalMaxUsageV2" : [ "{regexp#integer}" ],
"globalMaxUsageV3" : [ "{regexp#integer}" ],
"globalMaxUsageV4" : [ "{regexp#integer}" ],
"globalMinUsage" : [ "{regexp#integer}" ],
"globalMinUsageV1" : [ "{regexp#integer}" ],
"globalMinUsageV2" : [ "{regexp#integer}" ],
"globalMinUsageV3" : [ "{regexp#integer}" ],
"globalMinUsageV4" : [ "{regexp#integer}" ],
"isConsistent" : [ "{enum#boolean}" ],
"isForceExperiment" : [ "{enum#boolean}" ],
"isInternal" : [ "{enum#boolean}" ],
"isMixedList" : [ "{enum#boolean}" ],
"isSingleModuleProject" : [ "{enum#boolean}" ],
"lastOpenToolWindow" : [ "{util#toolwindow}" ],
"logFeatures" : [ "{enum#boolean}" ],
"maxUsage" : [ "{regexp#integer}" ],
"maxUsageSE" : [ "{regexp#integer}" ],
"minUsage" : [ "{regexp#integer}" ],
"minUsageSE" : [ "{regexp#integer}" ],
"numberOfOpenEditors" : [ "{regexp#integer}" ],
"openFileTypes" : [ "{util#file_type}" ],
"orderByMl" : [ "{enum#boolean}" ],
"plugin" : [ "{util#plugin}" ],
"plugin_type" : [ "{util#plugin_type}" ],
"plugin_version" : [ "{util#plugin_version}" ],
"projectDisposed" : [ "{enum#boolean}" ],
"projectOpened" : [ "{enum#boolean}" ],
"rebuildReason" : [ "{enum#restart_reasons}" ],
"seTabId" : [ "{enum#se_tab}", "{enum:SearchEverywhereSpellingCorrectorContributor}", "{enum:Git}" ],
"searchIndex" : [ "{regexp#integer}" ],
"searchStateFeatures.isCaseSensitive" : [ "{enum#boolean}" ],
"searchStateFeatures.isDumbMode" : [ "{enum#boolean}" ],
"searchStateFeatures.isEmptyQuery" : [ "{enum#boolean}" ],
"searchStateFeatures.isRegularExpressions" : [ "{enum#boolean}" ],
"searchStateFeatures.isSearchEverywhere" : [ "{enum#boolean}" ],
"searchStateFeatures.isWholeWordsOnly" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsAbbreviations" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsCommandChar" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsPath" : [ "{enum#boolean}" ],
"searchStateFeatures.queryContainsSpaces" : [ "{enum#boolean}" ],
"searchStateFeatures.queryIsAllUppercase" : [ "{enum#boolean}" ],
"searchStateFeatures.queryIsCamelCase" : [ "{enum#boolean}" ],
"searchStateFeatures.queryLength" : [ "{regexp#integer}" ],
"searchStateFeatures.searchScope" : [ "{util#scopeRule}" ],
"selectedIds" : [ "{regexp#integer}" ],
"selectedIndexes" : [ "{regexp#integer}" ],
"semanticExperimentGroup" : [ "{regexp#integer}" ],
"semanticSearchEnabled" : [ "{enum#boolean}" ],
"sessionId" : [ "{regexp#integer}" ],
"startTime" : [ "{regexp#integer}" ],
"timeToFirstResult" : [ "{regexp#integer}" ],
"totalItems" : [ "{regexp#integer}" ],
"typedBackspaces" : [ "{regexp#integer}" ],
"typedSymbolKeys" : [ "{regexp#integer}" ],
"unsupported_classes" : [ "{util#class_name}" ]
},
"enums" : {
"query_matching_type" : [ "START_WITH", "WORDS_FIRST_CHAR", "GREEDY_WITH_CASE", "GREEDY", "UNKNOWN" ],
"restart_reasons" : [ "SEARCH_STARTED", "TEXT_CHANGED", "TAB_CHANGED", "SCOPE_CHANGED", "EXIT_DUMB_MODE", "TEXT_SEARCH_OPTION_CHANGED" ],
"se_tab" : [ "SearchEverywhereContributor.All", "ClassSearchEverywhereContributor", "FileSearchEverywhereContributor", "RecentFilesSEContributor", "SymbolSearchEverywhereContributor", "ActionSearchEverywhereContributor", "RunConfigurationsSEContributor", "CommandsContributor", "TopHitSEContributor", "com.intellij.ide.actions.searcheverywhere.CalculatorSEContributor", "TmsSearchEverywhereContributor", "YAMLKeysSearchEverywhereContributor", "UrlSearchEverywhereContributor", "Vcs.Git", "AutocompletionContributor", "TextSearchContributor", "DbSETablesContributor", "third.party" ],
"vcs_file_status" : [ "NOT_CHANGED", "NOT_CHANGED_IMMEDIATE", "NOT_CHANGED_RECURSIVE", "DELETED", "MODIFIED", "ADDED", "MERGED", "UNKNOWN", "IDEA_FILESTATUS_IGNORED", "HIJACKED", "IDEA_FILESTATUS_MERGED_WITH_CONFLICTS", "IDEA_FILESTATUS_MERGED_WITH_BOTH_CONFLICTS", "IDEA_FILESTATUS_MERGED_WITH_PROPERTY_CONFLICTS", "IDEA_FILESTATUS_DELETED_FROM_FILE_SYSTEM", "SWITCHED", "OBSOLETE", "SUPPRESSED" ]
}
}
} ],
"rules" : {
"enums" : {
"action" : [ "git4idea.rebase.retry", "git4idea.rebase.continue", "git4idea.rebase.abort", "git4idea.rebase.resolve" ],
"boolean" : [ "true", "false", "TRUE", "FALSE", "True", "False" ],
"plugin_type" : [ "JVM_CORE", "PLATFORM", "JB_BUNDLED", "JB_NOT_BUNDLED", "LISTED", "NOT_LISTED", "JB_UPDATED_BUNDLED", "UNKNOWN", "FROM_SOURCES" ]
},
"regexps" : {
"count" : "\\d+K?M?\\+?",
"date_YYYY-MM-DD_HH" : "^[12][0-9]{3}-(0[0-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])( ([0-1][0-9]|2[0-3]))?$",
"date_short_hash" : "[0-9]{2}[01][0-9][0123][0-9]-(([0-9A-Fa-f]{12})|undefined)",
"float" : "-?\\d+(\\.\\d+(E\\-?\\d+)?)?",
"hash" : "([0-9A-Fa-f]{40,64})|undefined",
"integer" : "-?\\d+(\\+)?",
"short_hash" : "([0-9A-Fa-f]{12})|undefined",
"version" : "Unknown|unknown.format|unknown|UNKNOWN|((\\d+\\.?)*\\d+)"
}
},
"version" : "4244"
}

View File

@@ -0,0 +1,84 @@
{
"groups" : [ {
"id" : "mp.plugin.manager",
"builds" : [ ],
"versions" : [ {
"from" : "8"
} ],
"rules" : {
"event_id" : [ "{enum#__event_id}" ],
"event_data" : {
"acceptance_result" : [ "{enum:ACCEPTED|DECLINED|AUTO_ACCEPTED}" ],
"enabled_state" : [ "{enum:ENABLED|DISABLED}" ],
"group" : [ "{enum:BUNDLED_UPDATE|UPDATE|INSTALLING|INSTALLED|SEARCH_INSTALLED|SEARCH|STAFF_PICKS|NEW_AND_UPDATED|TOP_DOWNLOADS|TOP_RATED|CUSTOM_REPOSITORY|INTERNAL|SUGGESTED}" ],
"index" : [ "{regexp#integer}" ],
"localSearchFeatures.isBundled" : [ "{enum#boolean}" ],
"localSearchFeatures.isDisabled" : [ "{enum#boolean}" ],
"localSearchFeatures.isDownloaded" : [ "{enum#boolean}" ],
"localSearchFeatures.isEnabled" : [ "{enum#boolean}" ],
"localSearchFeatures.isInvalid" : [ "{enum#boolean}" ],
"localSearchFeatures.isUpdateNeeded" : [ "{enum#boolean}" ],
"localSearchFeatures.tagFiltersCount" : [ "{regexp#integer}" ],
"localSearchFeatures.vendorFiltersCount" : [ "{regexp#integer}" ],
"localSearchFeatures.withAttributes" : [ "{enum#boolean}" ],
"marketplaceSearchFeatures.customRepositoryCount" : [ "{regexp#integer}" ],
"marketplaceSearchFeatures.isStaffPicks" : [ "{enum#boolean}" ],
"marketplaceSearchFeatures.isSuggested" : [ "{enum#boolean}" ],
"marketplaceSearchFeatures.marketplaceCustomRepositoryCount" : [ "{regexp#integer}" ],
"marketplaceSearchFeatures.sortBy" : [ "{enum:UPDATE_DATE|DOWNLOADS|RATING|NAME|RELEVANCE}" ],
"marketplaceSearchFeatures.tagsListFilter" : [ "{util#mp_tags_list}" ],
"marketplaceSearchFeatures.vendorsListFilter" : [ "{util#mp_vendors_list}" ],
"plugin" : [ "{util#plugin}" ],
"plugin_type" : [ "{util#plugin_type}" ],
"plugin_version" : [ "{util#plugin_version}" ],
"previous_version" : [ "{util#plugin_version}" ],
"resultsFeatures.isEmpty" : [ "{enum#boolean}" ],
"resultsFeatures.reportLimit" : [ "{regexp#integer}" ],
"resultsFeatures.results.byJetBrains" : [ "{enum#boolean}" ],
"resultsFeatures.results.marketplaceInfo.date" : [ "{regexp#integer}" ],
"resultsFeatures.results.marketplaceInfo.downloads" : [ "{regexp#integer}" ],
"resultsFeatures.results.marketplaceInfo.isPaid" : [ "{enum#boolean}" ],
"resultsFeatures.results.marketplaceInfo.marketplaceId" : [ "{regexp#integer}" ],
"resultsFeatures.results.marketplaceInfo.marketplaceRating" : [ "{regexp#float}" ],
"resultsFeatures.results.nameLength" : [ "{regexp#integer}" ],
"resultsFeatures.results.plugin" : [ "{util#plugin}" ],
"resultsFeatures.results.plugin_type" : [ "{util#plugin_type}" ],
"resultsFeatures.results.plugin_version" : [ "{util#plugin_version}" ],
"resultsFeatures.total" : [ "{regexp#integer}" ],
"signature_check_result" : [ "{enum:INVALID_SIGNATURE|MISSING_SIGNATURE|WRONG_SIGNATURE|SUCCESSFUL}" ],
"source" : [ "{enum:MARKETPLACE|CUSTOM_REPOSITORY|FROM_DISK}" ],
"userQueryFeatures.isEmptyQuery" : [ "{enum#boolean}" ],
"userQueryFeatures.queryContainsAbbreviations" : [ "{enum#boolean}" ],
"userQueryFeatures.queryContainsPath" : [ "{enum#boolean}" ],
"userQueryFeatures.queryContainsSpaces" : [ "{enum#boolean}" ],
"userQueryFeatures.queryIsAllLowercase" : [ "{enum#boolean}" ],
"userQueryFeatures.queryIsAllUppercase" : [ "{enum#boolean}" ],
"userQueryFeatures.queryIsCamelCase" : [ "{enum#boolean}" ],
"userQueryFeatures.queryLength" : [ "{regexp#integer}" ],
"userQueryFeatures.withHANSymbols" : [ "{enum#boolean}" ],
"userQueryFeatures.wordCharsAndDelimitersOnly" : [ "{enum#boolean}" ],
"userQueryFeatures.wordsNumber" : [ "{regexp#integer}" ]
},
"enums" : {
"__event_id" : [ "plugin.install.third.party.check", "plugin.search.card.opened", "plugin.signature.warning.shown", "plugin.state.changed", "search.reset", "plugin.installation.finished", "plugin.signature.check.result", "marketplace.tab.search", "plugin.installation.started", "installed.tab.search", "plugin.was.removed" ]
}
}
} ],
"rules" : {
"enums" : {
"boolean" : [ "true", "false", "TRUE", "FALSE", "True", "False" ],
"plugin_type" : [ "JVM_CORE", "PLATFORM", "JB_BUNDLED", "JB_NOT_BUNDLED", "LISTED", "NOT_LISTED", "JB_UPDATED_BUNDLED", "UNKNOWN", "FROM_SOURCES" ]
},
"regexps" : {
"count" : "\\d+K?M?\\+?",
"date_YYYY-MM-DD_HH" : "^[12][0-9]{3}-(0[0-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])( ([0-1][0-9]|2[0-3]))?$",
"date_short_hash" : "[0-9]{2}[01][0-9][0123][0-9]-(([0-9A-Fa-f]{12})|undefined)",
"float" : "-?\\d+(\\.\\d+(E\\-?\\d+)?)?",
"hash" : "([0-9A-Fa-f]{40,64})|undefined",
"integer" : "-?\\d+(\\+)?",
"short_hash" : "([0-9A-Fa-f]{12})|undefined",
"version" : "Unknown|unknown.format|unknown|UNKNOWN|((\\d+\\.?)*\\d+)"
}
},
"version" : "4244"
}

View File

@@ -0,0 +1,38 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
BigDecimal RES = 0
int i = 0
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES = RES.add(value, DECIMAL128)
i++
}
else if (value.toString().isBigDecimal()) {
RES = RES.add(value.toString().toBigDecimal(), DECIMAL128)
i++
}
}
}
if (i > 0) {
RES = RES.divide(i, DECIMAL128)
OUT.append(RES.toString())
}
else {
OUT.append("Not enough values")
}

View File

@@ -0,0 +1,53 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
def toBigDecimal = { value ->
value instanceof Number ? value as BigDecimal :
value.toString().isBigDecimal() ? value.toString() as BigDecimal :
null
}
def values = []
ROWS.each { row ->
COLUMNS.each { column ->
def bigDecimal = toBigDecimal(row.value(column))
if (bigDecimal != null) {
values.add(bigDecimal)
}
}
}
if (values.isEmpty()) {
OUT.append("Not enough values")
return
}
def sum = BigDecimal.ZERO
values.forEach { value ->
sum = sum.add(value, DECIMAL128)
}
def avg = sum.divide(values.size(), DECIMAL128)
def sumSquaredDiff = BigDecimal.ZERO
values.each { value ->
BigDecimal diff = value.subtract(avg, DECIMAL128)
sumSquaredDiff = sumSquaredDiff.add(diff.multiply(diff, DECIMAL128), DECIMAL128)
}
def variance = sumSquaredDiff.divide(values.size(), DECIMAL128)
def standardDeviation = variance.sqrt(DECIMAL128)
def cv = standardDeviation.divide(avg, DECIMAL128)
OUT.append((cv * 100).round(2) + "%")

View File

@@ -0,0 +1,15 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
OUT.append(COLUMNS.size().toString())

View File

@@ -0,0 +1,21 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
def RES = 0G
ROWS.each { row ->
COLUMNS.each { column ->
RES += 1
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,27 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
def RES = 0G
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES += 1
}
else if (value.toString().isBigDecimal()) {
RES += 1
}
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,32 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
values = new ArrayList<BigDecimal>()
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
values.add(value as BigDecimal)
}
else if (value.toString().isBigDecimal()) {
values.add(value.toString() as BigDecimal)
}
}
}
if (values.size() == 0) {
OUT.append("Not enough values")
return
}
OUT.append(Collections.max(values).toString())

View File

@@ -0,0 +1,42 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
def toBigDecimal = { value ->
value instanceof Number ? value as BigDecimal :
value.toString().isBigDecimal() ? value.toString() as BigDecimal :
null
}
def values = []
ROWS.each { row ->
COLUMNS.each { column ->
def bigDecimal = toBigDecimal(row.value(column))
if (bigDecimal != null) {
values.add(bigDecimal)
}
}
}
if (values.isEmpty()) {
OUT.append("Not enough values")
return
}
elementsNumber = values.size()
Collections.sort(values)
mid = (int)elementsNumber / 2
RES = elementsNumber % 2 != 0 ? values[mid] : values[mid].add(values[mid - 1], DECIMAL128).divide(2, DECIMAL128)
OUT.append(RES.toString())

View File

@@ -0,0 +1,31 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
values = new ArrayList<BigDecimal>()
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
values.add(value as BigDecimal)
}
else if (value.toString().isBigDecimal()) {
values.add(value.toString() as BigDecimal)
}
}
}
if (values.size() == 0) {
OUT.append("Not enough values")
return
}
OUT.append(Collections.min(values).toString())

View File

@@ -0,0 +1,15 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
OUT.append(ROWS.size().toString())

View File

@@ -0,0 +1,29 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static java.math.MathContext.DECIMAL128
BigDecimal RES = 0
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
if (value instanceof Number) {
RES = RES.add(value, DECIMAL128)
}
else if (value.toString().isBigDecimal()) {
RES = RES.add(value.toString().toBigDecimal(), DECIMAL128)
}
}
}
OUT.append(RES.toString())

View File

@@ -0,0 +1,37 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEPARATOR = ","
QUOTE = "\""
NEWLINE = System.getProperty("line.separator")
def printRow = { values, valueToString ->
values.eachWithIndex { value, idx ->
def str = valueToString(value)
def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
OUT.append(q ? QUOTE : "")
.append(str.replace(QUOTE, QUOTE + QUOTE))
.append(q ? QUOTE : "")
.append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
}
}
if (!TRANSPOSED) {
ROWS.each { row -> printRow(COLUMNS, { FORMATTER.format(row, it) }) }
}
else {
def values = COLUMNS.collect { new ArrayList<String>() }
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
values.each { printRow(it, { it }) }
}

View File

@@ -0,0 +1,57 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static com.intellij.openapi.util.text.StringUtil.escapeXmlEntities
NEWLINE = System.getProperty("line.separator")
def HTML_PATTERN = ~"<.+>"
def printRow = { values, tag, valueToString ->
OUT.append("$NEWLINE<tr>$NEWLINE")
values.each {
def str = valueToString(it)
def escaped = str ==~ HTML_PATTERN
? str
: escapeXmlEntities((str as String).replaceAll("\\t|\\b|\\f", "")).replaceAll("\\r|\\n|\\r\\n", "<br/>")
OUT.append(" <$tag>$escaped</$tag>$NEWLINE")
}
OUT.append("</tr>")
}
OUT.append(
"""<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<table border="1" style="border-collapse:collapse">""")
if (!TRANSPOSED) {
printRow(COLUMNS, "th") { it.name() }
ROWS.each { row -> printRow(COLUMNS, "td") { FORMATTER.format(row, it) } }
}
else {
def values = COLUMNS.collect { new ArrayList<String>( [it.name()] ) }
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
values.each { printRow(it, "td", { it }) }
}
OUT.append("""
</table>
</body>
</html>
""")

View File

@@ -0,0 +1,49 @@
function eachWithIdx(iterable, f) { var i = iterable.iterator(); var idx = 0; while (i.hasNext()) f(i.next(), idx++); }
function mapEach(iterable, f) { var vs = []; eachWithIdx(iterable, function (i) { vs.push(f(i));}); return vs; }
function escape(str) {
str = str.replace(/\t|\b|\f/g, "");
str = com.intellij.openapi.util.text.StringUtil.escapeXml(str);
str = str.replace(/\r|\n|\r\n/g, "<br/>");
return str;
}
var isHTML = RegExp.prototype.test.bind(/^<.+>$/);
var NEWLINE = "\n";
function output() { for (var i = 0; i < arguments.length; i++) { OUT.append(arguments[i]); } }
function outputRow(items, tag) {
output("<tr>");
for (var i = 0; i < items.length; i++)
output("<", tag, ">", isHTML(items[i]) ? items[i] : escape(items[i]), "</", tag, ">");
output("</tr>", NEWLINE);
}
output("<!DOCTYPE html>", NEWLINE,
"<html>", NEWLINE,
"<head>", NEWLINE,
"<title></title>", NEWLINE,
"<meta charset=\"UTF-8\">", NEWLINE,
"</head>", NEWLINE,
"<body>", NEWLINE,
"<table border=\"1\" style=\"border-collapse:collapse\">", NEWLINE);
if (TRANSPOSED) {
var values = mapEach(COLUMNS, function(col) { return [col.name()]; });
eachWithIdx(ROWS, function (row) {
eachWithIdx(COLUMNS, function (col, i) {
values[i].push(FORMATTER.format(row, col));
});
});
eachWithIdx(COLUMNS, function (_, i) { outputRow(values[i], "td"); });
}
else {
outputRow(mapEach(COLUMNS, function (col) { return col.name(); }), "th");
eachWithIdx(ROWS, function (row) {
outputRow(mapEach(COLUMNS, function (col) { return FORMATTER.format(row, col); }), "td")
});
}
output("</table>", NEWLINE,
"</body>", NEWLINE,
"</html>", NEWLINE);

View File

@@ -0,0 +1,70 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import static com.intellij.openapi.util.text.StringUtil.escapeStringCharacters as escapeStr
NEWLINE = System.getProperty("line.separator")
INDENT = " "
def printJSON(level, col, o) {
switch (o) {
case null: OUT.append("null"); break
case Tuple: printJSON(level, o[0], o[1]); break
case Map:
OUT.append("{")
o.entrySet().eachWithIndex { entry, i ->
OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
OUT.append("\"${escapeStr(entry.getKey().toString())}\"")
OUT.append(": ")
printJSON(level + 1, col, entry.getValue())
}
OUT.append("$NEWLINE${INDENT * level}}")
break
case Object[]:
case Iterable:
OUT.append("[")
def plain = true
o.eachWithIndex { item, i ->
plain = item == null || item instanceof Number || item instanceof Boolean || item instanceof String
if (plain) {
OUT.append(i > 0 ? ", " : "")
}
else {
OUT.append("${i > 0 ? "," : ""}$NEWLINE${INDENT * (level + 1)}")
}
printJSON(level + 1, col, item)
}
if (plain) OUT.append("]") else OUT.append("$NEWLINE${INDENT * level}]")
break
case Boolean: OUT.append("$o"); break
default:
def str = FORMATTER.formatValue(o, col)
def typeName = FORMATTER.getTypeName(o, col)
def shouldQuote = FORMATTER.isStringLiteral(o, col) && !(typeName.equalsIgnoreCase("json") || typeName.equalsIgnoreCase("jsonb"))
OUT.append(shouldQuote ? "\"${escapeStr(str)}\"" : str);
break
}
}
printJSON(0, null, ROWS.transform { row ->
def map = new LinkedHashMap<String, Object>()
COLUMNS.each { col ->
if (row.hasValue(col)) {
def val = row.value(col)
map.put(col.name(), new Tuple(col, val))
}
}
map
})

View File

@@ -0,0 +1,65 @@
package extensions.data.extractors
NEWLINE = System.getProperty("line.separator")
SEPARATOR = "|"
BACKSLASH = "\\"
BACKQUOTE = "`"
LTAG = "<"
RTAG = ">"
ASTERISK = "*"
UNDERSCORE = "_"
LPARENTH = "("
RPARENTH = ")"
LBRACKET = "["
RBRACKET = "]"
TILDE = "~"
def printRow = { values, firstBold = false, valueToString ->
values.eachWithIndex { value, idx ->
def str = valueToString(value)
.replace(BACKSLASH, BACKSLASH + BACKSLASH)
.replace(SEPARATOR, BACKSLASH + SEPARATOR)
.replace(BACKQUOTE, BACKSLASH + BACKQUOTE)
.replace(ASTERISK, BACKSLASH + ASTERISK)
.replace(UNDERSCORE, BACKSLASH + UNDERSCORE)
.replace(LPARENTH, BACKSLASH + LPARENTH)
.replace(RPARENTH, BACKSLASH + RPARENTH)
.replace(LBRACKET, BACKSLASH + LBRACKET)
.replace(RBRACKET, BACKSLASH + RBRACKET)
.replace(TILDE, BACKSLASH + TILDE)
.replace(LTAG, "&lt;")
.replace(RTAG, "&gt;")
.replaceAll("\r\n|\r|\n", "<br/>")
.replaceAll("\t|\b|\f", "")
OUT.append("| ")
.append(firstBold && idx == 0 ? "**" : "")
.append(str)
.append(firstBold && idx == 0 ? "**" : "")
.append(idx != values.size() - 1 ? " " : " |" + NEWLINE)
}
}
if (TRANSPOSED) {
def values = COLUMNS.collect { new ArrayList<String>([it.name()]) }
def rowCount = 0
ROWS.forEach { row ->
COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) }
rowCount++
}
for (int i = 0; i <= rowCount; i++) {
OUT.append("| ")
}
OUT.append("|" + NEWLINE)
for (int i = 0; i <= rowCount; i++) {
OUT.append("| :- ")
}
OUT.append("|" + NEWLINE)
values.each { printRow(it, true) { it } }
}
else {
printRow(COLUMNS) { it.name() }
COLUMNS.each { OUT.append("| :--- ") }
OUT.append("|" + NEWLINE)
ROWS.each { row -> printRow(COLUMNS) { FORMATTER.format(row, it) } }
}

View File

@@ -0,0 +1,34 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEPARATOR = ", "
QUOTE = "'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
first = true
ROWS.each { row ->
COLUMNS.each { column ->
def value = row.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(first ? "" : SEPARATOR)
.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(stringValue ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
first = false
}
}

View File

@@ -0,0 +1,144 @@
import com.intellij.openapi.util.text.StringUtil
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
WIDTH_BASED_ON_CONTENT = -1
PIPE = "|"
SPACE = " "
CROSS = "+"
MINUS = "-"
ROW_SEPARATORS = false
COLUMN_WIDTH = WIDTH_BASED_ON_CONTENT
NEWLINE = System.getProperty("line.separator")
static def splitByLines(values, size) {
def splitValues = new ArrayList<>()
def maxLines = 0
for (int i = 0; i < size; i++) {
def splitValue = StringUtil.splitByLines(values(i))
splitValues.add(splitValue)
maxLines = Math.max(maxLines, splitValue.size())
}
def byLines = new ArrayList<>(maxLines)
for (int i = 0; i < maxLines; i++) {
def lineValues = new ArrayList<>()
byLines.add(lineValues)
for (int j = 0; j < splitValues.size(); j++) {
def splitValue = splitValues[j]
lineValues.add(splitValue.size() <= i ? null : splitValue[i])
}
}
return byLines
}
def printRow(values, size, width = { COLUMN_WIDTH }, padding = SPACE, separator = { PIPE }) {
def byLines = splitByLines(values, size)
byLines.each { line ->
def lineSize = line.size()
if (lineSize > 0) OUT.append(separator(-1))
for (int i = 0; i < lineSize; i++) {
def value = line[i] == null ? "" : line.get(i)
def curWidth = width(i)
OUT.append(value.padRight(curWidth, padding))
OUT.append(separator(i))
}
OUT.append(NEWLINE)
}
}
def printRows() {
def colNames = COLUMNS.collect { it.name() }
def calcWidth = COLUMN_WIDTH == WIDTH_BASED_ON_CONTENT
def rows
def width
def rowFormatter
if (calcWidth) {
rows = new ArrayList<>()
def widths = new int[COLUMNS.size()]
COLUMNS.eachWithIndex { column, idx -> widths[idx] = column.name().length() }
ROWS.each { row ->
def rowValues = COLUMNS.withIndex().collect { col, idx ->
def value = FORMATTER.format(row, col)
widths[idx] = Math.max(widths[idx], value.length())
value
}
rows.add(rowValues)
}
width = { widths[it] }
rowFormatter = { it }
}
else {
rows = ROWS
width = { COLUMN_WIDTH }
rowFormatter = { COLUMNS.collect { col -> FORMATTER.format(it, col) } }
}
printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { CROSS }
printRow( { colNames[it] }, COLUMNS.size()) { width(it) }
def first = true
rows.each { row ->
def rowValues = rowFormatter(row)
if (first || ROW_SEPARATORS) printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { first ? CROSS : MINUS }
printRow({ rowValues[it] }, rowValues.size()) { width(it) }
first = false
}
printRow({""}, COLUMNS.size(), { width(it) }, MINUS) { CROSS }
}
def printRowsTransposed() {
def calcWidth = COLUMN_WIDTH == WIDTH_BASED_ON_CONTENT
if (calcWidth) {
COLUMN_WIDTHS = new ArrayList<Integer>()
COLUMN_WIDTHS.add(0)
}
def valuesByRow = COLUMNS.collect { col ->
if (calcWidth) COLUMN_WIDTHS.set(0, Math.max(COLUMN_WIDTHS[0], col.name().length()))
new ArrayList<String>([col.name()])
}
def rowCount = 1
ROWS.each { row ->
rowCount++
COLUMNS.eachWithIndex { col, i ->
def formattedValue = FORMATTER.format(row, col)
valuesByRow[i].add(formattedValue)
def widthIdx = rowCount - 1
def length = formattedValue.length()
if (calcWidth) {
if (COLUMN_WIDTHS.size() == widthIdx) COLUMN_WIDTHS.add(length)
COLUMN_WIDTHS.set(widthIdx, Math.max(COLUMN_WIDTHS[widthIdx], length))
}
}
}
valuesByRow.each { row ->
printRow({ "" }, rowCount, { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }, MINUS) {
it <= 0 ? CROSS : it == rowCount - 1 ? CROSS : MINUS
}
printRow({ row[it] }, row.size()) { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }
}
printRow({ "" }, rowCount, { calcWidth ? COLUMN_WIDTHS[it] : COLUMN_WIDTH }, MINUS) {
it <= 0 ? CROSS : it == rowCount - 1 ? CROSS : MINUS
}
}
if (TRANSPOSED) {
printRowsTransposed()
}
else {
printRows()
}

View File

@@ -0,0 +1,62 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEP = ", "
QUOTE = "\'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
NEWLINE = System.getProperty("line.separator")
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_INSERT_INTO = KEYWORDS_LOWERCASE ? "insert into " : "INSERT INTO "
KW_VALUES = KEYWORDS_LOWERCASE ? "values" : "VALUES"
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
begin = true
def record(columns, dataRow) {
if (begin) {
OUT.append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
columns.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(")").append(NEWLINE)
OUT.append(KW_VALUES).append(" (")
begin = false
}
else {
OUT.append(",").append(NEWLINE)
OUT.append(" (")
}
columns.eachWithIndex { column, idx ->
def value = dataRow.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(stringValue ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
.append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(")")
}
ROWS.each { row -> record(COLUMNS, row) }
OUT.append(";")

View File

@@ -0,0 +1,49 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
SEP = ", "
QUOTE = "\'"
STRING_PREFIX = DIALECT.getDbms().isMicrosoft() ? "N" : ""
NEWLINE = System.getProperty("line.separator")
KEYWORDS_LOWERCASE = com.intellij.database.util.DbSqlUtil.areKeywordsLowerCase(PROJECT)
KW_INSERT_INTO = KEYWORDS_LOWERCASE ? "insert into " : "INSERT INTO "
KW_VALUES = KEYWORDS_LOWERCASE ? ") values (" : ") VALUES ("
KW_NULL = KEYWORDS_LOWERCASE ? "null" : "NULL"
def record(columns, dataRow) {
OUT.append(KW_INSERT_INTO)
if (TABLE == null) OUT.append("MY_TABLE")
else OUT.append(TABLE.getParent().getName()).append(".").append(TABLE.getName())
OUT.append(" (")
columns.eachWithIndex { column, idx ->
OUT.append(column.name()).append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(KW_VALUES)
columns.eachWithIndex { column, idx ->
def value = dataRow.value(column)
def stringValue = value == null ? KW_NULL : FORMATTER.formatValue(value, column)
def isStringLiteral = value != null && FORMATTER.isStringLiteral(value, column)
if (isStringLiteral && DIALECT.getDbms().isMysql()) stringValue = stringValue.replace("\\", "\\\\")
OUT.append(isStringLiteral ? (STRING_PREFIX + QUOTE) : "")
.append(isStringLiteral ? stringValue.replace(QUOTE, QUOTE + QUOTE) : stringValue)
.append(isStringLiteral ? QUOTE : "")
.append(idx != columns.size() - 1 ? SEP : "")
}
OUT.append(");").append(NEWLINE)
}
ROWS.each { row -> record(COLUMNS, row) }

View File

@@ -0,0 +1,93 @@
/*
* Available context bindings:
* COLUMNS List<DataColumn>
* ROWS Iterable<DataRow>
* OUT { append() }
* FORMATTER { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
* TRANSPOSED Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
* DataColumn { columnNumber(), name() }
*/
import com.intellij.openapi.util.text.StringUtil
import java.util.regex.Pattern
NEWLINE = System.getProperty("line.separator")
pattern = Pattern.compile("[^\\w\\d]")
def escapeTag(name) {
name = pattern.matcher(name).replaceAll("_")
return name.isEmpty() || !Character.isLetter(name.charAt(0)) ? "_$name" : name
}
def printRow(level, rowTag, values) {
def prefix = "$NEWLINE${StringUtil.repeat(" ", level)}"
OUT.append("$prefix<$rowTag>")
values.each { name, col, valuesName, value ->
switch (value) {
case Map:
def mapValues = new ArrayList<Tuple>()
value.each { key, v -> mapValues.add(new Tuple(escapeTag(key.toString()), col, key.toString(), v)) }
printRow(level + 1, name, mapValues)
break
case Object[]:
case Iterable:
def listItems = new ArrayList<Tuple>()
def itemName = valuesName != null ? escapeTag(StringUtil.unpluralize(valuesName) ?: "item") : "item"
value.collect { v -> listItems.add(new Tuple(itemName, col, null, v)) }
printRow(level + 1, name, listItems)
break
default:
OUT.append("$prefix <$name>")
if (value == null) OUT.append("null")
else {
def formattedValue = FORMATTER.formatValue(value, col)
if (isXmlString(formattedValue)) OUT.append(formattedValue)
else OUT.append(StringUtil.escapeXmlEntities(formattedValue))
}
OUT.append("</$name>")
}
}
OUT.append("$prefix</$rowTag>")
}
def isXmlString(string) {
return string.startsWith("<") && string.endsWith(">") && (string.contains("</") || string.contains("/>"))
}
OUT.append(
"""<?xml version="1.0" encoding="UTF-8"?>
<data>""")
if (!TRANSPOSED) {
ROWS.each { row ->
def values = COLUMNS
.findAll { col -> row.hasValue(col) }
.collect { col ->
new Tuple(escapeTag(col.name()), col, col.name(), row.value(col))
}
printRow(0, "row", values)
}
}
else {
def values = COLUMNS.collect { new ArrayList<Tuple>() }
ROWS.eachWithIndex { row, rowIdx ->
COLUMNS.eachWithIndex { col, colIdx ->
if (row.hasValue(col)) {
def value = row.value(col)
values[colIdx].add(new Tuple("row${rowIdx + 1}", col, col.name(), value))
}
}
}
values.eachWithIndex { it, index ->
printRow(0, escapeTag(COLUMNS[index].name()), it)
}
}
OUT.append("""
</data>
""")

View File

@@ -0,0 +1,66 @@
// IJ: extensions = xls;xlsx displayName = XLS
package extensions.data.loaders
@Grab('org.apache.poi:poi:5.2.5')
@Grab('org.apache.poi:poi-ooxml:5.2.5')
import org.apache.poi.ss.usermodel.CellType
import org.apache.poi.ss.usermodel.WorkbookFactory
LOADER.load { ctx ->
loadXls(ctx.getParameters()["FILE"], ctx.getDataConsumer())
}
def loadXls(path, dataConsumer) {
def wb = WorkbookFactory.create(new File(path))
def evaluator = wb.getCreationHelper().createFormulaEvaluator();
def sheet = wb.getSheetAt(0)
produceSheet(sheet, evaluator, dataConsumer)
}
private void produceSheet(sheet, evaluator, dataConsumer) {
def idx = 0
sheet.forEach { row ->
def res = extractRow(row, evaluator)
if (!res.isEmpty()) {
def cur = row.getRowNum()
while (idx < cur - 1) {
dataConsumer.consume(new Object[0])
++idx
}
idx = cur
dataConsumer.consume(res.toArray())
}
}
}
private List<Object> extractRow(row, evaluator) {
def res = new ArrayList<Object>()
row.forEach { cell ->
def cur = cell.getColumnIndex()
while (res.size() < cur) {
res.add(null)
}
def v = evaluator.evaluate(cell)
def rv = cellVal(v)
res.add(rv)
}
res
}
def cellVal(cell) {
if (cell == null) return null
switch (cell.getCellType()) {
case CellType.BOOLEAN:
return cell.getBooleanCellValue()
case CellType.STRING:
return cell.getStringValue()
case CellType.NUMERIC:
return cell.getNumberValue()
case CellType.BLANK:
return null
default:
return cell.formatAsString()
}
}

View File

@@ -0,0 +1,53 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def db = DasUtil.getCatalog(obj)
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (db.isEmpty()) {
if (!schema.isEmpty()) return "anonymous/" + sanitize(schema) + "/" + file
return file
}
else if (schema.isEmpty()) {
return sanitize(db) + "/" + file
}
else {
return sanitize(db) + "/" + sanitize(schema) + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
def next = path.getName(1).toString()
if (next.endsWith(".sql")) {
if (root == "anonymous") return null
return ObjectPath.create(root, ObjectKind.DATABASE)
}
if (root == "anonymous") return ObjectPath.create(next, ObjectKind.SCHEMA)
return ObjectPath.create(root, ObjectKind.DATABASE).append(next, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,42 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (schema.isEmpty()) {
return file
}
else {
return sanitize(schema) + "/" + obj.kind.code() + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
return ObjectPath.create(root, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,42 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.DasUtil
import com.intellij.database.util.ObjectPath
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileScope { path -> fileScope(path) }
def baseName(obj) {
def schema = DasUtil.getSchema(obj)
def file = fileName(obj)
if (schema.isEmpty()) {
return file
}
else {
return sanitize(schema) + "/" + file
}
}
def fileName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def fileScope(path) {
def root = path.getName(0).toString()
if (root.endsWith(".sql")) return null
return ObjectPath.create(root, ObjectKind.SCHEMA)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,21 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
LAYOUT.baseName { ctx -> baseName(ctx.object) }
LAYOUT.fileName { ctx -> String.format("%03d-%s.sql", ctx.count, ctx.baseName) }
def baseName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,21 @@
import com.intellij.database.model.DasObjectWithSource
import com.intellij.database.model.DasSchemaChild
LAYOUT.ignoreDependencies = true
LAYOUT.baseName { ctx -> baseName(ctx.object) }
def baseName(obj) {
for (def cur = obj; cur != null; cur = cur.dasParent) {
if (storeSeparately(cur)) return sanitize(cur.name)
}
return sanitize(obj.name)
}
def storeSeparately(obj) {
return obj instanceof DasObjectWithSource || obj instanceof DasSchemaChild
}
def sanitize(name) {
return name.replace('/', 'slash')
}

View File

@@ -0,0 +1,74 @@
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
packageName = "com.sample;"
typeMapping = [
(~/(?i)int/) : "long",
(~/(?i)float|double|decimal|real/): "double",
(~/(?i)datetime|timestamp/) : "java.sql.Timestamp",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)/) : "String"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaName(table.getName(), true)
def fields = calcFields(table)
new File(dir, className + ".java").withPrintWriter { out -> generate(out, className, fields) }
}
def generate(out, className, fields) {
out.println "package $packageName"
out.println ""
out.println ""
out.println "public class $className {"
out.println ""
fields.each() {
if (it.annos != "") out.println " ${it.annos}"
out.println " private ${it.type} ${it.name};"
}
out.println ""
fields.each() {
out.println ""
out.println " public ${it.type} get${it.name.capitalize()}() {"
out.println " return ${it.name};"
out.println " }"
out.println ""
out.println " public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
out.println " this.${it.name} = ${it.name};"
out.println " }"
out.println ""
}
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDasType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
annos: ""]]
}
}
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<migrationMap>
<name value="JUnit (4.x -&gt; 5.0)" />
<description value="For transferring the JUnit 4 test annotations to the new jupiter ones, may result in red code! Assertions won't be migrated.
Please see the 'Java | JUnit issues | JUnit 4 test can be JUnit 5' inspection to migrate only tests which can be converted fully automatically." />
<entry oldName="org.junit.Before" newName="org.junit.jupiter.api.BeforeEach" type="class"/>
<entry oldName="org.junit.BeforeClass" newName="org.junit.jupiter.api.BeforeAll" type="class"/>
<entry oldName="org.junit.After" newName="org.junit.jupiter.api.AfterEach" type="class"/>
<entry oldName="org.junit.AfterClass" newName="org.junit.jupiter.api.AfterAll" type="class"/>
<entry oldName="org.junit.Test" newName="org.junit.jupiter.api.Test" type="class"/>
<entry oldName="org.junit.Ignore" newName="org.junit.jupiter.api.Disabled" type="class"/>
</migrationMap>

View File

@@ -0,0 +1,5 @@
<application>
<component name="AquaNewUserFeedbackInfoState"><![CDATA[{
"userTypedInEditor": true
}]]></component>
</application>

View File

@@ -0,0 +1,6 @@
<application>
<component name="AquaOldUserFeedbackInfoState"><![CDATA[{
"userTypedInEditor": true,
"firstUsageTime": "2024-05-13T16:19:21.627506"
}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="CommonFeedbackSurveyService"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="DontShowAgainFeedbackService"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="KafkaConsumerProducerInfoState"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="NewUIInfoState"><![CDATA[{
"enableNewUIDate": "2024-05-13T18:52:55.125134"
}]]></component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="PyCharmCEFeedbackState"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="PyCharmUIInfoState"><![CDATA[{
"newUserFirstRunDate": "2024-05-13T16:17:29.814255"
}]]></component>
</application>

View File

@@ -0,0 +1,175 @@
<application>
<component name="ActionsLocalSummary">
<e n="$SelectAll">
<i c="363" l="1717671166927" />
</e>
<e n="$Undo">
<i c="152" l="1717669152300" />
</e>
<e n="EditorBackSpace">
<i c="954" l="1724138760223" />
</e>
<e n="EditorChooseLookupItem">
<i c="144" l="1717669304916" />
</e>
<e n="EditorCopy">
<i c="23" l="1724138534223" />
</e>
<e n="EditorCut">
<i c="12" l="1724138649421" />
</e>
<e n="EditorDown">
<i c="189" l="1724138650560" />
</e>
<e n="EditorDuplicate">
<i c="1" l="1715845001776" />
</e>
<e n="EditorEnter">
<i c="307" l="1724138762140" />
</e>
<e n="EditorEscape">
<i c="338" l="1717669085666" />
</e>
<e n="EditorLeft">
<i c="160" l="1724138761876" />
</e>
<e n="EditorLeftWithSelection">
<i c="7" l="1717414253892" />
</e>
<e n="EditorLineEnd">
<i c="20" l="1717664908701" />
</e>
<e n="EditorLineStart">
<i c="11" l="1724138635627" />
</e>
<e n="EditorNextWord">
<i c="1" l="1716886114968" />
</e>
<e n="EditorPaste">
<i c="19" l="1724138651338" />
</e>
<e n="EditorPreviousWord">
<i c="5" l="1717126187648" />
</e>
<e n="EditorRight">
<i c="190" l="1717664408909" />
</e>
<e n="EditorRightWithSelection">
<i c="1" l="1716895022454" />
</e>
<e n="EditorStartNewLine">
<i c="1" l="1716965190178" />
</e>
<e n="EditorTab">
<i c="23" l="1724138596529" />
</e>
<e n="EditorUp">
<i c="197" l="1724138651101" />
</e>
<e n="Find">
<i c="3" l="1717658357202" />
</e>
<e n="GotoDeclaration">
<i c="280" l="1717668194936" />
</e>
<e n="GotoLine">
<i c="3" l="1717402779921" />
</e>
<e n="HippieCompletion">
<i c="3" l="1717395097460" />
</e>
<e n="Kotlin.NewFile">
<i c="2" l="1716864639359" />
</e>
<e n="NewFile">
<i c="2" l="1716526653063" />
</e>
<e n="NewTypeScriptFile">
<i c="1" l="1716531088417" />
</e>
<e n="NextTemplateVariable">
<i c="11" l="1717667201250" />
</e>
<e n="PsiViewer">
<i c="5" l="1724138560134" />
</e>
<e n="PsiViewerForContext">
<i c="119" l="1717669183815" />
</e>
<e n="RedesignedRunConfigurationSelector">
<i c="17" l="1715931525531" />
</e>
<e n="ReformatCode">
<i c="403" l="1717664943428" />
</e>
<e n="RenameElement">
<i c="7" l="1716531107003" />
</e>
<e n="ReplaceInPath">
<i c="1" l="1715750491757" />
</e>
<e n="Run">
<i c="3" l="1715858915740" />
</e>
<e n="RunClass">
<i c="6" l="1715931523440" />
</e>
<e n="SelectInProjectView">
<i c="1" l="1715593582035" />
</e>
<e n="SettingsEntryPoint">
<i c="3" l="1717144723281" />
</e>
<e n="Stop">
<i c="1" l="1715931533927" />
</e>
<e n="WelcomeScreen.CreateNewProject">
<i c="1" l="1724138505008" />
</e>
<e n="WelcomeScreen.OpenProject">
<i c="1" l="1715588344107" />
</e>
<e n="com.intellij.codeInsight.daemon.NavigateAction">
<i c="16" l="1715854404250" />
</e>
<e n="com.intellij.dev.psiViewer.stubs.StubDetailsViewer$1">
<i c="1" l="1716531427973" />
</e>
<e n="com.intellij.execution.lineMarker.LineMarkerActionWrapper">
<i c="7" l="1717664194640" />
</e>
<e n="com.intellij.find.SearchReplaceComponent$CloseAction">
<i c="3" l="1717658365924" />
</e>
<e n="com.intellij.ide.plugins.newui.PluginsTab$3$1">
<i c="1" l="1716526709254" />
</e>
<e n="com.intellij.notification.NotificationAction$Simple">
<i c="28" l="1717396848995" />
</e>
<e n="com.intellij.openapi.fileEditor.impl.tabActions.CloseTab">
<i c="32" l="1717658371894" />
</e>
<e n="com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$AnCancelAction">
<i c="42" l="1717406812948" />
</e>
<e n="com.intellij.openapi.wm.impl.SquareAnActionButton">
<i c="4" l="1717396850425" />
</e>
<e n="com.intellij.platform.lsp.api.lsWidget.RestartLspServerAction">
<i c="1" l="1717661339218" />
</e>
<e n="com.intellij.toolWindow.ToolWindowHeader$HideAction">
<i c="1" l="1717394781740" />
</e>
<e n="com.intellij.ui.CommonActionsPanel$AddButton">
<i c="1" l="1715836652419" />
</e>
<e n="com.intellij.ui.CommonActionsPanel$RemoveButton">
<i c="11" l="1715931520232" />
</e>
<e n="editRunConfigurations">
<i c="13" l="1715931526161" />
</e>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="EditorColorsManagerImpl">
<global_color_scheme name="Dark" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="ConsoleFont">
<option name="VERSION" value="1" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="LocalDatabaseDriverManager" version="201" />
</application>

View File

@@ -0,0 +1,103 @@
<application>
<component name="DebuggerSettings">
<filter>
<option name="PATTERN" value="com.sun.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="java.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="javax.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="org.omg.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="sun.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="jdk.internal.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="junit.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="org.junit.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="com.intellij.rt.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="com.yourkit.runtime.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="com.springsource.loaded.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="org.springsource.loaded.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="javassist.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="org.apache.webbeans.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="com.ibm.ws.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="org.mockito.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="kotlin.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="androidx.compose.runtime.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
<filter>
<option name="PATTERN" value="kotlinx.*" />
<option name="ENABLED" value="true" />
<option name="INCLUDE" value="true" />
</filter>
</component>
<component name="XDebuggerSettings">
<data-views />
<general />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="DefaultFont">
<option name="VERSION" value="1" />
</component>
</application>

View File

@@ -0,0 +1,8 @@
<application>
<component name="CodeInsightSettings">
<option name="AUTO_POPUP_JAVADOC_INFO" value="true" />
</component>
<component name="CodeVisionSettings">
<option name="defaultPosition" value="Right" />
</component>
</application>

View File

@@ -0,0 +1,152 @@
<application>
<component name="FeatureUsageStatistics" first-run="1715588381754" have-been-shown="false" show-in-other="true" show-in-compilation="true">
<feature id="editing.completion.camelHumps" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.smarttype.afternew" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.second.smarttype.aslist" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.surroundwith.statement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.file.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.finishBySmartEnter" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.symbol" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="switcher" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.replace" count="0" last-shown="1717669304444" last-used="0" shown-count="527" />
<feature id="codeassists.complete.statement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="spring.endpoints.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.smarttype.casting" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="spring.inject.entities" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.convert.line.separators" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console.execute" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.recent.files" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="scratch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.move.moveInner" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.pull.requests" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.annotate" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.open.last.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.reformat.code" count="403" last-shown="0" last-used="1717664943430" shown-count="0" />
<feature id="editing.completion.show.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.copy.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.in.files" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.finishByExclamation" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.copy.table" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.hide.tool.window" count="1" last-shown="0" last-used="1717394781747" shown-count="0" />
<feature id="navigation.find.replace.in.files.toggle" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="move.element.left.right" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="jar.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="intentions.check.regexp" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="profiler.open.snapshot" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.comment.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.second.smarttype.chain" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.second.smarttype.toar" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="SearchEverywhere" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editor.delete.line" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.inheritance.hierarchy" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.duplicate" count="1" last-shown="0" last-used="1715845001813" shown-count="0" />
<feature id="editing.copy.reference" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.highlight.throws" count="3" last-shown="0" last-used="1716888368650" shown-count="0" />
<feature id="navigation.find" count="3" last-shown="0" last-used="1717658357261" shown-count="0" />
<feature id="codeassists.quickdefinition" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.basic" count="144" last-shown="0" last-used="1717669304926" shown-count="0" />
<feature id="editing.completion.postfix" count="1" last-shown="0" last-used="1716864722813" shown-count="0" />
<feature id="dir.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.recent.locations" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="diagram.show.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.select.word" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.close.other.editors" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.evaluate.expression" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.highlight.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.highlight.implements" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.breakpoint.edit" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.smarttype.general" count="0" last-shown="1716866236054" last-used="0" shown-count="4" />
<feature id="codeassist.inspect.batch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.table.editor" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.comment.block" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="intentions.edit.regexp" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickdefinition.lookup" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.usages" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="spring.endpoint.actions" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.clipboard.history" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.compare.editor.with.clipboard" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.rename" count="7" last-shown="0" last-used="1716531107123" shown-count="0" />
<feature id="navigation.popup.action" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.forget.cached.schemas" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.cancelByControlArrows" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="find.recent.search" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.inspection" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.show.local.history" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.variable.name" count="2" last-shown="0" last-used="1716866234490" shown-count="0" />
<feature id="vcs.use.integration" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.file" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.overrideimplement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console.run.intention" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.diff" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.close.all.editors" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.wildcards" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.introduceVariable" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.extractMethod" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.javadoc.external" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.surroundwith.expression" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.generate.code" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.declaration" count="281" last-shown="0" last-used="1717668194942" shown-count="0" />
<feature id="editing.completion.finishByDotEtc" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.open.project.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.join.lines" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.goto.implementation" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="debugger.breakpoint.non.suspending" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.finishByCtrlDot" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.context.actions" count="1" last-shown="0" last-used="1716952942937" shown-count="0" />
<feature id="navigation.select.in" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.global.member.name" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="intentions.fix.javadoc" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.tree.speedsearch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.horizontal.scrolling" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.replace" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.copyClass" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="spring.find.endpoint" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.highlight.return" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ant.quickfix.CreateProperty" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.camelprefix" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.popup.class" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.parameterInfo" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.table.editor.wrapper" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="find.completion" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="tag.name.completion" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.second.smarttype.array.member" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="diagram.show.popup" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="refactoring.introduceVariable.incompleteStatement" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.readonly.datasource" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="vcs.compare.file.versions" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.find.replace.toggle" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.add.carets.using.double.ctrl" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.console" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc.lookup" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.scheme.quickswitch" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="navigation.replace.in.files" count="1" last-shown="0" last-used="1715750492074" shown-count="0" />
<feature id="navigation.popup.file.structure" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ant.quickfix.CreateTarget" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc.ctrln" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="codeassists.quickjavadoc" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="ui.recentchanges" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="diagram.show" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.move.statement.up.down" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.second.basic" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="editing.completion.changeSorting" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="db.assign.color" count="0" last-shown="0" last-used="0" shown-count="0" />
<feature id="spring.select.in" count="0" last-shown="0" last-used="0" shown-count="0" />
<completionStatsTag>
<option name="sparedCharacters" value="687" />
<option name="invocations" value="89" />
<option name="startDate" value="1715529600000" />
<option name="dayCount" value="11" />
<option name="lastDate" value="1717603200000" />
</completionStatsTag>
<fixesStatsTag>
<option name="invocations" value="1" />
<option name="startDate" value="1717344000000" />
<option name="dayCount" value="1" />
<option name="lastDate" value="1717344000000" />
</fixesStatsTag>
</component>
</application>

View File

@@ -0,0 +1,8 @@
<application>
<component name="FileTypeManager" version="18">
<extensionMap>
<removed_mapping ext="apk" approved="true" type="ARCHIVE" />
<removed_mapping ext="psd" approved="true" type="Image" />
</extensionMap>
</component>
</application>

View File

@@ -0,0 +1,10 @@
<application>
<component name="FindSettings">
<mask>*.css</mask>
<mask>*.html</mask>
<mask>*.xml</mask>
<mask>*.jsp</mask>
<mask>*.properties</mask>
<mask>*.java</mask>
</component>
</application>

View File

@@ -0,0 +1,9 @@
<application>
<component name="LessonStateBase">
<option name="map">
<map>
<entry key="java.onboarding" value="NOT_PASSED" />
</map>
</option>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="GeneralLocalSettings">
<option name="defaultProjectDirectory" />
</component>
</application>

View File

@@ -0,0 +1,8 @@
<application>
<component name="GeneralSettings">
<option name="showTipsOnStartup" value="false" />
</component>
<component name="Registry">
<entry key="ide.experimental.ui" value="true" />
</component>
</application>

View File

@@ -0,0 +1,9 @@
<application>
<component name="IgnoredPluginSuggestions">
<option name="pluginIds">
<list>
<option value="Docker" />
</list>
</option>
</component>
</application>

View File

@@ -0,0 +1,187 @@
<application>
<component name="ProjectJdkTable">
<jdk version="2">
<name value="22" />
<type value="JavaSDK" />
<version value="java version &quot;22.0.1&quot;" />
<homePath value="/Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home" />
<roots>
<annotationsPath>
<root type="composite">
<root url="jar://$APPLICATION_HOME_DIR$/plugins/java/lib/resources/jdkAnnotations.jar!/" type="simple" />
</root>
</annotationsPath>
<classPath>
<root type="composite">
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/com.oracle.graal.graal_enterprise" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/com.oracle.svm.enterprise.truffle" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/com.oracle.svm.extraimage_enterprise" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.base" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.compiler" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.datatransfer" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.desktop" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.instrument" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.logging" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.management" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.management.rmi" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.naming" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.net.http" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.prefs" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.rmi" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.scripting" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.se" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.security.jgss" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.security.sasl" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.smartcardio" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.sql" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.sql.rowset" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.transaction.xa" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.xml" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/java.xml.crypto" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.accessibility" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.attach" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.charsets" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.compiler" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.crypto.cryptoki" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.crypto.ec" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.dynalink" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.editpad" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.graal.compiler" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.graal.compiler.management" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.hotspot.agent" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.httpserver" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.incubator.vector" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.internal.ed" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.internal.jvmstat" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.internal.le" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.internal.opt" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.internal.vm.ci" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jartool" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.javadoc" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jcmd" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jconsole" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jdeps" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jdi" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jdwp.agent" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jfr" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jlink" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jpackage" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jshell" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jsobject" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.jstatd" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.localedata" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.management" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.management.agent" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.management.jfr" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.naming.dns" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.naming.rmi" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.net" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.nio.mapmode" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.random" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.sctp" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.security.auth" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.security.jgss" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.unsupported" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.unsupported.desktop" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.xml.dom" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/jdk.zipfs" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.collections" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.extraimage.builder" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.extraimage.librarysupport" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.nativeimage" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.nativeimage.llvm" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.truffle.compiler" type="simple" />
<root url="jrt:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home!/org.graalvm.word" type="simple" />
</root>
</classPath>
<javadocPath>
<root type="composite" />
</javadocPath>
<sourcePath>
<root type="composite">
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.se" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jdi" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jfr" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.net" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.rmi" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.sql" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.xml" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jcmd" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.sctp" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.base" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jdeps" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jlink" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.zipfs" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.prefs" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.attach" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jshell" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jstatd" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.random" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.naming" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.editpad" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jartool" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.javadoc" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.xml.dom" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.desktop" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.logging" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.charsets" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.compiler" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.dynalink" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jconsole" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jpackage" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jsobject" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.compiler" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.net.http" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.crypto.ec" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.scripting" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.httpserver" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.jdwp.agent" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.localedata" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.management" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.naming.dns" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.naming.rmi" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.instrument" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.management" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.sql.rowset" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.xml.crypto" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.internal.ed" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.internal.le" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.nio.mapmode" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.unsupported" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.smartcardio" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.internal.opt" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.word" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.datatransfer" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.accessibility" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.hotspot.agent" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.security.auth" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.security.jgss" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.security.jgss" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.security.sasl" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.graal.compiler" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.internal.vm.ci" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.management.jfr" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.management.rmi" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.transaction.xa" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.crypto.cryptoki" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.incubator.vector" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.internal.jvmstat" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.management.agent" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.unsupported.desktop" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.collections" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.nativeimage" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.nativeimage.llvm" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.truffle.compiler" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/jdk.graal.compiler.management" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.extraimage.builder" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/com.oracle.graal.graal_enterprise" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/com.oracle.svm.enterprise.truffle" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/com.oracle.svm.extraimage_enterprise" type="simple" />
<root url="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/org.graalvm.extraimage.librarysupport" type="simple" />
</root>
</sourcePath>
</roots>
<additional />
</jdk>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="K2NewUserTracker">
<option name="lastSavedPluginMode" value="K1" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="Logs.Categories"><![CDATA[{}]]></component>
</application>

View File

@@ -0,0 +1,66 @@
<application>
<component name="FileEditorProviderManager">{}</component>
<component name="NotRoamableUiSettings">
<option name="fontSize" value="13.0" />
<option name="presentationModeIdeScale" value="1.75" />
<option name="overrideLafFontsWasMigrated" value="true" />
</component>
<component name="PropertyService"><![CDATA[{
"keyToString": {
"CWM_LOGGING_VERSION": "1",
"InstalledPluginsSearchHistory": "remote\nre\ntypescr\ntypesc\ntypes",
"LANGUAGE_DETECTOR_ASKED_BEFORE": "true",
"LAST_CALCULATED_COLOR_INDEX_KEY": "2",
"MarketplacePluginsSearchHistory": "typesc\ntype",
"NextRunPlatformUpdateBuild": "IC-232.10300.40",
"NextRunPlatformUpdateVersion": "2023.2.6",
"NonModalCommitCustomization.IsApplied": "true",
"PluginConfigurable.selectionTab": "1",
"RunOnceActivity.ide.auto-popup.quick-doc.initialized": "true",
"RunOnceActivity.java.code.vision.default.position.was.set": "true",
"SettingsSearchHistory": "code st",
"StubDetailsViewer.showPreviewDetails": "true",
"ask.about.ctrl.y.shortcut.v2": "true",
"bundled.plugins.list.saved.version": "IC-232.10227.8",
"com.intellij.ide.projectWizard.generators.JavaNewProjectWizard$Step.selectedStep": "IntelliJ",
"enter_selection_count": "5",
"evlsprt3.232": "5",
"evlsprt3.241": "3",
"experimental.ui.on.first.startup": "true",
"experimental.ui.used.version": "241.19072.14",
"file.gist.reindex.count": "4",
"fileTypeChangedCounter": "6",
"fontSizeToResetConsole": "13.0",
"fontSizeToResetEditor": "13.0",
"got.it.tooltip.empty.project.create.file": "1",
"got.it.tooltip.reader.mode.got.it": "1",
"gotit.previous.run": "IC-232.10227.8",
"ide.memory.adjusted": "true",
"ift.hide.welcome.screen.promo": "true",
"installed.kotlin.plugin.version": "241.19072.14-IJ",
"jdk.selected.JAVA_MODULE": "22",
"llm.installer.last.toolwindow.state": "LLM_INSTALLER",
"migrated.non.roamable.values.from.general.settings": "true",
"previousColorScheme": "_@user_Dark",
"project.wizard.group": "NPW.empty-project",
"registry.to.advanced.settings.migration.build": "IU-241.19072.14",
"tasks.pass.word.conversion.enforced": "true",
"ts.lib.d.ts.version": "5.4.3"
},
"keyToStringList": {
"fileTypeDetectors": [
"com.intellij.ide.scratch.ScratchFileServiceImpl$Detector",
"com.intellij.profiler.ultimate.hprof.impl.HprofFileTypeDetector",
"com.intellij.javascript.debugger.sourcemap.SourceMapFileType$MyFileTypeDetector",
"com.intellij.database.vfs.DbStorageFileType$Detector",
"com.jetbrains.nodejs.util.NodeFileTypeDetector$JavaScriptFileTypeDetector",
"com.jetbrains.nodejs.util.NodeFileTypeDetector$TypeScriptFileTypeDetector",
"org.jetbrains.plugins.textmate.TextMateFileType$TextMateFileDetector"
]
}
}]]></component>
<component name="PsiViewerSettings">
<option name="type" value="Slint File file" />
<option name="lastSelectedTabIndex" value="2" />
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="PathMacrosImpl">
<macro name="MAVEN_REPOSITORY" value="/Users/me/.m2/repository" />
</component>
</application>

View File

@@ -0,0 +1,19 @@
<application>
<component name="ProfilerRunConfigurations">
<profilerRunConfigurations>
<item configurationTypeId="IntellijProfilerConfiguration">
<IntellijProfilerConfigurationState name="IntelliJ Profiler" />
</item>
</profilerRunConfigurations>
<knownConfigurationTypes>
<id>IntellijProfilerConfiguration</id>
<id>AsyncProfilerCPUConfiguration</id>
<id>AsyncProfilerMemoryConfiguration</id>
<id>AsyncProfilerConfiguration</id>
<id>JFRSimpleConfiguration</id>
</knownConfigurationTypes>
<migrationStatus>
<status languageGroup="Java Profiler Configuration Type" lastMigrationIndex="3" />
</migrationStatus>
</component>
</application>

View File

@@ -0,0 +1,26 @@
<application>
<component name="RecentProjectsManager">
<option name="additionalInfo">
<map>
<entry key="$USER_HOME$/Desktop/Dev/垃圾桶/intellij-test/intellij-test">
<value>
<RecentProjectMetaInfo frameTitle="intellij-test" projectWorkspaceId="2kuflqIPMJwd5b2B6quHLOGo2oW">
<option name="activationTimestamp" value="1724142610913" />
<option name="binFolder" value="$APPLICATION_HOME_DIR$/bin" />
<option name="build" value="IU-241.19072.14" />
<option name="buildTimestamp" value="1723129440000" />
<option name="colorInfo">
<RecentProjectColorInfo associatedIndex="2" />
</option>
<frame x="260" y="45" width="1400" height="962" />
<option name="productionCode" value="IU" />
<option name="projectOpenTimestamp" value="1724138536626" />
</RecentProjectMetaInfo>
</value>
</entry>
</map>
</option>
<option name="lastOpenedProject" value="$USER_HOME$/Desktop/Dev/垃圾桶/intellij-test/intellij-test" />
<option name="lastProjectLocation" value="$USER_HOME$/Desktop/Dev/垃圾桶/intellij-test" />
</component>
</application>

View File

@@ -0,0 +1,13 @@
<application>
<component name="RunnerLayoutSettings">
<runner id="JavaRunner">
<ViewImpl>
<option name="ID" value="ConsoleContent" />
<option name="placeInGrid" value="bottom" />
</ViewImpl>
<TabImpl>
<option name="bottomProportion" value="0.0" />
</TabImpl>
</runner>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="SettingsSyncSettings">
<option name="migrationFromOldStorageChecked" value="true" />
</component>
</application>

View File

@@ -0,0 +1,10 @@
<application>
<component name="Trusted.Paths">
<option name="TRUSTED_PROJECT_PATHS">
<map>
<entry key="$USER_HOME$/Desktop/Dev/垃圾桶/intellij-test/intellij-test" value="true" />
<entry key="$USER_HOME$/IdeaProjects/untitled" value="true" />
</map>
</option>
</component>
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="UISettings">
<option name="UI_DENSITY" value="COMPACT" />
</component>
</application>

View File

@@ -0,0 +1,9 @@
<application>
<component name="UpdatesConfigurable">
<option name="CHECK_NEEDED" value="false" />
<option name="LAST_BUILD_CHECKED" value="IU-241.19072.14" />
<option name="LAST_TIME_CHECKED" value="1724138771909" />
<option name="OBSOLETE_CUSTOM_REPOSITORIES_CLEAN_NEEDED" value="false" />
<option name="WHATS_NEW_SHOWN_FOR" value="241" />
</component>
</application>

View File

@@ -0,0 +1,3 @@
<application>
<component name="UsagesStatistic" show-notification="false" />
</application>

View File

@@ -0,0 +1,5 @@
<application>
<component name="VcsApplicationSettings">
<option name="COMMIT_FROM_LOCAL_CHANGES" value="true" />
</component>
</application>

View File

@@ -0,0 +1,28 @@
<application>
<component name="DimensionService">
<size key="#com.intellij.internal.psiView.PsiViewerDialog.0.0.3840.2160@192dpi" width="1600" height="1200" />
<size key="GridCell.Tab.0.left.0.0.3840.2160@192dpi" width="2668" height="584" />
<size key="GridCell.Tab.0.center.0.0.3840.2160@192dpi" width="2668" height="584" />
<size key="GridCell.Tab.0.right.0.0.3840.2160@192dpi" width="2668" height="584" />
<size key="GridCell.Tab.0.bottom.0.0.3840.2160@192dpi" width="2668" height="584" />
</component>
<component name="WindowManager">
<frame x="260" y="45" width="1400" height="962" />
</component>
<component name="WindowStateApplicationService">
<state x="548" y="251" key="IDE.errors.dialog" timestamp="1717037495400">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state x="548" y="251" key="IDE.errors.dialog/0.25.1920.982/1920.25.1920.1055" timestamp="1717037495400" />
<state x="960" y="469" width="800" height="664" key="WELCOME_SCREEN" timestamp="1724145075550">
<screen x="0" y="25" width="1920" height="1002" />
</state>
<state x="960" y="469" width="800" height="664" key="WELCOME_SCREEN/0.25.1920.1002/1920.25.1920.1055" timestamp="1724145075550" />
<state x="960" y="492" width="800" height="699" key="WELCOME_SCREEN/0.25.1920.1055/1920.25.1920.982" timestamp="1717406858910" />
<state x="960" y="460" width="800" height="650" key="WELCOME_SCREEN/0.25.1920.982/1920.25.1920.1055" timestamp="1717671613288" />
<state x="560" y="132" width="800" height="674" key="new project wizard" timestamp="1724138535837">
<screen x="0" y="25" width="1920" height="1002" />
</state>
<state x="560" y="132" width="800" height="674" key="new project wizard/0.25.1920.1002/1920.25.1920.1055" timestamp="1724138535837" />
</component>
</application>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,251 @@
<project version="4">
<component name="BookmarksManager">
<option name="groups">
<GroupState>
<option name="name" value="untitled" />
</GroupState>
</option>
</component>
<component name="FileEditorManager">
<leaf ideFingerprint="2vb9ntiinehzr" SIDE_TABS_SIZE_LIMIT_KEY="-1">
<file>
<entry file="file://$PROJECT_DIR$/src/Button.slint">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="66">
<caret line="3" column="36" selection-end-line="18" selection-end-column="35" />
</state>
</provider>
</entry>
</file>
<file current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/builtins.slint">
<provider editor-type-id="text-editor" selected="true">
<state relative-caret-position="298">
<caret line="161" column="17" selection-start-line="161" selection-start-column="17" selection-end-line="161" selection-end-column="17" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTypeUsageLocalSummary"><![CDATA[{
"data": {
"JAVA": {
"usageCount": 13,
"lastUsed": 1717655844299
},
"Slint File": {
"usageCount": 63,
"lastUsed": 1717667161683
},
"WebPreview": {
"usageCount": 1,
"lastUsed": 1717388498830
}
}
}]]></component>
<component name="FindInProjectRecents">
<findStrings>
<find>StandardListViewItem</find>
</findStrings>
<replaceStrings>
<replace />
</replaceStrings>
</component>
<component name="IdeDocumentHistory">
<changedPaths>
<option value="$PROJECT_DIR$/src/Abc.kt" />
<option value="$PROJECT_DIR$/src/name.js" />
<option value="$PROJECT_DIR$/src/name1.ts" />
<option value="$PROJECT_DIR$/src/name.ts" />
<option value="$PROJECT_DIR$/src/Main.kt" />
<option value="$PROJECT_DIR$/src/Main.java" />
<option value="$PROJECT_DIR$/src/main.slint" />
<option value="$PROJECT_DIR$/src/builtins.slint" />
<option value="$PROJECT_DIR$/src/Button.slint" />
</changedPaths>
</component>
<component name="LanguageUsageStatistics">
<language id="JAVA">
<summary usageCount="97" lastUsage="1717655844299" />
</language>
<language id="JavaScript">
<summary usageCount="1" lastUsage="1716530622897" />
</language>
<language id="Slint">
<summary usageCount="262" lastUsage="1717667161683" />
</language>
<language id="TypeScript">
<summary usageCount="3" lastUsage="1716546261002" />
</language>
<language id="kotlin">
<summary usageCount="2" lastUsage="1716864647147" />
</language>
<language id="textmate">
<summary usageCount="64" lastUsage="1717126069813" />
</language>
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1" />
<panes>
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="untitled" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///Users/me/IdeaProjects/untitled}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="untitled" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///Users/me/IdeaProjects/untitled}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///Users/me/IdeaProjects/untitled/src}" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="RunConfigurationStartHistory">
<history>
<element setting="Slint viewer.Button.slint" />
<element setting="Slint viewer.main.slint" />
<element setting="Slint viewer.Unnamed (1)" />
<element setting="Slint viewer.Unnamed" />
</history>
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="27456000" />
</component>
<component name="ToolWindowManager">
<layoutV2>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.22749999" />
<window_info id="Commit" order="1" weight="0.25" />
<window_info id="Structure" order="2" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" order="0" />
<window_info anchor="bottom" id="Problems" order="1" />
<window_info anchor="bottom" id="Problems View" order="2" />
<window_info anchor="bottom" id="Terminal" order="3" />
<window_info anchor="bottom" id="Run" order="4" weight="0.33044806" />
<window_info anchor="bottom" id="Services" order="5" />
<window_info anchor="right" id="Notifications" order="0" weight="0.33035713" />
<window_info anchor="right" id="AIAssistant" order="1" weight="0.33035713" />
<window_info anchor="right" id="Database" order="2" weight="0.25" />
<window_info anchor="right" id="Gradle" order="3" weight="0.25" />
<window_info anchor="right" id="Maven" order="4" weight="0.25" />
<unified_weights bottom="0.33044806" left="0.22749999" right="0.33035713" />
</layoutV2>
<recentWindows>
<value>Project</value>
<value>Notifications</value>
<value>Run</value>
<value>AIAssistant</value>
</recentWindows>
</component>
<component name="WindowStateProjectService">
<state x="560" y="201" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1715931531348">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state x="560" y="214" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715848676881" />
<state x="560" y="201" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1715931531348" />
<state x="588" y="313" width="1332" height="605" key="#com.intellij.internal.psiView.PsiViewerDialog" timestamp="1717671610308">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state x="531" y="25" key="#com.intellij.internal.psiView.PsiViewerDialog/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1717406812993" />
<state x="588" y="313" width="1332" height="605" key="#com.intellij.internal.psiView.PsiViewerDialog/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717671610308" />
<state width="1334" height="292" key="GridCell.Tab.0.bottom" timestamp="1717394781743">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state width="1334" height="298" key="GridCell.Tab.0.bottom/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715845500395" />
<state width="1334" height="292" key="GridCell.Tab.0.bottom/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717394781743" />
<state width="1334" height="292" key="GridCell.Tab.0.center" timestamp="1717394781743">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state width="1334" height="298" key="GridCell.Tab.0.center/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715845500395" />
<state width="1334" height="292" key="GridCell.Tab.0.center/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717394781743" />
<state width="1334" height="292" key="GridCell.Tab.0.left" timestamp="1717394781743">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state width="1334" height="298" key="GridCell.Tab.0.left/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715845500395" />
<state width="1334" height="292" key="GridCell.Tab.0.left/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717394781743" />
<state width="1334" height="292" key="GridCell.Tab.0.right" timestamp="1717394781743">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state width="1334" height="298" key="GridCell.Tab.0.right/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715845500395" />
<state width="1334" height="292" key="GridCell.Tab.0.right/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717394781743" />
<state x="548" y="251" width="824" height="534" key="IDE.errors.dialog" timestamp="1717661016042">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state x="548" y="268" width="824" height="533" key="IDE.errors.dialog/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1717405855676" />
<state x="548" y="251" width="824" height="534" key="IDE.errors.dialog/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717661016042" />
<state x="1350" y="913" width="350" height="133" key="ProcessPopupWindow" timestamp="1715935852294">
<screen x="0" y="25" width="1920" height="1055" />
</state>
<state x="1350" y="913" width="350" height="133" key="ProcessPopupWindow/0.25.1920.1055/1920.25.1920.982@0.25.1920.1055" timestamp="1715935852294" />
<state x="469" y="158" key="SettingsEditor" timestamp="1717396831306">
<screen x="0" y="25" width="1920" height="982" />
</state>
<state x="469" y="158" key="SettingsEditor/0.25.1920.982/1920.25.1920.1055@0.25.1920.982" timestamp="1717396831306" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/Abc.kt" />
<entry file="file://$PROJECT_DIR$/src/Main.kt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="66">
<caret line="3" column="18" selection-start-line="3" selection-start-column="18" selection-end-line="3" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/name1.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="66">
<caret line="3" column="5" selection-start-line="3" selection-start-column="5" selection-end-line="3" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/name.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="88">
<caret line="4" column="24" selection-start-line="4" selection-start-column="24" selection-end-line="4" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="jar:///Library/Java/JavaVirtualMachines/graalvm-22.jdk/Contents/Home/lib/src.zip!/java.base/java/lang/Throwable.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="318">
<caret line="124" column="34" selection-start-line="124" selection-start-column="34" selection-end-line="124" selection-end-column="34" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Main.java">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="34" selection-start-column="34" selection-end-column="34" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main.slint">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret line="2" column="21" selection-start-line="2" selection-start-column="21" selection-end-line="2" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/builtins.slint">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="298">
<caret line="161" column="17" selection-start-line="161" selection-start-column="17" selection-end-line="161" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Button.slint">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="66">
<caret line="3" column="36" selection-end-line="18" selection-end-column="35" />
</state>
</provider>
</entry>
</component>
</project>

View File

@@ -0,0 +1,56 @@
<project version="4">
<component name="BookmarksManager">
<option name="groups">
<GroupState>
<option name="name" value="intellij-test" />
</GroupState>
</option>
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1" />
<panes>
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="intellij-test" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///Users/me/Desktop/Dev/垃圾桶/intellij-test/intellij-test}" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="intellij-test" type="b2602c69:ProjectViewProjectNode" />
<item name="dir{file:///Users/me/Desktop/Dev/垃圾桶/intellij-test/intellij-test}" type="462c0819:PsiDirectoryNode" />
<item name="dir{file:///Users/me/Desktop/Dev/垃圾桶/intellij-test/intellij-test/.idea}" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="1082000" />
</component>
<component name="ToolWindowManager">
<layoutV2>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.33035713" />
<window_info id="Commit" order="1" weight="0.25" />
<window_info id="Structure" order="2" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" order="0" />
<window_info anchor="bottom" id="Problems" order="1" />
<window_info anchor="bottom" id="Problems View" order="2" />
<window_info anchor="bottom" id="Terminal" order="3" />
<window_info anchor="bottom" id="Services" order="4" />
<window_info anchor="right" content_ui="combo" id="Notifications" order="0" weight="0.25" />
<window_info anchor="right" id="AIAssistant" order="1" weight="0.25" />
<window_info anchor="right" id="Database" order="2" weight="0.25" />
<window_info anchor="right" id="Gradle" order="3" weight="0.25" />
<window_info anchor="right" id="Maven" order="4" weight="0.25" />
<unified_weights left="0.33035713" />
</layoutV2>
<recentWindows>
<value>Project</value>
</recentWindows>
</component>
</project>

View File

@@ -0,0 +1,7 @@
2024-06-03 17:44:03,869 [ 121] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-06-03 17:44:35,087 [ 129] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-06-03 17:45:37,074 [ 99] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-06-03 18:20:08,328 [ 159] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-06-03 18:21:25,456 [ 96] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-08-20 14:26:47,297 [ 141] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl
2024-08-20 14:27:15,693 [ 92] INFO - #c.i.p.d.t.TelemetryManager - Loaded telemetry tracer service com.intellij.platform.diagnostic.telemetry.impl.TelemetryManagerImpl

View File

@@ -4,24 +4,10 @@ import com.intellij.openapi.util.IconLoader
import javax.swing.Icon
object SlintIcons {
/**
* File type icon - 16x16 square logo that automatically adapts to light/dark theme
* IntelliJ will automatically load slintFile_dark.svg in dark mode
*/
@JvmField
val FileType: Icon = IconLoader.getIcon("/icons/slintFile.svg", SlintIcons::class.java)
/**
* Primary icon - used in various UI contexts
* Alias for FileType for backward compatibility
*/
@JvmField
val Primary: Icon = FileType
/**
* Full logo with text - for larger display areas (e.g., welcome screen, about dialog)
* Automatically adapts to theme
*/
@JvmField
val Logo: Icon = IconLoader.getIcon("/icons/slint-logo-full-light.svg", SlintIcons::class.java)
val Primary: Icon = IconLoader.getIcon("/icons/slint.svg", SlintIcons::class.java)
}

View File

@@ -21,6 +21,6 @@
language="Slint"
extensions="slint"/>
<platform.lsp.serverSupportProvider implementation="me.zhouxi.slint.lsp.SlintLspServerSupportProvider"/>
<textMate.bundleProvider implementation="me.zhouxi.slint.lang.syntax.SlintTextMateProvider"/>
<!-- <textMate.bundleProvider implementation="me.zhouxi.slint.lang.syntax.SlintTextMateProvider"/>-->
</extensions>
</idea-plugin>

View File

@@ -0,0 +1,17 @@
<svg width="60" height="60" viewBox="0 0 140 140" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4_345)">
<path d="M57.3731 76.8679L89.053 54.911C89.053 54.911 90.4827 54.0897 90.4827 52.7936C90.4827 51.0676 88.6748 50.5062 88.6748 50.5062L71.2465 43.6086C70.6246 43.3648 69.7688 44.0481 70.5701 44.9143L76.34 50.6891C76.34 50.6891 77.9428 52.2643 77.9428 53.2973C77.9428 54.3304 76.9587 55.2511 76.9587 55.2511L55.9627 75.5397C55.2158 76.2616 56.2255 77.5705 57.3731 76.8679Z" fill="#2379F4"/>
<path d="M82.9626 21.2025L51.2827 43.1562C51.2827 43.1562 49.853 43.9775 49.853 45.2736C49.853 46.9996 51.6609 47.5611 51.6609 47.5611L69.0892 54.4619C69.7111 54.7025 70.5701 54.0192 69.7656 53.1562L63.9957 47.3622C63.9957 47.3622 62.3929 45.7901 62.3929 44.7539C62.3929 43.7176 63.377 42.8001 63.377 42.8001L84.3602 22.5275C85.1199 21.8057 84.1134 20.4967 82.9626 21.2025Z" fill="#2379F4"/>
<!--<path d="M46.2666 104.406C45.058 103.492 43.3646 102.891 41.1862 102.603L37.1711 102.086C36.0939 101.953 35.2673 101.708 34.6914 101.352C34.4184 101.196 34.1933 100.968 34.0405 100.692C33.8877 100.416 33.8133 100.103 33.8252 99.7874C33.8252 98.1735 35.3471 97.3673 38.3909 97.3688C40.1213 97.3446 41.842 97.6332 43.4712 98.2208C43.9713 98.3977 44.4526 98.6242 44.9081 98.897C45.1515 99.041 45.3815 99.207 45.5952 99.3929C45.7238 99.3352 45.8436 99.2593 45.951 99.1675C46.1183 99.0366 46.2687 98.8852 46.3986 98.7167C46.5505 98.5185 46.6825 98.3056 46.7925 98.0811C46.9157 97.8218 46.9763 97.5368 46.9693 97.2494C46.9693 96.2711 46.2151 95.4777 44.7066 94.8692C43.1982 94.2606 41.0788 93.96 38.3483 93.9676C36.9476 93.9389 35.5497 94.1058 34.1945 94.4634C33.1873 94.7263 32.2433 95.1917 31.4193 95.8316C30.7449 96.3622 30.2075 97.0488 29.8527 97.8332C29.5235 98.589 29.3558 99.4061 29.3603 100.231C29.3362 101.101 29.5189 101.965 29.893 102.749C30.2422 103.444 30.7471 104.049 31.3679 104.514C32.0538 105.016 32.8197 105.398 33.6328 105.641C34.5753 105.932 35.545 106.125 36.5266 106.216L39.5972 106.574C41.0146 106.724 41.9986 106.995 42.5492 107.386C42.8188 107.572 43.0363 107.825 43.1809 108.12C43.3256 108.415 43.3924 108.743 43.375 109.072C43.375 109.945 42.9423 110.559 42.0769 110.915C41.2116 111.271 40.0925 111.449 38.7199 111.449C37.7451 111.455 36.7716 111.376 35.8104 111.213C35.0049 111.074 34.2095 110.882 33.4291 110.638C32.8339 110.451 32.249 110.232 31.6767 109.982C31.3335 109.842 31.0039 109.67 30.692 109.468L29 112.52C29.3212 112.751 29.6637 112.95 30.0228 113.115C30.692 113.436 31.3831 113.707 32.0908 113.929C33.0773 114.239 34.0828 114.483 35.1009 114.661C36.375 114.883 37.6663 114.99 38.9593 114.979C41.8971 114.979 44.1479 114.384 45.7115 113.194C46.4585 112.654 47.0627 111.938 47.4712 111.109C47.8797 110.279 48.0801 109.361 48.0548 108.436C48.0697 106.663 47.4736 105.319 46.2666 104.406Z" fill="white"/>-->
<!--<path d="M55.4001 85.195C54.6391 85.195 54.0572 85.3686 53.6275 85.7112C53.1978 86.0538 52.9987 86.5835 52.9987 87.289V114.418H57.4859V85.6323C57.3539 85.5805 57.092 85.4926 56.6981 85.3754C56.2766 85.2514 55.8392 85.1907 55.4001 85.195Z" fill="white"/>-->
<!--<path d="M65.769 85.5917C65.411 85.5875 65.0558 85.6554 64.7243 85.7914C64.3927 85.9274 64.0915 86.1288 63.8384 86.3838C63.5853 86.6387 63.3853 86.942 63.2502 87.2759C63.1152 87.6098 63.0478 87.9676 63.052 88.3281C63.0542 88.7771 63.1662 89.2187 63.378 89.6139C63.5898 90.0091 63.8949 90.3457 64.2664 90.594C64.6379 90.8423 65.0643 90.9948 65.5082 91.0379C65.952 91.081 66.3995 91.0134 66.8113 90.8412C67.223 90.6689 67.5864 90.3972 67.8692 90.0501C68.1521 89.7029 68.3458 89.291 68.4332 88.8507C68.5206 88.4103 68.4991 87.9551 68.3705 87.5251C68.242 87.0951 68.0103 86.7036 67.6959 86.3851C67.4455 86.1275 67.1454 85.9241 66.814 85.7877C66.4826 85.6512 66.1269 85.5845 65.769 85.5917Z" fill="white"/>-->
<!--<path d="M65.9189 94.5175C65.158 94.5175 64.5761 94.6843 64.1464 95.0134C63.7167 95.3425 63.5242 95.8699 63.5242 96.6137V114.42H68.0115V94.9503C67.8794 94.8962 67.6176 94.8106 67.2237 94.6911C66.7994 94.57 66.3599 94.5116 65.9189 94.5175Z" fill="white"/>-->
<!--<path d="M90.3293 96.199C89.4316 95.4464 88.3949 94.8803 87.2789 94.5333C86.0304 94.1401 84.7285 93.9462 83.4205 93.9585C82.1189 93.9449 80.8235 94.1389 79.5822 94.5333C78.4729 94.8834 77.4426 95.4493 76.5496 96.199C75.6938 96.9254 75.0063 97.8316 74.5354 98.8542C74.0374 99.9701 73.7913 101.183 73.8147 102.406V114.42H78.302V103.556C78.302 101.753 78.7288 100.385 79.5822 99.4515C80.4356 98.5183 81.7151 98.0495 83.4205 98.045C85.099 98.045 86.3717 98.5138 87.2386 99.4515C88.1054 100.389 88.5389 101.757 88.5389 103.556V114.42H93.0262V102.406C93.0502 101.186 92.812 99.9738 92.3279 98.8542C91.8677 97.8295 91.1847 96.922 90.3293 96.199Z" fill="white"/>-->
<!--<path d="M109.521 109.937C109.08 110.223 108.603 110.451 108.104 110.613C107.422 110.855 106.703 110.977 105.98 110.972C105.523 110.974 105.067 110.921 104.622 110.814C104.205 110.716 103.816 110.526 103.48 110.259C103.14 109.979 102.876 109.617 102.712 109.207C102.511 108.669 102.418 108.097 102.437 107.523V98.6761H109.995C110.116 98.4119 110.221 98.141 110.311 97.8647C110.444 97.4615 110.511 97.0388 110.508 96.6137C110.508 95.9375 110.331 95.4056 109.975 95.0495C109.619 94.6933 109.008 94.5175 108.142 94.5175H102.435V89.3334C102.303 89.2793 102.034 89.1936 101.627 89.0741C101.198 88.9532 100.754 88.8932 100.309 88.8961C99.6925 88.8611 99.0824 89.0357 98.5766 89.392C98.1468 89.7098 97.9454 90.235 97.9454 90.9855V108.429C97.9454 110.383 98.5363 111.96 99.718 113.163C100.9 114.365 102.645 114.966 104.955 114.966C105.707 114.968 106.457 114.893 107.193 114.74C107.822 114.609 108.441 114.431 109.044 114.206C109.529 114.025 109.997 113.799 110.44 113.53C110.821 113.291 111.119 113.093 111.336 112.935L109.521 109.937Z" fill="white"/>-->
</g>
<defs>
<clipPath id="clip0_4_345">
<rect width="82.3357" height="93.9799" fill="white" transform="translate(29 21)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,17 +0,0 @@
<svg width="140" height="140" viewBox="0 0 140 140" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4_344)">
<path d="M57.3731 76.8679L89.053 54.911C89.053 54.911 90.4827 54.0897 90.4827 52.7936C90.4827 51.0676 88.6748 50.5062 88.6748 50.5062L71.2465 43.6086C70.6246 43.3648 69.7688 44.0481 70.5701 44.9143L76.34 50.6891C76.34 50.6891 77.9428 52.2643 77.9428 53.2973C77.9428 54.3304 76.9587 55.2511 76.9587 55.2511L55.9627 75.5397C55.2158 76.2616 56.2255 77.5705 57.3731 76.8679Z" fill="#2379F4"/>
<path d="M82.9626 21.2025L51.2827 43.1562C51.2827 43.1562 49.853 43.9775 49.853 45.2736C49.853 46.9996 51.6609 47.5611 51.6609 47.5611L69.0892 54.4619C69.7111 54.7025 70.5701 54.0192 69.7656 53.1562L63.9957 47.3622C63.9957 47.3622 62.3929 45.7901 62.3929 44.7539C62.3929 43.7176 63.377 42.8001 63.377 42.8001L84.3602 22.5275C85.1199 21.8057 84.1134 20.4967 82.9626 21.2025Z" fill="#2379F4"/>
<path d="M46.2666 104.406C45.058 103.492 43.3646 102.891 41.1862 102.603L37.1711 102.086C36.0939 101.953 35.2673 101.708 34.6914 101.352C34.4184 101.196 34.1933 100.968 34.0405 100.692C33.8877 100.416 33.8133 100.103 33.8252 99.7874C33.8252 98.1735 35.3471 97.3673 38.3909 97.3688C40.1213 97.3446 41.842 97.6332 43.4712 98.2208C43.9713 98.3977 44.4526 98.6242 44.9081 98.897C45.1515 99.041 45.3815 99.207 45.5952 99.3929C45.7238 99.3352 45.8436 99.2593 45.951 99.1675C46.1183 99.0366 46.2687 98.8852 46.3986 98.7167C46.5505 98.5185 46.6825 98.3056 46.7925 98.0811C46.9157 97.8218 46.9763 97.5368 46.9693 97.2494C46.9693 96.2711 46.2151 95.4777 44.7066 94.8692C43.1982 94.2606 41.0788 93.96 38.3483 93.9676C36.9476 93.9389 35.5497 94.1058 34.1945 94.4634C33.1873 94.7263 32.2433 95.1917 31.4193 95.8316C30.7449 96.3622 30.2075 97.0488 29.8527 97.8332C29.5235 98.589 29.3558 99.4061 29.3603 100.231C29.3362 101.101 29.5189 101.965 29.893 102.749C30.2422 103.444 30.7471 104.049 31.3679 104.514C32.0538 105.016 32.8197 105.398 33.6328 105.641C34.5753 105.932 35.545 106.125 36.5266 106.216L39.5972 106.574C41.0146 106.724 41.9986 106.995 42.5492 107.386C42.8188 107.572 43.0363 107.825 43.1809 108.12C43.3256 108.415 43.3924 108.743 43.375 109.072C43.375 109.945 42.9423 110.559 42.0769 110.915C41.2116 111.271 40.0925 111.449 38.7199 111.449C37.7451 111.455 36.7716 111.376 35.8104 111.213C35.0049 111.074 34.2095 110.882 33.4291 110.638C32.8339 110.451 32.249 110.232 31.6767 109.982C31.3335 109.842 31.0039 109.67 30.692 109.468L29 112.52C29.3212 112.751 29.6637 112.95 30.0228 113.115C30.692 113.436 31.3831 113.707 32.0908 113.929C33.0773 114.239 34.0828 114.483 35.1009 114.661C36.375 114.883 37.6663 114.99 38.9593 114.979C41.8971 114.979 44.1479 114.384 45.7115 113.194C46.4585 112.654 47.0627 111.938 47.4712 111.109C47.8797 110.279 48.0801 109.361 48.0548 108.436C48.0697 106.663 47.4736 105.319 46.2666 104.406Z" fill="#151D21"/>
<path d="M55.4001 85.195C54.6391 85.195 54.0572 85.3686 53.6275 85.7112C53.1978 86.0538 52.9987 86.5835 52.9987 87.289V114.418H57.4859V85.6323C57.3539 85.5805 57.092 85.4926 56.6981 85.3754C56.2766 85.2514 55.8392 85.1907 55.4001 85.195Z" fill="#151D21"/>
<path d="M65.769 85.5917C65.411 85.5875 65.0558 85.6554 64.7243 85.7914C64.3927 85.9274 64.0915 86.1288 63.8384 86.3838C63.5853 86.6387 63.3853 86.942 63.2502 87.2759C63.1152 87.6098 63.0478 87.9676 63.052 88.3281C63.0542 88.7771 63.1662 89.2187 63.378 89.6139C63.5898 90.0091 63.8949 90.3457 64.2664 90.594C64.6379 90.8423 65.0643 90.9948 65.5082 91.0379C65.952 91.081 66.3995 91.0134 66.8113 90.8412C67.223 90.6689 67.5864 90.3972 67.8692 90.0501C68.1521 89.7029 68.3458 89.291 68.4332 88.8507C68.5206 88.4103 68.4991 87.9551 68.3705 87.5251C68.242 87.0951 68.0103 86.7036 67.6959 86.3851C67.4455 86.1275 67.1454 85.9241 66.814 85.7877C66.4826 85.6512 66.1269 85.5845 65.769 85.5917Z" fill="#151D21"/>
<path d="M65.9189 94.5175C65.158 94.5175 64.5761 94.6843 64.1464 95.0134C63.7167 95.3425 63.5242 95.8699 63.5242 96.6137V114.42H68.0115V94.9503C67.8794 94.8962 67.6176 94.8106 67.2237 94.6911C66.7994 94.57 66.3599 94.5116 65.9189 94.5175Z" fill="#151D21"/>
<path d="M90.3293 96.199C89.4316 95.4464 88.3949 94.8803 87.2789 94.5333C86.0304 94.1401 84.7285 93.9462 83.4205 93.9585C82.1189 93.9449 80.8235 94.1389 79.5822 94.5333C78.4729 94.8834 77.4426 95.4493 76.5496 96.199C75.6938 96.9254 75.0063 97.8316 74.5354 98.8542C74.0374 99.9701 73.7913 101.183 73.8147 102.406V114.42H78.302V103.556C78.302 101.753 78.7288 100.385 79.5822 99.4515C80.4356 98.5183 81.7151 98.0495 83.4205 98.045C85.099 98.045 86.3717 98.5138 87.2386 99.4515C88.1054 100.389 88.5389 101.757 88.5389 103.556V114.42H93.0262V102.406C93.0502 101.186 92.812 99.9738 92.3279 98.8542C91.8677 97.8295 91.1847 96.922 90.3293 96.199Z" fill="#151D21"/>
<path d="M109.521 109.937C109.08 110.223 108.603 110.451 108.104 110.613C107.422 110.855 106.703 110.977 105.98 110.972C105.523 110.974 105.067 110.921 104.622 110.814C104.205 110.716 103.816 110.526 103.48 110.259C103.14 109.979 102.876 109.617 102.712 109.207C102.511 108.669 102.418 108.097 102.437 107.523V98.6761H109.995C110.116 98.4119 110.221 98.141 110.311 97.8647C110.444 97.4615 110.511 97.0388 110.508 96.6137C110.508 95.9375 110.331 95.4056 109.975 95.0495C109.619 94.6933 109.008 94.5175 108.142 94.5175H102.435V89.3334C102.303 89.2793 102.034 89.1936 101.627 89.0741C101.198 88.9532 100.754 88.8932 100.309 88.8961C99.6925 88.8611 99.0824 89.0357 98.5766 89.392C98.1468 89.7098 97.9454 90.235 97.9454 90.9855V108.429C97.9454 110.383 98.5363 111.96 99.718 113.163C100.9 114.365 102.645 114.966 104.955 114.966C105.707 114.968 106.457 114.893 107.193 114.74C107.822 114.609 108.441 114.431 109.044 114.206C109.529 114.025 109.997 113.799 110.44 113.53C110.821 113.291 111.119 113.093 111.336 112.935L109.521 109.937Z" fill="#151D21"/>
</g>
<defs>
<clipPath id="clip0_4_344">
<rect width="82.3357" height="93.9799" fill="white" transform="translate(29 21)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,17 +0,0 @@
<svg width="140" height="140" viewBox="0 0 140 140" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4_345)">
<path d="M57.3731 76.8679L89.053 54.911C89.053 54.911 90.4827 54.0897 90.4827 52.7936C90.4827 51.0676 88.6748 50.5062 88.6748 50.5062L71.2465 43.6086C70.6246 43.3648 69.7688 44.0481 70.5701 44.9143L76.34 50.6891C76.34 50.6891 77.9428 52.2643 77.9428 53.2973C77.9428 54.3304 76.9587 55.2511 76.9587 55.2511L55.9627 75.5397C55.2158 76.2616 56.2255 77.5705 57.3731 76.8679Z" fill="#2379F4"/>
<path d="M82.9626 21.2025L51.2827 43.1562C51.2827 43.1562 49.853 43.9775 49.853 45.2736C49.853 46.9996 51.6609 47.5611 51.6609 47.5611L69.0892 54.4619C69.7111 54.7025 70.5701 54.0192 69.7656 53.1562L63.9957 47.3622C63.9957 47.3622 62.3929 45.7901 62.3929 44.7539C62.3929 43.7176 63.377 42.8001 63.377 42.8001L84.3602 22.5275C85.1199 21.8057 84.1134 20.4967 82.9626 21.2025Z" fill="#2379F4"/>
<path d="M46.2666 104.406C45.058 103.492 43.3646 102.891 41.1862 102.603L37.1711 102.086C36.0939 101.953 35.2673 101.708 34.6914 101.352C34.4184 101.196 34.1933 100.968 34.0405 100.692C33.8877 100.416 33.8133 100.103 33.8252 99.7874C33.8252 98.1735 35.3471 97.3673 38.3909 97.3688C40.1213 97.3446 41.842 97.6332 43.4712 98.2208C43.9713 98.3977 44.4526 98.6242 44.9081 98.897C45.1515 99.041 45.3815 99.207 45.5952 99.3929C45.7238 99.3352 45.8436 99.2593 45.951 99.1675C46.1183 99.0366 46.2687 98.8852 46.3986 98.7167C46.5505 98.5185 46.6825 98.3056 46.7925 98.0811C46.9157 97.8218 46.9763 97.5368 46.9693 97.2494C46.9693 96.2711 46.2151 95.4777 44.7066 94.8692C43.1982 94.2606 41.0788 93.96 38.3483 93.9676C36.9476 93.9389 35.5497 94.1058 34.1945 94.4634C33.1873 94.7263 32.2433 95.1917 31.4193 95.8316C30.7449 96.3622 30.2075 97.0488 29.8527 97.8332C29.5235 98.589 29.3558 99.4061 29.3603 100.231C29.3362 101.101 29.5189 101.965 29.893 102.749C30.2422 103.444 30.7471 104.049 31.3679 104.514C32.0538 105.016 32.8197 105.398 33.6328 105.641C34.5753 105.932 35.545 106.125 36.5266 106.216L39.5972 106.574C41.0146 106.724 41.9986 106.995 42.5492 107.386C42.8188 107.572 43.0363 107.825 43.1809 108.12C43.3256 108.415 43.3924 108.743 43.375 109.072C43.375 109.945 42.9423 110.559 42.0769 110.915C41.2116 111.271 40.0925 111.449 38.7199 111.449C37.7451 111.455 36.7716 111.376 35.8104 111.213C35.0049 111.074 34.2095 110.882 33.4291 110.638C32.8339 110.451 32.249 110.232 31.6767 109.982C31.3335 109.842 31.0039 109.67 30.692 109.468L29 112.52C29.3212 112.751 29.6637 112.95 30.0228 113.115C30.692 113.436 31.3831 113.707 32.0908 113.929C33.0773 114.239 34.0828 114.483 35.1009 114.661C36.375 114.883 37.6663 114.99 38.9593 114.979C41.8971 114.979 44.1479 114.384 45.7115 113.194C46.4585 112.654 47.0627 111.938 47.4712 111.109C47.8797 110.279 48.0801 109.361 48.0548 108.436C48.0697 106.663 47.4736 105.319 46.2666 104.406Z" fill="white"/>
<path d="M55.4001 85.195C54.6391 85.195 54.0572 85.3686 53.6275 85.7112C53.1978 86.0538 52.9987 86.5835 52.9987 87.289V114.418H57.4859V85.6323C57.3539 85.5805 57.092 85.4926 56.6981 85.3754C56.2766 85.2514 55.8392 85.1907 55.4001 85.195Z" fill="white"/>
<path d="M65.769 85.5917C65.411 85.5875 65.0558 85.6554 64.7243 85.7914C64.3927 85.9274 64.0915 86.1288 63.8384 86.3838C63.5853 86.6387 63.3853 86.942 63.2502 87.2759C63.1152 87.6098 63.0478 87.9676 63.052 88.3281C63.0542 88.7771 63.1662 89.2187 63.378 89.6139C63.5898 90.0091 63.8949 90.3457 64.2664 90.594C64.6379 90.8423 65.0643 90.9948 65.5082 91.0379C65.952 91.081 66.3995 91.0134 66.8113 90.8412C67.223 90.6689 67.5864 90.3972 67.8692 90.0501C68.1521 89.7029 68.3458 89.291 68.4332 88.8507C68.5206 88.4103 68.4991 87.9551 68.3705 87.5251C68.242 87.0951 68.0103 86.7036 67.6959 86.3851C67.4455 86.1275 67.1454 85.9241 66.814 85.7877C66.4826 85.6512 66.1269 85.5845 65.769 85.5917Z" fill="white"/>
<path d="M65.9189 94.5175C65.158 94.5175 64.5761 94.6843 64.1464 95.0134C63.7167 95.3425 63.5242 95.8699 63.5242 96.6137V114.42H68.0115V94.9503C67.8794 94.8962 67.6176 94.8106 67.2237 94.6911C66.7994 94.57 66.3599 94.5116 65.9189 94.5175Z" fill="white"/>
<path d="M90.3293 96.199C89.4316 95.4464 88.3949 94.8803 87.2789 94.5333C86.0304 94.1401 84.7285 93.9462 83.4205 93.9585C82.1189 93.9449 80.8235 94.1389 79.5822 94.5333C78.4729 94.8834 77.4426 95.4493 76.5496 96.199C75.6938 96.9254 75.0063 97.8316 74.5354 98.8542C74.0374 99.9701 73.7913 101.183 73.8147 102.406V114.42H78.302V103.556C78.302 101.753 78.7288 100.385 79.5822 99.4515C80.4356 98.5183 81.7151 98.0495 83.4205 98.045C85.099 98.045 86.3717 98.5138 87.2386 99.4515C88.1054 100.389 88.5389 101.757 88.5389 103.556V114.42H93.0262V102.406C93.0502 101.186 92.812 99.9738 92.3279 98.8542C91.8677 97.8295 91.1847 96.922 90.3293 96.199Z" fill="white"/>
<path d="M109.521 109.937C109.08 110.223 108.603 110.451 108.104 110.613C107.422 110.855 106.703 110.977 105.98 110.972C105.523 110.974 105.067 110.921 104.622 110.814C104.205 110.716 103.816 110.526 103.48 110.259C103.14 109.979 102.876 109.617 102.712 109.207C102.511 108.669 102.418 108.097 102.437 107.523V98.6761H109.995C110.116 98.4119 110.221 98.141 110.311 97.8647C110.444 97.4615 110.511 97.0388 110.508 96.6137C110.508 95.9375 110.331 95.4056 109.975 95.0495C109.619 94.6933 109.008 94.5175 108.142 94.5175H102.435V89.3334C102.303 89.2793 102.034 89.1936 101.627 89.0741C101.198 88.9532 100.754 88.8932 100.309 88.8961C99.6925 88.8611 99.0824 89.0357 98.5766 89.392C98.1468 89.7098 97.9454 90.235 97.9454 90.9855V108.429C97.9454 110.383 98.5363 111.96 99.718 113.163C100.9 114.365 102.645 114.966 104.955 114.966C105.707 114.968 106.457 114.893 107.193 114.74C107.822 114.609 108.441 114.431 109.044 114.206C109.529 114.025 109.997 113.799 110.44 113.53C110.821 113.291 111.119 113.093 111.336 112.935L109.521 109.937Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_4_345">
<rect width="82.3357" height="93.9799" fill="white" transform="translate(29 21)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,94 @@
Identifier ('import')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE (' ')
Identifier ('Button')
WHITE_SPACE (' ')
Identifier ('as')
WHITE_SPACE (' ')
Identifier ('MyButton')
WHITE_SPACE (' ')
, (',')
WHITE_SPACE (' ')
Identifier ('VerticalBox')
WHITE_SPACE (' ')
} ('}')
WHITE_SPACE (' ')
Identifier ('from')
WHITE_SPACE (' ')
StringLiteral ('"std-widgets.slint"')
; (';')
WHITE_SPACE ('\n')
Identifier ('export')
WHITE_SPACE (' ')
Identifier ('component')
WHITE_SPACE (' ')
Identifier ('App')
WHITE_SPACE (' ')
Identifier ('inherits')
WHITE_SPACE (' ')
Identifier ('Window')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE ('\n ')
Identifier ('in-out')
WHITE_SPACE (' ')
Identifier ('property')
< ('<')
Identifier ('int')
> ('>')
WHITE_SPACE (' ')
Identifier ('component')
: (':')
WHITE_SPACE (' ')
NumberLiteral ('42')
; (';')
WHITE_SPACE ('\n ')
Identifier ('callback')
WHITE_SPACE (' ')
Identifier ('request-increase-value')
( ('(')
) (')')
; (';')
WHITE_SPACE ('\n ')
Identifier ('VerticalBox')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE ('\n ')
Identifier ('Text')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE ('\n ')
Identifier ('text')
: (':')
WHITE_SPACE (' ')
StringLiteral ('"Counter: \{root.component}"')
; (';')
WHITE_SPACE ('\n ')
} ('}')
WHITE_SPACE ('\n ')
Identifier ('MyButton')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE ('\n ')
Identifier ('text')
: (':')
WHITE_SPACE (' ')
StringLiteral ('"Increase value、"')
; (';')
WHITE_SPACE ('\n ')
Identifier ('clicked')
WHITE_SPACE (' ')
=> ('=>')
WHITE_SPACE (' ')
{ ('{')
WHITE_SPACE ('\n ')
LineComment ('//root.request-increase-value();')
WHITE_SPACE ('\n ')
} ('}')
WHITE_SPACE ('\n ')
} ('}')
WHITE_SPACE ('\n ')
} ('}')
WHITE_SPACE ('\n')
} ('}')

View File

@@ -0,0 +1,19 @@
SlintFile
SlintComponent(Component)
PsiElement(IDENTIFIER)('component')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('App')
PsiElement({)('{')
PsiWhiteSpace('\n ')
PsiElement(IDENTIFIER)('aaa')
PsiErrorElement:'(', ':', ':=', <=>, '=>' or '{' expected, got ';'
<empty list>
PsiElement(;)(';')
PsiWhiteSpace('\n ')
PsiElement(IDENTIFIER)('property')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('name')
PsiElement(;)(';')
PsiWhiteSpace('\n')
PsiElement(})('}')
PsiWhiteSpace('\n')

View File

@@ -12,11 +12,12 @@ export component HelloWorld inherits Window {
font-size: 24px;
}
Button {
abc := Button {
text: "Click me";
clicked => {
debug("Button clicked!");
abc.absolute-position;
}
}
}
}
}