Commit Graph

96349 Commits

Author SHA1 Message Date
lqd
6fe52928a3 Bless output of test borrowck/borrowck-escaping-closure-error-2.rs for Polonius 2019-07-22 10:32:40 +02:00
lqd
292d5c18c9 Bless output of test generator/ref-escapes-but-not-over-yield.rs for Polonius 2019-07-22 10:32:40 +02:00
lqd
c5a1bc1e5c Bless output of test nll/get_default.rs for Polonius
2 of the 3 errors are "fixed by Polonius" 🎉
2019-07-22 10:32:39 +02:00
lqd
6a7c15ed25 Bless output of test consts/promote_const_let.rs for Polonius 2019-07-22 10:32:39 +02:00
lqd
94101046ff Bless output of test nll/loan_ends_mid_block_pair.rs for Polonius 2019-07-22 10:32:39 +02:00
lqd
2824db1388 Bless output of test save-analysis/emit-notifications.rs for Polonius 2019-07-22 10:32:39 +02:00
lqd
ff350f8efa Bless output of test ui/emit-artifact-notifications.rs for Polonius 2019-07-22 10:32:38 +02:00
lqd
51c15fae61 Ignore test issue-45696-scribble-on-boxed-borrow.rs in Polonius compare mode
Once again, the difference is in the test construction, it is ignored in compare-mode NLL and tested manually with revisions, and fails because the `migrate` revision is ran with `-Zpolonius`. There is no actual difference in the errors output by NLLs and Polonius.
2019-07-22 10:32:38 +02:00
lqd
63c837ef8d Ignore feature-gate-nll.rs in Polonius compare mode
This is a test about turning the NLL feature gate on, ignored by the NLL compare-mode.
2019-07-22 10:32:37 +02:00
lqd
273bfd43c1 Ignore two-phase-reservation-sharing-interference-2.rs in Polonius compare mode
This is just a difference from the test construction, it's ignore-compare-mode-nll and manually checks migrate/nll over edition2015/2018.

This failure is because the `migrate2015` and `migrate2018`  revisions are ran with `-Zpolonius`. There is no actual difference in the errors output by NLLs and Polonius.
2019-07-22 10:32:37 +02:00
lqd
d4ca9a349c Ignore test issue-45983 in the polonius compare mode
There is no difference between the NLL and Polonius outputs, and it manually tests NLLs.
2019-07-22 10:32:37 +02:00
lqd
c442dae5b8 Ignore NLL migrate mode test in the Polonius compare-mode
This is test specific to the NLL migrate mode which is irrelevant to -Z polonius.
It can't currently be encoded depending on migrate-mode and NLL/Polonius mode, so the NLL compare-mode also ignores it.
2019-07-22 10:32:36 +02:00
bors
273f42b596 Auto merge of #62856 - pietroalbini:fix-awscli, r=Mark-Simulacrum
ci: pin awscli dependencies

docutils 0.15, a dependency of awscli, broke our CI since it's not compatible with Python 2 due to a bug. This pins all the dependencies of awscli with docutils 0.14, to make sure this kind of regressions doesn't happen again.

r? @Mark-Simulacrum @alexcrichton
2019-07-21 18:59:36 +00:00
Pietro Albini
ace3684286
ci: pin awscli dependencies
docutils 0.15, a dependency of awscli, broke our CI since it's not
compatible with Python 2 due to a bug. This pins all the dependencies of
awscli with docutils 0.14, to make sure this kind of regressions doesn't
happen again.
2019-07-21 20:56:08 +02:00
bors
83dfe7b27c Auto merge of #59706 - matklad:the-essence-of-lexer, r=petrochenkov
The essence of lexer

cc @eddyb

I would love to make a reusable library to lex rust code, which could be used by rustc, rust-analyzer, proc-macros, etc. This **draft** PR is my attempt at the API. Currently, the PR uses new lexer to lex comments and shebang, while using the old lexer for everything else. This should be enough to agree on the API though!

### High-level picture

An `rust_lexer` crate is introduced, with zero or minimal (for XID_Start and other unicode) dependencies. This crate basically exposes a single function: `next_token(&str) -> (TokenKind, usize)` which returns the first token of a non-empty string (`usize` is the length of the token). The main goal of the API is to be minimal. Non-strictly essential concerns, like string interning, are left to the clients.

