Skip to content

add json emit mode #3735

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Aug 16, 2019
Merged

add json emit mode #3735

merged 5 commits into from
Aug 16, 2019

Conversation

calebcartwright
Copy link
Member

@calebcartwright calebcartwright commented Aug 9, 2019

Closes #1193 and refs #3274 (the --message-format options are json, human, and short)

Since each file is formatted and emitted individually, I had to keep track of the number of files with mismatches that had been emitted within the JsonEmitter in order to ensure that the resulting output would be a valid JSON string. This required updating emit_formatted_file in Emitter to take a mutable reference.

As an example for what the emitted JSON looks like, below is a human-friendly version (spacing adding) of the json output emitted for this file:

[  
  {  
    "name":"tests/writemode/source/json.rs",
    "mismatches":[  
      {  
        "original_begin_line":5,
        "original_end_line":7,
        "expected_begin_line":5,
        "expected_end_line":5,
        "original":"fn foo_expr() {\n    1\n}",
        "expected":"fn foo_expr() { 1 }"
      },
      {  
        "original_begin_line":9,
        "original_end_line":11,
        "expected_begin_line":7,
        "expected_end_line":7,
        "original":"fn foo_stmt() {\n    foo();\n}",
        "expected":"fn foo_stmt() { foo(); }"
      },
      {  
        "original_begin_line":13,
        "original_end_line":15,
        "expected_begin_line":9,
        "expected_end_line":9,
        "original":"fn foo_decl_local()  {\n    let z = 5;\n   }",
        "expected":"fn foo_decl_local() { let z = 5; }"
      },
      {  
        "original_begin_line":17,
        "original_end_line":19,
        "expected_begin_line":11,
        "expected_end_line":11,
        "original":"fn    foo_decl_item(x: &mut i32) {\n    x = 3;\n}",
        "expected":"fn foo_decl_item(x: &mut i32) { x = 3; }"
      },
      {  
        "original_begin_line":21,
        "original_end_line":21,
        "expected_begin_line":13,
        "expected_end_line":13,
        "original":"   fn empty()     {",
        "expected":"fn empty() {}"
      },
      {  
        "original_begin_line":23,
        "original_end_line":23,
        "expected_begin_line":15,
        "expected_end_line":15,
        "original":"}",
        "expected":"fn foo_return() -> String { \"yay\" }"
      },
      {  
        "original_begin_line":25,
        "original_end_line":29,
        "expected_begin_line":17,
        "expected_end_line":20,
        "original":"fn foo_return() -> String {\n    \"yay\"\n}\n\nfn foo_where() -> T where T: Sync {",
        "expected":"fn foo_where() -> T\nwhere\n    T: Sync,\n{"
      },
      {  
        "original_begin_line":64,
        "original_end_line":66,
        "expected_begin_line":55,
        "expected_end_line":55,
        "original":"fn lots_of_space                      ()                                                           {\n                           1                 \n}",
        "expected":"fn lots_of_space() { 1 }"
      },
      {  
        "original_begin_line":71,
        "original_end_line":72,
        "expected_begin_line":60,
        "expected_end_line":60,
        "original":"    fn dummy(&self) {\n    }",
        "expected":"    fn dummy(&self) {}"
      },
      {  
        "original_begin_line":75,
        "original_end_line":75,
        "expected_begin_line":63,
        "expected_end_line":64,
        "original":"trait CoolerTypes { fn dummy(&self) { ",
        "expected":"trait CoolerTypes {\n    fn dummy(&self) {}"
      },
      {  
        "original_begin_line":77,
        "original_end_line":77,
        "expected_begin_line":66,
        "expected_end_line":66,
        "original":"}",
        "expected":""
      },
      {  
        "original_begin_line":79,
        "original_end_line":79,
        "expected_begin_line":67,
        "expected_end_line":70,
        "original":"fn Foo<T>() where T: Bar {",
        "expected":"fn Foo<T>()\nwhere\n    T: Bar,\n{"
      }
    ]
  }
]

@calebcartwright calebcartwright marked this pull request as ready for review August 9, 2019 23:48
@topecongiro topecongiro modified the milestones: 1.4.5, 1.4.6 Aug 16, 2019
@topecongiro topecongiro merged commit dfd2766 into rust-lang:master Aug 16, 2019
@topecongiro
Copy link
Contributor

LGTM, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Allow rustfmt --write=checkstyle to output JSON
2 participants