mirror of https://github.com/astral-sh/ruff
[`pyupgrade`]: Removes quotes from annotations (#2431)
This commit is contained in:
parent
84be1df9d5
commit
1e1dc3a7ed
|
|
@ -857,6 +857,7 @@ For more, see [pyupgrade](https://pypi.org/project/pyupgrade/) on PyPI.
|
||||||
| UP034 | extraneous-parentheses | Avoid extraneous parentheses | 🛠 |
|
| UP034 | extraneous-parentheses | Avoid extraneous parentheses | 🛠 |
|
||||||
| UP035 | import-replacements | Import from `{module}` instead: {names} | 🛠 |
|
| UP035 | import-replacements | Import from `{module}` instead: {names} | 🛠 |
|
||||||
| UP036 | outdated-version-block | Version block is outdated for minimum Python version | 🛠 |
|
| UP036 | outdated-version-block | Version block is outdated for minimum Python version | 🛠 |
|
||||||
|
| UP037 | quoted-annotation | Remove quotes from type annotation | 🛠 |
|
||||||
|
|
||||||
### flake8-2020 (YTT)
|
### flake8-2020 (YTT)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import (
|
||||||
|
Annotated,
|
||||||
|
Callable,
|
||||||
|
List,
|
||||||
|
Literal,
|
||||||
|
NamedTuple,
|
||||||
|
Tuple,
|
||||||
|
TypeVar,
|
||||||
|
TypedDict,
|
||||||
|
cast,
|
||||||
|
)
|
||||||
|
|
||||||
|
from mypy_extensions import Arg, DefaultArg, DefaultNamedArg, NamedArg, VarArg
|
||||||
|
|
||||||
|
|
||||||
|
def foo(var: "MyClass") -> "MyClass":
|
||||||
|
x: "MyClass"
|
||||||
|
|
||||||
|
|
||||||
|
def foo(*, inplace: "bool"):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def foo(*args: "str", **kwargs: "int"):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
x: Tuple["MyClass"]
|
||||||
|
|
||||||
|
x: Callable[["MyClass"], None]
|
||||||
|
|
||||||
|
|
||||||
|
class Foo(NamedTuple):
|
||||||
|
x: "MyClass"
|
||||||
|
|
||||||
|
|
||||||
|
class D(TypedDict):
|
||||||
|
E: TypedDict("E", foo="int", total=False)
|
||||||
|
|
||||||
|
|
||||||
|
class D(TypedDict):
|
||||||
|
E: TypedDict("E", {"foo": "int"})
|
||||||
|
|
||||||
|
|
||||||
|
x: Annotated["str", "metadata"]
|
||||||
|
|
||||||
|
x: Arg("str", "name")
|
||||||
|
|
||||||
|
x: DefaultArg("str", "name")
|
||||||
|
|
||||||
|
x: NamedArg("str", "name")
|
||||||
|
|
||||||
|
x: DefaultNamedArg("str", "name")
|
||||||
|
|
||||||
|
x: DefaultNamedArg("str", name="name")
|
||||||
|
|
||||||
|
x: VarArg("str")
|
||||||
|
|
||||||
|
x: List[List[List["MyClass"]]]
|
||||||
|
|
||||||
|
x: NamedTuple("X", [("foo", "int"), ("bar", "str")])
|
||||||
|
|
||||||
|
x: NamedTuple("X", fields=[("foo", "int"), ("bar", "str")])
|
||||||
|
|
||||||
|
x: NamedTuple(typename="X", fields=[("foo", "int")])
|
||||||
|
|
||||||
|
x = TypeVar("x", "str", "int")
|
||||||
|
|
||||||
|
x = cast("str", x)
|
||||||
|
|
||||||
|
X = List["MyClass"]
|
||||||
|
|
||||||
|
X: MyCallable("X")
|
||||||
|
|
||||||
|
|
||||||
|
# OK
|
||||||
|
class D(TypedDict):
|
||||||
|
E: TypedDict("E")
|
||||||
|
|
||||||
|
|
||||||
|
x: Annotated[()]
|
||||||
|
|
||||||
|
x: DefaultNamedArg(name="name", quox="str")
|
||||||
|
|
||||||
|
x: DefaultNamedArg(name="name")
|
||||||
|
|
||||||
|
x: NamedTuple("X", [("foo",), ("bar",)])
|
||||||
|
|
||||||
|
x: NamedTuple("X", ["foo", "bar"])
|
||||||
|
|
||||||
|
x: NamedTuple()
|
||||||
|
|
||||||
|
x: Literal["foo", "bar"]
|
||||||
|
|
||||||
|
x = cast(x, "str")
|
||||||
|
|
||||||
|
|
||||||
|
def foo(x, *args, **kwargs):
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
def foo(*, inplace):
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
x: Annotated[1:2] = ...
|
||||||
|
|
@ -1950,6 +1950,7 @@
|
||||||
"UP034",
|
"UP034",
|
||||||
"UP035",
|
"UP035",
|
||||||
"UP036",
|
"UP036",
|
||||||
|
"UP037",
|
||||||
"W",
|
"W",
|
||||||
"W2",
|
"W2",
|
||||||
"W29",
|
"W29",
|
||||||
|
|
|
||||||
|
|
@ -3349,20 +3349,37 @@ where
|
||||||
Some(Callable::MypyExtension) => {
|
Some(Callable::MypyExtension) => {
|
||||||
self.visit_expr(func);
|
self.visit_expr(func);
|
||||||
|
|
||||||
// Ex) DefaultNamedArg(bool | None, name="some_prop_name")
|
if let Some(arg) = args.first() {
|
||||||
let mut arguments = args.iter().chain(keywords.iter().map(|keyword| {
|
// Ex) DefaultNamedArg(bool | None, name="some_prop_name")
|
||||||
let KeywordData { value, .. } = &keyword.node;
|
|
||||||
value
|
|
||||||
}));
|
|
||||||
if let Some(expr) = arguments.next() {
|
|
||||||
self.in_type_definition = true;
|
self.in_type_definition = true;
|
||||||
self.visit_expr(expr);
|
self.visit_expr(arg);
|
||||||
self.in_type_definition = prev_in_type_definition;
|
|
||||||
}
|
|
||||||
for expr in arguments {
|
|
||||||
self.in_type_definition = false;
|
|
||||||
self.visit_expr(expr);
|
|
||||||
self.in_type_definition = prev_in_type_definition;
|
self.in_type_definition = prev_in_type_definition;
|
||||||
|
|
||||||
|
for arg in args.iter().skip(1) {
|
||||||
|
self.in_type_definition = false;
|
||||||
|
self.visit_expr(arg);
|
||||||
|
self.in_type_definition = prev_in_type_definition;
|
||||||
|
}
|
||||||
|
for keyword in keywords {
|
||||||
|
let KeywordData { value, .. } = &keyword.node;
|
||||||
|
self.in_type_definition = false;
|
||||||
|
self.visit_expr(value);
|
||||||
|
self.in_type_definition = prev_in_type_definition;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Ex) DefaultNamedArg(type="bool", name="some_prop_name")
|
||||||
|
for keyword in keywords {
|
||||||
|
let KeywordData { value, arg, .. } = &keyword.node;
|
||||||
|
if arg.as_ref().map_or(false, |arg| arg == "type") {
|
||||||
|
self.in_type_definition = true;
|
||||||
|
self.visit_expr(value);
|
||||||
|
self.in_type_definition = prev_in_type_definition;
|
||||||
|
} else {
|
||||||
|
self.in_type_definition = false;
|
||||||
|
self.visit_expr(value);
|
||||||
|
self.in_type_definition = prev_in_type_definition;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
|
|
@ -4366,6 +4383,11 @@ impl<'a> Checker<'a> {
|
||||||
self.deferred_string_type_definitions.pop()
|
self.deferred_string_type_definitions.pop()
|
||||||
{
|
{
|
||||||
if let Ok(mut expr) = parser::parse_expression(expression, "<filename>") {
|
if let Ok(mut expr) = parser::parse_expression(expression, "<filename>") {
|
||||||
|
if self.annotations_future_enabled {
|
||||||
|
if self.settings.rules.enabled(&Rule::QuotedAnnotation) {
|
||||||
|
pyupgrade::rules::quoted_annotation(self, expression, range);
|
||||||
|
}
|
||||||
|
}
|
||||||
relocate_expr(&mut expr, range);
|
relocate_expr(&mut expr, range);
|
||||||
allocator.push(expr);
|
allocator.push(expr);
|
||||||
stacks.push((in_annotation, context));
|
stacks.push((in_annotation, context));
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,7 @@ ruff_macros::define_rule_mapping!(
|
||||||
UP034 => rules::pyupgrade::rules::ExtraneousParentheses,
|
UP034 => rules::pyupgrade::rules::ExtraneousParentheses,
|
||||||
UP035 => rules::pyupgrade::rules::ImportReplacements,
|
UP035 => rules::pyupgrade::rules::ImportReplacements,
|
||||||
UP036 => rules::pyupgrade::rules::OutdatedVersionBlock,
|
UP036 => rules::pyupgrade::rules::OutdatedVersionBlock,
|
||||||
|
UP037 => rules::pyupgrade::rules::QuotedAnnotation,
|
||||||
// pydocstyle
|
// pydocstyle
|
||||||
D100 => rules::pydocstyle::rules::PublicModule,
|
D100 => rules::pydocstyle::rules::PublicModule,
|
||||||
D101 => rules::pydocstyle::rules::PublicClass,
|
D101 => rules::pydocstyle::rules::PublicClass,
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ mod tests {
|
||||||
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_2.py"); "UP036_2")]
|
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_2.py"); "UP036_2")]
|
||||||
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_3.py"); "UP036_3")]
|
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_3.py"); "UP036_3")]
|
||||||
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_4.py"); "UP036_4")]
|
#[test_case(Rule::OutdatedVersionBlock, Path::new("UP036_4.py"); "UP036_4")]
|
||||||
|
#[test_case(Rule::QuotedAnnotation, Path::new("UP037.py"); "UP037")]
|
||||||
fn rules(rule_code: Rule, path: &Path) -> Result<()> {
|
fn rules(rule_code: Rule, path: &Path) -> Result<()> {
|
||||||
let snapshot = format!("{}_{}", rule_code.code(), path.to_string_lossy());
|
let snapshot = format!("{}_{}", rule_code.code(), path.to_string_lossy());
|
||||||
let diagnostics = test_path(
|
let diagnostics = test_path(
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ pub(crate) use open_alias::{open_alias, OpenAlias};
|
||||||
pub(crate) use os_error_alias::{os_error_alias, OSErrorAlias};
|
pub(crate) use os_error_alias::{os_error_alias, OSErrorAlias};
|
||||||
pub(crate) use outdated_version_block::{outdated_version_block, OutdatedVersionBlock};
|
pub(crate) use outdated_version_block::{outdated_version_block, OutdatedVersionBlock};
|
||||||
pub(crate) use printf_string_formatting::{printf_string_formatting, PrintfStringFormatting};
|
pub(crate) use printf_string_formatting::{printf_string_formatting, PrintfStringFormatting};
|
||||||
|
pub(crate) use quoted_annotation::{quoted_annotation, QuotedAnnotation};
|
||||||
pub(crate) use redundant_open_modes::{redundant_open_modes, RedundantOpenModes};
|
pub(crate) use redundant_open_modes::{redundant_open_modes, RedundantOpenModes};
|
||||||
pub(crate) use replace_stdout_stderr::{replace_stdout_stderr, ReplaceStdoutStderr};
|
pub(crate) use replace_stdout_stderr::{replace_stdout_stderr, ReplaceStdoutStderr};
|
||||||
pub(crate) use replace_universal_newlines::{replace_universal_newlines, ReplaceUniversalNewlines};
|
pub(crate) use replace_universal_newlines::{replace_universal_newlines, ReplaceUniversalNewlines};
|
||||||
|
|
@ -59,6 +60,7 @@ mod open_alias;
|
||||||
mod os_error_alias;
|
mod os_error_alias;
|
||||||
mod outdated_version_block;
|
mod outdated_version_block;
|
||||||
mod printf_string_formatting;
|
mod printf_string_formatting;
|
||||||
|
mod quoted_annotation;
|
||||||
mod redundant_open_modes;
|
mod redundant_open_modes;
|
||||||
mod replace_stdout_stderr;
|
mod replace_stdout_stderr;
|
||||||
mod replace_universal_newlines;
|
mod replace_universal_newlines;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
use ruff_macros::derive_message_formats;
|
||||||
|
|
||||||
|
use crate::ast::types::Range;
|
||||||
|
use crate::checkers::ast::Checker;
|
||||||
|
use crate::define_violation;
|
||||||
|
use crate::fix::Fix;
|
||||||
|
use crate::registry::{Diagnostic, Rule};
|
||||||
|
use crate::violation::AlwaysAutofixableViolation;
|
||||||
|
|
||||||
|
define_violation!(
|
||||||
|
pub struct QuotedAnnotation;
|
||||||
|
);
|
||||||
|
impl AlwaysAutofixableViolation for QuotedAnnotation {
|
||||||
|
#[derive_message_formats]
|
||||||
|
fn message(&self) -> String {
|
||||||
|
format!("Remove quotes from type annotation")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn autofix_title(&self) -> String {
|
||||||
|
"Remove quotes".to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// UP037
|
||||||
|
pub fn quoted_annotation(checker: &mut Checker, annotation: &str, range: Range) {
|
||||||
|
let mut diagnostic = Diagnostic::new(QuotedAnnotation, range);
|
||||||
|
if checker.patch(&Rule::QuotedAnnotation) {
|
||||||
|
diagnostic.amend(Fix::replacement(
|
||||||
|
annotation.to_string(),
|
||||||
|
range.location,
|
||||||
|
range.end_location,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
checker.diagnostics.push(diagnostic);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,599 @@
|
||||||
|
---
|
||||||
|
source: src/rules/pyupgrade/mod.rs
|
||||||
|
expression: diagnostics
|
||||||
|
---
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 18
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 18
|
||||||
|
column: 22
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 18
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 18
|
||||||
|
column: 22
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 18
|
||||||
|
column: 27
|
||||||
|
end_location:
|
||||||
|
row: 18
|
||||||
|
column: 36
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 18
|
||||||
|
column: 27
|
||||||
|
end_location:
|
||||||
|
row: 18
|
||||||
|
column: 36
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 19
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 19
|
||||||
|
column: 16
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 19
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 19
|
||||||
|
column: 16
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 22
|
||||||
|
column: 20
|
||||||
|
end_location:
|
||||||
|
row: 22
|
||||||
|
column: 26
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- bool
|
||||||
|
location:
|
||||||
|
row: 22
|
||||||
|
column: 20
|
||||||
|
end_location:
|
||||||
|
row: 22
|
||||||
|
column: 26
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 26
|
||||||
|
column: 15
|
||||||
|
end_location:
|
||||||
|
row: 26
|
||||||
|
column: 20
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 26
|
||||||
|
column: 15
|
||||||
|
end_location:
|
||||||
|
row: 26
|
||||||
|
column: 20
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 26
|
||||||
|
column: 32
|
||||||
|
end_location:
|
||||||
|
row: 26
|
||||||
|
column: 37
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 26
|
||||||
|
column: 32
|
||||||
|
end_location:
|
||||||
|
row: 26
|
||||||
|
column: 37
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 30
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 30
|
||||||
|
column: 18
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 30
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 30
|
||||||
|
column: 18
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 32
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 32
|
||||||
|
column: 22
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 32
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 32
|
||||||
|
column: 22
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 36
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 36
|
||||||
|
column: 16
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 36
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 36
|
||||||
|
column: 16
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 40
|
||||||
|
column: 26
|
||||||
|
end_location:
|
||||||
|
row: 40
|
||||||
|
column: 31
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 40
|
||||||
|
column: 26
|
||||||
|
end_location:
|
||||||
|
row: 40
|
||||||
|
column: 31
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 44
|
||||||
|
column: 30
|
||||||
|
end_location:
|
||||||
|
row: 44
|
||||||
|
column: 35
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 44
|
||||||
|
column: 30
|
||||||
|
end_location:
|
||||||
|
row: 44
|
||||||
|
column: 35
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 47
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 47
|
||||||
|
column: 18
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 47
|
||||||
|
column: 13
|
||||||
|
end_location:
|
||||||
|
row: 47
|
||||||
|
column: 18
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 49
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 49
|
||||||
|
column: 12
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 49
|
||||||
|
column: 7
|
||||||
|
end_location:
|
||||||
|
row: 49
|
||||||
|
column: 12
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 51
|
||||||
|
column: 14
|
||||||
|
end_location:
|
||||||
|
row: 51
|
||||||
|
column: 19
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 51
|
||||||
|
column: 14
|
||||||
|
end_location:
|
||||||
|
row: 51
|
||||||
|
column: 19
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 53
|
||||||
|
column: 12
|
||||||
|
end_location:
|
||||||
|
row: 53
|
||||||
|
column: 17
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 53
|
||||||
|
column: 12
|
||||||
|
end_location:
|
||||||
|
row: 53
|
||||||
|
column: 17
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 55
|
||||||
|
column: 19
|
||||||
|
end_location:
|
||||||
|
row: 55
|
||||||
|
column: 24
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 55
|
||||||
|
column: 19
|
||||||
|
end_location:
|
||||||
|
row: 55
|
||||||
|
column: 24
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 57
|
||||||
|
column: 19
|
||||||
|
end_location:
|
||||||
|
row: 57
|
||||||
|
column: 24
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 57
|
||||||
|
column: 19
|
||||||
|
end_location:
|
||||||
|
row: 57
|
||||||
|
column: 24
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 59
|
||||||
|
column: 10
|
||||||
|
end_location:
|
||||||
|
row: 59
|
||||||
|
column: 15
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 59
|
||||||
|
column: 10
|
||||||
|
end_location:
|
||||||
|
row: 59
|
||||||
|
column: 15
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 61
|
||||||
|
column: 18
|
||||||
|
end_location:
|
||||||
|
row: 61
|
||||||
|
column: 27
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 61
|
||||||
|
column: 18
|
||||||
|
end_location:
|
||||||
|
row: 61
|
||||||
|
column: 27
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 63
|
||||||
|
column: 28
|
||||||
|
end_location:
|
||||||
|
row: 63
|
||||||
|
column: 33
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 63
|
||||||
|
column: 28
|
||||||
|
end_location:
|
||||||
|
row: 63
|
||||||
|
column: 33
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 63
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 63
|
||||||
|
column: 49
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 63
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 63
|
||||||
|
column: 49
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 28
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 33
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- foo
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 28
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 33
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 35
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 40
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 35
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 40
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 49
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- bar
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 49
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 51
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 56
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 65
|
||||||
|
column: 51
|
||||||
|
end_location:
|
||||||
|
row: 65
|
||||||
|
column: 56
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 23
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 26
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- X
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 23
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 26
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 37
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 42
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- foo
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 37
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 42
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 49
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 67
|
||||||
|
column: 44
|
||||||
|
end_location:
|
||||||
|
row: 67
|
||||||
|
column: 49
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 69
|
||||||
|
column: 17
|
||||||
|
end_location:
|
||||||
|
row: 69
|
||||||
|
column: 22
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 69
|
||||||
|
column: 17
|
||||||
|
end_location:
|
||||||
|
row: 69
|
||||||
|
column: 22
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 69
|
||||||
|
column: 24
|
||||||
|
end_location:
|
||||||
|
row: 69
|
||||||
|
column: 29
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- int
|
||||||
|
location:
|
||||||
|
row: 69
|
||||||
|
column: 24
|
||||||
|
end_location:
|
||||||
|
row: 69
|
||||||
|
column: 29
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 71
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 71
|
||||||
|
column: 14
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- str
|
||||||
|
location:
|
||||||
|
row: 71
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 71
|
||||||
|
column: 14
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 73
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 73
|
||||||
|
column: 18
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- MyClass
|
||||||
|
location:
|
||||||
|
row: 73
|
||||||
|
column: 9
|
||||||
|
end_location:
|
||||||
|
row: 73
|
||||||
|
column: 18
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
QuotedAnnotation: ~
|
||||||
|
location:
|
||||||
|
row: 75
|
||||||
|
column: 14
|
||||||
|
end_location:
|
||||||
|
row: 75
|
||||||
|
column: 17
|
||||||
|
fix:
|
||||||
|
content:
|
||||||
|
- X
|
||||||
|
location:
|
||||||
|
row: 75
|
||||||
|
column: 14
|
||||||
|
end_location:
|
||||||
|
row: 75
|
||||||
|
column: 17
|
||||||
|
parent: ~
|
||||||
|
|
||||||
Loading…
Reference in New Issue