### Finer Points

#### Iterator API

We probably should expose a convenience function `fn tokenize(&str) -> impl Iterator<Item = Token>`

EDIT: I've added `tokenize`

#### Error handling

The lexer itself provides only minimal amount of error detection and reporting. Additionally, it never fatal-errors and always produces some non-empty token. Examples of errors detected by the lexer:

* unterminated block comment
* unterminated string literals

Example of errors **not** detected by the lexer:

* invalid escape sequence in a string literal
* out of range integer literal
* bare `\r` in the doc comment.

The idea is that the clients are responsible for additional validation of tokens. This is the mode IDE operates in: you want to skip validation for library files, because you are not showing errors there anyway, and for user-code, you want to do a deep validation with quick fixes and suggestions, which is not really fit for the lexer itself.

In particular, in this PR unclosed `/*` comment is handled by the new lexer, bare `\r` and distinction between doc and non-doc comments is handled by the old lexer.

#### Performance

No attempt at performance measurement is made so far :) I think it is acceptable to regress perf here a bit in exchange for cleaner code, and I hope that regression wouldn't be too costly. In particular, because we validate tokens separately, we'll have to do one more pass for some of the tokens. I hope this is not a prohibitive cost. For example, for doc comments we already do two passes (lexing + interning), so adding a third one shouldn't be that much slower (and we also do an additional pass for utf-8 validation). And lexing is hopefully not a bottleneck. Note that for IDEs separate validation might actually improve performance, because we will be able to skip validation when, for example, computing completions.

Long term, I hope that this approach will allow for *better* performance. If we separate pure lexing, in the future we can code-gen super-optimizes state machine that walks utf-8 directly, instead of current manual char-by-char toil.

#### Cursor API

For implementation, I am going slightly unconventionally. Instead of defining a `Lexer` struct with a bunch of helper methods (`current`, `bump`) and a bunch of lexing methods (`lex_comment`, `lex_whitespace`), I define a `Cursor` struct which has only helpers, and define a top-level function with a `&mut Cursor` argument for each grammar production. I find this C-style more readable for parsers and lexers.

EDIT: swithced to a more conventional setup with lexing methods

So, what do folks think about this?
2019-07-21 07:11:25 +00:00
bors
1301422a6c Auto merge of #60913 - spastorino:place2_4, r=oli-obk
Place 2.0 change from enum to struct

r? @oli-obk
2019-07-21 03:25:05 +00:00
Aleksey Kladov
395ee0b79f Introduce rustc_lexer
The idea here is to make a reusable library out of the existing
rust-lexer, by separating out pure lexing and rustc-specific concerns,
like spans, error reporting an interning.

So, rustc_lexer operates directly on `&str`, produces simple tokens
which are a pair of type-tag and a bit of original text, and does not
report errors, instead storing them as flags on the token.
2019-07-20 21:12:34 +03:00
bors
95b1fe560d Auto merge of #62789 - GuillaumeGomez:update-pulldown-cmark, r=Manishearth
Update pulldown-cmark version

Fixes https://github.com/rust-lang/rust/issues/62571.
Fixes #62770.
Fixes #62552.

cc @rust-lang/rustdoc @Centril @pietroalbini
2019-07-20 12:21:28 +00:00
Guillaume Gomez
9d6b29af5a Update pulldown-cmark version 2019-07-20 11:01:04 +02:00
bors
f69b07144a Auto merge of #62710 - estebank:bad-named-args, r=petrochenkov
Specific error for positional args after named args in `format!()`

When writing positional arguments after named arguments in the
`format!()` and `println!()` macros, provide a targeted diagnostic.

