Giter Site home page Giter Site logo

rustdt's Introduction

Project website: http://rustdt.github.io/

As of 2017, RustDT is no longer actively maintained, see this blog post for more information. If you are interested in contributing, you can for now fork the project - and there should be enough information here detailing how to build, test, release, etc.

--

Build Status Gitter

Developers Guide

Building the IDE:

You will need Maven for building RustDT.

  • To build, run mvn clean verify at the root of the repository. This will run the test suite, and afterwards produce a p2 repository (an Eclipse Software Site) at bin-maven/features.repository/repository.
  • To just build without running tests, invoke mvn clean package.

Setting up a development environment:

  • You need Eclipse PDE to develop Eclipse plugins. Download and start it.
  • Clone the Git repository.
  • In Eclipse, click "File / Import... ", and then "General / Existing projects into workspace". Select the Git repository folder as the "root directory", enable "Search for nested projects", and select all the Eclipse projects that show up. Click finish to import those projects.

  • Note: The actual project names will be different from those in the screenshot above.
    • Note: Java compiler settings will be automatically configured, since Eclipse compiler settings are stored in source version control.
  • Setup the target platform. Unfortunately due to limitations in Tycho/PDE tooling (more info) some manual steps are required:
    1. Open a shell on target-platform/ and run mvn package. This should create a deps-repository/repository directory.
    2. Copy the target platform file: target-platform/IDE-base.target to target-platform/IDE-gen.target. (this last filename is already git-ignored).
    3. Open target-platform/IDE-gen.target in Eclipse, so that it opens under the PDE editor.
    4. Click "Add", then select "Software Site".
    5. On the "Add Software Site" dialog, click "Add...", then "Local...", navigate to Git repo directory, then choose the target-platform/deps-repository/repository directory.
    6. On the "Add Software Site" dialog, the new repository should be selected. Click "Select All" to select all deps, then click "Finish". It should look more or less like this:
  1. Then finally click "Set as Target Platform".
  • Build the workspace ( "Project / Build All"). Everything should build fine now, there should be no errors.
  • To start the IDE from your workspace: Open "Run / Run Configurations ...". Click on "Eclipse Application" to create a new launch for the plugins in your workspace. The default new configuration that is created should already be ready to be launched.
  • Additional tip: Locate the bin-maven folder in the top-level project, open its Properties from the Project Explorer context menu, and mark that directory as "Derived" in the "Resources" property page. This will prevent those folder resources to appear in UI operations such as "Open Resource" for example.

Creating and deploying a new release:

A release is a web site with an Eclipse p2 update site. The website may contain no web pages at all, rather it can be just the p2 site. To create and deploy a new release:

  1. Ensure the version numbers of all plugins/features/etc. are properly updated, if they haven't been already.
  2. Run mvn clean verify to perform the Tycho build (see section above). Ensure all tests pass.
  • To create a signed release the sign-build Maven profile must be activated, and the required properties set.
  1. Create and push a new release tag for the current release commit.
  2. Go to the Github releases page and edit the newly present release. Add the corresponding (ChangeLog.md) entries to the release notes.
  3. Locally, run ant -f releng/ CreateProjectSite. This last step will prepare the project web site under bin-maven/ProjectSite.
  4. To actually publish the project site, run ant -f releng/ PublishProjectSite -DreleaseTag=<tagName>. What happens here is that the whole project site will be pushed into a Git repository, to then be served in some way (for example Github Pages). If projectSiteGitURL is not specified, the default value in releng-build.properties will be used.
  • For more info on the Release Engineering script, run ant -f releng/, this will print the help.
  1. A branch or tag named latest should also be created in Github, pointing to the latest release commit. The previous latest tag can be deleted/overwritten. The documentation pages use this tag/branch in their links.

Project design info and notes

LangEclipseIDE

This project uses the LangEclipseIDE framework, which is designed to have its source embedded in the host IDE. See this section for more info on how this should be managed.

Extensive Compile-Time type and contract checking

See https://github.com/bruno-medeiros/MelnormeEclipse/wiki/Extensive-Compile-Time-Checking for more info on this principle.

Code style:

  • Indent with tabs (tab size is 4 spaces)
  • Max line width: 120
  • Block style:
    if(foo.blah()) {
        doThis();
    }
  • Indentation for function arguments: 1 indent unit (= 1 tab):
    foo(one, two, three,
        four, five, six);

There is also an Eclipse formatter profile settings file you can use, although you are not obliged to format with all rules of that formatter settings. If you make a minor source change, don't format the whole file, but only around the changes you are contributing.

Unit tests double-method wrapper:

This code idiom is often used in this project's JUnit tests:

