mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Include language and compiler version in Remix code links
This commit is contained in:
		
							parent
							
								
									416b13850f
								
							
						
					
					
						commit
						b7942219df
					
				| @ -18,11 +18,11 @@ def insert_node_before(child, new_sibling): | |||||||
|             break |             break | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def remix_code_url(source_code): | def remix_code_url(source_code, language, solidity_version): | ||||||
|     # NOTE: base64 encoded data may contain +, = and / characters. Remix seems to handle them just |     # NOTE: base64 encoded data may contain +, = and / characters. Remix seems to handle them just | ||||||
|     # fine without any escaping. |     # fine without any escaping. | ||||||
|     base64_encoded_source = base64.b64encode(source_code.encode('utf-8')).decode('ascii') |     base64_encoded_source = base64.b64encode(source_code.encode('utf-8')).decode('ascii') | ||||||
|     return f"https://remix.ethereum.org/?code={base64_encoded_source}" |     return f"https://remix.ethereum.org/?language={language}&version={solidity_version}&code={base64_encoded_source}" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def build_remix_link_node(url): | def build_remix_link_node(url): | ||||||
| @ -42,17 +42,18 @@ def build_remix_link_node(url): | |||||||
|     return paragraph_node |     return paragraph_node | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def insert_remix_link(app, doctree): | def insert_remix_link(app, doctree, solidity_version): | ||||||
|     if app.builder.format != 'html' or app.builder.name == 'epub': |     if app.builder.format != 'html' or app.builder.name == 'epub': | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     for literal_block_node in doctree.traverse(docutils.nodes.literal_block): |     for literal_block_node in doctree.traverse(docutils.nodes.literal_block): | ||||||
|         assert 'language' in literal_block_node.attributes |         assert 'language' in literal_block_node.attributes | ||||||
|         if literal_block_node.attributes['language'].lower() == 'solidity': |         language = literal_block_node.attributes['language'].lower() | ||||||
|  |         if language in ['solidity', 'yul']: | ||||||
|             text_nodes = list(literal_block_node.traverse(docutils.nodes.Text)) |             text_nodes = list(literal_block_node.traverse(docutils.nodes.Text)) | ||||||
|             assert len(text_nodes) == 1 |             assert len(text_nodes) == 1 | ||||||
| 
 | 
 | ||||||
|             remix_url = remix_code_url(text_nodes[0]) |             remix_url = remix_code_url(text_nodes[0], language, solidity_version) | ||||||
|             url_length = len(remix_url.encode('utf-8')) |             url_length = len(remix_url.encode('utf-8')) | ||||||
|             if url_length > MAX_SAFE_URL_LENGTH: |             if url_length > MAX_SAFE_URL_LENGTH: | ||||||
|                 logger.warning( |                 logger.warning( | ||||||
| @ -67,14 +68,16 @@ def insert_remix_link(app, doctree): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def setup(app): | def setup(app): | ||||||
|  |     # NOTE: Need to access _raw_config here because setup() runs before app.config is ready. | ||||||
|  |     solidity_version = app.config._raw_config['version']  # pylint: disable=protected-access | ||||||
|  | 
 | ||||||
|     app.connect( |     app.connect( | ||||||
|         'doctree-resolved', |         'doctree-resolved', | ||||||
|         lambda app, doctree, docname: insert_remix_link(app, doctree) |         lambda app, doctree, docname: insert_remix_link(app, doctree, solidity_version) | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     return { |     return { | ||||||
|         # NOTE: Need to access _raw_config here because setup() runs before app.config is ready. |         'version': solidity_version, | ||||||
|         'version': app.config._raw_config['version'],  # pylint: disable=protected-access |  | ||||||
|         'parallel_read_safe': True, |         'parallel_read_safe': True, | ||||||
|         'parallel_write_safe': True, |         'parallel_write_safe': True, | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user