Follow up to https://github.com/rust-lang/rust/pull/57522/files#r247278885
2019-07-20 06:18:52 +00:00
Santiago Pastorino
a8ceeeb5a0 Avoid cloning Place in check_and_patch 2019-07-20 05:08:39 +02:00
Santiago Pastorino
b59ded8ae0 Avoid cloning Place in visit_rvalue 2019-07-20 05:08:39 +02:00
Santiago Pastorino
7789cbf700 Avoid cloning Place in assign #2 2019-07-20 05:08:39 +02:00
Santiago Pastorino
b490032893 Avoid cloning Place in assign #1 2019-07-20 05:08:39 +02:00
Santiago Pastorino
2a7d600ee0 Avoid cloning Place in in_projection_structurally 2019-07-20 05:08:39 +02:00
Santiago Pastorino
7b456df4ab Avoid cloning Place in is_stable 2019-07-20 05:08:39 +02:00
Santiago Pastorino
17a465cb85 Avoid unneeded else branches 2019-07-20 05:08:39 +02:00
Santiago Pastorino
9b549d3c9d Avoid cloning Place in gather_init 2019-07-20 05:08:39 +02:00
Santiago Pastorino
d77653e88b Avoid cloning Place in calculate_fake_borrows 2019-07-20 05:08:39 +02:00
Santiago Pastorino
2ffd3c64f9 Avoid cloning Place in limit_capture_mutability 2019-07-20 05:08:39 +02:00
Santiago Pastorino
10470797a6 Avoid cloning Place in report_cannot_move_from_borrowed_content 2019-07-20 05:08:39 +02:00
Santiago Pastorino
09014fc793 Avoid cloning Place in report_cannot_move_from_static 2019-07-20 05:08:39 +02:00
Santiago Pastorino
95e727a5c3 Avoid cloning Place in check_access_permissions 2019-07-20 05:08:39 +02:00
Santiago Pastorino
34e3b7076c Avoid cloning Place in append_place_to_string 2019-07-20 05:08:39 +02:00
Santiago Pastorino
72251d5595 Avoid cloning Place in classify_drop_access_kind 2019-07-20 05:08:39 +02:00
Santiago Pastorino
75c0c8c6dc Avoid cloning Place in describe_place_for_conflicting_borrow 2019-07-20 05:08:39 +02:00
Santiago Pastorino
46f81fc53d Avoid cloning Place in report_use_of_moved_or_uninitialized and friends 2019-07-20 05:08:39 +02:00
Santiago Pastorino
ec65db07ef Remove explicit lifetime 2019-07-20 05:08:39 +02:00
Santiago Pastorino
17953185f8 Remove explicit return from last line of fn 2019-07-20 05:08:38 +02:00
Santiago Pastorino
438aeb8ca3 Avoid cloning Place in codegen_place 2019-07-20 05:08:38 +02:00
Santiago Pastorino
e11adb13b6 Implement Place::as_place_ref 2019-07-20 05:08:38 +02:00
Santiago Pastorino
98d2324875 Avoid cloning place in LocalAnalyzer visitor 2019-07-20 05:08:38 +02:00
Santiago Pastorino
d0accade3e Migrate from Place enum to Place struct 2019-07-20 05:08:38 +02:00
bors
e9d2227328 Auto merge of #62008 - ia0:issues_61053, r=petrochenkov
Add meta-variable checks in macro definitions

This is an implementation of #61053. It is not sound (some errors are not reported) and not complete (reports may not be actual errors). This is due to the possibility to define macros in macros in indirect ways. See module documentation of `macro_check` for more details.

What remains to be done:
- [x] Migrate from an error to an allow-by-default lint.
- [x] Add more comments in particular for the handling of nested macros.
- [x] Add more tests if needed.
- [x] Try to avoid cloning too much (one idea is to use lists on the stack).
- [ ] Run crater with deny-by-default lint (measure rate of false positives).
    - [ ] Remove extra commit for deny-by-default lint
- [x] Create a PR to remove the old `question_mark_macro_sep` lint #62160
2019-07-20 02:39:04 +00:00
bors
5c26b52368 Auto merge of #62705 - petrochenkov:oh-bye-mark, r=matthewjasper
libsyntax: Rename `Mark` into `ExpnId`

"`Mark`" is an ID that identifies both a macro invocation (`foo!()`), and expansion process, and expansion result of that macro invocation.
The problem is that it's pretty hard to infer that from its name.

This PR renames it into `ExpnId` reflecting its meaning in most contexts.
(The contexts where it's meaning is closer to "macro invocation ID" are rarer.)

I've kept "mark" in the names of functions that add or remove marks to/from syntactic contexts, those marks are not just expansion IDs, but something more complex.
2019-07-19 21:11:23 +00:00
Julien Cretin
6ec4584d84 Implement checks for meta-variables in macros 2019-07-19 19:59:12 +02:00
Julien Cretin
82abc0db81 Remember the span of the Kleene operator in macros
This is needed for having complete error messages where reporting macro variable
errors. Here is what they would look like:

error: meta-variable repeats with different kleene operator
  --> $DIR/issue-61053-different-kleene.rs:3:57
   |
LL |     ( $( $i:ident = $($j:ident),+ );* ) => { $( $( $i = $j; )* )* };
   |                                 - expected repetition   ^^   - conflicting repetition
2019-07-19 19:59:11 +02:00
bors
e3cebcb3bd Auto merge of #62690 - alexcrichton:azure-update, r=pietroalbini
azure: Prepare configuration for 4-core machines

This commit updates some of our assorted Azure/CI configuration to
prepare for some 4-core machines coming online. We're still in the
process of performance testing them to get final numbers, but some
changes are worth landing ahead of this. The updates here are:

* Use `C:/` instead of `D:/` for submodule checkout since it should have
  plenty of space and the 4-core machines won't have `D:/`

* Update `lzma-sys` to 0.1.14 which has support for VS2019, where 0.1.10
  doesn't.

* Update `src/ci/docker/run.sh` to work when it itself is running inside
  of a docker container (see the comment in the file for more info)

* Print step timings on the `try` branch in addition to the `auto`
  branch in. The logs there should be seen by similarly many humans (not
  many) and can be useful for performance analysis after a `try` build
  runs.

* Install the WIX and InnoSetup tools manually on Windows instead of
  relying on pre-installed copies on the VM. This gives us more control
  over what's being used on the Azure cloud right now (we control the
  version) and in the 4-core machines these won't be pre-installed. Note
  that on AppVeyor we actually already were installing InnoSetup, we
  just didn't carry that over on Azure!
2019-07-19 15:49:18 +00:00
Alex Crichton
9b4f6de7a4 azure: Prepare configuration for 4-core machines
This commit updates some of our assorted Azure/CI configuration to
prepare for some 4-core machines coming online. We're still in the
process of performance testing them to get final numbers, but some
changes are worth landing ahead of this. The updates here are:

* Use `C:/` instead of `D:/` for submodule checkout since it should have
  plenty of space and the 4-core machines won't have `D:/`

* Update `lzma-sys` to 0.1.14 which has support for VS2019, where 0.1.10
  doesn't.

* Update `src/ci/docker/run.sh` to work when it itself is running inside
  of a docker container (see the comment in the file for more info)

* Print step timings on the `try` branch in addition to the `auto`
  branch in. The logs there should be seen by similarly many humans (not
  many) and can be useful for performance analysis after a `try` build
  runs.

* Install the WIX and InnoSetup tools manually on Windows instead of
  relying on pre-installed copies on the VM. This gives us more control
  over what's being used on the Azure cloud right now (we control the
  version) and in the 4-core machines these won't be pre-installed. Note
  that on AppVeyor we actually already were installing InnoSetup, we
  just didn't carry that over on Azure!
2019-07-19 06:49:19 -07:00
bors
527dce7137 Auto merge of #62679 - Xanewok:after-expansion, r=Zoxc
Add an `after_expansion` callback in the driver

To format a given file RLS needs to know the Rust edition associated with it. It's not enough to look at the `edition` key in Cargo.toml - each crate target can have a different edition associated with it so the sure way to fetch a correct edition is to scan the input files used to compile a given crate target.

Right now this was done in the `after_analysis` callback of our shim, however this leads to other problems - if a crate cannot be successfully compiled (e.g. it has a type error) then a callback would not be invoked meaning we can't populate the files -> edition mapping.

However, doing this only after parsing is not enough, since expansion can pull in additional source files (e.g. by invoking `macro_rules! include_my_mod { () => { mod some_mod; }; }`).

Without copy-pasting the entire driver setup it's also not possible to expand the crate ourselves in the `after_parsing` callback - to expand crate we'd need to register plugins and initialize session ourselves. However, this is done normally after executing the callback itself, thus triggering the `Once::set` assertions in `Session::init_features`.

r? @Zoxc

cc @RalfJung @oli-obk this affects public driver interface used by Miri and Clippy
2019-07-19 10:38:09 +00:00