Formatter fixes, code examples.
This commit is contained in:
parent
ef5e88a865
commit
abaecf807f
|
|
@ -3205,6 +3205,7 @@ namespace CodeFormatters
|
|||
|
||||
public override void visit(wild_card_deconstructor_parameter _wild_card_deconstructor_parameter)
|
||||
{
|
||||
sb.Append("_");
|
||||
add_space_after = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
|
@ -28,16 +28,16 @@
|
|||
end;
|
||||
|
||||
begin
|
||||
var a := Arr(1,9,8,7,2,3,4,5);
|
||||
var a := Arr(1, 9, 8, 7, 2, 3, 4, 5);
|
||||
|
||||
// Расширенный is
|
||||
if a is [1,..,x,_,5] then // a is [1,..,1,1,1,1,1,1,1,1,1,1] - ран тайм эррор -
|
||||
Println(x); //в расширенном is короткое вычисление логических выражений не работает (#1508)
|
||||
if a is [1, .., var x, _, 5] then
|
||||
Println(x);
|
||||
|
||||
// match .. with
|
||||
match a with
|
||||
[1,9,8,'str',2]: print(1); //Нет проверки соответствия типов в для коллекций - добавить.
|
||||
[..,4,x]: print(x);
|
||||
[1, 9, 8, _, 2]: print(1);
|
||||
[.., var y, var x]: print(x + y);
|
||||
[_, .., _]: print(3);
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
|
@ -39,8 +39,8 @@ begin
|
|||
|
||||
// match .. with
|
||||
match personArr with
|
||||
[_,_,Person('Вася', age, _)]: print(age);
|
||||
[p, .., Person('Маша', _, _)]: print((p as Person).name);
|
||||
[_, _, Person('Вася', age, _)]: print(age);
|
||||
[var p, .., Person('Маша', _, _)]: print((p as Person).name);
|
||||
[..]: print(1);
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
|
@ -37,7 +37,7 @@ begin
|
|||
// match .. with
|
||||
match p with
|
||||
Person('Петя', _, _): print('Петя');
|
||||
Person('Вася', _, [_, _, x]): print(x);
|
||||
Person('Вася', _, [_, _, var x]): print(x);
|
||||
Person(name, _, [CardInfo(_, 321), .., CardInfo(_, 324)]): print(name);
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
begin
|
||||
var a := 3.14;
|
||||
match a with
|
||||
1.0, 2.0, 3.0: Println(1); // Надо исправить: double не матчит с integer - несоответствие типов.
|
||||
1.0, 2.0, 3.0: Println(1);
|
||||
3.13, 3.14, 3.15, 3.16: print(2);
|
||||
123.0: print(3);
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
begin
|
||||
match (1, 2, 'string') with
|
||||
(1, _, 1): Println(1); // Нет проверки типов каждого элемента tuple - надо ли?
|
||||
(1, _, var x): Println(x);
|
||||
(1, _, 'strin'): print(2);
|
||||
(_,_,'string'): print(3);
|
||||
(_, _, 'string'): print(3);
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
|
@ -29,11 +29,11 @@ begin
|
|||
var a := new Person('Вася', 11, new CardInfo('12345678', 324));
|
||||
|
||||
// Расширенный is
|
||||
if a is Person('Вася', var age, CardInfo(_, var cv)) then Println(age, cv);
|
||||
if a is Person(_, var age, CardInfo(_, var cv)) then Println(age, cv);
|
||||
|
||||
// match .. with
|
||||
match a with
|
||||
Person(1, 12, CardInfo('12345678', var cv)): Println(cv); // Нет проверки соответсвия типов при деконструировании - добавить.
|
||||
Person('Петя', 12, CardInfo('12345678', var cv)): Println(cv);
|
||||
Person('Вася', _, CardInfo(cardNum, 324)): Println(cardNum);
|
||||
Person(_, _, CardInfo(_, x)): Println(x);
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// This CSharp output file generated by Gardens Point LEX
|
||||
// Version: 1.1.3.301
|
||||
// Machine: DESKTOP-IF20NRO
|
||||
// DateTime: 5/21/2019 1:27:51 PM
|
||||
// DateTime: 5/23/2019 10:14:28 AM
|
||||
// UserName: FatCow
|
||||
// GPLEX input file <ABCPascal.lex>
|
||||
// GPLEX frame file <embedded resource>
|
||||
|
|
|
|||
|
|
@ -3520,7 +3520,7 @@ pattern_out_param
|
|||
pattern_out_param_optional_var
|
||||
: tkUnderscore
|
||||
{
|
||||
$$ = new wild_card_deconstructor_parameter();
|
||||
$$ = new wild_card_deconstructor_parameter(@$);
|
||||
}
|
||||
| literal_or_number
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// GPPG version 1.3.6
|
||||
// Machine: DESKTOP-IF20NRO
|
||||
// DateTime: 5/21/2019 1:27:52 PM
|
||||
// DateTime: 5/23/2019 10:14:29 AM
|
||||
// UserName: FatCow
|
||||
// Input file <ABCPascal.y>
|
||||
|
||||
|
|
@ -5821,7 +5821,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
break;
|
||||
case 652: // pattern_out_param_optional_var -> tkUnderscore
|
||||
{
|
||||
CurrentSemanticValue.stn = new wild_card_deconstructor_parameter();
|
||||
CurrentSemanticValue.stn = new wild_card_deconstructor_parameter(CurrentLocationSpan);
|
||||
}
|
||||
break;
|
||||
case 653: // pattern_out_param_optional_var -> literal_or_number
|
||||
|
|
|
|||
46
TestSuite/formatter_tests/input/pattern2.pas
Normal file
46
TestSuite/formatter_tests/input/pattern2.pas
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
||||
constructor(name: string; age: integer; card: CardInfo);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var p1 := new Person('Вася', 11, new CardInfo('12345671', 321));
|
||||
var p2 := new Person('Петя', 12, new CardInfo('12345672', 322));
|
||||
var p3 := new Person('Маша', 13, new CardInfo('12345673', 323));
|
||||
var personArr := Arr(p1, p2, p3);
|
||||
|
||||
// Расширенный is
|
||||
if personArr is [ Person(name1 , 11, CardInfo( _, cv)), _, Person( name2, 13, _)] then
|
||||
assert(name1.Equals('Вася') and (cv = 321) and name2.Equals('Маша'));
|
||||
|
||||
// match .. with
|
||||
match personArr with
|
||||
[ _, _, Person('Вася', var age, _)]: assert(false);
|
||||
[ var p, .. , Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
|
||||
[ .. ]: assert(false);
|
||||
end;
|
||||
end.
|
||||
7
TestSuite/formatter_tests/input/pattern3.pas
Normal file
7
TestSuite/formatter_tests/input/pattern3.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
begin
|
||||
match ( 1, 2, 'string' ) with
|
||||
( 1, _, 'str' ): assert(false);
|
||||
( 1, _, 'strin'): assert(false);
|
||||
( _, _, 'string'): ;
|
||||
end;
|
||||
end.
|
||||
46
TestSuite/formatter_tests/should/pattern2.pas
Normal file
46
TestSuite/formatter_tests/should/pattern2.pas
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
||||
constructor(name: string; age: integer; card: CardInfo);
|
||||
begin
|
||||
self.name := name;
|
||||
self.age := age;
|
||||
self.card := card;
|
||||
end;
|
||||
|
||||
procedure Deconstruct(var name: string; var age: integer; var card: CardInfo);
|
||||
begin
|
||||
name := self.name;
|
||||
age := self.age;
|
||||
card := self.card;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var p1 := new Person('Вася', 11, new CardInfo('12345671', 321));
|
||||
var p2 := new Person('Петя', 12, new CardInfo('12345672', 322));
|
||||
var p3 := new Person('Маша', 13, new CardInfo('12345673', 323));
|
||||
var personArr := Arr(p1, p2, p3);
|
||||
|
||||
// Расширенный is
|
||||
if personArr is [Person(name1, 11, CardInfo(_, cv)), _, Person(name2, 13, _)] then
|
||||
assert(name1.Equals('Вася') and (cv = 321) and name2.Equals('Маша'));
|
||||
|
||||
// match .. with
|
||||
match personArr with
|
||||
[_, _, Person('Вася', var age, _)]: assert(false);
|
||||
[var p, .., Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
|
||||
[..]: assert(false);
|
||||
end;
|
||||
end.
|
||||
7
TestSuite/formatter_tests/should/pattern3.pas
Normal file
7
TestSuite/formatter_tests/should/pattern3.pas
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
begin
|
||||
match (1, 2, 'string') with
|
||||
(1, _, 'str'): assert(false);
|
||||
(1, _, 'strin'): assert(false);
|
||||
(_, _, 'string'): ;
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
begin
|
||||
var a := Arr(1,9,8,7,2,3,4,5);
|
||||
var c : procedure := () -> begin
|
||||
var a := Arr(1, 9, 8, 7, 2, 3, 4, 5);
|
||||
var c: procedure := () -> begin
|
||||
match a with
|
||||
[.., 4, var x]: assert(x = 5);
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
||||
Person = class
|
||||
|
||||
public
|
||||
public
|
||||
name: string;
|
||||
age: integer;
|
||||
card: CardInfo;
|
||||
|
|
@ -39,7 +39,7 @@ begin
|
|||
|
||||
// match .. with
|
||||
match personArr with
|
||||
[_,_,Person('Вася', var age, _)]: assert(false);
|
||||
[_, _, Person('Вася', var age, _)]: assert(false);
|
||||
[var p, .., Person('Маша', _, _)]: assert((p as Person).name.Equals('Вася'));
|
||||
[..]: assert(false);
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
match (1, 2, 'string') with
|
||||
(1, _, 'str'): assert(false);
|
||||
(1, _, 'strin'): assert(false);
|
||||
(_,_,'string'): ;
|
||||
(_, _, 'string'): ;
|
||||
end;
|
||||
end.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
type
|
||||
CardInfo = auto class
|
||||
public
|
||||
public
|
||||
cardNumber: string;
|
||||
cv: integer;
|
||||
end;
|
||||
|
|
@ -29,7 +29,7 @@ begin
|
|||
var a := new Person('Вася', 11, new CardInfo('12345678', 324));
|
||||
|
||||
// Расширенный is
|
||||
if a is Person('Вася', var age, CardInfo(_, var cv)) then assert((age = 11) and (cv = 324));
|
||||
if a is Person(_, var age, CardInfo(_, var cv)) then assert((age = 11) and (cv = 324));
|
||||
|
||||
// match .. with
|
||||
match a with
|
||||
|
|
|
|||
Loading…
Reference in a new issue