Commit 4ee0737d authored by Michael Amadi's avatar Michael Amadi Committed by GitHub

add semgrep rule sol-style-no-bare-imports and implement it (#12723)

* add semgrep rule sol-style-no-bare-imports and implement it

* write test for bare imports rule

* fix forge fmt on semgrep test

* fix bare import

* semver lock

* fix semver
parent f7cef711
...@@ -186,3 +186,12 @@ rules: ...@@ -186,3 +186,12 @@ rules:
paths: paths:
exclude: exclude:
- packages/contracts-bedrock/ - packages/contracts-bedrock/
- id: sol-style-no-bare-imports
languages: [solidity]
severity: ERROR
message: Import specific components instead of the entire file
pattern-regex: import\s+"[^"]+"\s*;
paths:
exclude:
- packages/contracts-bedrock/test
...@@ -7,6 +7,29 @@ ...@@ -7,6 +7,29 @@
// Use comments like "ruleid: <rule-id>" to assert that the rule catches the code. // Use comments like "ruleid: <rule-id>" to assert that the rule catches the code.
// Use comments like "ok: <rule-id>" to assert that the rule does not catch the code. // Use comments like "ok: <rule-id>" to assert that the rule does not catch the code.
/// begin SemgrepTest__sol-style-no-bare-imports
// ok: sol-style-no-bare-imports
import { SomeStruct } from "some-library.sol";
// ok: sol-style-no-bare-imports
import { SomeStruct, AnotherThing } from "some-library.sol";
// ok: sol-style-no-bare-imports
import { SomeStruct as SomeOtherStruct } from "some-library.sol";
// ok: sol-style-no-bare-imports
import { SomeStruct as SomeOtherStruct, AnotherThing as AnotherOtherThing } from "some-library.sol";
// ok: sol-style-no-bare-imports
import { SomeStruct as SomeOtherStruct, AnotherThing } from "some-library.sol";
// ok: sol-style-no-bare-imports
import { AnotherThing, SomeStruct as SomeOtherStruct } from "some-library.sol";
// ruleid: sol-style-no-bare-imports
import "some-library.sol";
/// end SemgrepTest__sol-style-no-bare-imports
contract SemgrepTest__sol_safety_deployutils_args { contract SemgrepTest__sol_safety_deployutils_args {
function test() { function test() {
// ruleid: sol-safety-deployutils-args // ruleid: sol-safety-deployutils-args
......
...@@ -33,7 +33,7 @@ import { Constants } from "src/libraries/Constants.sol"; ...@@ -33,7 +33,7 @@ import { Constants } from "src/libraries/Constants.sol";
import { Types } from "scripts/libraries/Types.sol"; import { Types } from "scripts/libraries/Types.sol";
import { Duration } from "src/dispute/lib/LibUDT.sol"; import { Duration } from "src/dispute/lib/LibUDT.sol";
import { StorageSlot, ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { StorageSlot, ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol";
import "src/dispute/lib/Types.sol"; import { GameType, Claim, GameTypes, OutputRoot, Hash } from "src/dispute/lib/Types.sol";
// Interfaces // Interfaces
import { IProxy } from "src/universal/interfaces/IProxy.sol"; import { IProxy } from "src/universal/interfaces/IProxy.sol";
......
...@@ -168,8 +168,8 @@ ...@@ -168,8 +168,8 @@
"sourceCodeHash": "0x9cb0851b6e471461f2bb369bd72eef4cffe8a0d1345546608a2aa6795540211d" "sourceCodeHash": "0x9cb0851b6e471461f2bb369bd72eef4cffe8a0d1345546608a2aa6795540211d"
}, },
"src/dispute/FaultDisputeGame.sol": { "src/dispute/FaultDisputeGame.sol": {
"initCodeHash": "0x1480098a19f71ce6b4f4548880c8794402315ed3efa6793241a3df0fae864205", "initCodeHash": "0xa352179f5055232764aac6b66a3ff5a6b3bfae2101d20c077f714b0ed7e40eef",
"sourceCodeHash": "0x2f084f3f0e52017beb2ecf571178b94ba885cca987ada472d9e178b486a91d9e" "sourceCodeHash": "0x730eff9147294c115a0a53e7e75771bcc4a517beb48457140ab929a8d1510893"
}, },
"src/legacy/DeployerWhitelist.sol": { "src/legacy/DeployerWhitelist.sol": {
"initCodeHash": "0x0b8177ed75b69eddbb9ce6537683f69a9935efed86a1d6faa8feaafbd151c1bd", "initCodeHash": "0x0b8177ed75b69eddbb9ce6537683f69a9935efed86a1d6faa8feaafbd151c1bd",
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity 0.8.15; pragma solidity 0.8.15;
import "src/cannon/libraries/CannonErrors.sol"; import { InvalidMemoryProof } from "src/cannon/libraries/CannonErrors.sol";
library MIPS64Memory { library MIPS64Memory {
uint64 internal constant EXT_MASK = 0x7; uint64 internal constant EXT_MASK = 0x7;
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity 0.8.15; pragma solidity 0.8.15;
import "src/cannon/libraries/CannonErrors.sol"; import { InvalidMemoryProof } from "src/cannon/libraries/CannonErrors.sol";
library MIPSMemory { library MIPSMemory {
/// @notice Reads a 32-bit value from memory. /// @notice Reads a 32-bit value from memory.
......
...@@ -12,17 +12,16 @@ import { ...@@ -12,17 +12,16 @@ import {
GameStatus, GameStatus,
GameType, GameType,
Claim, Claim,
Position,
Clock, Clock,
Duration, Duration,
Timestamp, Timestamp,
Hash, Hash,
OutputRoot, OutputRoot,
LibPosition,
LibClock, LibClock,
LocalPreimageKey, LocalPreimageKey,
VMStatuses VMStatuses
} from "src/dispute/lib/Types.sol"; } from "src/dispute/lib/Types.sol";
import { Position, LibPosition } from "src/dispute/lib/LibPosition.sol";
import { import {
InvalidParent, InvalidParent,
ClaimAlreadyExists, ClaimAlreadyExists,
...@@ -147,8 +146,8 @@ contract FaultDisputeGame is Clone, ISemver { ...@@ -147,8 +146,8 @@ contract FaultDisputeGame is Clone, ISemver {
uint256 internal constant HEADER_BLOCK_NUMBER_INDEX = 8; uint256 internal constant HEADER_BLOCK_NUMBER_INDEX = 8;
/// @notice Semantic version. /// @notice Semantic version.
/// @custom:semver 1.3.1-beta.6 /// @custom:semver 1.3.1-beta.7
string public constant version = "1.3.1-beta.6"; string public constant version = "1.3.1-beta.7";
/// @notice The starting timestamp of the game /// @notice The starting timestamp of the game
Timestamp public createdAt; Timestamp public createdAt;
......
...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0; ...@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol"; import { IFaultDisputeGame } from "src/dispute/interfaces/IFaultDisputeGame.sol";
import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol"; import { IDisputeGameFactory } from "src/dispute/interfaces/IDisputeGameFactory.sol";
import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol"; import { ISuperchainConfig } from "src/L1/interfaces/ISuperchainConfig.sol";
import "src/dispute/lib/Types.sol"; import { GameType, Hash, OutputRoot } from "src/dispute/lib/Types.sol";
interface IAnchorStateRegistry { interface IAnchorStateRegistry {
struct StartingAnchorRoot { struct StartingAnchorRoot {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import { IInitializable } from "src/dispute/interfaces/IInitializable.sol"; import { IInitializable } from "src/dispute/interfaces/IInitializable.sol";
import "src/dispute/lib/Types.sol"; import { Timestamp, GameStatus, GameType, Claim, Hash } from "src/dispute/lib/Types.sol";
interface IDisputeGame is IInitializable { interface IDisputeGame is IInitializable {
event Resolved(GameStatus indexed status); event Resolved(GameStatus indexed status);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol"; import { IDisputeGame } from "src/dispute/interfaces/IDisputeGame.sol";
import "src/dispute/lib/Types.sol"; import { GameId, Timestamp, Claim, Hash, GameType } from "src/dispute/lib/Types.sol";
interface IDisputeGameFactory { interface IDisputeGameFactory {
struct GameSearchResult { struct GameSearchResult {
......
...@@ -6,7 +6,7 @@ import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; ...@@ -6,7 +6,7 @@ import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { IBigStepper } from "src/dispute/interfaces/IBigStepper.sol"; import { IBigStepper } from "src/dispute/interfaces/IBigStepper.sol";
import { Types } from "src/libraries/Types.sol"; import { Types } from "src/libraries/Types.sol";
import "src/dispute/lib/Types.sol"; import { GameType, Claim, Position, Clock, Hash, Duration } from "src/dispute/lib/Types.sol";
interface IFaultDisputeGame is IDisputeGame { interface IFaultDisputeGame is IDisputeGame {
struct ClaimData { struct ClaimData {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma solidity ^0.8.0; pragma solidity ^0.8.0;
import { Types } from "src/libraries/Types.sol"; import { Types } from "src/libraries/Types.sol";
import "src/dispute/lib/Types.sol"; import { GameType, Claim, Position, Clock, Hash, Duration } from "src/dispute/lib/Types.sol";
import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol"; import { IAnchorStateRegistry } from "src/dispute/interfaces/IAnchorStateRegistry.sol";
import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol"; import { IDelayedWETH } from "src/dispute/interfaces/IDelayedWETH.sol";
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.15; pragma solidity ^0.8.15;
import "src/dispute/lib/LibUDT.sol"; import { GameType, Hash, Claim } from "src/dispute/lib/LibUDT.sol";
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// `DisputeGameFactory` Errors // // `DisputeGameFactory` Errors //
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.15; pragma solidity ^0.8.15;
import "src/dispute/lib/LibPosition.sol"; import { Position } from "src/dispute/lib/LibPosition.sol";
using LibClaim for Claim global; using LibClaim for Claim global;
using LibHash for Hash global; using LibHash for Hash global;
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.15; pragma solidity ^0.8.15;
import "src/dispute/lib/LibUDT.sol"; import {
Position,
Hash,
GameType,
VMStatus,
Timestamp,
Duration,
Clock,
GameId,
Claim,
LibGameId,
LibClock
} from "src/dispute/lib/LibUDT.sol";
/// @notice The current status of the dispute game. /// @notice The current status of the dispute game.
enum GameStatus { enum GameStatus {
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.8; pragma solidity ^0.8.8;
import "./RLPErrors.sol"; import {
EmptyItem,
UnexpectedString,
InvalidDataRemainder,
ContentLengthMismatch,
InvalidHeader,
UnexpectedList
} from "./RLPErrors.sol";
/// @custom:attribution https://github.com/hamdiallam/Solidity-RLP /// @custom:attribution https://github.com/hamdiallam/Solidity-RLP
/// @title RLPReader /// @title RLPReader
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment