Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
gargantext-ihaskell
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
gargantext-ihaskell
Commits
a7f5e80d
Commit
a7f5e80d
authored
May 29, 2015
by
Andrew Gibiansky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #507 from gibiansky/remove-dependencies
Remove dependencies
parents
17582024
397f5656
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
85 additions
and
50 deletions
+85
-50
Hspec.hs
Hspec.hs
+15
-1
ihaskell.cabal
ihaskell.cabal
+1
-2
BrokenPackages.hs
src/IHaskell/BrokenPackages.hs
+2
-4
Display.hs
src/IHaskell/Display.hs
+1
-1
Completion.hs
src/IHaskell/Eval/Completion.hs
+19
-20
Evaluate.hs
src/IHaskell/Eval/Evaluate.hs
+4
-5
Hoogle.hs
src/IHaskell/Eval/Hoogle.hs
+8
-8
Lint.hs
src/IHaskell/Eval/Lint.hs
+1
-2
Parser.hs
src/IHaskell/Eval/Parser.hs
+3
-3
Util.hs
src/IHaskell/Eval/Util.hs
+2
-1
IPython.hs
src/IHaskell/IPython.hs
+3
-3
StringUtils.hs
src/StringUtils.hs
+26
-0
No files found.
Hspec.hs
View file @
a7f5e80d
{-# LANGUAGE QuasiQuotes, OverloadedStrings, ExtendedDefaultRules, CPP #-}
-- Keep all the language pragmas here so it can be compiled separately.
module
Main
where
import
Prelude
import
qualified
Data.Text
as
T
import
GHC
hiding
(
Qualified
)
import
GHC.Paths
import
Data.IORef
...
...
@@ -16,7 +18,6 @@ import qualified Shelly
import
Control.Applicative
((
<$>
))
import
System.SetEnv
(
setEnv
)
import
Data.String.Here
import
Data.String.Utils
(
strip
,
replace
)
import
Data.Monoid
import
IHaskell.Eval.Parser
...
...
@@ -34,6 +35,19 @@ import Test.Hspec
import
Test.Hspec.HUnit
import
Test.HUnit
(
assertBool
,
assertFailure
)
lstrip
::
String
->
String
lstrip
=
dropWhile
(`
elem
`
(
"
\t\r\n
"
::
String
))
rstrip
::
String
->
String
rstrip
=
reverse
.
lstrip
.
reverse
strip
::
String
->
String
strip
=
rstrip
.
lstrip
replace
::
String
->
String
->
String
->
String
replace
needle
replacement
haystack
=
T
.
unpack
$
T
.
replace
(
T
.
pack
needle
)
(
T
.
pack
replacement
)
(
T
.
pack
haystack
)
traceShowId
x
=
traceShow
x
x
doGhc
=
runGhc
(
Just
libdir
)
...
...
ihaskell.cabal
View file @
a7f5e80d
...
...
@@ -73,7 +73,6 @@ library
haskell-src-exts ==1.16.*,
http-client == 0.4.*,
http-client-tls == 0.2.*,
MissingH >=1.2,
mtl >=2.1,
parsec -any,
process >=1.1,
...
...
@@ -116,6 +115,7 @@ library
Paths_ihaskell
other-modules:
IHaskellPrelude
StringUtils
default-extensions:
NoImplicitPrelude
...
...
@@ -182,7 +182,6 @@ Test-Suite hspec
haskell-src-exts ==1.16.*,
hspec -any,
HUnit -any,
MissingH >=1.2,
mtl >=2.1,
parsec -any,
process >=1.1,
...
...
src/IHaskell/BrokenPackages.hs
View file @
a7f5e80d
...
...
@@ -13,8 +13,6 @@ import Text.Parsec
import
Text.Parsec.String
import
Control.Applicative
hiding
((
<|>
),
many
)
import
Data.String.Utils
(
startswith
)
import
Shelly
data
BrokenPackage
=
BrokenPackage
{
packageID
::
String
,
brokenDeps
::
[
String
]
}
...
...
@@ -30,8 +28,8 @@ getBrokenPackages = shelly $ do
checkOut
<-
lastStderr
-- Get rid of extraneous things
let
rightStart
str
=
startswith
"There are problems"
str
||
startswith
" dependency"
str
let
rightStart
str
=
"There are problems"
`
isPrefixOf
`
str
||
" dependency"
`
isPrefixOf
`
str
ghcPkgOutput
=
unlines
.
filter
rightStart
.
lines
$
T
.
unpack
checkOut
return
$
...
...
src/IHaskell/Display.hs
View file @
a7f5e80d
...
...
@@ -56,7 +56,6 @@ import qualified Data.ByteString.Lazy as LBS
import
qualified
Data.ByteString.Char8
as
CBS
import
Data.Serialize
as
Serialize
import
Data.String.Utils
(
rstrip
)
import
qualified
Data.ByteString.Base64
as
Base64
import
Data.Aeson
(
Value
)
import
System.Directory
(
getTemporaryDirectory
,
setCurrentDirectory
)
...
...
@@ -69,6 +68,7 @@ import System.IO.Unsafe (unsafePerformIO)
import
qualified
Data.Text.Encoding
as
E
import
IHaskell.Types
import
StringUtils
(
rstrip
)
type
Base64
=
Text
...
...
src/IHaskell/Eval/Completion.hs
View file @
a7f5e80d
...
...
@@ -23,11 +23,9 @@ import Control.Applicative ((<$>))
import
Data.ByteString.UTF8
hiding
(
drop
,
take
,
lines
,
length
)
import
Data.Char
import
Data.List
(
nub
,
init
,
last
,
head
,
elemIndex
)
import
Data.List.
Split
import
Data.List.Split.Internals
import
qualified
Data.List.Split
as
Split
import
qualified
Data.List.Split.Internals
as
Split
import
Data.Maybe
(
fromJust
)
import
Data.String.Utils
(
strip
,
startswith
,
endswith
,
replace
)
import
qualified
Data.String.Utils
as
StringUtils
import
System.Environment
(
getEnv
)
import
GHC
hiding
(
Qualified
)
...
...
@@ -51,6 +49,7 @@ import System.Console.Haskeline.Completion
import
IHaskell.Types
import
IHaskell.Eval.Evaluate
(
Interpreter
)
import
IHaskell.Eval.ParseShell
(
parseShell
)
import
StringUtils
(
replace
,
strip
,
split
)
data
CompletionType
=
Empty
|
Identifier
String
...
...
@@ -179,17 +178,17 @@ completionType :: String -- ^ The line on which the completion is bei
->
CompletionType
completionType
line
loc
target
-- File and directory completions are special
|
startswith
":!"
stripped
=
|
":!"
`
isPrefixOf
`
stripped
=
fileComplete
FilePath
|
startswith
":l"
stripped
=
|
":l"
`
isPrefixOf
`
stripped
=
fileComplete
HsFilePath
-- Complete :set, :opt, and :ext
|
startswith
":s"
stripped
=
|
":s"
`
isPrefixOf
`
stripped
=
DynFlag
candidate
|
startswith
":o"
stripped
=
|
":o"
`
isPrefixOf
`
stripped
=
KernelOption
candidate
|
startswith
":e"
stripped
=
|
":e"
`
isPrefixOf
`
stripped
=
Extension
candidate
-- Use target for other completions. If it's empty, no completion.
...
...
@@ -201,7 +200,7 @@ completionType line loc target
FilePath
(
getStringTarget
lineUpToCursor
)
(
getStringTarget
lineUpToCursor
)
-- Complete module names in imports and elsewhere.
|
startswith
"import"
stripped
&&
isModName
=
|
"import"
`
isPrefixOf
`
stripped
&&
isModName
=
ModuleName
dotted
candidate
|
isModName
&&
(
not
.
null
.
init
)
target
=
Qualified
dotted
candidate
...
...
@@ -225,7 +224,7 @@ completionType line loc target
fileComplete
filePath
=
case
parseShell
lineUpToCursor
of
Right
xs
->
filePath
lineUpToCursor
$
if
endswith
(
last
xs
)
lineUpToCursor
if
last
xs
`
isSuffixOf
`
lineUpToCursor
then
last
xs
else
[]
Left
_
->
Empty
...
...
@@ -256,14 +255,14 @@ completionTarget :: String -> Int -> [String]
completionTarget
code
cursor
=
expandCompletionPiece
pieceToComplete
where
pieceToComplete
=
map
fst
<$>
find
(
elem
cursor
.
map
snd
)
pieces
pieces
=
splitAlongCursor
$
split
splitter
$
zip
code
[
1
..
]
splitter
=
defaultSplitter
pieces
=
splitAlongCursor
$
Split
.
split
splitter
$
zip
code
[
1
..
]
splitter
=
Split
.
defaultSplitter
{
-- Split using only the characters, which are the first elements of the (char, index) tuple
delimiter
=
Delimiter
[
uncurry
isDelim
]
Split
.
delimiter
=
Split
.
Delimiter
[
uncurry
isDelim
]
-- Condense multiple delimiters into one and then drop them.
,
condensePolicy
=
Condense
,
delimPolicy
=
Drop
,
Split
.
condensePolicy
=
Split
.
Condense
,
Split
.
delimPolicy
=
Split
.
Drop
}
isDelim
::
Char
->
Int
->
Bool
...
...
@@ -281,7 +280,7 @@ completionTarget code cursor = expandCompletionPiece pieceToComplete
neverIdent
=
"
\n\t
(),{}[]
\\
'
\"
`"
expandCompletionPiece
Nothing
=
[]
expandCompletionPiece
(
Just
str
)
=
splitOn
"."
str
expandCompletionPiece
(
Just
str
)
=
Split
.
splitOn
"."
str
getHome
::
IO
String
getHome
=
do
...
...
@@ -313,7 +312,7 @@ completePathWithExtensions extensions line =
acceptAll
=
const
True
extensionIsOneOf
exts
str
=
any
correctEnding
exts
where
correctEnding
ext
=
e
ndswith
ext
str
correctEnding
ext
=
e
xt
`
isSuffixOf
`
str
completePathFilter
::
(
String
->
Bool
)
-- ^ File filter: test whether to include this file.
->
(
String
->
Bool
)
-- ^ Directory filter: test whether to include this directory.
...
...
@@ -334,8 +333,8 @@ completePathFilter includeFile includeDirectory left right = GhcMonad.liftIO $ d
-- everything else. If we wanted to keep original order, we could instead use
-- filter (`elem` (dirs ++ files)) completions
suggestions
<-
mapM
unDirExpand
$
dirs
++
files
let
isHidden
str
=
startswith
"."
.
last
.
StringUtils
.
split
"/"
$
if
endswith
"/"
str
let
isHidden
str
=
isPrefixOf
"."
.
last
.
split
"/"
$
if
"/"
`
isSuffixOf
`
str
then
init
str
else
str
visible
=
filter
(
not
.
isHidden
)
suggestions
...
...
src/IHaskell/Eval/Evaluate.hs
View file @
a7f5e80d
...
...
@@ -24,9 +24,7 @@ import qualified Data.ByteString.Char8 as CBS
import
Control.Concurrent
(
forkIO
,
threadDelay
)
import
Prelude
(
putChar
,
head
,
tail
,
last
,
init
,
(
!!
))
import
Data.List.Utils
import
Data.List
(
findIndex
,
and
,
foldl1
,
nubBy
)
import
Data.String.Utils
import
Text.Printf
import
Data.Char
as
Char
import
Data.Dynamic
...
...
@@ -86,6 +84,7 @@ import qualified IHaskell.Eval.Hoogle as Hoogle
import
IHaskell.Eval.Util
import
IHaskell.BrokenPackages
import
qualified
IHaskell.IPython.Message.UUID
as
UUID
import
StringUtils
(
replace
,
split
,
strip
,
rstrip
)
import
Paths_ihaskell
(
version
)
import
Data.Version
(
versionBranch
)
...
...
@@ -570,7 +569,7 @@ evalCommand _ (Directive LoadFile names) state = wrapExecution state $ do
write
state
$
"Load: "
++
names
displays
<-
forM
(
words
names
)
$
\
name
->
do
let
filename
=
if
endswith
".hs"
name
let
filename
=
if
".hs"
`
isSuffixOf
`
name
then
name
else
name
++
".hs"
contents
<-
liftIO
$
readFile
filename
...
...
@@ -855,7 +854,7 @@ evalCommand output (Expression expr) state = do
isShowError
(
Display
errs
)
=
-- Note that we rely on this error message being 'type cleaned', so that `Show` is not displayed as
-- GHC.Show.Show. This is also very fragile!
startswith
"No instance for (Show"
msg
&&
"No instance for (Show"
`
isPrefixOf
`
msg
&&
isInfixOf
"print it"
msg
where
msg
=
extractPlain
errs
...
...
@@ -1250,7 +1249,7 @@ formatErrorWithClass cls =
fixDollarSigns
=
replace
"$"
"<span>$</span>"
useDashV
=
"
\n
Use -v to see a list of the files searched for."
isShowError
err
=
startswith
"No instance for (Show"
err
&&
"No instance for (Show"
`
isPrefixOf
`
err
&&
isInfixOf
" arising from a use of `print'"
err
formatParseError
::
StringLoc
->
String
->
ErrMsg
...
...
src/IHaskell/Eval/Hoogle.hs
View file @
a7f5e80d
...
...
@@ -18,12 +18,12 @@ import qualified Data.ByteString.Char8 as CBS
import
Network.HTTP.Client
import
Network.HTTP.Client.TLS
import
Data.Aeson
import
Data.String.Utils
import
qualified
Data.List
as
List
import
Data.Char
(
isAscii
,
isAlphaNum
)
import
IHaskell.IPython
import
StringUtils
(
split
,
strip
,
replace
)
-- | Types of formats to render output to.
data
OutputFormat
=
Plain
-- ^ Render to plain text.
...
...
@@ -156,22 +156,22 @@ renderHtml (SearchResult resp) =
renderSelf
::
String
->
String
->
String
renderSelf
string
loc
|
startswith
"package"
string
=
|
"package"
`
isPrefixOf
`
string
=
pkg
++
" "
++
span
"hoogle-package"
(
link
loc
$
extractPackage
string
)
|
startswith
"module"
string
=
|
"module"
`
isPrefixOf
`
string
=
let
package
=
extractPackageName
loc
in
mod
++
" "
++
span
"hoogle-module"
(
link
loc
$
extractModule
string
)
++
packageSub
package
|
startswith
"class"
string
=
|
"class"
`
isPrefixOf
`
string
=
let
package
=
extractPackageName
loc
in
cls
++
" "
++
span
"hoogle-class"
(
link
loc
$
extractClass
string
)
++
packageSub
package
|
startswith
"data"
string
=
|
"data"
`
isPrefixOf
`
string
=
let
package
=
extractPackageName
loc
in
dat
++
" "
++
span
"hoogle-class"
(
link
loc
$
extractData
string
)
++
...
...
@@ -221,9 +221,9 @@ renderDocs doc =
let
groups
=
List
.
groupBy
bothAreCode
$
lines
doc
nonull
=
filter
(
not
.
null
.
strip
)
bothAreCode
s1
s2
=
startswith
">"
(
strip
s1
)
&&
startswith
">"
(
strip
s2
)
isCode
(
s
:
_
)
=
startswith
">"
$
strip
s
isPrefixOf
">"
(
strip
s1
)
&&
isPrefixOf
">"
(
strip
s2
)
isCode
(
s
:
_
)
=
isPrefixOf
">"
$
strip
s
makeBlock
lines
=
if
isCode
lines
then
div'
"hoogle-code"
$
unlines
$
nonull
lines
...
...
src/IHaskell/Eval/Lint.hs
View file @
a7f5e80d
...
...
@@ -9,11 +9,9 @@ import qualified Data.ByteString as BS
import
qualified
Data.ByteString.Lazy
as
LBS
import
qualified
Data.ByteString.Char8
as
CBS
import
Data.String.Utils
(
replace
,
startswith
,
strip
,
split
)
import
Prelude
(
head
,
tail
,
last
)
import
Control.Monad
import
Data.List
(
findIndex
)
import
Text.Printf
import
Data.String.Here
import
Data.Char
import
Data.Monoid
...
...
@@ -34,6 +32,7 @@ import IHaskell.Types
import
IHaskell.Display
import
IHaskell.IPython
import
IHaskell.Eval.Parser
hiding
(
line
)
import
StringUtils
(
replace
)
type
ExtsModule
=
SrcExts
.
Module
SrcSpanInfo
...
...
src/IHaskell/Eval/Parser.hs
View file @
a7f5e80d
...
...
@@ -23,7 +23,6 @@ import qualified Data.ByteString.Lazy as LBS
import
qualified
Data.ByteString.Char8
as
CBS
import
Data.List
(
maximumBy
,
inits
)
import
Data.String.Utils
(
startswith
,
strip
,
split
)
import
Prelude
(
head
,
tail
)
import
Control.Monad
(
msum
)
...
...
@@ -31,6 +30,7 @@ import GHC hiding (Located)
import
Language.Haskell.GHC.Parser
import
IHaskell.Eval.Util
import
StringUtils
(
strip
,
split
)
-- | A block of code to be evaluated. Each block contains a single element - one declaration,
-- statement, expression, etc. If parsing of the block failed, the block is instead a ParseError,
...
...
@@ -113,11 +113,11 @@ parseString codeString = do
-- Test whether a given chunk is a directive.
isDirective
::
String
->
Bool
isDirective
=
startswith
":"
.
strip
isDirective
=
isPrefixOf
":"
.
strip
-- Test if a chunk is a pragma.
isPragma
::
String
->
Bool
isPragma
=
startswith
"{-#"
.
strip
isPragma
=
isPrefixOf
"{-#"
.
strip
activateExtensions
::
GhcMonad
m
=>
CodeBlock
->
m
()
activateExtensions
(
Directive
SetExtension
ext
)
=
void
$
setExtension
ext
...
...
src/IHaskell/Eval/Util.hs
View file @
a7f5e80d
...
...
@@ -52,9 +52,10 @@ import qualified Outputable as O
import
Control.Monad
(
void
)
import
Data.Function
(
on
)
import
Data.String.Utils
(
replace
)
import
Data.List
(
nubBy
)
import
StringUtils
(
replace
)
-- | A extension flag that can be set or unset.
data
ExtFlag
=
SetFlag
ExtensionFlag
|
UnsetFlag
ExtensionFlag
...
...
src/IHaskell/IPython.hs
View file @
a7f5e80d
...
...
@@ -26,8 +26,6 @@ import qualified Shelly as SH
import
qualified
System.IO
as
IO
import
qualified
System.FilePath
as
FP
import
System.Directory
import
Data.List.Utils
(
split
)
import
Data.String.Utils
(
rstrip
,
endswith
,
strip
,
replace
)
import
System.Exit
(
exitFailure
)
import
Data.Aeson
(
toJSON
)
import
Data.Aeson.Encode
(
encodeToTextBuilder
)
...
...
@@ -40,6 +38,8 @@ import qualified GHC.Paths
import
IHaskell.Types
import
System.Posix.Signals
import
StringUtils
(
replace
,
split
)
data
KernelSpecOptions
=
KernelSpecOptions
{
kernelSpecGhcLibdir
::
String
-- ^ GHC libdir.
...
...
@@ -258,7 +258,7 @@ getSandboxPackageConf = SH.shelly $ do
let
pieces
=
split
"/"
myPath
sandboxDir
=
intercalate
"/"
$
takeWhile
(
/=
sandboxName
)
pieces
++
[
sandboxName
]
subdirs
<-
map
fp
<$>
SH
.
ls
(
SH
.
fromText
$
T
.
pack
sandboxDir
)
let
confdirs
=
filter
(
endswith
(
"packages.conf.d"
::
String
))
subdirs
let
confdirs
=
filter
(
isSuffixOf
(
"packages.conf.d"
::
String
))
subdirs
case
confdirs
of
[]
->
return
Nothing
dir
:
_
->
...
...
src/StringUtils.hs
0 → 100644
View file @
a7f5e80d
module
StringUtils
(
strip
,
lstrip
,
rstrip
,
replace
,
split
,
)
where
import
IHaskellPrelude
import
qualified
Data.Text
as
T
lstrip
::
String
->
String
lstrip
=
dropWhile
(`
elem
`
(
"
\t\r\n
"
::
String
))
rstrip
::
String
->
String
rstrip
=
reverse
.
lstrip
.
reverse
strip
::
String
->
String
strip
=
rstrip
.
lstrip
replace
::
String
->
String
->
String
->
String
replace
needle
replacement
haystack
=
T
.
unpack
$
T
.
replace
(
T
.
pack
needle
)
(
T
.
pack
replacement
)
(
T
.
pack
haystack
)
split
::
String
->
String
->
[
String
]
split
delim
=
map
T
.
unpack
.
T
.
splitOn
(
T
.
pack
delim
)
.
T
.
pack
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment