mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			208 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| // SPDX-License-Identifier: UNLICENSED
 | |
| pragma solidity >=0.8.0;
 | |
| 
 | |
| import "./lib.sol";
 | |
| //      ^ @importDirective
 | |
| 
 | |
| interface I
 | |
| {
 | |
|     function f(uint x) external returns (uint);
 | |
|     //       ^ @functionF
 | |
| }
 | |
| 
 | |
| contract IA is I
 | |
|     //   ^^ @IASymbol
 | |
| {
 | |
|     function f(uint x) public pure override returns (uint) { return x + 1; }
 | |
| }
 | |
| 
 | |
| contract IB is I
 | |
| {
 | |
|     function f(uint x) public pure override returns (uint) { return x + 2; }
 | |
| }
 | |
| 
 | |
| library IntLib
 | |
| {
 | |
|     function add(int self, int b) public pure returns (int) { return self + b; }
 | |
|     //       ^^^ @IntLibAdd
 | |
| }
 | |
| 
 | |
| contract C
 | |
| {
 | |
|     I obj;
 | |
|     function virtual_inheritance() public payable
 | |
|     {
 | |
|         obj = new IA();
 | |
|         //        ^ @usingIASymbol
 | |
|         obj.f(1); // goto-definition should jump to definition of interface.
 | |
|     //      ^ @virtualFunctionLookup
 | |
|     }
 | |
| 
 | |
|     using IntLib for *;
 | |
|     function using_for(int i) pure public
 | |
|     {
 | |
|         i.add(5);
 | |
|  //       ^ @usingIntAdd
 | |
|         14.add(4);
 | |
|     }
 | |
| 
 | |
|     function useLib(uint n) public payable returns (uint)
 | |
|     {
 | |
|         return Lib.add(n, 1);
 | |
|         //     ^ @LibSymbol
 | |
|         //         ^ @LibAddSymbol
 | |
|     }
 | |
| 
 | |
|     function enums(Color c) public pure returns (Color d)
 | |
|     //             ^ @ColorSymbolInParameter
 | |
|     {
 | |
|         Color e = Color.Red;
 | |
|         //    ^ @eVariableDeclaration
 | |
|         //              ^ @RedEnumMemberAccess
 | |
|         if (c == e)
 | |
|         //       ^ @eVariableAccess
 | |
|             d = Color.Green;
 | |
|         else
 | |
|             d = c;
 | |
|     }
 | |
| 
 | |
|     type Price is uint128;
 | |
|     //   ^^^^^ @PriceDeclaration
 | |
|     function udlTest() public pure returns (uint128)
 | |
|     {
 | |
|         Price p = Price.wrap(128);
 | |
|     //  ^ @PriceSymbol
 | |
|     //            ^ @PriceInWrap
 | |
|         return Price.unwrap(p);
 | |
|     }
 | |
| 
 | |
|     function structCtorTest(uint8 v) public pure returns (uint8 result)
 | |
|     {
 | |
|         RGBColor memory c = RGBColor(v, 2 * v, 3 * v);
 | |
|         //                       ^ @RGBColorCursor
 | |
|         result = c.red;
 | |
|         int a;
 | |
| //      ^^^^^ @unusedLocalVar
 | |
|     }
 | |
| }
 | |
| // ----
 | |
| // goto_definition: @unusedLocalVar 2072
 | |
| // lib: @diagnostics 2072
 | |
| // -> textDocument/definition {
 | |
| //     "position": @importDirective
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": {
 | |
| //             "end": {
 | |
| //                 "character": 0,
 | |
| //                 "line": 0
 | |
| //             },
 | |
| //             "start": {
 | |
| //                 "character": 0,
 | |
| //                 "line": 0
 | |
| //             }
 | |
| //         },
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @usingIASymbol
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @IASymbol,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @virtualFunctionLookup
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @functionF,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @usingIntAdd
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @IntLibAdd,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @LibSymbol
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @LibLibrary,
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @LibAddSymbol
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @addSymbol,
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @ColorSymbolInParameter
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @ColorEnum,
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @RedEnumMemberAccess
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @EnumMemberRed,
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @eVariableAccess
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @eVariableDeclaration,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @PriceSymbol
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @PriceDeclaration,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @PriceInWrap
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @PriceDeclaration,
 | |
| //         "uri": "goto_definition.sol"
 | |
| //     }
 | |
| // ]
 | |
| // -> textDocument/definition {
 | |
| //     "position": @RGBColorCursor
 | |
| // }
 | |
| // <- [
 | |
| //     {
 | |
| //         "range": @RGBColorStruct,
 | |
| //         "uri": "lib.sol"
 | |
| //     }
 | |
| // ]
 |