@Test
public void testXXX() throws Exception { testXXX$(); }
public void testXXX$() throws Exception {

This is donely solely as an aid when debugging code, so that the "Drop to frame" functionality can be used on the unit-test method. It seems the Eclipse debugger (or the JVM) cannot drop-to-frame to a method that is invoked dynamically (such as the unit-test method). So we wrap the unit-test method on another one. So while we now cannot drop-to-frame in testXXX, we can do it in testXXX$, which basically allows us to restart the unit-test.

TODO: investigate if there is an alternate way to achieve the same. I haven't actually checked that.

rustdt's People

Contributors

bruno-medeiros avatar highcommander4 avatar koka avatar pieterpenninckx avatar shiyuyang avatar thebiggerguy avatar waynenilsen avatar werwurm avatar woyten avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rustdt's Issues

Autocompletion error `Unknown line format:` on std::process::Command

I am using RustDT 0.2.0, same setup as in #35

When trying to auto-complete a function on a std::process::Command object I get this error message:
Unknown line format: where K: AsRef<OsStr>, V: AsRef<OsStr>

The log file is not more detailed:

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 13:11:15.800
!MESSAGE Unknown line format:         where K: AsRef<OsStr>, V: AsRef<OsStr>

Unable to parse multiline rustc error messages

Currently RustDT 0.2.0 is unable to parse rustc error messages with multiple lines of output for one single line of code. Example:

use std::option::Option;

fn main() {
    let a : u32 = Option::Some(4);
}

rustc output:

-------   Building Rust project: test  -------
>> Running: /usr/local/bin/cargo build
   Compiling hello_world v0.0.1 (file:///path/to/project/projectname/src/test)
src/main.rs:4:19: 4:34 error: mismatched types:
 expected `u32`,
    found `core::option::Option<_>`
(expected u32,
    found enum `core::option::Option`) [E0308]
src/main.rs:4     let a : u32 = Option::Some(4);
                                ^~~~~~~~~~~~~~~
src/main.rs:4:19: 4:34 help: run `rustc --explain E0308` to see a detailed explanation
error: aborting due to previous error
Could not compile `hello_world`.

To learn more, run the command again with --verbose.
  ^^^ Terminated, exit code: 101 ^^^
************  Build terminated.  ************

but it will only display mismatched types: in the tooltip over line 4:19: 4:34.

Debugging not working on Eclipse 4.5 Mars

Install:
Windows 7 x64
Eclipse 4.5 x64
Cygwin x64 with gdb 7.8
Add cygwin bin folder to PATH

Steps

  1. Create hello world project 'rust1' (C:\Users\okushnir\Desktop\workspace_tst\rust1):
  2. Add file src/main.rs with code:
// This code is editable and runnable!
fn main() {
    // A simple integer calculator:
    // `+` or `-` means add or subtract by 1
    // `*` or `/` means multiply or divide by 2

    let program = "+ + * - /";
    let mut accumulator = 0;

    for token in program.chars() {
        match token {
            '+' => accumulator += 1,
            '-' => accumulator -= 1,
            '*' => accumulator *= 2,
            '/' => accumulator /= 2,
            _ => { /* ignore everything else */ }
        }
    }

    println!("The program \"{}\" calculates the value {}",
              program, accumulator);
}

  1. Build project, add breakpoint to line 8
  2. Run application in the debug mode

Actual result:

In Console view:

GNU gdb (GDB) 7.8
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-cygwin".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
http://www.gnu.org/software/gdb/bugs/.
Find the GDB manual and other documentation resources online at:
http://www.gnu.org/software/gdb/documentation/.
For help, type "help".
Type "apropos word" to search for commands related to "word".
No source file named C:\Users\okushnir\Desktop\workspace_tst\rust1\src\main.rs.
[New Thread 1152.0x3fb8]

Temporary breakpoint 2, 0x0000000000401dc8 in main ()

In Debug view:

  1. Threads tree is closed
  2. When I'm clicking on app node 'rust1' then error appear:

An internal error has occurred.
org.eclipse.cdt.dsf.gdb.internal.ui.actions.GdbRestartCommand.>(Lorg/eclipse/cdt/dsf/service/DsfSession;Lorg/eclipse/cdt/dsf/gdb/launching/GdbLaunch;)V

In GDB traces console view:

467,885 2-gdb-version
467,887 ~"GNU gdb (GDB) 7.8\n"
467,887 ~"Copyright (C) 2014 Free Software Foundation, Inc.\n"
467,887 ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is fre\
e software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitt\
ed by law.  Type \"show copying\"\nand \"show warranty\" for details.\n"
467,887 ~"This GDB was configured as \"x86_64-pc-cygwin\".\nType \"show configuration\" for configur\
ation details."
467,887 ~"\nFor bug reporting instructions, please see:\n"
467,888 ~"<http://www.gnu.org/software/gdb/bugs/>.\n"
467,888 ~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/soft\
ware/gdb/documentation/>.\n"
467,888 ~"For help, type \"help\".\n"
467,888 ~"Type \"apropos word\" to search for commands related to \"word\".\n"
467,888 2^done
467,888 (gdb) 
467,889 3-environment-cd C:/Users/okushnir/Desktop/workspace_tst/rust1
467,890 3^done
467,890 (gdb) 
467,890 4-gdb-set breakpoint pending on
467,891 4^done
467,891 (gdb) 
467,891 5-gdb-set detach-on-fork on
467,892 5^done
467,892 (gdb) 
467,892 6-enable-pretty-printing
467,893 6^done
467,893 (gdb) 
467,893 7-gdb-set python print-stack none
467,894 7^done
467,894 (gdb) 
467,894 8-gdb-set print object on
467,895 8^done
467,895 (gdb) 
467,895 9-gdb-set print sevenbit-strings on
467,896 9^done
467,896 (gdb) 
467,896 10-gdb-set host-charset UTF-8
467,897 10^done
467,897 (gdb) 
467,897 11-gdb-set target-charset WINDOWS-1251
467,898 11^done
467,898 (gdb) 
467,898 12-gdb-set target-wide-charset UTF-16
467,899 12^done
467,899 (gdb) 
467,899 13-gdb-set dprintf-style call
467,900 13^done
467,900 (gdb) 
467,900 14source .gdbinit
467,901 &"source .gdbinit\n"
467,901 &".gdbinit: No such file or directory.\n"
467,901 14^error,msg=".gdbinit: No such file or directory."
467,901 (gdb) 
467,902 15-gdb-set target-async off
467,903 15^done
467,903 (gdb) 
467,903 16-gdb-set auto-solib-add on
467,904 16^done
467,904 (gdb) 
467,904 17-file-exec-and-symbols --thread-group i1 C:/Users/okushnir/Desktop/workspace_tst/rust1/tar\
get/debug/calc.exe
467,952 17^done
467,952 (gdb) 
467,953 18-gdb-show --thread-group i1 language
467,954 18^done,value="auto"
467,954 (gdb) 
467,954 19-gdb-set --thread-group i1 language c
467,955 19^done
467,955 (gdb) 
467,955 20-interpreter-exec --thread-group i1 console "p/x (char)-1"
467,956 ~"$1 = 0xff\n"
467,957 20^done
467,957 (gdb) 
467,957 21-data-evaluate-expression --thread-group i1 "sizeof (void*)"
467,958 21^done,value="8"
467,958 (gdb) 
467,958 22-gdb-set --thread-group i1 language auto
467,959 22^done
467,959 (gdb) 
467,959 23-interpreter-exec --thread-group i1 console "show endian"
467,960 ~"The target endianness is set automatically (currently little endian)\n"
467,960 23^done
467,960 (gdb) 
467,961 24-list-thread-groups
467,962 24^done,groups=[{id="i1",type="process",executable="/cygdrive/c/Users/okushnir/Desktop/works\
pace_tst/rust1/target/debug/calc.exe"}]
467,962 (gdb) 
467,962 25-break-insert -f C:\\Users\\okushnir\\Desktop\\workspace_tst\\rust1\\src\\main.rs:7
467,965 &"No source file named C:\\\\Users\\\\okushnir\\\\Desktop\\\\workspace_tst\\\\rust1\\\\src\\\
\\main.rs.\n"
467,965 25^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="<PENDING>",pending=\
"C:\\\\Users\\\\okushnir\\\\Desktop\\\\workspace_tst\\\\rust1\\\\src\\\\main.rs:7",times="0",origina\
l-location="C:\\\\Users\\\\okushnir\\\\Desktop\\\\workspace_tst\\\\rust1\\\\src\\\\main.rs:7"}
467,965 (gdb) 
467,966 26-break-insert -t -f main
467,967 26^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x0000000000401dc8",\
at="<main+8>",thread-groups=["i1"],times="0",original-location="main"}
467,967 (gdb) 
467,970 27-exec-run --thread-group i1
467,975 =thread-group-started,id="i1",pid="2244"
467,976 28-list-thread-groups --available
467,976 =thread-created,id="1",group-id="i1"
467,976 ~"[New Thread 2244.0x5394]\n"
467,976 27^running
467,976 *running,thread-id="all"
467,976 (gdb) 
467,996 =library-loaded,id="/cygdrive/c/Windows/SYSTEM32/ntdll.dll",target-name="/cygdrive/c/Windows\
/SYSTEM32/ntdll.dll",host-name="/cygdrive/c/Windows/SYSTEM32/ntdll.dll",symbols-loaded="0",thread-gr\
oup="i1"
467,997 =library-loaded,id="/cygdrive/c/Windows/system32/kernel32.dll",target-name="/cygdrive/c/Wind\
ows/system32/kernel32.dll",host-name="/cygdrive/c/Windows/system32/kernel32.dll",symbols-loaded="0",\
thread-group="i1"
467,998 =library-loaded,id="/cygdrive/c/Windows/system32/KERNELBASE.dll",target-name="/cygdrive/c/Wi\
ndows/system32/KERNELBASE.dll",host-name="/cygdrive/c/Windows/system32/KERNELBASE.dll",symbols-loade\
d="0",thread-group="i1"
467,998 =library-loaded,id="/cygdrive/c/Windows/system32/ADVAPI32.dll",target-name="/cygdrive/c/Wind\
ows/system32/ADVAPI32.dll",host-name="/cygdrive/c/Windows/system32/ADVAPI32.dll",symbols-loaded="0",\
thread-group="i1"
467,998 =library-loaded,id="/cygdrive/c/Windows/system32/msvcrt.dll",target-name="/cygdrive/c/Window\
s/system32/msvcrt.dll",host-name="/cygdrive/c/Windows/system32/msvcrt.dll",symbols-loaded="0",thread\
-group="i1"
467,998 =library-loaded,id="/cygdrive/c/Windows/SYSTEM32/sechost.dll",target-name="/cygdrive/c/Windo\
ws/SYSTEM32/sechost.dll",host-name="/cygdrive/c/Windows/SYSTEM32/sechost.dll",symbols-loaded="0",thr\
ead-group="i1"
467,999 =library-loaded,id="/cygdrive/c/Windows/system32/RPCRT4.dll",target-name="/cygdrive/c/Window\
s/system32/RPCRT4.dll",host-name="/cygdrive/c/Windows/system32/RPCRT4.dll",symbols-loaded="0",thread\
-group="i1"
467,999 =library-loaded,id="/cygdrive/c/Windows/system32/SHELL32.dll",target-name="/cygdrive/c/Windo\
ws/system32/SHELL32.dll",host-name="/cygdrive/c/Windows/system32/SHELL32.dll",symbols-loaded="0",thr\
ead-group="i1"
467,999 =library-loaded,id="/cygdrive/c/Windows/system32/SHLWAPI.dll",target-name="/cygdrive/c/Windo\
ws/system32/SHLWAPI.dll",host-name="/cygdrive/c/Windows/system32/SHLWAPI.dll",symbols-loaded="0",thr\
ead-group="i1"
468,000 =library-loaded,id="/cygdrive/c/Windows/system32/GDI32.dll",target-name="/cygdrive/c/Windows\
/system32/GDI32.dll",host-name="/cygdrive/c/Windows/system32/GDI32.dll",symbols-loaded="0",thread-gr\
oup="i1"
468,000 =library-loaded,id="/cygdrive/c/Windows/system32/USER32.dll",target-name="/cygdrive/c/Window\
s/system32/USER32.dll",host-name="/cygdrive/c/Windows/system32/USER32.dll",symbols-loaded="0",thread\
-group="i1"
468,001 =library-loaded,id="/cygdrive/c/Windows/system32/LPK.dll",target-name="/cygdrive/c/Windows/s\
ystem32/LPK.dll",host-name="/cygdrive/c/Windows/system32/LPK.dll",symbols-loaded="0",thread-group="i\
1"
468,001 =library-loaded,id="/cygdrive/c/Windows/system32/USP10.dll",target-name="/cygdrive/c/Windows\
/system32/USP10.dll",host-name="/cygdrive/c/Windows/system32/USP10.dll",symbols-loaded="0",thread-gr\
oup="i1"
468,002 =library-loaded,id="/cygdrive/c/Windows/system32/USERENV.dll",target-name="/cygdrive/c/Windo\
ws/system32/USERENV.dll",host-name="/cygdrive/c/Windows/system32/USERENV.dll",symbols-loaded="0",thr\
ead-group="i1"
468,002 =library-loaded,id="/cygdrive/c/Windows/system32/profapi.dll",target-name="/cygdrive/c/Windo\
ws/system32/profapi.dll",host-name="/cygdrive/c/Windows/system32/profapi.dll",symbols-loaded="0",thr\
ead-group="i1"
468,002 =library-loaded,id="/cygdrive/c/Windows/system32/WS2_32.dll",target-name="/cygdrive/c/Window\
s/system32/WS2_32.dll",host-name="/cygdrive/c/Windows/system32/WS2_32.dll",symbols-loaded="0",thread\
-group="i1"
468,003 =library-loaded,id="/cygdrive/c/Windows/system32/NSI.dll",target-name="/cygdrive/c/Windows/s\
ystem32/NSI.dll",host-name="/cygdrive/c/Windows/system32/NSI.dll",symbols-loaded="0",thread-group="i\
1"
468,085 =library-loaded,id="/cygdrive/c/Windows/system32/IMM32.DLL",target-name="/cygdrive/c/Windows\
/system32/IMM32.DLL",host-name="/cygdrive/c/Windows/system32/IMM32.DLL",symbols-loaded="0",thread-gr\
oup="i1"
468,095 =library-loaded,id="/cygdrive/c/Windows/system32/MSCTF.dll",target-name="/cygdrive/c/Windows\
/system32/MSCTF.dll",host-name="/cygdrive/c/Windows/system32/MSCTF.dll",symbols-loaded="0",thread-gr\
oup="i1"
468,100 =breakpoint-modified,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x00000\
00000401dc8",at="<main+8>",thread-groups=["i1"],times="1",original-location="main"}
468,100 ~"\nTemporary breakpoint "
468,100 ~"2, 0x0000000000401dc8 in main ()\n"
468,100 *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x0000000000401dc8",func\
="main",args=[]},thread-id="1",stopped-threads="all"
468,100 =breakpoint-deleted,id="2"
468,100 (gdb) 
468,100 28^error,msg="Can not fetch data now."
468,100 (gdb) 

Failed to launch project

I'm following the instructions to set up and use RustDT. I successfully added RustDT to a clean Eclipse installation.

I just installed Rust, I don't know where it's actually located on my system. In the Rust Preferences, I set /usr/local as a Rust Installation Directory.

Rust Preferences

I created a project and a run configuration.

Run Configuration

The console indicates correctly the result of the build. However, when I hit 'Run', I get this error popup indicating:

Failed to create a child process.
Cannot run program "<...>/hello-world/src/main.rs" (in directory "<...>/hello-world"): error=13, Permission denied

I hope you can have a look at it. Please let me know if you need additional information

Installation details:

  • RustDT 0.1.0.v201502251513
  • rustc 1.0.0-nightly (199bdcfef 2015-03-26)
  • Eclipse Platform 4.4.2.M20150204-1700
  • Mac OS X 10.10.2

Here is the stacktrace appearing in the error logs

!ENTRY com.github.rustdt.ide.core 4 101 2015-03-28 11:24:15.178
!MESSAGE Failed to create a child process.
!STACK 0
java.io.IOException: Cannot run program "<...>/hello-world/src/main.rs" (in directory "<...>/hello-world"): error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
    at melnorme.lang.ide.launching.EclipseProcessLauncher.newSystemProcess(EclipseProcessLauncher.java:94)
    at melnorme.lang.ide.launching.EclipseProcessLauncher.launchProcess(EclipseProcessLauncher.java:79)
    at melnorme.lang.ide.launching.AbstractLangLaunchConfigurationDelegate.launchProcess(AbstractLangLaunchConfigurationDelegate.java:264)
    at melnorme.lang.ide.launching.AbstractLangLaunchConfigurationDelegate.launch(AbstractLangLaunchConfigurationDelegate.java:161)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:885)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:739)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1039)
    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1256)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.io.IOException: error=13, Permission denied
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:185)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
    ... 9 more

