Comments (5)
hello @Tieske
3 years ago I tried to refactor Penlight, probably what you are doing now.
At first, thanks for the work done!
I'm agree all these 3 modules are related to file system features.
I check the dependency graph (made 3 years ago) for pl.dir
and pl.file
require pl.path
.
pl.path was used by :
- pl.app
- pl.dir
- pl.file
- pl.test
pl.dir was used by :
- pl.file
pl.file was not used by other pl modules
I don't know if these informations are still up-to-date. maybe it should help you ... or not.
Regards,
from penlight.
Hello,
I'd be willing to spend some time on this. I'd like to propose the following changes:
Click to expand
fs
-> New moduleremove
<-os.remove
link
<-lfs.link
touch
<-lfs.touch
path
<- a submodule/table holding path-related methods
file
-> Removeutils
readfile
->fs.readfile
readlines
->fs.readlines
writefile
->fs.writefile
dir
fnmatch
->fs.path.match
filter
->fs.path.filter
getfiles
->fs.getfiles
getdirectories
->fs.getdirectories
copyfile
->fs.copyfile
movefile
->fs.movefile
walk
->fs.walk
rmtree
->fs.rmtree
makepath
->fs.mkdirp
clonetree
->fs.clonetree
dirtree
->fs.dirtree
getallfiles
->fs.getallfiles
path
dir
-> Remove (usefs.walk
orfs.dirtree
)rmdir
-> Remove (usefs.rmtree
)mkdir
->fs.mkdir
attrib
->fs.attrib
link_attrib
->fs.linkattrib
currentdir
->fs.currentdir
chdir
->fs.chdir
isdir
-> Remove (usefs.attrib
) (same goes for the following methods)isfile
-> Removegetsize
-> Removegetatime
-> Removegetmtime
-> Removegetctime
-> Removeexists
->fs.exists
splitpath
->fs.path.split
abspath
->fs.path.abs
splitext
->fs.path.splitext
dirname
->fs.path.dirname
basename
->fs.path.basename
extension
->fs.path.extname
isabs
->fs.path.isabs
join
->fs.path.join
normcase
->fs.path.normcase
normpath
->fs.path.norm
relpath
->fs.path.rel
expanduser
->fs.expanduser
tmpname
->fs.tmpname
common_prefix
->fs.path.commonprefix
package_path
->fs.path.packagepath
The idea is that fs.path
(a part of fs
) will contain methods which simply operate on Lua strings and don't make any system calls, while the rest of the fs
module will hold the main filesystem functions.
from penlight.
A side discussion that we had was whether we should split the modules for Unix-like, MacOS and Windows, since the path handling is different.
- Windows has drive letters as well as network paths, uses
\
instead of/
as separator - MacOS and Windows are case insensitive for finding files (but retain casing when creating)
- Unix is case sensitive
@alerque probably also has some opinions on this.
from penlight.
I'm taking a lot of inspiration from https://github.com/truemedian/luvit-api-design, and I think the way it handles paths is pretty good: the path
table/module is itself split up into path.posix
and path.windows
, and then function aliases for the current platform are inserted into the base path
table when the library is loaded. For example, path.posix.abs
and path.windows.abs
are separate implementations, and path.abs
is then set dynamically based on the current platform.
from penlight.
That's a similar approach to LuaRocks, with the overriding modules: https://github.com/luarocks/luarocks/tree/master/src/luarocks/fs
Though posix
and windows
alone is not enough. Mac has different behaviour because of its case insensitive treatment of files. So listing file matching README.*
should return readme.md
on windows and mac, but not on posix.
from penlight.
Related Issues (20)
- Cleanup: drop or improve pl.url HOT 4
- Consider adding the built-in table methods to tablex? HOT 3
- Clone a function? HOT 8
- How about adding json decode and encode function HOT 4
- Error in pretty.write: invalid order function for sorting
- Bareword `warn` in compat.lua is a "strict" violation
- pl.Path.isdir Doesn't work correctly for Windows Base directory i.e. D:\\ (Lua 5.4.4) HOT 1
- Test suite failing on Arch Linux HOT 2
- lfs HOT 1
- stringx indent and dedent functions add an extra "\n" at the end of the string HOT 3
- lexer.cpp doesn't recognize #define without trailing newline HOT 2
- Can't use % as escape character in a template HOT 3
- Running the class's base function HOT 5
- Incorrect integer detection
- Consider implementing `cp` / `mv` via FFI HOT 2
- unexpected behavior for dir.clonetree HOT 1
- The `newline` option in the template module does not behave according to documentation HOT 4
- Fix link on luarocks HOT 3
- penlight 1.14 is rockspec_revision 1, but uses rockspec_revision 3 feature issues_url this breaks on luarocks-5.1 since it does not support rockspec 3 HOT 3
- Why "No error" in `compat.execute` HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from penlight.