Update intro pages

This commit is contained in:
Matt Ellis 2017-09-29 15:15:59 +01:00
parent f4334ca498
commit d5d7927fac
7 changed files with 189 additions and 22 deletions

View File

@ -1,9 +1,11 @@
# Summary
* [Introduction](welcome.md)
* About the IntelliJ Platform
* About this Guide
* [Contributing to this Guide](CONTRIBUTING.md)
* [The IntelliJ Platform](intro/intellij_platform.md)
* [About this Guide](intro/about.md)
* [Key Topics](intro/key_topics.md)
* [Contributing](CONTRIBUTING.md)
* [Getting Help](intro/getting_help.md)
* [Recently Updated](recently_updated.md)
## Part I - Plugins
@ -62,7 +64,7 @@
* [Contributing to the IntelliJ Platform](basics/platform_contributions.md)
* [IntelliJ Coding Guidelines](basics/intellij_coding_guidelines.md)
## Part III - Platform
## Part III - Base Platform
* Component Model
* [Threading](basics/architectural_overview/general_threading_rules.md)
* Background Tasks
@ -143,7 +145,7 @@
* Unit Testing
## Part VII - Product Specific
* Compatibility with Multiple Products
* Compatibility with Multiple Products
* IDEA
* [Tomcat Integration](reference_guide/tomcat_integration.md)
* [Spring API](reference_guide/frameworks_and_external_apis/spring_api.md)
@ -252,6 +254,7 @@
* [Kotlin for Plugin Developers](tutorials/kotlin.md)
## Appendix II - Resources
* [Introduction](resources.md)
* [IntelliJ Community Edition on GitHub](https://github.com/JetBrains/intellij-community)
* [IntelliJ Plugins](https://github.com/JetBrains/intellij-plugins)
* [IntelliJ Scala Plugin](https://github.com/JetBrains/intellij-scala)

57
intro/about.md Normal file
View File

@ -0,0 +1,57 @@
---
title: About this Guide
---
This guide is split into several parts, similar to a text book. Each part builds on the content of the previous part, but it is not necessary to read the guide in order. The [Key Topics](key_topics.md) page aims to link to the pages that are necessary to be able to understand the architecture and get started building plugins.
> **NOTE** While browsing this guide, you will notice that there are topics that are greyed out. Unfortunately, the guide is not complete and contains placeholders for certain topics. We are working on increasing the coverage, but if you get stuck due to missing content, please see the [Getting Help](getting_help.md) section for details on how to get moving again.
>
> The guide is also [Open Source on GitHub](https://github.com/JetBrains/intellij-sdk-docs), and Pull Requests for new content or updates are always gratefully received. A Pull Request does not need to be fully comprehensive - if a little update would help you, it will help other developers too! All pull requests will be reviewed before being accepted, so don't worry about inaccuracies. Please see the [Contributing](/CONTRIBUTING.md) page for details on building the guide locally and contributing.
* [**Part I - Plugins**](basics.md)
Describes how to create a plugin that can extend the _IntelliJ Platform_. Includes details on how to set up the project, register extension points, target specific versions of the _IntelliJ Platform_, and how to package, deploy and test your plugins.
* [**Part II - Architecture**](/basics/architectural_overview.md)
Provides a high level, introductory overview of the architecture of the _IntelliJ Platform_, looking at how it is split into several layers - Base Platform, Project Model, Features, and so on. It also introduces the Program Structure Index (PSI) which provides the _IntelliJ Platform_ with syntactic and semantic models for many different languages.
* **Part III - Base Platform**
Describes the foundational layer of the architecture, which provides many features and utilities, such as the component model, the user interface, documents and editors, the virtual file system, settings and threading and background tasks. The Base Platform layer essentially comprises the functionality of the _IntelliJ Platform_ that does not target language features or parsing.
* [**Part IV - Project Model**](/reference_guide/project_model.md)
Documents the Project Model, which represents the files and configuration of the currently loaded project, as well as the build system used to build the project.
* **Part V - PSI**
The Program Structure Index builds the syntactic and semantic models for lots of different file types. This section describes how to work with the PSI, navigating and manipulating the syntax trees, and also looks at the powerful references system, which allows a syntax tree node to reference an item in the semantic model. It also details how the PSI creates and uses indexes.
* **Part VI - Features**
Describes how to extend and interact with various features that use the PSI layer, such as code completion, navigation, <kbd>Alt</kbd>+<kbd>Enter</kbd> items, intentions, refactorings and more. See also the section on Custom Languages below for language specific features that are only applicable when adding support for a new langauge.
* **Part VII - Product Specific**
A lot of the functionality in the _IntelliJ Platform_ is language and product agnostic. For example, code inspections work the same in Java as they do in Ruby, it is just the syntax trees and semantic information that is different. This section describes product specific features, such as specific project model differences and how to target them in a plugin.
* [**Part VIII - Custom Languages**](/reference_guide/custom_language_support.md)
Plugins frequently extend support for existing languages, such as adding inspections to Java files. This section describes how to add support to the _IntelliJ Platform_ for a new language, that isn't supported by default, creating parsers, syntactic and semantic models and all the features that build on top.
* **Part IX - Custom IDEs**
Documents how to use the _IntelliJ Platform_ to create a new, custom IDE, rather than plugins to an existing product, e.g. like WebStorm, or Android Studio.
* [**Part X - Plugin Repository API](/plugin_repository/index.md)
Documents the API for the [Plugin Repository](https://plugins.jetbrains.com) service that JetBrains maintains and is used to host plugins. It is not necessary to know this API in order to publish plugins - plugins can be uploaded manually, or via the Gradle IntelliJ Plugin.
* [**Appendix I - Tutorials**](/tutorials.md)
Provides tutorials and links to working sample code to demonstrate various features and functionality related to the _IntelliJ Platform_.
* [**Appendix II - Resources](/resources.md)
Links to useful resources, such as the IntelliJ Community Edition source code, the Plugin Development forum and the Plugin Developers Gitter room.

24
intro/getting_help.md Normal file
View File

@ -0,0 +1,24 @@
---
title: Getting Help
---
## Problems with the guide
If youre having problems with the guide itself, such as missing, incorrect or confusing content, please [raise an issue on YouTrack](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=). If the problem is easily solved, you can also submit a [Pull Request on GitHub](https://github.com/JetBrains/intellij-sdk-docs).
If you just want to share feedback on the guide, again, [raise an issue](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=), even if its for a discussion, ideas on improvements or suggestions.
Please don't use the IJSDK YouTrack project for plugin or product support requests - it's intended for the SDK and the documentation, and you'll get a better response using one of the methods below.
## Problems with code - support issues
For problems related to code, rather than the content of the guide, you have several options:
* [Plugin Development Forum](https://intellij-support.jetbrains.com/hc/en-us/community/topics/200366979-IntelliJ-IDEA-Open-API-and-Plugin-Development) - post a message to the support forum. It is regularly updated with answers by JetBrains team members.
* [IntelliJ Plugin Developers Gitter room](https://gitter.im/IntelliJ-Plugin-Developers/Lobby) - this chat room is a great place to ask questions, with answers coming form both JetBrains team members, and members of the community.
Of course, all issues will be used to try and improve this guide.
## Problems with products
If you have a problem with an IntelliJ product, such as IDEA, WebStorm, Rider, etc., please raise an issue on [YouTrack](https://youtrack.jetbrains.com), assigning it to the correct project for the product.

View File

@ -0,0 +1,45 @@
---
title: What is the IntelliJ Platform?
---
The _IntelliJ Platform_ is not a product in and of itself, but provides a platform for building IDEs. It is used to power JetBrains products such as [IntelliJ IDEA](https://www.jetbrains.com/idea/), [WebStorm](https://www.jetbrains.com/webstorm/), [RubyMine](https://www.jetbrains.com/ruby/), [DataGrip](https://www.jetbrains.com/datagrip/) and [Rider](https://www.jetbrains.com/rider/). It is also Open Source, and can be used by third parties to build IDEs, such as [Android Studio](https://developer.android.com/studio/index.html) from Google.
The _IntelliJ Platform_ provides all of the infrastructure that these IDEs need to provide rich language tooling support. It provides a component driven, cross platform JVM based application host with a high level user interface toolkit for creating tool windows, tree views and lists (supporting fast search) as well as popup menus and dialogs.
It also includes an image editor as well as a full text editor, and provides abstract implementations of syntax highlighting, code folding, code completion, and other rich text editing features.
Furthermore, it includes pluggable APIs to build common IDE functionality, such as a project model and a build system. It also provides infrastructure for a very rich debugging experience, with language agnostic advanced breakpoint support, call stacks, watch windows and expression evaluation.
But the _IntelliJ Platform_'s real power comes from the Program Structure Index (PSI). This is a set of functionality that can be used to parse files and build rich syntactic and semantic models of the code, and to build indexes from this data. This powers a lot of functionality, from quick navigating to files, types and symbols, to the contents of code completion windows and find usages, code inspections and code rewriting, for quick fixes or refactorings, as well as many other features.
The _IntelliJ Platform_ includes parsers and a PSI model for a number of languages, and its composable nature means that it is possible to add support for other languages.
## Plugins
Products built on the _IntelliJ Platform_ are composable applications, with the platform being responsible for the creation of components, and the injection of dependencies into classes. The _IntelliJ Platform_ fully supports plugins, and JetBrains hosts a [plugin repository](https://plugins.jetbrains.com) that can be used to distribute plugins that support one or more of the products. It is also possible to host your own repositories, and distribute plugins separately.
Plugins can extend the platform in lots of ways, from adding a simple menu item to adding support for a complete language, build system and debugger. A lot of the existing functionality in the _IntelliJ Platform_ is written as plugins that can be included or excluded depending on the needs of the end product. See the section on [Plugins](/basics.md) for more details.
The _Intellij Platform_ is a JVM application, written mostly in Java and Kotlin. You should be familiar with these languages, and associated tooling, in order to write plugins for products based on the _IntelliJ Platform_. At this time, it's not possible to extend the _IntelliJ Platform_ in non-JVM languages.
## Open Source
The _IntelliJ Platform_ is Open Source, under the [Apache license](https://github.com/JetBrains/intellij-community/blob/master/LICENSE.txt), and [hosted on GitHub](https://github.com/JetBrains/intellij-community).
While this guide refers to the _IntelliJ Platform_ as a separate entity, there is no "IntelliJ Platform" GitHub repo. Instead, the platform is considered to be an almost complete overlap with the IntelliJ IDEA Community Edition, which is a free and Open Source version of IntelliJ IDEA Ultimate (the GitHub repo linked above is the [JetBrains/intellij-community](https://github.com/JetBrains/intellij-community) repo).
IntelliJ IDEA Ultimate is a superset of the IntelliJ IDEA Community Edition. It is based on the community edition, but includes closed source plugins ([see this feature comparison](https://www.jetbrains.com/idea/features/editions_comparison_matrix.html)). Similarly, other products such as WebStorm and DataGrip are based on the IntelliJ IDEA Community Edition, but with a different set of plugins included and excluding other default plugins.
This allows plugins to target multiple products, as each product will include base functionality and a selection of plugins from the IntelliJ IDEA Community Edition repo. This is what we call the _IntelliJ Platform_.
Typically, an IDE that is based on the _IntelliJ Platform_ will include the `intellij-community` repo as a Git submodule and provide configuration to describe which plugins from the `intellij-community`, and which custom plugins will make up the product. This is how the IDEA Ultimate team work, and they contribute code to both the custom plugins and the _IntelliJ Platform_ itself.
Of course, because the _IntelliJ Platform_ is open source, we also accept [pull requests](https://github.com/JetBrains/intellij-community/pulls) to the platform itself, rather than just opening the source for view. Issue tracking is managed with [YouTrack (using the IDEA project)](https://youtrack.jetbrains.com/issues/IDEA), and if you wish to contribute to the platform, it is usually a good idea to open an issue describing the changes you wish to make before making the changes - this allows the team chance to give feedback and advice. More details can be found in the section on [Contributing to the IntelliJ Platform](/basics/platform_contributions.md).
## Rider
[Rider](https://www.jetbrains.com/rider/) uses the _IntelliJ Platform_ differently to other IntelliJ based IDEs. It uses the _IntelliJ Platform_ to provide the user interface for a C# and .NET IDE, with the standard IntelliJ editors, toolwindows, debugging experience and so on. It also integrates into the standard Find Usages and Search Everywhere UI, and makes use of code completion, syntax highlighting and so on.
However, it doesn't create a full PSI (syntactic and semantic) model for C# files. Instead, it reuses [ReSharper](https://www.jetbrains.com/resharper/) to provide language functionality. All of the C# PSI model, and all inspections and code rewriting, such as quick fixes and refactorings are run out of process, in a command line version of ReSharper. This means that creating a plugin for Rider involves two parts - a plugin that lives in the IntelliJ "front end" to show user interface, and a plugin that lives in the ReSharper "back end" to analyse and work with the C# PSI.
Fortunately, many plugins can simply work with the ReSharper backend - Rider takes care of displaying the results of inspections and code completion, and many plugins can be written that don't require an IntelliJ UI component. More details can be found in the Product Specific section.

28
intro/key_topics.md Normal file
View File

@ -0,0 +1,28 @@
---
title: Key Topics
---
The _IntelliJ Platform_ is very large, and very capable, and its size and scope can initially be very daunting. This page is intended to list the key topics that a plugin author would be interested in, and provide quick links to the most common extension points.
## Essential concepts
- [Getting Started](/basics/getting_started.md) with plugins.
- [Testing plugins](/basics/testing_plugins.md).
- [Architectural overview] - a brief tour of the different layers of the _IntelliJ Platform_.
- Component model - the _IntelliJ Platform_ is a component based application, and is responsible for creating components and injecting dependencies. Understanding this is necessary for building plugins.
- Extension points - how to register components with extension points, and how to find out what extension points are available.
- [Virtual files](/basics/architectural_overview/virtual_file.md) - all file access should go through the Virtual File System which abstracts and caches the file system. This means you can work with files that are on the local file system, in a zip file or are old versions from version control.
- [Extension points](/basics/plugin_structure/plugin_extensions_and_extension_points.md)
## Code model
The _IntelliJ Platform_'s code model is called the PSI - the Program Structure Index. The PSI parses code, builds indexes and creates a semantic model.
## Common extension points
The _IntelliJ Platform_ is extremely extensible, and most features and services can be extended. Some of the common extension points are:
* [Actions](/tutorials/action_system.md) - menu and toolbar items
* [Code inspections](/tutorials/code_inspections.md) - code analysis that looks at the syntax trees and semantic models and highlight issues in the editor.
* [Intentions](/tutorials/code_intentions.md) - context specific actions that are available in the <kbd>Alt</kbd>+<kbd>Enter</kbd> menu when the text caret is at a certain location.
* [Code completion](/reference_guide/custom_language_support/code_completion.md).

15
resources.md Normal file
View File

@ -0,0 +1,15 @@
---
title: Resources
---
The following links represent useful resources for working with the _IntelliJ Platform_ and creating plugins.
* [IntelliJ Community Edition on GitHub](https://github.com/JetBrains/intellij-community)
* [IntelliJ Plugins](https://github.com/JetBrains/intellij-plugins)
* [IntelliJ Scala Plugin](https://github.com/JetBrains/intellij-scala)
* [Gradle IntelliJ Plugin](https://github.com/JetBrains/gradle-intellij-plugin)
* [IntelliJ SDK Documentation](https://github.com/JetBrains/intellij-sdk-docs)
* [IntelliJ Plugin Verifier](https://github.com/JetBrains/intellij-plugin-verifier)
* [IntelliJ Plugin Developers Gitter](https://gitter.im/IntelliJ-Plugin-Developers/Lobby)
* [Community SDK Forum](https://intellij-support.jetbrains.com/hc/en-us/community/topics/200366979-IntelliJ-IDEA-Open-API-and-Plugin-Development)
* [Kotlin Reference](https://kotlinlang.org)

View File

@ -1,28 +1,23 @@
---
title: IntelliJ Platform SDK Documentation
title: IntelliJ Platform SDK
redirect_from:
- /index.html
---
Welcome to the _IntelliJ Platform_ SDK. This is the primary source of documentation for extending the _IntelliJ Platform_, by creating plugins, custom language support or building a custom IDE.
## Welcome to the IntelliJ Platform SDK Documentation!
Here you can find [basic information](basics.md) about the *IntelliJ Platform SDK*, in particular how to **[get started](basics/getting_started.md)** with developing plugins for IntelliJ IDEA and other IDEs.
More details about specific development topics can be found in the [Architecture Reference Guide](reference_guide.md).
A set of **[step-by-step tutorials](tutorials.md)** with code samples will lead you through the common use cases for the *IntelliJ Platform SDK*.
The [Plugin Development FAQ](faq.md) section contains a series of issues commonly discussed on our [Open API and Plugin Development](https://intellij-support.jetbrains.com/hc/en-us/community/topics/200366979-IntelliJ-IDEA-Open-API-and-Plugin-Development) forums.
One of the ways to improve the *IntelliJ SDK* documentation is to **[contribute to the project](CONTRIBUTING.md)**. Any kind of content including tutorials, articles about architecture or code samples that can help plugin developers is kindly welcome. Please read the [Contribution Guidelines](CONTRIBUTING.md) if you would like to share your knowledge.
Please let us know about any **content inconsistencies**, outdated materials, cosmetic issues or other defects you may find in the docs and samples by submitting an issue to [YouTrack](https://youtrack.jetbrains.com/issues/IJSDK). If you haven't found a documentation topic that answers your questions, feel free to file a **[request](https://youtrack.jetbrains.com/newIssue?project=IJSDK)**.
Please [give us your feedback](http://www.surveygizmo.com/s3/2149448/IntelliJ-SDK-Docs) to help make the *IntelliJ Platform* documentation better.
## Getting Started
* [**What is the IntelliJ Platform?**](intro/intellij_platform.md)
* [**About this Guide**](intro/about.md)
* [**Key Topics**](intro/key_topics.md)
* [**Getting Help**](intro/getting_help.md)
* [**Tutorials**](tutorials.md)
* [**Resources**](resources.md)
## Open Source
This guide is Open Source, and licensed under Apache 2.0. The source (as Markdown) is [hosted on GitHub](https://github.com/JetBrains/intellij-sdk-docs). Issues and features are tracked in [YouTrack](https://youtrack.jetbrains.com/issues/IJSDK) - if you find a bug or require help with missing content, please [raise an issue](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=). Of course, pull requests to the GitHub repository are also gratefully accepted.
Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to host the docs locally and contribute.