From 7dc6430149b3bf656bba5c51cede8001444b0ab9 Mon Sep 17 00:00:00 2001 From: Anatoly Stansler Date: Thu, 12 Jul 2018 13:29:49 +0300 Subject: [PATCH 1/5] fix: arduino code name --- src/main/kotlin/app/extractors/Languages.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/app/extractors/Languages.kt b/src/main/kotlin/app/extractors/Languages.kt index c786eb24..2362b914 100644 --- a/src/main/kotlin/app/extractors/Languages.kt +++ b/src/main/kotlin/app/extractors/Languages.kt @@ -7,7 +7,7 @@ object Lang { const val ACTIONSCRIPT = "actionscript" // ActionScript const val ANGELSCRIPT = "angelscript" // AngelScript const val ASSEMBLY = "assembly" // Assembly - const val ARDUINO = "assembly" // Arduino + const val ARDUINO = "arduino" // Arduino const val C = "c" // C const val CSHARP = "csharp" // C# const val CSS = "css" // CSS From 30d59ccb68dd8519874c29336229e16fd9257999 Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Tue, 17 Jul 2018 09:25:16 -0400 Subject: [PATCH 2/5] feat: dart language barebones (fix #304) (#313) --- src/main/kotlin/app/extractors/Heuristics.kt | 3 +++ src/main/kotlin/app/extractors/Languages.kt | 1 + .../kotlin/test/tests/extractors/IgnoredSamplesWildcards.kt | 1 - 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/app/extractors/Heuristics.kt b/src/main/kotlin/app/extractors/Heuristics.kt index aada23e3..5faec093 100644 --- a/src/main/kotlin/app/extractors/Heuristics.kt +++ b/src/main/kotlin/app/extractors/Heuristics.kt @@ -413,6 +413,9 @@ val HeuristicsMap = mapOf ExtractorInterface?>( CommonExtractor(Lang.MAKEFILE) } else null }, + "dart" to { _ -> + CommonExtractor(Lang.DART) + }, "db2" to { _ -> CommonExtractor(Lang.SQLPL) }, diff --git a/src/main/kotlin/app/extractors/Languages.kt b/src/main/kotlin/app/extractors/Languages.kt index 2362b914..78f32f8e 100644 --- a/src/main/kotlin/app/extractors/Languages.kt +++ b/src/main/kotlin/app/extractors/Languages.kt @@ -18,6 +18,7 @@ object Lang { const val COMMONLISP = "lisp" // Common Lisp const val CUDA = "cuda" // Cuda const val D = "d" // D + const val DART = "dart" // Dart const val DOSBATCH = "dosbatch" // DOS Batch const val DTRACE = "dtrace" // DTrace const val ELIXIR = "elixir" // Elixir diff --git a/src/test/kotlin/test/tests/extractors/IgnoredSamplesWildcards.kt b/src/test/kotlin/test/tests/extractors/IgnoredSamplesWildcards.kt index ea5e4799..19b229ce 100644 --- a/src/test/kotlin/test/tests/extractors/IgnoredSamplesWildcards.kt +++ b/src/test/kotlin/test/tests/extractors/IgnoredSamplesWildcards.kt @@ -80,7 +80,6 @@ var ignoredSamplesWildcards = listOf( "*/DIGITAL Command Language/*", "*/DM/*", "*/DNS Zone/*", - "*/Dart/*", "*/DataWeave/*", "*/Diff/*", "*/Dockerfile/*", From 6202532cd6d0bbda20d816e9626bb2338787d30e Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Wed, 18 Jul 2018 04:14:20 -0400 Subject: [PATCH 3/5] feat(lang): support solidity contracts (#318) Fixes sourcerer-io/awesome-libraries#21. --- src/main/kotlin/app/extractors/Heuristics.kt | 3 + src/main/kotlin/app/extractors/Languages.kt | 3 +- .../samples/Solidity/VotingContract.sol | 149 ++++++++++++++++++ 3 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/samples/Solidity/VotingContract.sol diff --git a/src/main/kotlin/app/extractors/Heuristics.kt b/src/main/kotlin/app/extractors/Heuristics.kt index 5faec093..0455a7d5 100644 --- a/src/main/kotlin/app/extractors/Heuristics.kt +++ b/src/main/kotlin/app/extractors/Heuristics.kt @@ -985,6 +985,9 @@ val HeuristicsMap = mapOf ExtractorInterface?>( "sls" to { _ -> CommonExtractor(Lang.SCHEME) }, + "sol" to { _ -> + CommonExtractor(Lang.SOLIDITY) + }, "spc" to { _ -> CommonExtractor(Lang.PLSQL) }, diff --git a/src/main/kotlin/app/extractors/Languages.kt b/src/main/kotlin/app/extractors/Languages.kt index 78f32f8e..6c8744de 100644 --- a/src/main/kotlin/app/extractors/Languages.kt +++ b/src/main/kotlin/app/extractors/Languages.kt @@ -88,9 +88,10 @@ object Lang { const val SCHEME = "scheme" // Scheme const val SHELL = "shell" // Shell const val SMALLTALK = "smalltalk" // Smalltalk - const val STANDARDML = "standard_ml" // Standard ML + const val SOLIDITY = "solidity" // Solidity const val SQL = "sql" // SQL const val SQLPL = "sqlpl" // SQLPL + const val STANDARDML = "standard_ml" // Standard ML const val SUPERCOLLIDER = "supercollider" // SuperCollider const val SWIFT = "swift" // Swift const val TCL = "tcl" // Tcl diff --git a/src/test/resources/samples/Solidity/VotingContract.sol b/src/test/resources/samples/Solidity/VotingContract.sol new file mode 100644 index 00000000..2120ab87 --- /dev/null +++ b/src/test/resources/samples/Solidity/VotingContract.sol @@ -0,0 +1,149 @@ +pragma solidity ^0.4.22; + +/// @title Voting with delegation. +contract Ballot { + // This declares a new complex type which will + // be used for variables later. + // It will represent a single voter. + struct Voter { + uint weight; // weight is accumulated by delegation + bool voted; // if true, that person already voted + address delegate; // person delegated to + uint vote; // index of the voted proposal + } + + // This is a type for a single proposal. + struct Proposal { + bytes32 name; // short name (up to 32 bytes) + uint voteCount; // number of accumulated votes + } + + address public chairperson; + + // This declares a state variable that + // stores a `Voter` struct for each possible address. + mapping(address => Voter) public voters; + + // A dynamically-sized array of `Proposal` structs. + Proposal[] public proposals; + + /// Create a new ballot to choose one of `proposalNames`. + constructor(bytes32[] memory proposalNames) public { + chairperson = msg.sender; + voters[chairperson].weight = 1; + + // For each of the provided proposal names, + // create a new proposal object and add it + // to the end of the array. + for (uint i = 0; i < proposalNames.length; i++) { + // `Proposal({...})` creates a temporary + // Proposal object and `proposals.push(...)` + // appends it to the end of `proposals`. + proposals.push(Proposal({ + name: proposalNames[i], + voteCount: 0 + })); + } + } + + // Give `voter` the right to vote on this ballot. + // May only be called by `chairperson`. + function giveRightToVote(address voter) public { + // If the first argument of `require` evaluates + // to `false`, execution terminates and all + // changes to the state and to Ether balances + // are reverted. + // This used to consume all gas in old EVM versions, but + // not anymore. + // It is often a good idea to use `require` to check if + // functions are called correctly. + // As a second argument, you can also provide an + // explanation about what went wrong. + require( + msg.sender == chairperson, + "Only chairperson can give right to vote." + ); + require( + !voters[voter].voted, + "The voter already voted." + ); + require(voters[voter].weight == 0); + voters[voter].weight = 1; + } + + /// Delegate your vote to the voter `to`. + function delegate(address to) public { + // assigns reference + Voter storage sender = voters[msg.sender]; + require(!sender.voted, "You already voted."); + + require(to != msg.sender, "Self-delegation is disallowed."); + + // Forward the delegation as long as + // `to` also delegated. + // In general, such loops are very dangerous, + // because if they run too long, they might + // need more gas than is available in a block. + // In this case, the delegation will not be executed, + // but in other situations, such loops might + // cause a contract to get "stuck" completely. + while (voters[to].delegate != address(0)) { + to = voters[to].delegate; + + // We found a loop in the delegation, not allowed. + require(to != msg.sender, "Found loop in delegation."); + } + + // Since `sender` is a reference, this + // modifies `voters[msg.sender].voted` + sender.voted = true; + sender.delegate = to; + Voter storage delegate_ = voters[to]; + if (delegate_.voted) { + // If the delegate already voted, + // directly add to the number of votes + proposals[delegate_.vote].voteCount += sender.weight; + } else { + // If the delegate did not vote yet, + // add to her weight. + delegate_.weight += sender.weight; + } + } + + /// Give your vote (including votes delegated to you) + /// to proposal `proposals[proposal].name`. + function vote(uint proposal) public { + Voter storage sender = voters[msg.sender]; + require(!sender.voted, "Already voted."); + sender.voted = true; + sender.vote = proposal; + + // If `proposal` is out of the range of the array, + // this will throw automatically and revert all + // changes. + proposals[proposal].voteCount += sender.weight; + } + + /// @dev Computes the winning proposal taking all + /// previous votes into account. + function winningProposal() public view + returns (uint winningProposal_) + { + uint winningVoteCount = 0; + for (uint p = 0; p < proposals.length; p++) { + if (proposals[p].voteCount > winningVoteCount) { + winningVoteCount = proposals[p].voteCount; + winningProposal_ = p; + } + } + } + + // Calls winningProposal() function to get the index + // of the winner contained in the proposals array and then + // returns the name of the winner + function winnerName() public view + returns (bytes32 winnerName_) + { + winnerName_ = proposals[winningProposal()].name; + } +} From f67d419409ff40023d442bc9be0593e72f2f8d80 Mon Sep 17 00:00:00 2001 From: Lubov Yaronskaya Date: Thu, 19 Jul 2018 22:59:19 +0300 Subject: [PATCH 4/5] fix(lang): do not process xcode data (fix #316) (#319) * fix(lang): do not process xcode data (fix #316) * fix: add .storyboard --- src/main/kotlin/app/hashers/Vendors.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/kotlin/app/hashers/Vendors.kt b/src/main/kotlin/app/hashers/Vendors.kt index 3526ed4d..ea6be5b2 100644 --- a/src/main/kotlin/app/hashers/Vendors.kt +++ b/src/main/kotlin/app/hashers/Vendors.kt @@ -242,6 +242,9 @@ val VendorConventions = listOf( // Xcode Regex("""\.xctemplate/"""), Regex("""\.imageset/"""), + Regex("""\.xc.*/"""), + Regex("""(^|/)Info\.plist$"""), + Regex("""\.storyboard$"""), // Carthage Regex("""(^|/)Carthage/"""), From 492d0c73f7f6e2756a7607f16fd7f4a67b19ec02 Mon Sep 17 00:00:00 2001 From: Anatoly Stansler Date: Fri, 27 Jul 2018 19:05:48 +0300 Subject: [PATCH 5/5] chore: raise app version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a6b4a9dd..4bc311a2 100644 --- a/build.gradle +++ b/build.gradle @@ -36,8 +36,8 @@ buildConfig { buildConfigField 'String', 'PROFILE_URL', 'https://sourcerer.io/' // App version. - buildConfigField 'int', 'VERSION_CODE', '12' - buildConfigField 'String', 'VERSION', '0.3.0' + buildConfigField 'int', 'VERSION_CODE', '13' + buildConfigField 'String', 'VERSION', '0.3.1' // Logging. buildConfigField 'String', 'ENV', project.hasProperty('env') ? env : 'production'