forked from rust-lang/prev.rust-lang.org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ides.html
138 lines (101 loc) · 7.51 KB
/
ides.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<html>
<head>
<meta charset="utf-8">
<title>Rust and IDEs</title>
<link rel="stylesheet" href="/css/bootstrap.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/ides.css">
</head>
<body class="container">
<div class="contents">
<h2>Contents</h2>
<a href="#plan">The plan</a>
<br><a href="#status">Current status</a>
<br><a href="#help">How to help</a>
<br><a href="#resources">Resources</a>
</div>
<h1>Rust and IDEs</h1>
<p>Modern IDEs can give developers a massive increase in productivity. Good IDE support is an essential part of the tooling for a new programming language. Several community projects have provided an excellent start towards IDE support. Over the next few quarters, providing better IDE support is a high priority for the Rust teams and we hope to see big leaps in the power and usability of Rust IDEs.</p>
<p>Good IDE support requires a number of components - the compiler must be modified to operate in a different mode, we must provide name and type information from the compiler to the IDE, and we must write plugins for the IDEs themselves so they know what to do with Rust projects. We're going to work on all three of these components in parallel and there is a lot of scope for useful input from the community.</p>
<a id="plan"></a><h2 class="clear">The plan</h2>
<p>To work with an IDE, the compiler must respond to changes made by the users in milliseconds and be able to cope with incomplete code. To manage this we propose modifying the compiler to support incremental and lazy compilation, and in the long-run, operate as a long-running daemon process. The compiler must also be more robust and be able to continue compilation in the face of parsing and name resolution errors.</p>
<p>We propose a new tool, an 'oracle' which takes input from the compiler, maintains a project-wide view of the code and it's type information, and provides data about the project to IDEs and other tools. The oracle is a long-running daemon and presents an API via IPC.</p>
<p>We hope to provide support for IntelliJ IDEA, Eclipse, and Visual Studio. There are existing projects started in the community for all three of these IDEs. We want to support these efforts however we can. Between these IDEs we should have good platform coverage and cover most programmers' preferences. Depending on how things develop we may focus or broaden our efforts in the future.</p>
<a id="status"></a><h2>Current status</h2>
<p>There is <a href="https://github.com/rust-lang/rfcs/pull/1317">an RFC PR</a> for the compiler-side components. The RFC spells out in detail the changes to the compiler and the plan for the 'oracle' tool. Comments are very welcome.</p>
<p>Available IDE plugins:
<br>
<br><a href="https://github.com/RustDT/RustDT">Eclipse</a>
<br><a href="https://github.com/PistonDevelopers/VisualRust">Visual Studio</a>
</p>
<p>Editor plugins:
<br>
<br><a href="https://github.com/rust-lang/rust-mode">Emacs</a>
<br><a href="https://github.com/rust-lang/rust.vim">Vim</a>
<br><a href="https://packagecontrol.io/packages/Rust">Sublime Text</a>
<br><a href="https://atom.io/packages/language-rust">Atom</a>
</p>
<p>Code completion is available via <a href="https://github.com/phildawes/racer">Racer</a>. See <a href="http://areweideyet.com/">areweideyet.com</a> for more details on editor plugins and integration with Racer.</p>
<p>The next steps are to finalise the plan as described in the RFC. Then begin implementation work on the compiler and oracle, and continue work on the IDE plugins.</p>
<a id="help"></a><h2>How to help</h2>
<ul>
<li>Comment on the <a href="https://github.com/rust-lang/rfcs/pull/1317">RFC PR</a>,</li>
<li>Use the IDEs (see links below), file issues,</li>
<li>Contribute code:</li>
</ul>
<h3>The compiler</h3>
<p>The tracking issue for the IDE RFC will list useful issues to tackle. Generally, these issues require some experience with the Rust compiler. But some could be mentored bugs if you have an interest in compilers. All written in Rust.</p>
Repository: <a href="https://github.com/rust-lang/rust">https://github.com/rust-lang/rust</a>
<br>Tracking issue: TBA
<br>Contact: Nick Cameron (nrc on GitHub and irc, [email protected])
<h3>The Oracle</h3>
<p>The oracle is also written in Rust, but should be a much easier project to get to grips with than the compiler, since it is in a much earlier stage of development and is smaller.</p>
Repository: TBA
<br>Issues: TBA
<br>List of good first bugs: TBA
<br>Contact: Nick Cameron (nrc on GitHub and irc, [email protected])
<h3>IDE plugins</h3>
<p>The Visual Studio plugin is written in C#, the other IDE plugins are written in Java. In any case, experience dealing with the IDE in question is probably more important than knowing the Rust compiler in depth, however, some knowledge of the AST, etc. will be useful.</p>
<b>Eclipse (RustDT)</b>
<br>
<br>Installation instructions: <a href="https://github.com/RustDT/RustDT/blob/latest/documentation/Installation.md">https://github.com/RustDT/RustDT/blob/latest/documentation/Installation.md</a>
<br>Download: <a href="http://rustdt.github.io/releases/">http://rustdt.github.io/releases/</a> (via Eclipse)
<br>Repository: <a href="https://github.com/RustDT/RustDT">https://github.com/RustDT/RustDT</a>
<br>Issues: <a href="https://github.com/RustDT/RustDT/issues">https://github.com/RustDT/RustDT/issues</a>
<br>Contact: Bruno Medeiros
<br>
<br><b>IntelliJ IDEA</b>
<br>
<br>Repository: <a href="https://github.com/alexeykudinkin/intellij-rust">https://github.com/alexeykudinkin/intellij-rust</a>
<br>Issues: <a href="https://github.com/alexeykudinkin/intellij-rust/issues">https://github.com/alexeykudinkin/intellij-rust/issues</a>
<br>Contact: <a href="https://groups.google.com/d/forum/intellij-rust">https://groups.google.com/d/forum/intellij-rust</a>
<br>
<br><b>Visual Studio (Visual Rust)</b>
<br>
<br>Download: <a href="https://visualstudiogallery.msdn.microsoft.com/c6075d2f-8864-47c0-8333-92f183d3e640">https://visualstudiogallery.msdn.microsoft.com/c6075d2f-8864-47c0-8333-92f183d3e640</a>
<br>Repository: <a href="https://github.com/PistonDevelopers/VisualRust">https://github.com/PistonDevelopers/VisualRust</a>
<br>Issues: <a href="https://github.com/PistonDevelopers/VisualRust/issues">https://github.com/PistonDevelopers/VisualRust/issues</a>
<br>Contact: <a href="https://github.com/vosen/">https://github.com/vosen/</a> ([email protected])
<a id="resources"></a><h2>Resources</h2>
<h3>New to Rust?</h3>
<ul>
<li><a href="https://doc.rust-lang.org/nightly/book/">The book</a></li>
<li><a href="https://doc.rust-lang.org/nightly/std/index.html">API docs</a></li>
<li><a href="https://github.com/rust-lang/rust/blob/master/src/librustc/README.md">A somewhat out of date overview of the compiler</a></li>
</ul>
<h3>New contributor to Rust projects?</h3>
<ul>
<li><a href="http://ncameron.org/rust.html">Getting started contributing to Rust</a></li>
<li><a href="https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md">Contributing to Rust</a></li>
<li><a href="http://kmcallister.github.io/talks/rust/2015-contributing-to-rust/slides.html">Contributing slides</a></li>
<li><a href="https://internals.rust-lang.org/">Rust internals forum</a></li>
<li><a href="https://dxr.mozilla.org/rust/source/">Rust DXR instance</a></li>
</ul>
<h3>New to Git or GitHub?</h3>
<ul>
<li><a href="https://git-scm.com/book/en/v2">The Git book</a></li>
<li><a href="https://guides.github.com/">GitHub guides</a></li>
<li><a href="http://featherweightmusings.blogspot.co.nz/2015/06/my-git-and-github-work-flow.html">Cheat sheet for my personal workflow</a></li>
</ul>
</body>
</html>