Skip to content

Commit 0845d5f

Browse files
authored
Merge pull request #1504 from rorye/allow-url-language-selection
Allow compiler language selection via query parameter, fixes #1489
2 parents 81da09d + 2df27fe commit 0845d5f

File tree

10 files changed

+82
-11
lines changed

10 files changed

+82
-11
lines changed

apps/remix-ide-e2e/src/tests/url.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,13 @@ module.exports = {
7777
'Should load using URL compiler params': function (browser: NightwatchBrowser) {
7878
browser
7979
.pause(5000)
80-
.url('http://127.0.0.1:8080/#optimize=true&runs=300&autoCompile=true&evmVersion=istanbul&version=soljson-v0.7.4+commit.3f05b770.js')
80+
.url('http://127.0.0.1:8080/#optimize=true&runs=300&autoCompile=true&evmVersion=istanbul&version=soljson-v0.7.4+commit.3f05b770.js&language=Yul')
8181
.refresh()
8282
.pause(5000)
8383
.clickLaunchIcon('solidity')
8484
.assert.containsText('#versionSelector option[data-id="selected"]', '0.7.4+commit.3f05b770')
8585
.assert.containsText('#evmVersionSelector option[data-id="selected"]', 'istanbul')
86+
.assert.containsText('#compilierLanguageSelector option[data-id="selected"]', 'Yul')
8687
.verify.elementPresent('#optimize:checked')
8788
.verify.elementPresent('#autoCompile:checked')
8889
.verify.attributeEquals('#runs', 'value', '300')

libs/remix-solidity/jest.config.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module.exports = {
2+
name: 'remix-solidity',
3+
preset: '../../jest.config.js',
4+
verbose: true,
5+
silent: false, // Silent console messages, specially the 'remix-simulator' ones
6+
transform: {
7+
'^.+\\.[tj]sx?$': 'ts-jest',
8+
},
9+
transformIgnorePatterns: ["/node_modules/", "/dist/", "\\.pnp\\.[^\\\/]+$"],
10+
rootDir: "./",
11+
testTimeout: 40000,
12+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html', 'json'],
13+
// Coverage
14+
collectCoverage: true,
15+
coverageReporters: ['text', 'text-summary'],
16+
collectCoverageFrom: [
17+
"**/*.ts",
18+
"!**/sol/**",
19+
"!src/types.ts",
20+
"!src/logger.ts"
21+
],
22+
coverageDirectory: '../../coverage/libs/remix-solidity'
23+
};
24+

libs/remix-solidity/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
"@types/node": "^13.1.1",
4242
"babel-eslint": "^10.0.0",
4343
"babelify": "^10.0.0",
44-
"tape": "^4.6.0",
4544
"typescript": "^3.7.4"
4645
},
4746
"scripts": {

libs/remix-solidity/src/compiler/compiler-input.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

3-
import { CompilerInput, Source, CompilerInputOptions } from './types'
3+
import { CompilerInput, Source, CompilerInputOptions, Language } from './types'
44

55
export default (sources: Source, opts: CompilerInputOptions): string => {
66
const o: CompilerInput = {
@@ -32,3 +32,13 @@ export default (sources: Source, opts: CompilerInputOptions): string => {
3232
}
3333
return JSON.stringify(o)
3434
}
35+
36+
export const Languages = ['Solidity', 'Yul']
37+
38+
export function getValidLanguage (val: string): Language {
39+
if (val !== undefined && val !== null && val) {
40+
const lang = val.slice(0, 1).toUpperCase() + val.slice(1).toLowerCase()
41+
return Languages.indexOf(lang) > -1 ? lang as Language : null
42+
}
43+
return null
44+
}

libs/remix-solidity/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export { Compiler } from './compiler/compiler'
22
export { compile } from './compiler/compiler-helpers'
3-
export { default as CompilerInput } from './compiler/compiler-input'
3+
export { default as CompilerInput, getValidLanguage } from './compiler/compiler-input'
44
export { CompilerAbstract } from './compiler/compiler-abstract'
55
export * from './compiler/types'
66
export { promisedMiniXhr, pathToURL, baseURLBin, baseURLWasm, canUseWorker, urlFromVersion } from './compiler/compiler-utils'
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { getValidLanguage } from '../src/compiler/compiler-input'
2+
import { Language } from '../src/compiler/types'
3+
4+
describe('compiler-input', () => {
5+
test('getValidLanguage', () => {
6+
const correctYul: Language = 'Yul'
7+
const correctSolidity: Language = 'Solidity'
8+
9+
const yulUpperCase = 'Yul'
10+
const yulLowerCase = 'yul'
11+
12+
const solidityUpperCase = 'Solidity'
13+
const solidityLowerCase = 'solidity'
14+
15+
expect(getValidLanguage(yulLowerCase)).toBe(correctYul)
16+
expect(getValidLanguage(yulUpperCase)).toBe(correctYul)
17+
expect(getValidLanguage(solidityUpperCase)).toBe(correctSolidity)
18+
expect(getValidLanguage(solidityLowerCase)).toBe(correctSolidity)
19+
expect(getValidLanguage(null)).toBe(null)
20+
expect(getValidLanguage(undefined)).toBe(null)
21+
expect(getValidLanguage('')).toBe(null)
22+
expect(getValidLanguage('A')).toBe(null)
23+
expect(getValidLanguage('Something')).toBe(null)
24+
})
25+
})

libs/remix-solidity/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"extends": "../../tsconfig.base.json",
33
"compilerOptions": {
4-
"types": ["node"]
4+
"types": ["jest", "node"]
55
},
66
"include": ["**/*.ts"]
77
}

libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { canUseWorker, baseURLBin, baseURLWasm, urlFromVersion, pathToURL, promi
77
import { compilerReducer, compilerInitialState } from './reducers/compiler'
88
import { resetEditorMode, listenToEvents } from './actions/compiler'
99
import { OverlayTrigger, Tooltip } from 'react-bootstrap' // eslint-disable-line
10+
import { getValidLanguage } from '@remix-project/remix-solidity'
1011

1112
import './css/style.css'
1213

@@ -74,6 +75,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
7475
const optimize = params.optimize
7576
const runs = params.runs as string
7677
const evmVersion = params.evmVersion
78+
const language = getValidLanguage(params.language)
7779

7880
return {
7981
...prevState,
@@ -82,7 +84,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
8284
includeNightlies: includeNightlies,
8385
optimize: optimize,
8486
runs: runs,
85-
evmVersion: (evmVersion !== null) && (evmVersion !== 'null') && (evmVersion !== undefined) && (evmVersion !== 'undefined') ? evmVersion : 'default'
87+
evmVersion: (evmVersion !== null) && (evmVersion !== 'null') && (evmVersion !== undefined) && (evmVersion !== 'undefined') ? evmVersion : 'default',
88+
language: (language !== null) ? language : 'Solidity'
8689
}
8790
})
8891
}
@@ -537,8 +540,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
537540
<div className="mb-2">
538541
<label className="remixui_compilerLabel form-check-label" htmlFor="compilierLanguageSelector">Language</label>
539542
<select onChange={(e) => handleLanguageChange(e.target.value)} value={state.language} className="custom-select" id="compilierLanguageSelector" title="Available since v0.5.7">
540-
<option value='Solidity'>Solidity</option>
541-
<option value='Yul'>Yul</option>
543+
<option data-id={state.language === 'Solidity' ? 'selected' : ''} value='Solidity'>Solidity</option>
544+
<option data-id={state.language === 'Yul' ? 'selected' : ''} value='Yul'>Yul</option>
542545
</select>
543546
</div>
544547
<div className="mb-2">

libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ICompilerApi } from '@remix-project/remix-lib-ts'
2+
import { getValidLanguage } from '@remix-project/remix-solidity'
23

34
const Compiler = require('@remix-project/remix-solidity').Compiler
45
const EventEmitter = require('events')
@@ -15,6 +16,7 @@ export class CompileTabLogic {
1516
public optimize
1617
public runs
1718
public evmVersion: string
19+
public language: string
1820
public compilerImport
1921
public event
2022

@@ -39,6 +41,11 @@ export class CompileTabLogic {
3941
}
4042
this.api.setCompilerParameters({ evmVersion: this.evmVersion })
4143
this.compiler.set('evmVersion', this.evmVersion)
44+
45+
this.language = getValidLanguage(this.api.getCompilerParameters().language)
46+
if (this.language != null) {
47+
this.compiler.set('language', this.language)
48+
}
4249
}
4350

4451
setOptimize (newOptimizeValue) {
@@ -68,6 +75,8 @@ export class CompileTabLogic {
6875
* @params lang {'Solidity' | 'Yul'} ...
6976
*/
7077
setLanguage (lang) {
78+
this.language = lang
79+
this.api.setCompilerParameters({ language: lang })
7180
this.compiler.set('language', lang)
7281
}
7382

workspace.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,10 @@
309309
}
310310
},
311311
"test": {
312-
"builder": "@nrwl/workspace:run-commands",
312+
"builder": "@nrwl/jest:jest",
313313
"options": {
314-
"commands": ["./../../node_modules/.bin/npm-run-all test"],
315-
"cwd": "libs/remix-solidity"
314+
"jestConfig": "libs/remix-solidity/jest.config.js",
315+
"tsConfig": "libs/remix-solidity/tsconfig.spec.json"
316316
}
317317
},
318318
"build": {

0 commit comments

Comments
 (0)