@@ -1910,11 +1910,7 @@ mod method_determined_by_argument_type {
1910
1910
impl MyAdd < bool > for i64 {
1911
1911
// MyAdd<bool>::my_add
1912
1912
fn my_add ( & self , value : bool ) -> Self {
1913
- if value {
1914
- 1
1915
- } else {
1916
- 0
1917
- }
1913
+ if value { 1 } else { 0 }
1918
1914
}
1919
1915
}
1920
1916
@@ -1926,6 +1922,122 @@ mod method_determined_by_argument_type {
1926
1922
}
1927
1923
}
1928
1924
1925
+ mod loops {
1926
+ struct MyCallable { }
1927
+
1928
+ impl MyCallable {
1929
+ fn new ( ) -> Self {
1930
+ MyCallable { }
1931
+ }
1932
+
1933
+ fn call ( & self ) -> i64 {
1934
+ 1
1935
+ }
1936
+ }
1937
+
1938
+ pub fn f ( ) {
1939
+ // for loops with arrays
1940
+
1941
+ for i in [ 1 , 2 , 3 ] { } // $ type=i:i32
1942
+ for i in [ 1 , 2 , 3 ] . map ( |x| x + 1 ) { } // $ method=map MISSING: type=i:i32
1943
+ for i in [ 1 , 2 , 3 ] . into_iter ( ) { } // $ method=into_iter MISSING: type=i:i32
1944
+
1945
+ let vals1 = [ 1u8 , 2 , 3 ] ; // $ type=vals1:[T;...].u8
1946
+ for u in vals1 { } // $ type=u:u8
1947
+
1948
+ let vals2 = [ 1u16 ; 3 ] ; // $ type=vals2:[T;...].u16
1949
+ for u in vals2 { } // $ type=u:u16
1950
+
1951
+ let vals3: [ u32 ; 3 ] = [ 1 , 2 , 3 ] ; // $ type=vals3:[T;...].u32
1952
+ for u in vals3 { } // $ type=u:u32
1953
+
1954
+ let vals4: [ u64 ; 3 ] = [ 1 ; 3 ] ; // $ type=vals4:[T;...].u64
1955
+ for u in vals4 { } // $ type=u:u64
1956
+
1957
+ let mut strings1 = [ "foo" , "bar" , "baz" ] ; // $ type=strings1:[T;...].str
1958
+ for s in & strings1 { } // $ MISSING: type=s:&T.str
1959
+ for s in & mut strings1 { } // $ MISSING: type=s:&T.str
1960
+ for s in strings1 { } // $ type=s:str
1961
+
1962
+ let strings2 = [ // $ type=strings2:[T;...].String
1963
+ String :: from ( "foo" ) ,
1964
+ String :: from ( "bar" ) ,
1965
+ String :: from ( "baz" ) ,
1966
+ ] ;
1967
+ for s in strings2 { } // $ type=s:String
1968
+
1969
+ let strings3 = & [ // $ type=strings3:&T.[T;...].String
1970
+ String :: from ( "foo" ) ,
1971
+ String :: from ( "bar" ) ,
1972
+ String :: from ( "baz" ) ,
1973
+ ] ;
1974
+ for s in strings3 { } // $ MISSING: type=s:String
1975
+
1976
+ let callables = [ MyCallable :: new ( ) , MyCallable :: new ( ) , MyCallable :: new ( ) ] ; // $ MISSING: type=callables:[T;...].MyCallable; 3
1977
+ for c in callables // $ type=c:MyCallable
1978
+ {
1979
+ let result = c. call ( ) ; // $ type=result:i64 method=call
1980
+ }
1981
+
1982
+ // for loops with ranges
1983
+
1984
+ for i in 0 ..10 { } // $ MISSING: type=i:i32
1985
+ for u in [ 0u8 ..10 ] { } // $ MISSING: type=u:u8
1986
+ let range = 0 ..10 ; // $ MISSING: type=range:Range type=range:Idx.i32
1987
+ for i in range { } // $ MISSING: type=i:i32
1988
+
1989
+ let range1 = std:: ops:: Range { // $ type=range1:Range type=range1:Idx.u16
1990
+ start : 0u16 ,
1991
+ end : 10u16 ,
1992
+ } ;
1993
+ for u in range1 { } // $ MISSING: type=u:u16
1994
+
1995
+ // for loops with containers
1996
+
1997
+ let vals3 = vec ! [ 1 , 2 , 3 ] ; // $ MISSING: type=vals3:Vec type=vals3:T.i32
1998
+ for i in vals3 { } // $ MISSING: type=i:i32
1999
+
2000
+ let vals4a: Vec < u16 > = [ 1u16 , 2 , 3 ] . to_vec ( ) ; // $ type=vals4a:Vec type=vals4a:T.u16
2001
+ for u in vals4a { } // $ type=u:u16
2002
+
2003
+ let vals4b = [ 1u16 , 2 , 3 ] . to_vec ( ) ; // $ MISSING: type=vals4b:Vec type=vals4b:T.u16
2004
+ for u in vals4b { } // $ MISSING: type=u:u16
2005
+
2006
+ let vals5 = Vec :: from ( [ 1u32 , 2 , 3 ] ) ; // $ type=vals5:Vec MISSING: type=vals5:T.u32
2007
+ for u in vals5 { } // $ MISSING: type=u:u32
2008
+
2009
+ let vals6: Vec < & u64 > = [ 1u64 , 2 , 3 ] . iter ( ) . collect ( ) ; // $ type=vals6:Vec type=vals6:T.&T.u64
2010
+ for u in vals6 { } // $ type=u:&T.u64
2011
+
2012
+ let mut vals7 = Vec :: new ( ) ; // $ type=vals7:Vec MISSING: type=vals7:T.u8
2013
+ vals7. push ( 1u8 ) ; // $ method=push
2014
+ for u in vals7 { } // $ MISSING: type=u:u8
2015
+
2016
+ let matrix1 = vec ! [ vec![ 1 , 2 ] , vec![ 3 , 4 ] ] ; // $ MISSING: type=matrix1:Vec type=matrix1:T.Vec type=matrix1:T.T.i32
2017
+ for row in matrix1 {
2018
+ // $ MISSING: type=row:Vec type=row:T.i32
2019
+ for cell in row { // $ MISSING: type=cell:i32
2020
+ }
2021
+ }
2022
+
2023
+ let mut map1 = std:: collections:: HashMap :: new ( ) ; // $ MISSING: type=map1:Hashmap type=map1:K.i32 type=map1:V.Box type1=map1:V.T.&T.str
2024
+ map1. insert ( 1 , Box :: new ( "one" ) ) ; // $ method=insert
2025
+ map1. insert ( 2 , Box :: new ( "two" ) ) ; // $ method=insert
2026
+ for key in map1. keys ( ) { } // $ method=keys MISSING: type=key:i32
2027
+ for value in map1. values ( ) { } // $ method=values MISSING: type=value:Box type=value:T.&T.str
2028
+ for ( key, value) in map1. iter ( ) { } // $ method=iter MISSING: type=key:i32 type=value:Box type=value:T.&T.str
2029
+ for ( key, value) in & map1 { } // $ MISSING: type=key:i32 type=value:Box type=value:T.&T.str
2030
+
2031
+ // while loops
2032
+
2033
+ let mut a: i64 = 0 ; // $ type=a:i64
2034
+ while a < 10 // $ method=lt type=a:i64
2035
+ {
2036
+ a += 1 ; // $ type=a:i64 method=add_assign
2037
+ }
2038
+ }
2039
+ }
2040
+
1929
2041
mod dereference;
1930
2042
1931
2043
fn main ( ) {
@@ -1950,6 +2062,7 @@ fn main() {
1950
2062
async_:: f ( ) ;
1951
2063
impl_trait:: f ( ) ;
1952
2064
indexers:: f ( ) ;
2065
+ loops:: f ( ) ;
1953
2066
macros:: f ( ) ;
1954
2067
method_determined_by_argument_type:: f ( ) ;
1955
2068
dereference:: test ( ) ;
0 commit comments