Highlight Cargo files

Currently the Cargo.{toml,lock} are displayed as plaintext without any syntax highlighting/coloring.

Please add support for some highlighting here.

unable to create run or debug configurations

Using RustDT 0.2.0.v201504232210

After creating a new rust project and pressing the "Run" or "Debug" button I get a message dialog that there is no configuration:

Unable To Launch
The selecton cannot be launched, and there are no recent launches.

Since RustDT is using cargo anyways it could just create a configuration just calling cargo run. For "Debug" it should start a debugger.

When I manually try to create a run configuration there is the field "Program path" where I should add an existing file. I have several problems with that:

  1. I cannot enter an absolute path e.g. to /usr/local/bin/cargo. Only project relative paths are allowed.
  2. It only accepts executable files. But I don't have executable files in my project (yet).

Auto-complete using Racer

Use this:

https://github.com/phildawes/racer

For installation:

cd racer; cargo build --release

Set the RUST_SRC_PATH env variable to point to the 'src' dir in your rust source installation

(e.g. % export RUST_SRC_PATH=/usr/local/src/rust/src )

Test on the command line:

./target/release/racer complete std::io::B (should show some completions)

Basically, is almost the same as using dcd for DDT.

Hey, congratulations and kudos!

Content Assist not function

I have installed 0.2.0.v201504232210

