f1cf1a534c
I continued profiling the matchbrackets addon for T270237 and run into performance issues that turned out to be unrelated to the addon. The flame graph highlighted a "match" function. Note this is not the String.match() from JavaScript, but something in the CodeMirror lib: StringStream.prototype.match = function (pattern) { var match = this.string.match(pattern); if (match && match.index > 0) { return null; } return match; } (Note: I simplified this code so we can focus on the bug.) When the pattern is a regular expression, it's executed via JavaScript's String.match(). The function then checks if there was a match and if it's at the start of the string. If not, it's not a match and doesn't return one. In other words: Even if there is a match somewhere in the string, the function acts as if there was no match. When we change all patterns to be anchored via ^, they don't scan the entire string any more but return much ealier when there is no match at the start of the string. We are effectively replacing nested loops (hidden in the patterns) with single calls. This bug exists since 2014. The disabled line in the matchbrackets addon is just dead code. I don't remove it to document the fact that we disabled it. Bug: T270237 Bug: T270317 Change-Id: Icbb1122e6a3b26c0606726ff405e108931d185be |
||
---|---|---|
.. | ||
addon/edit | ||
lib | ||
mode | ||
AUTHORS | ||
CHANGELOG.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md |
CodeMirror
CodeMirror is a versatile text editor implemented in JavaScript for the browser. It is specialized for editing code, and comes with over 100 language modes and various addons that implement more advanced editing functionality. Every language comes with fully-featured code and syntax highlighting to help with reading and editing complex code.
A rich programming API and a CSS theming system are available for customizing CodeMirror to fit your application, and extending it with new functionality.
You can find more information (and the manual) on the project page. For questions and discussion, use the discussion forum.
See CONTRIBUTING.md for contributing guidelines.
The CodeMirror community aims to be welcoming to everybody. We use the Contributor Covenant (1.1) as our code of conduct.
Installation
Either get the zip file with the latest version, or make sure you have Node installed and run:
npm install codemirror
NOTE: This is the source repository for the library, and not the distribution channel. Cloning it is not the recommended way to install the library, and will in fact not work unless you also run the build step.
Quickstart
To build the project, make sure you have Node.js installed (at least version 6)
and then npm install
. To run, just open index.html
in your
browser (you don't need to run a webserver). Run the tests with npm test
.