I'm editing some Javascript files using XCode's editor (I know, you want to ask me why, but bear with me here), and I'd like to have lint run on my edits, regularly.
I don't have a real preference - it might be every time the file saves, or on each edit, or, worst case scenario, automatically when I hit the build or run button.
Can a setup along these lines be put together? Any pointers?
You could use the jslint command line utility (installed as a ruby gem) and add a pre-action to your build scheme.
You already have ruby and rubygems installed on Mac OS X, so just
(sudo) gem install jslint
Then create a pre-action to run
jslint path/to/javascript/file.js
Source code for the jslint rubygem
Related
I want to embed Mozilla's SpiderMonkey in my standalone C++ program (in Visual Studio 2019). I went over all the documentation and whatnot but the problem is (or what I need is):
Execute a JavaScript script through C++. In pseudo code that'd be Value* result = SpiderMonkeyEvaluate(fileString);
And that's it. The thing is, in the documentation it says I need to build the entirety of Mozilla's Firefox browser (which is not less than a Gigabyte) and download Mercurial and open the command prompt and create directories etc. and all that disgusting stuff. I just need to be able to:
#include <jsapi.h>
And perform all the necessary C++-to-JS (and vice-versa) operations.
I do not think I need to download and build the entire FireFox browser to do this (I maybe wrong?).
If anyone is still interested the spider monkey on Windows, you would follow the build instructions here:
https://firefox-source-docs.mozilla.org/js/build.html
using the build tools here:
https://firefox-source-docs.mozilla.org/setup/windows_build.html
If you are very meticulous you don't need to download the entire FireFox code base but your life will be easier if you do. In order to only build spidermonkey only (plus js command line), be sure to activate a particular MOZCONFIG with
ac_add_options --enable-application=js
in it before calling any of the mach commands.
Note: if you plan to use the Visual C++ compiler and not clang-cl, you are limited to version 78 or you will have to figure out how to modify the header yourself.
for reference this is the config I used to successfully build spidermonkey 81.0.2 on Windows 10:
# Build only the JS shell
ac_add_options --enable-application=js
# Enable optimization for speed
ac_add_options --enable-optimize
# Enable the debugging tools: Assertions, debug only code etc.
# For performance testing you would probably want to change this
# to --disable-debug.
ac_add_options --disable-debug
ac_add_options --disable-jemalloc
ac_add_options --prefix=$MY_PREFIX
mk_add_options MOZ_MAKE_FLAGS="-j4"
# Use a separate objdir for optimized builds to allow easy
# switching between optimized and debug builds while developing.
mk_add_options MOZ_OBJDIR=#TOPSRCDIR#/obj-opt-#CONFIG_GUESS#
If you use this config, after you successfully build,
then navigate to #TOPSRCDIR#/obj-opt-#CONFIG_GUESS# and do mozmake install, it "install" all the files you need into $MY_PREFIX
UPDATE - This answer is wrong. sparse checkout actually downloads all the history. One would have to use the narrowhg ext, which isn't supported on the hg.mozilla.org repo.
the following answer is wrong.
You could use mercurial sparse checkout to just get the js/src folder.
(but with all the history of the js/src folder it will still likely be quite big)
This will just the history for js/src folder.
you need a version of mercurial which is newer then 3 years old (4.3 or newer)
mkdir spidermonkey
cd spirdermonkey
hg init
hg debugsparse --include js/src
hg pull https://hg.mozilla.org/releases/mozilla-release -u
I use two different IDE's based on what I'm doing. My primary IDE is Visual Studio, whereby I use Chirpy to mash and minify my code. It works flawlessly and I love it. Problem is that when I'm not on my Windows box, I don't have access to it.
When not using Visual Studio, I'm usually writing Javascript apps in Webstorm on my Macbook Pro. Here in lies the problem. I haven't found a Webstorm plugin or any other app that I can configure to watch my scripts and mash/minify them.
How do you Mac users mash/minify your JS and CSS at design time with minimal effort?
For those who have now updated to WebStorm 6, this functionality is in-built. Simply go to File (or whatever the Mac equivalent is) -> Settings -> File Watchers and define a file watcher for the type of file you need to watch.
The relevant help documentation is here - http://www.jetbrains.com/webstorm/webhelp/using-file-watchers.html
You could use YUI Compressor without Command Line with these little Apps:
http://www.webmaster-source.com/minimus/ – free
http://www.matmartinez.net/delivery/ – free
I'm neither a Mac nor Webstorm user, but this might still be relevant.
For javascript I use the closure compiler as part of an upload script to minify. It doesn't monitor the files, it runs when I run the upload (a bash file).
If you wanted to keep it all in the IDE, it looks like Webstorm has an Ant plugin http://plugins.intellij.net/plugin/?webide&id=4526 that you could use to execute the closure compiler.
If you can find a command line css minifier then you could put that in the Ant script as well.
I use lessc and uglifyjs to concatenate and minify my css and js files. Here's a makefile from Twitter Bootstrap that I used a modified version of:
https://github.com/twitter/bootstrap/blob/master/Makefile
It's simple since all I do is type make in the command line whenever I want to compile.
I use Minify. It's on the Mac App Store.
I developed it to support my own workflow. minifyapp.com
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
How do I install JSLint on Ubuntu?
I downloaded the source jsl-0.3.0-src.tar.gz from http://www.javascriptlint.com/download.htm and then extracted it to a dir called jsl-0.3.0 on my Desktop. I then moved it to /usr/local/bin which I have read is my PATH. I also want to mention that I have Rhino 1.7 installed already.
When I try to run jsl from terminal I got the following message:
No command 'jsl' found, did you mean:
Command 'jls' from package 'sleuthkit' (universe)
Command 'js' from package 'rhino' (main)
Command 'sl' from package 'sl' (universe)
Command 'fsl' from package 'fsl' (multiverse)
jsl: command not found
So I how do I properly install JSLint?
How to install JSLint on Ubuntu:
Install nodejs (includes npm, the Node Package Manager):
sudo apt-get install nodejs
Install node-jslint. either globally:
sudo npm install -g jslint
or locally, and include it in $PATH:
npm install jslint
and add this line to your.bashrc (adjust version number as appropriate)
alias jslint='~/.npm/jslint/0.1.8/package/bin/jslint.js'
Here are the instructions I followed to have jslint working on Ubuntu 10.10/Vim 7.3 (and Mac OS X).
EDIT
So, I've just spotted a mistake in the given link. Here are the correct steps (assuming you have already downloaded and unpacked the archive to your desktop:
$ cd /path/to/jsl-0.3.0/src
$ make -f Makefile.ref
$ cp Linux_All_DBG.OBJ/jsl /usr/local/bin/jsl
At that point you can open a new terminal window and type $ jsl to display a quick help or invoke it from Vim or directly on a file in the terminal.
END EDIT
/usr/local/bin is not your "PATH", it's only one of the many directories that can be part your PATH environment variable. $ echo $PATH will tell you what these directories are and thus where you can put the jsl executable. You can also put it in another place and add an alias to your .bashrc.
Why do you expect to be able to run jslint from rhino?
You said you just copied the source to /usr/local/bin. You need to compile it. Follow the build instructions in the README.html
Unix
Use 'gmake -f Makefile.ref' to build. To compile optimized code, pass BUILD_OPT=1 on the gmake command line or preset it in the environment or Makefile.ref. NOTE: Do not attempt to use Makefile to build the standalone JavaScript engine. This file is used only for building the JS-engine in the Mozilla browser.
Each platform on which JS is built must have a *.mk configuration file in the js/src/config directory. The configuration file specifies the compiler/linker to be used and allows for customization of command-line options. To date, the build system has been tested on Solaris, AIX, HP/UX, OSF, IRIX, x86 Linux and Windows NT.
Most platforms will work with either the vendor compiler or gcc. (Except that HP builds only work using the native compiler. gcc won't link correctly with shared libraries on that platform. If someone knows a way to fix this, let us know.)
If you define JS_LIVECONNECT, gmake will descend into the liveconnect directory and build LiveConnect after building the JS engine.
To build a binary drop (a zip'ed up file of headers, libraries, binaries), check out mozilla/config and mozilla/nsprpub/config. Use 'gmake -f Makefile.ref nsinstall-target all export ship'
As for your question about the difference. It says on the download page that one is written in JavaScript itself.
We all stand on the shoulders of giants. I would like to especially acknowledge Douglas > Crockford's work on JSLint. This lint is itself written in JavaScript and is an
interesting and rather sophisticated script. Crockford's ideas about good coding
practices served as a springboard for many of these lint rules.
Look at your "jsl-0.3.0/src/README.html" file. This says:
1) You have a "source package". You need to "build" it (with a C compiler), then install your build.
2) This is more than just JSLint. It's an entire Javascript engine. Per the README:
This is the README file for the JavaScript Reference (JSRef, now
better known as SpiderMonkey) implementation. It consists of build
conventions and instructions, source code conventions, a design
walk-through, and a brief file-by-file description of the source.
JSRef builds a library or DLL containing the JavaScript runtime
(compiler, interpreter, decompiler, garbage collector, atom manager,
standard classes). It then compiles a small "shell" program and links
that with the library to make an interpreter that can be used
interactively and with test .js files to run scripts. The code has no
dependencies on the rest of the Mozilla codebase.
3) Here is Douglas Crockford's original JSLint page:
http://www.jslint.com/
4) And here is a a good example of how you might use JSLint locally, on your own PC:
http://code.google.com/p/js-ria-tools/wiki/JSLint
5) You say you already have Rhino - good. In Google, you'll find many obsolete links to www.jslint.com/rhino. Here's why - along with links to current Rhino-related info:
http://hustoknow.blogspot.com/2011/02/jslint-and-rhino-support.html
'Hope that helps!
Is there any tool to detect code duplication in JavaScript? I tried "PMD Duplicate code detector" but it is not supporting .js extension.
I would recommend JSCPD
Installation
npm install -g jscpd
Run
jscpd ./path/to/code
(you have several type of reporters, default is console, but you can use html like this: jscpd -r html ./path/to/code)
Other solutions:
JSinspect wasn't good for me because didn't support .ts and .tsx (jscpd supports 150+ formats
InteliJ IDEs (I'm a big fan of them) don't seem to work since WebStorm found no duplicated code.
You can use JS Inspect it detects copy-pasted and structurally similar code, also supports *.js
Installation
npm install -g jsinspect
Run
jsinspect -t 50 ./path/to/src
I would recommend looking at this thread (also on stackoverflow):
Javascript source code analysis ( specifically duplication checking )
IDE can have this functionality. I use IntelliJ, this IDE has a built-in duplicate code checking mechanism at 2 scopes:
Inline: Duplicate codes are underlined when opened in editor so that developer can easily catch and do refactoring.
Analysis: Go to menu Analyze->Locate Duplicates.., specify scope to run through and list all duplications.
I use notepad++ for my JavaScript development now. I am wondering if anyone has successfully integrated jsDoc with notepad++ for easy code commenting.
I was usint Aptana earlier and it was already integrated in it as ScriptDoc I believe but Aptana grew out to be painfully slow.
It it is possible to get jsDoc to work using the NppExec plugin. The steps are pretty straightforward, and should be a lot more straightforward after you read this.
In NPP (I'm using v. 5.9.3) open the plugin manager
Install NppExec plugin. (Npp restarts, I believe)
Go to the NppExec menu under plugins, choose the "Execute" menu option. A tiny scripting window opens.
Enter the following NppExec scriptlet:
NPP_SAVE
cls
SET jsDocPath = e:\javascript\jsdoc
cmd /c if "$(EXT_PART)"==".js" echo "Running JSDoc" && $(jsDocPath)\jsDocMe.cmd $(jsDocPath) "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)\jsDoc"
NPP_CONSOLE 0
(the line beginning with cmd and the following line should all appear on one line...)
Explanation: The set command sets a variable for where your jsDoc path is.
The cmd line first checks to see if the currently open file has a .js extension, and if so
it calls a .cmd file called jsDocMe.cmd, text below, passing in the jsDocPath, the full path of the current file, and the directory of the current file. The use of these variables can be seen in the .cmd file. The text of the .cmd file is below, a simple set of batch commands that changes to the jsDoc directory, runs the jsrun.jar file, and sends output to a new jsDoc folder beneath the current working directory.
cd /D %1
java -jar jsrun.jar app\run.js -d=%3 -a -p -t=templates/jsdoc %2
%3\index.html
exit
Notepad++ uses Scintilla, which does not parse inside comments, so I doubt there would be any plugins doing this. (See the comments for this feature request.)
I've been using N++ for JS development for years now, and I'm pretty sure there is no way to get JSDoc going, unless you write your own plugin.
You should always be aware that N++ is not an IDE. I've tested several, and I've always come to the same conclusion as you:
N++ == slim && fast; IDE == feature rich && slow;
IMHO, the IDE with the very best JSDoc support is WebStorm (commercial product).