set these config:
Directory: E:\Rust
Rust 'src' Directory: E:\rustc-nightly
Executable: E:\racer.exe

When I type 'std' '::' or anything, no Content Assist displayed. But I can use F3 to jump to the code declare.

When build the project, eclipse often blocked at Building Workspace: (0%) (Build all... Invoking 'Rust builder' on '/Project'.),any other operation can't contiune include exit eclipse(I have to kill the eclipse executable)


Edit:
Content Assist can now displayed with 'Alt + /'

May I suggest RustDT add function to display Content Assist when click any key?

PATH of external tools bungled if original PATH not set (Windows)

I've encountered the following issue (Windows-only?): instead of passing the system PATH value to cargo for building, RustDT passes two variables:

PATH=null;H:\devel\rust1.0\bin
Path=#the real stuff#

Trying to figure out what causes the bug, I arrived at the method: melnorme.lang.utils.ProcessUtils.addDirToPathEnv()

Assuming at the entry point of this method the environment variable is called "Path" and not "PATH", executing the method would result in the observed behavior. I have confirmed this as follows: I substituted racer.exe executable for an exetutable that prints the environment variables. When run by RustDT, it shows Path=#the real stuff# (and when run outside, it shows PATH as expected).

Now the puzzling part is how exactly "PATH" gets transformed into "Path" inside Eclipse. I have not been able to figure this out. Trying to reproduce it with a test Java program outside of Eclipse doesn't show this behavior (it shows PATH, not Path). Here is the program: https://gist.github.com/kirillkh/9b9d432c591712378086

Don't show error dialog when Racer fails

With the latest version, Racer is automatically run by default. When Racer returns an error, a message dialog pops up. When this does happen, it tends to happen a lot. Beyond that, even though there probably is an issue with Racer (in my case it's telling me MATCHSTR is empty - waddup?), it mostly just gets in the way of my development.

I guess I think it would be a good idea to simply suppress the message box. If it is necessary to communicate a Racer error to the developer, maybe a better idea is to put focus on the Racer Console. That way you see the problem instead of just clicking away an irritating message box.

Feature Request : Allow selecting different directories for Rust and Cargo

Currently when I attempt to configure RustDT it asks for the Rust installation directory. When I specify it, it complains that it cannot find Cargo, but I do not have a seperate box to point it to Cargo.

I'm on an Ubuntu-based distro and using a 3rd party PPA to update my rust executable - unfortunately that PPA doesn't come with Cargo which I had to get separately from a different PPA.

In other words, they're not in the same directory on my current setup, making me unable to configure RustDT without changing everything around.

feature request: support `cargo test`

to run cargo test you need to add an external tool and give it the exact path to cargo.exe. It would be very comfortable to have a Rust Test target that can be created like an Rust Application target.

Build operation freezes/blocks for a long time.

QUOTING @sbant

For the build problem
My code already built, then I type a 'space' and then 'Ctrl+s' 'Ctrl+b' to build it.

the Console display:
************ Building Rust workspace ************
------- Building Rust project: MarketData -------

Running: E:\Rust\bin\cargo.exe build

Compiling MarketData v0.0.1 (file:///Z:/MarketData)

...
compiler outputs

...

^^^ Terminated, exit code: 0 ^^^

The Building Workspace window is display like:
Building all...
Invoking 'Rust builder' on '/Project'.

the Eclipse consume 100% cpu in one core, and memory usage growing at the same time.
Then other operation must wait the block disappear.

I can't even Cancel the Building Workspace.
When I clicked 'Cancel' button,
the Details display:
Building Workspace (Cancel Requested)
Building all...: Invoking 'Rust builder' on '/Project'.

What only I can do is wait...

After about one minute, then the Console display:
************ Build terminated. ************

Then the block stopped, other operation can contiune

Racer fails with spaces in path

If the project is in a path that contains a space, calling racer fails. The path to the file to be completed should be quoted.

Add autocompletion for attributes

No ideas, how to do this, but if you can show me how to manage this i can try to add this kind of autocompletion. For such code as
#[allow(dead_code)]
for example.

Verbose build output option

Is there some way to configure the build output to be verbose?

====================  Starting Rust build  ====================
************  Building Rust project: SPOJ  ************
>> Running: C:\Program Files\Rust stable 1.1\bin\cargo.exe build
Build failed, waiting for other jobs to finish...
An unknown error occurred

To learn more, run the command again with --verbose.
  ^^^ Terminated, exit code: 101 ^^^
************  Build terminated.  ************

git HEAD is throwing an exception and does not open the editor


STATUS

pluginId: org.eclipse.ui.workbench.texteditor
pluginVersion: 3.9.100.v20141023-1946
code: 0
severity: 4
message: HIDDEN
fingerprint: e47e7207

Exception:java.lang.NoSuchMethodError: HIDDEN
at HIDDEN.HIDDEN(HIDDEN:-1)
at HIDDEN.HIDDEN(HIDDEN:-1)
at HIDDEN.HIDDEN(HIDDEN:-1)
at HIDDEN.HIDDEN(HIDDEN:-1)
at org.eclipse.ui.texteditor.AbstractTextEditor$19.run(AbstractTextEditor.java:3220)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:463)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:371)
at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:2138)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2134)
at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3238)
at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3265)
at org.eclipse.ui.internal.EditorReference.initialize(EditorReference.java:366)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:313)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:888)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:869)
at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:120)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:337)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:258)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:128)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:96)
at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:4634)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:212)
at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:85)
at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171)
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:488)
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:454)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:715)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:393)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1151)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3185)
at org.eclipse.ui.internal.WorkbenchPage.access$24(WorkbenchPage.java:3100)
at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.java:3082)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3077)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3041)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3031)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:541)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:500)
at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileAction.java:100)
at org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystemEditorAction.java:100)
at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:229)
at org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191)
at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)
at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:854)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:851)
at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1168)
at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:449)
at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1275)
at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278)
at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4480)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1413)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3818)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3428)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:648)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:592)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)

Feature request: Quick fix: Create Method

This is something that works in JDT and CDT, and as Rust uses local type inference, it's a massively useful feature.

If you don't know how it works, let's suppose we have a piece of code:

fn main() {
    let mut x = some_func(..);
    let y : u32 = ..;
    ...
    let z = x.my_fun(Some(y), true); // โ† cursor is on this line, the method my_fun doesn't exist

}

Hitting Ctrl-1 (Quick Fix) would then contain a "Create Method" item, which would infer the argument types (and whether it's a self-bound or free method) and create a method stub, like:

fn my_fun(&mut self, y: Option<u32>, b: bool) -> ! {
    unimplemented(); // TODO
}

Note I used a "!" for a return type that cannot be inferred, as we have no type information on z in main(). Also note that I have copied the mut from x to self, because we can have a mutable self โ€“ we may want to make this configurable; I can foresee people wanting to default to immutable borrow here.

One complication arise from the fact that Rust has traits: From the type, it may not be obvious where to put the method: in an inherent impl or in any implemented trait in scope. It may be best to let the user choose.

Finally, it would be massively useful to make some type replacements, e.g. replace Vecs with slices, many concrete types with Into<_> types, etc. (though this could also be another quick fix).

Build-log: Click to go to error/warning

Make it possible to click on an entry in the buildlog to ge to the corresponding file and line.

edit
Also different colors for different log-levels would be a good thing. Currently everything is written in red, from a notice up to an error. Maybe use the same colors as rust uses them in terminal? Some green for notices, yellow for warnings and red for errors.

Search in preferences does not work.

The preference search does not seem to work for rustdt. If I search for "tab" the "tab policy" in Rust->Editor->Typing does not show up.

Is somebody else experiencing that?

Unknown line format: - Could not match expr node

While editing code, I got this message box, and its contents are:

Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(path(vec), [TtToken(Span { lo: BytePos(31), hi: BytePos(42), expn_id: ExpnId(4294967295) }, Ident(Philosopher#0, ModName)), TtToken(Span { lo: BytePos(42), hi: BytePos(44), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(44), hi: BytePos(47), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(47), hi: BytePos(65), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(47), hi: BytePos(48), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(48), hi: BytePos(64), expn_id: ExpnId(4294967295) }, Literal(Str_(" "(65)), None))], close_span: Span { lo: BytePos(64), hi: BytePos(65), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(65), hi: BytePos(66), expn_id: ExpnId(4294967295) }, Comma), TtToken(Span { lo: BytePos(73), hi: BytePos(84), expn_id: ExpnId(4294967295) }, Ident(Philosopher#0, ModName)), TtToken(Span { lo: BytePos(84), hi: BytePos(86), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(86), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(90), hi: BytePos(106), expn_id: ExpnId(4294967295) }, Literal(Str_(" "(65)), None))], close_span: Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(107), hi: BytePos(108), expn_id: ExpnId(4294967295) }, Comma), TtToken(Span { lo: BytePos(115), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(Philosopher#0, ModName)), TtToken(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(128), hi: BytePos(131), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(131), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(131), hi: BytePos(132), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(132), hi: BytePos(143), expn_id: ExpnId(4294967295) }, Literal(Str_(" "(66)), None))], close_span: Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(144), hi: BytePos(145), expn_id: ExpnId(4294967295) }, Comma), TtToken(Span { lo: BytePos(152), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(Philosopher#0, ModName)), TtToken(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(165), hi: BytePos(168), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(168), hi: BytePos(191), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(168), hi: BytePos(169), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(169), hi: BytePos(190), expn_id: ExpnId(4294967295) }, Literal(Str_(" "(67)), None))], close_span: Span { lo: BytePos(190), hi: BytePos(191), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(191), hi: BytePos(192), expn_id: ExpnId(4294967295) }, Comma), TtToken(Span { lo: BytePos(199), hi: BytePos(210), expn_id: ExpnId(4294967295) }, Ident(Philosopher#0, ModName)), TtToken(Span { lo: BytePos(210), hi: BytePos(212), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(212), hi: BytePos(215), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(215), hi: BytePos(234), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(215), hi: BytePos(216), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(216), hi: BytePos(233), expn_id: ExpnId(4294967295) }, Literal(Str_(" "(68)), None))], close_span: Span { lo: BytePos(233), hi: BytePos(234), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(19), hi: BytePos(238), expn_id: ExpnId(4294967295) } }, Bracket)

The rust source contents was:

use std::thread;
struct Philosopher { name : String }
impl Philosopher {
    fn new(name: &str) -> Philosopher {
        Philosopher { name: name.to_string() }
    }
    fn eat(&self) {
        println!("{} started eating.", self.name);
        thread::sleep_ms(1000);
        println!("{} is done eating.", self.name);
    }
}

fn main()
{
    let philosephers = vec![
        Philosopher::new("Baruch Spinoza"),
        Philosopher::new("Gilles Deleuze"),
        Philosopher::new("Karl Marx"),
        Philosopher::new("Friedrich Nietzsche"),
        Philosopher::new("Michel Foucault")
    ];

    let thread_handles: Vec<_> = philosephers.into_iter().

    for p in &philosephers {
        p.eat();
    }
}

The editing was begin done on the line containing:

let thread_handles: Vec<_> = philosephers.into_iter().

Feature: find module symbols by name, with an Open dialog

The Ctrl+Shift+R shortcut in eclipse allows you to find files. However, with Rust, a lot of files are named mod.rs. I'm not sure whether this is possible, but it would be very useful if these were differentiated in some way. E.g. if a file is named mod1/mod.rs, that typing mod1 would also match that file.

Autocompletion broken on std::process::Child

I am using RustDT 0.2.0.

From my error log:

!SESSION 2015-05-29 12:10:19.175 -----------------------------------------------
eclipse.buildId=4.4.2.Z20150513-1759
java.version=1.8.0_45
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 12:45:55.041
!MESSAGE Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(Path { span: Span { lo: BytePos(23), hi: BytePos(26), expn_id: ExpnId(4294967295) }, global: false, segments: [PathSegment { identifier: try#0, parameters: AngleBracketedParameters(AngleBracketedParameterData { lifetimes: [], types: [], bindings: [] }) }] }, [TtToken(Span { lo: BytePos(28), hi: BytePos(35), expn_id: ExpnId(4294967295) }, Ident(Command#0, ModName)), TtToken(Span { lo: BytePos(35), hi: BytePos(37), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(37), hi: BytePos(40), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(40), hi: BytePos(53), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(40), hi: BytePos(41), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(41), hi: BytePos(52), expn_id: ExpnId(4294967295) }, Literal(Str_("         "(77)), None))], close_span: Span { lo: BytePos(52), hi: BytePos(53), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(70), hi: BytePos(71), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(71), hi: BytePos(76), expn_id: ExpnId(4294967295) }, Ident(stdin#0, Plain)), TtDelimited(Span { lo: BytePos(76), hi: BytePos(92), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(76), hi: BytePos(77), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(77), hi: BytePos(82), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(82), hi: BytePos(84), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(84), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(91), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(90), hi: BytePos(91), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(91), hi: BytePos(92), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(107), hi: BytePos(113), expn_id: ExpnId(4294967295) }, Ident(stdout#0, Plain)), TtDelimited(Span { lo: BytePos(113), hi: BytePos(129), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(113), hi: BytePos(114), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(114), hi: BytePos(119), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(119), hi: BytePos(121), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(121), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(126), hi: BytePos(127), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(127), hi: BytePos(128), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(128), hi: BytePos(129), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(144), hi: BytePos(150), expn_id: ExpnId(4294967295) }, Ident(stderr#0, Plain)), TtDelimited(Span { lo: BytePos(150), hi: BytePos(166), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(150), hi: BytePos(151), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(151), hi: BytePos(156), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(156), hi: BytePos(158), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(158), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(163), hi: BytePos(164), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(164), hi: BytePos(165), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(165), hi: BytePos(166), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(180), hi: BytePos(181), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(181), hi: BytePos(186), expn_id: ExpnId(4294967295) }, Ident(spawn#0, Plain)), TtDelimited(Span { lo: BytePos(186), hi: BytePos(188), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(186), hi: BytePos(187), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(187), hi: BytePos(188), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(23), hi: BytePos(189), expn_id: ExpnId(4294967295) } })

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 12:46:57.356
!MESSAGE Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(Path { span: Span { lo: BytePos(23), hi: BytePos(26), expn_id: ExpnId(4294967295) }, global: false, segments: [PathSegment { identifier: try#0, parameters: AngleBracketedParameters(AngleBracketedParameterData { lifetimes: [], types: [], bindings: [] }) }] }, [TtToken(Span { lo: BytePos(28), hi: BytePos(35), expn_id: ExpnId(4294967295) }, Ident(Command#0, ModName)), TtToken(Span { lo: BytePos(35), hi: BytePos(37), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(37), hi: BytePos(40), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(40), hi: BytePos(53), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(40), hi: BytePos(41), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(41), hi: BytePos(52), expn_id: ExpnId(4294967295) }, Literal(Str_("         "(78)), None))], close_span: Span { lo: BytePos(52), hi: BytePos(53), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(70), hi: BytePos(71), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(71), hi: BytePos(76), expn_id: ExpnId(4294967295) }, Ident(stdin#0, Plain)), TtDelimited(Span { lo: BytePos(76), hi: BytePos(92), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(76), hi: BytePos(77), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(77), hi: BytePos(82), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(82), hi: BytePos(84), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(84), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(91), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(90), hi: BytePos(91), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(91), hi: BytePos(92), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(107), hi: BytePos(113), expn_id: ExpnId(4294967295) }, Ident(stdout#0, Plain)), TtDelimited(Span { lo: BytePos(113), hi: BytePos(129), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(113), hi: BytePos(114), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(114), hi: BytePos(119), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(119), hi: BytePos(121), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(121), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(126), hi: BytePos(127), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(127), hi: BytePos(128), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(128), hi: BytePos(129), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(144), hi: BytePos(150), expn_id: ExpnId(4294967295) }, Ident(stderr#0, Plain)), TtDelimited(Span { lo: BytePos(150), hi: BytePos(166), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(150), hi: BytePos(151), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(151), hi: BytePos(156), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(156), hi: BytePos(158), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(158), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(163), hi: BytePos(164), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(164), hi: BytePos(165), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(165), hi: BytePos(166), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(180), hi: BytePos(181), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(181), hi: BytePos(186), expn_id: ExpnId(4294967295) }, Ident(spawn#0, Plain)), TtDelimited(Span { lo: BytePos(186), hi: BytePos(188), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(186), hi: BytePos(187), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(187), hi: BytePos(188), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(23), hi: BytePos(189), expn_id: ExpnId(4294967295) } })

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 12:47:02.700
!MESSAGE Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(Path { span: Span { lo: BytePos(23), hi: BytePos(26), expn_id: ExpnId(4294967295) }, global: false, segments: [PathSegment { identifier: try#0, parameters: AngleBracketedParameters(AngleBracketedParameterData { lifetimes: [], types: [], bindings: [] }) }] }, [TtToken(Span { lo: BytePos(28), hi: BytePos(35), expn_id: ExpnId(4294967295) }, Ident(Command#0, ModName)), TtToken(Span { lo: BytePos(35), hi: BytePos(37), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(37), hi: BytePos(40), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(40), hi: BytePos(53), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(40), hi: BytePos(41), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(41), hi: BytePos(52), expn_id: ExpnId(4294967295) }, Literal(Str_("         "(78)), None))], close_span: Span { lo: BytePos(52), hi: BytePos(53), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(70), hi: BytePos(71), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(71), hi: BytePos(76), expn_id: ExpnId(4294967295) }, Ident(stdin#0, Plain)), TtDelimited(Span { lo: BytePos(76), hi: BytePos(92), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(76), hi: BytePos(77), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(77), hi: BytePos(82), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(82), hi: BytePos(84), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(84), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(91), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(90), hi: BytePos(91), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(91), hi: BytePos(92), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(107), hi: BytePos(113), expn_id: ExpnId(4294967295) }, Ident(stdout#0, Plain)), TtDelimited(Span { lo: BytePos(113), hi: BytePos(129), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(113), hi: BytePos(114), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(114), hi: BytePos(119), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(119), hi: BytePos(121), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(121), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(126), hi: BytePos(127), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(127), hi: BytePos(128), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(128), hi: BytePos(129), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(144), hi: BytePos(150), expn_id: ExpnId(4294967295) }, Ident(stderr#0, Plain)), TtDelimited(Span { lo: BytePos(150), hi: BytePos(166), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(150), hi: BytePos(151), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(151), hi: BytePos(156), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(156), hi: BytePos(158), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(158), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(163), hi: BytePos(164), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(164), hi: BytePos(165), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(165), hi: BytePos(166), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(180), hi: BytePos(181), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(181), hi: BytePos(186), expn_id: ExpnId(4294967295) }, Ident(spawn#0, Plain)), TtDelimited(Span { lo: BytePos(186), hi: BytePos(188), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(186), hi: BytePos(187), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(187), hi: BytePos(188), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(23), hi: BytePos(189), expn_id: ExpnId(4294967295) } })

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 12:47:06.321
!MESSAGE Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(Path { span: Span { lo: BytePos(23), hi: BytePos(26), expn_id: ExpnId(4294967295) }, global: false, segments: [PathSegment { identifier: try#0, parameters: AngleBracketedParameters(AngleBracketedParameterData { lifetimes: [], types: [], bindings: [] }) }] }, [TtToken(Span { lo: BytePos(28), hi: BytePos(35), expn_id: ExpnId(4294967295) }, Ident(Command#0, ModName)), TtToken(Span { lo: BytePos(35), hi: BytePos(37), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(37), hi: BytePos(40), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(40), hi: BytePos(53), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(40), hi: BytePos(41), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(41), hi: BytePos(52), expn_id: ExpnId(4294967295) }, Literal(Str_("         "(78)), None))], close_span: Span { lo: BytePos(52), hi: BytePos(53), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(70), hi: BytePos(71), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(71), hi: BytePos(76), expn_id: ExpnId(4294967295) }, Ident(stdin#0, Plain)), TtDelimited(Span { lo: BytePos(76), hi: BytePos(92), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(76), hi: BytePos(77), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(77), hi: BytePos(82), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(82), hi: BytePos(84), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(84), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(91), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(90), hi: BytePos(91), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(91), hi: BytePos(92), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(107), hi: BytePos(113), expn_id: ExpnId(4294967295) }, Ident(stdout#0, Plain)), TtDelimited(Span { lo: BytePos(113), hi: BytePos(129), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(113), hi: BytePos(114), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(114), hi: BytePos(119), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(119), hi: BytePos(121), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(121), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(126), hi: BytePos(127), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(127), hi: BytePos(128), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(128), hi: BytePos(129), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(144), hi: BytePos(150), expn_id: ExpnId(4294967295) }, Ident(stderr#0, Plain)), TtDelimited(Span { lo: BytePos(150), hi: BytePos(166), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(150), hi: BytePos(151), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(151), hi: BytePos(156), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(156), hi: BytePos(158), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(158), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(163), hi: BytePos(164), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(164), hi: BytePos(165), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(165), hi: BytePos(166), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(180), hi: BytePos(181), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(181), hi: BytePos(186), expn_id: ExpnId(4294967295) }, Ident(spawn#0, Plain)), TtDelimited(Span { lo: BytePos(186), hi: BytePos(188), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(186), hi: BytePos(187), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(187), hi: BytePos(188), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(23), hi: BytePos(189), expn_id: ExpnId(4294967295) } })

!ENTRY com.github.rustdt.ide.core 4 0 2015-05-29 12:47:14.892
!MESSAGE Unknown line format: - Could not match expr node type: ExprMac(Spanned { node: MacInvocTT(Path { span: Span { lo: BytePos(23), hi: BytePos(26), expn_id: ExpnId(4294967295) }, global: false, segments: [PathSegment { identifier: try#0, parameters: AngleBracketedParameters(AngleBracketedParameterData { lifetimes: [], types: [], bindings: [] }) }] }, [TtToken(Span { lo: BytePos(28), hi: BytePos(35), expn_id: ExpnId(4294967295) }, Ident(Command#0, ModName)), TtToken(Span { lo: BytePos(35), hi: BytePos(37), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(37), hi: BytePos(40), expn_id: ExpnId(4294967295) }, Ident(new#0, Plain)), TtDelimited(Span { lo: BytePos(40), hi: BytePos(53), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(40), hi: BytePos(41), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(41), hi: BytePos(52), expn_id: ExpnId(4294967295) }, Literal(Str_("         "(78)), None))], close_span: Span { lo: BytePos(52), hi: BytePos(53), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(70), hi: BytePos(71), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(71), hi: BytePos(76), expn_id: ExpnId(4294967295) }, Ident(stdin#0, Plain)), TtDelimited(Span { lo: BytePos(76), hi: BytePos(92), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(76), hi: BytePos(77), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(77), hi: BytePos(82), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(82), hi: BytePos(84), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(84), hi: BytePos(89), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(89), hi: BytePos(91), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(89), hi: BytePos(90), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(90), hi: BytePos(91), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(91), hi: BytePos(92), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(106), hi: BytePos(107), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(107), hi: BytePos(113), expn_id: ExpnId(4294967295) }, Ident(stdout#0, Plain)), TtDelimited(Span { lo: BytePos(113), hi: BytePos(129), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(113), hi: BytePos(114), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(114), hi: BytePos(119), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(119), hi: BytePos(121), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(121), hi: BytePos(126), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(126), hi: BytePos(128), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(126), hi: BytePos(127), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(127), hi: BytePos(128), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(128), hi: BytePos(129), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(143), hi: BytePos(144), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(144), hi: BytePos(150), expn_id: ExpnId(4294967295) }, Ident(stderr#0, Plain)), TtDelimited(Span { lo: BytePos(150), hi: BytePos(166), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(150), hi: BytePos(151), expn_id: ExpnId(4294967295) }, tts: [TtToken(Span { lo: BytePos(151), hi: BytePos(156), expn_id: ExpnId(4294967295) }, Ident(Stdio#0, ModName)), TtToken(Span { lo: BytePos(156), hi: BytePos(158), expn_id: ExpnId(4294967295) }, ModSep), TtToken(Span { lo: BytePos(158), hi: BytePos(163), expn_id: ExpnId(4294967295) }, Ident(piped#0, Plain)), TtDelimited(Span { lo: BytePos(163), hi: BytePos(165), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(163), hi: BytePos(164), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(164), hi: BytePos(165), expn_id: ExpnId(4294967295) } })], close_span: Span { lo: BytePos(165), hi: BytePos(166), expn_id: ExpnId(4294967295) } }), TtToken(Span { lo: BytePos(180), hi: BytePos(181), expn_id: ExpnId(4294967295) }, Dot), TtToken(Span { lo: BytePos(181), hi: BytePos(186), expn_id: ExpnId(4294967295) }, Ident(spawn#0, Plain)), TtDelimited(Span { lo: BytePos(186), hi: BytePos(188), expn_id: ExpnId(4294967295) }, Delimited { delim: Paren, open_span: Span { lo: BytePos(186), hi: BytePos(187), expn_id: ExpnId(4294967295) }, tts: [], close_span: Span { lo: BytePos(187), hi: BytePos(188), expn_id: ExpnId(4294967295) } })], 0), span: Span { lo: BytePos(23), hi: BytePos(189), expn_id: ExpnId(4294967295) } })

I can reproduce this by creating a std::process::Child object and trying to auto-complete a function on it.

Cannot use debug under ubuntu, gdb: unrecognized option '-iex'

Hello,Bruno. I was trying to debug my rust application, after i clicked the debug button(or debug as ...), I got below error messages. (However, I can debug my c/c++ project without any issue and also i can run my rust application)

Error in services launch sequence
gdb: unrecognized option '-iex'

selection_068

I checked my debugger settings, it's the same as the screen shot in the user guide.

Also could you help me understanding this note?

Note that for debugging to work, the program must be compiled with debug symbols information, and those debug symbols must be on a format that GDB understands. Otherwise you will get GDB error messages such "(no debugging symbols found)" or "file format not recognized".

I am quite new to Rust and GDB. Could you give an example on this. Thanks.

Set Target Platform

In the Readme, under the heading Setting up the development environment, it explains Setup the target platform: Open the target platform file: releng/target-platform/IDE.target and set it as your target platform.

I do not understand how to do this. How do you "set it as your target platform" after you open the IDE.target file? Is this an option in the Eclipse Preferences menu somewhere?

Feature Request: Display Inferred Types to the User

Its often pretty useful to see what the type of an inferred variable or expression is, particularly when reading someone else's code. It would be nice if RustDT could show the types to the user, e.g. when the user mouses over a variable/expression or clicks on it and selects F2.

Can't build project (Could not execute process `rustc -vV` (never executed))

Hello!
I am having a problem on build:

************  Building Rust workspace  ************
-------   Building Rust project: krpc-rs  -------
>> Running: /usr/local/bin/cargo build
Could not execute process `rustc -vV` (never executed)

Caused by:
  No such file or directory (os error 2)
  ^^^ Terminated, exit code: 101 ^^^
************  Build terminated.  ************

I think cargo can't see rustc, which is strange, because they are in the same directory.
Any ideas on how fix this? ๐Ÿ˜ž

question: parser

Hi,

where can i find the rust lang lexer and parser implemented?

Thanks,

Preferences page "Rust" unclear

The preferences page "Rust" is unclear: I don't know which directories to choose for "Directory" or "Rust 'src' Directory".

"Rust 'src' Directory" reveals (after writing a path into it) that it wants something where a directory named libcore resides. Problem: There is no such directory installed by the rust installer. There only is a libcore-4e7c5e5c.rlib file (archive) in /usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib and /usr/local/lib/rustlib/i686-unknown-linux-gnu/lib.

Also it would be quite nice to auto-search for those directories as "Java" โ†’ "Installed JREs" does.

Using RustDT 0.2.0.v201504232210

RustDT installation documentation is confusing

The installation section of documentation is confusing (that ate 30 mins of my time, cause I had to google), because

  1. It does not tell me that I have to separately download rustd sources to make racer work, so I expected them to be somewhere after installing Linux binaries of rust language.
  2. It does not tell me all the things I should put in my Rust preferences
  3. Part of installation text is moved to user_guide that looks strange
  4. No words about what I should add to program path in my run configuration
  5. Why cannot it look at system path and try to extract RUST path variables so users should not add them manually?

No editor problem underlining for macro expansion errors.

Using RustDT 0.2.0, no error messages.

When I write code with errors in macros, RustDT won't highlight the macro usage in red, just the macro definition. Take e.g.

fn main() {
    try!(5);
}

When saving and compiling I get this output

-------   Building Rust project: test  -------
>> Running: /usr/local/bin/cargo build
   Compiling hello_world v0.0.1 (file:///path/to/project/projectname/src/test)
<std macros>:3:1: 3:39 error: mismatched types:
 expected `_`,
    found `core::result::Result<_, _>`
(expected integral variable,
    found enum `core::result::Result`) [E0308]
<std macros>:3 $ crate:: result:: Result:: Ok ( val ) => val , $ crate:: result:: Result::
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<std macros>:1:1: 6:48 note: in expansion of try!
src/main.rs:2:5: 2:13 note: expansion site
<std macros>:3:1: 3:39 help: run `rustc --explain E0308` to see a detailed explanation
<std macros>:3:49: 4:12 error: mismatched types:
 expected `_`,
    found `core::result::Result<_, _>`
(expected integral variable,
    found enum `core::result::Result`) [E0308]
<std macros>:3 $ crate:: result:: Result:: Ok ( val ) => val , $ crate:: result:: Result::
<std macros>:4 Err ( err ) => {
<std macros>:1:1: 6:48 note: in expansion of try!
src/main.rs:2:5: 2:13 note: expansion site
<std macros>:3:49: 4:12 help: run `rustc --explain E0308` to see a detailed explanation
<std macros>:5:8: 6:42 error: mismatched types:
 expected `()`,
    found `core::result::Result<_, _>`
(expected (),
    found enum `core::result::Result`) [E0308]
<std macros>:5 return $ crate:: result:: Result:: Err (
<std macros>:6 $ crate:: convert:: From:: from ( err ) ) } } )
<std macros>:1:1: 6:48 note: in expansion of try!
src/main.rs:2:5: 2:13 note: expansion site
<std macros>:5:8: 6:42 help: run `rustc --explain E0308` to see a detailed explanation
error: aborting due to 3 previous errors
Could not compile `hello_world`.

To learn more, run the command again with --verbose.
  ^^^ Terminated, exit code: 101 ^^^
************  Build terminated.  ************

The source code line 2 does not get highlighted.

Failed to install on mac osx

An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase.
session context was:(profile=SDKProfile, phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust, operand=, action=).
Error reading signed content.
error in opening zip file

No source available for "main() at 0x4090d8

On launch of debug mode a new tab showing No source available for "main() at 0x4090d8 was opened:

The solution was to uncheck Stop on startup at under the Debug configuration settings:

#[] with '\' is not properly handled.

File: rust/src/libcore/fmt/mod.rs

#[rustc_on_unimplemented = "`{Self}` cannot be formatted using `:?`; if it is \
                            defined in your crate, add `#[derive(Debug)]` or \
                            manually implement it"]

This code make everything below green.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.