Skip to content

Commit fa01495

Browse files
author
Monte Goulding
committed
Refactor to merge LiveCode Script and iRev
The linter now detects server scripts by looking for the opening tag in the script. This change enables us to use the same set of generated autocomplete snippets without duplicating them. It also makes maintenance easier by reducing grammar duplication.
1 parent 77c1b60 commit fa01495

File tree

7 files changed

+148
-1038
lines changed

7 files changed

+148
-1038
lines changed

grammars/irev.cson

Lines changed: 0 additions & 276 deletions
This file was deleted.

grammars/livecodescript.cson

Lines changed: 74 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,51 @@
55
'name': 'LiveCode Script'
66
'fileTypes': [
77
'livecodescript'
8+
'irev'
9+
'lc'
810
]
9-
'firstLineMatch': '^#!.*\\b(livecode)|^#\\s*-\\*-[^*]*mode:\\s*livecodescript[^*]*-\\*-'
11+
'firstLineMatch': '^<\\?rev\\b|<\\?lc\\b|<\\?livecode\\b|#!.*\\b(livecode)|^#\\s*-\\*-[^*]*mode:\\s*livecodescript[^*]*-\\*-|script \"([A-Za-z_0-9]*)\"'
12+
'injectionSelector': 'text'
1013
'patterns': [
1114
{
1215
include: "#language"
1316
}
17+
{
18+
begin: "<\\?rev|<\\?lc|<\\?livecode"
19+
end: "\\?>"
20+
patterns: [
21+
{
22+
include: "#revigniter"
23+
}
24+
{
25+
include: "#language"
26+
}
27+
]
28+
}
29+
{
30+
begin: "(((?<=\\?>)<)|<)\\?(?i:rev|lc|livecode)?"
31+
beginCaptures:
32+
"0":
33+
name: "punctuation.section.embedded.begin.livecodescript"
34+
"2":
35+
name: "meta.consecutive-tags.livecodescript"
36+
comment: "Catches embeded livecodescript code."
37+
end: "(\\?)>"
38+
endCaptures:
39+
"0":
40+
name: "punctuation.section.embedded.end.livecodescript"
41+
"1":
42+
name: "source.livecodescript"
43+
name: "source.livecodescript.embedded.line.html"
44+
patterns: [
45+
{
46+
include: "#revigniter"
47+
}
48+
{
49+
include: "#language"
50+
}
51+
]
52+
}
1453
]
1554
repository:
1655
constants:
@@ -31,25 +70,28 @@ repository:
3170
name: "comment.block.livecodescript"
3271
}
3372
{
34-
captures:
35-
"1":
36-
name: "punctuation.definition.comment.livecodescript"
37-
match: "(--).*?($\\n?)"
38-
name: "comment.line.double-dash.livecodescript"
73+
'begin': '--'
74+
'beginCaptures':
75+
'0':
76+
'name': 'punctuation.definition.comment.double-dash.livecodescript'
77+
'end': '\\n'
78+
'name': 'comment.line.livecodescript'
3979
}
4080
{
41-
captures:
42-
"1":
43-
name: "punctuation.definition.comment.livecodescript"
44-
match: "(#).*?($\\n?)"
45-
name: "comment.line.number-sign.livecodescript"
81+
'begin': '#'
82+
'beginCaptures':
83+
'0':
84+
'name': 'punctuation.definition.comment.number-sign.livecodescript'
85+
'end': '\\n'
86+
'name': 'comment.line.livecodescript'
4687
}
4788
{
48-
captures:
49-
"1":
50-
name: "punctuation.definition.comment.livecodescript"
51-
match: "(//).*?($\\n?)"
52-
name: "comment.line.number-sign.livecodescript"
89+
'begin': '//'
90+
'beginCaptures':
91+
'0':
92+
'name': 'punctuation.definition.comment.double-slash.livecodescript'
93+
'end': '\\n'
94+
'name': 'comment.line.livecodescript'
5395
}
5496
{
5597
match: "\\b(after|byte(s)*|codepoint(s)*|codeunit(s)*|english|segment(s)*|sentence(s)*|paragraph|the|trueWord(s)*|until|word(s)*|http|forever|descending|using|line|real8|with|seventh|for|stdout|finally|element|word|fourth|before|black|ninth|sixth|characters|chars|stderr|uInt(1|1s|2|2s)|stdin|string|lines|relative|rel|any|fifth|items|from|middle|mid|at|else|of|catch|then|third|it|file|milli(seconds|second|secs|sec)|int(1|1s|4|4s|ernet|2|2s)|normal|text|item|last|long|detailed|effective|uInt4|uInt4s|se(conds|cond|cs|c)|repeat|end\\s+repeat|URL|in|end\\s+try|into|switch|end\\s+switch|to|words|https|token|binfile|each|tenth|as|ticks|tick|system|real4|by|dateItems|without|cha(r|racter)|ascending|eighth|whole|dateTime|numeric|short|first|ftp|integer|abbreviated|abb(r|rev)|private|case|while|if|end\\s+if)\\b"
@@ -71,10 +113,12 @@ repository:
71113
"1":
72114
name: "storage.type.function.livecodescript"
73115
"2":
74-
name: "entity.name.function.livecodescript"
116+
name: "storage.type.function.livecodescript"
75117
"3":
76-
name: "variable.parameter.livecodescript"
77-
match: "((?i)function)\\s+([A-Za-z_0-9-]+)(\\s+[A-Za-z_0-9-]+,*?\\s+.*)*"
118+
name: "entity.name.function.livecodescript"
119+
"4":
120+
name: "punctuation.definition.variable.livecodescript"
121+
match: "(private\\s+)*((?i)function|on|command|before|after)\\s+([A-Za-z_0-9-]+)(\\s+@*[A-Za-z_0-9-]+,*?\\s+.*)*"
78122
name: "meta.function.livecodescript"
79123
}
80124
{
@@ -86,30 +130,6 @@ repository:
86130
match: "((?i)end){1}\\s+?([A-Za-z_0-9-]+)?"
87131
name: "meta.function.end.livecodescript"
88132
}
89-
{
90-
captures:
91-
"1":
92-
name: "storage.type.command.livecodescript"
93-
"2":
94-
name: "entity.name.command.livecodescript"
95-
"3":
96-
name: "variable.parameter.livecodescript"
97-
match: "((?i)before|after|command|on)\\s+([A-Za-z_0-9-]+)(\\s+[A-Za-z_0-9-]+,*?\\s+.*)*"
98-
name: "meta.command.livecodescript"
99-
}
100-
{
101-
captures:
102-
"1":
103-
name: "storage.type.test.livecodescript"
104-
"2":
105-
name: "entity.name.test.livecodescript"
106-
match: "((?i)blah){1}\\s+?([A-Za-z_0-9-]+)?"
107-
name: "meta.test.livecodescript"
108-
}
109-
{
110-
match: "((command|on)\\s+([A-Za-z_0-9-]+))"
111-
name: "meta.testA.livecodescript"
112-
}
113133
{
114134
match: "(\\-|\\+|\\*|/|%)"
115135
name: "keyword.operator.arithmetic.livecodescript"
@@ -228,3 +248,14 @@ repository:
228248
include: "#var_server"
229249
}
230250
]
251+
revigniter:
252+
patterns: [
253+
{
254+
match: "(?i)\\b(_rigAgentData|_rigBuild(Headers|Message)+|_rigCompileData|_rigDataFromSmtpSocket|_rigDisplay|_rigExplodeSegments|_rigFetchAssoc|_rigFlashdata(Mark|Sweep)+|_rigFormValidExecute|_rigGetSmtpData|_rigHaving|_rigInitHooksPrefs|_rigLike|_rigMaxMinAvgSum|_rigMergeCache|_rigParseRoutes|_rigRemove(NlCallback|UrlSuffix)+|_rigReset(PostArray|Select|Write)+|_rig(Autoloader|Initialize|InitLibrary|LoadLibrary|LoadStack|Scaffolding)+|_rigSanitizeGlobals|_rigSend(SmtpCommand|SmtpData)+|_rigSessGC|_rigSet(Boundaries|Charsets|Cookie|ErrorMessage|Header|Languages|Pragma|Request|Routing|Scaffolding|ScaffoldingTable|TableData|ViewPath)+|_rigSmtp(Authenticate|Connect|DataWritten)+|_rigUnwrapSpecials|_rigWhere(In)*|_rigWrite(Cache|Headers)+|rigAdd(TableRow|ToLibArray)+|rigAjaxPagination|rigAlpha(DashR|NumericR|R)+|rigAppendOutput|rigAuth(Logout|SetErrorDelimiters|SetMessageDelimiters)+|rigClear(Mail|TableVars)+|rigCompile(ProfilerTemplate|TableTemplate)+|rigDBcache|rigDb(CacheDelete|CacheDeleteAll|CacheSetPath|CloseParenthesis|DisplayError|Distinct|Driver|FlushCache|From|GroupBy|Having|Join|Like|Limit|NotLike|Offset|OpenParenthesis|OrderBy|OrHaving|OrLike|OrNotLike|OrWhere|OrWhereIn|OrWhereNotIn|ResetResultValue|Select|SetResultFromCache|SetRow|StartCache|StopCache|TransOff|TransStart|TransStrict|Where|WhereIn|WhereNotIn)+|rigDelete(AllDBcacheFiles|Cookie|DBcacheFiles|Files)+|rigDo(Exception|Upload)+|rigEnableProfiler|rigEncodeRevTags|rigExactLengthR|rigFmSubstitute|rigForceDownload|rigFragmentDate|rigHtmlSpecialChars|rigImage(NewSettings|Reproportion)+|rigImgClear|rigInit(Captcha|ializeCalendar|ializeImage|ializeJquery|ializeMail|ializePagination|ializeUpload)+|rigIntegerR|rigIs(NaturalNoZeroR|NaturalR|NumericR)+|rigJQ(addStatement|ajax|ajaxForm|alert|animate|callFunction|cb|close|closeStatement|condition|confirm|delegateLiveOneToggleUnbind|dieUndelegate|eachClose|eachOpen|effect|eventAlert|eventAnim|eventClose|eventEffect|eventOpen|functionClose|functionOpen|hover|open|prompt|set|triggerTriggerhandler|var|xhRequest)+|rigKeepSessFlashdata|rigLoad(Config|erLoadLibrary|Helper|Helpers|Language|Library|Model|Plugin|Plugins|Rdriver|Scaffolding|Stack|Stacks|Vars)+|rigLog(Exception|Message)+|rigMail(Attach|Bcc|CC|From|Message|Subject|To)+|rigMatchesR|rigMaxLengthR|rigMd5|rigMinLengthR|rigNumericR|rigOutputCache|rigParseCalTemplate|rigPrep(ForForm|URL)+|rigRedirect|rigReplyTo|rigRequiredR|rigReset(Alternator|SmtpVars)+|rigRunInitial(CalendarConfig|CaptchaConfig|EncryptConfig|FormvalidationConfig|ImageConfig|JqueryConfig|MailConfig|PaginationConfig|ProfilerConfig|SessionConfig|TableConfig|UploadConfig|UseragentConfig)+|rigScaff(Add|Delete|DoDelete|Edit|Insert|olding|Update|View)+|rigSelect(Avg|Max|Min|Sum)+|rigSess(Create|Destroy|Update|Write)+|rigSet(_sAltMessage|_sCrlf|_sMailtype|_sNewline|_sPriority|_sWordwrap|CaptchaMatrix|CaptchaNumberMatrix|Cipher|ConfigItem|ConfigRules|Controller|Cookie|DBdriverSetting|Directory|EmptyCellVal|EncryptionKey|ErrorDelimiters|Handler|Hash|Header|ImgError|InitialCalendarValue|InitialImageValue|InitialJqueryValue|InitialMailValue|InitialPaginationValue|Message|Output|ProfilerTableTemplate|Rules|SessFlashdata|SessUserdata|StatusHeader|TableCaption|TableHeading|TableTemplate)+|rigSha1|rigShow(404|404Page|Error)+|rigStripImageTags|rigSetPrefilledValues|rigTimeMark|rigTrans(Commit|Rollback)+|rigTrim|rigUnsetSessUserdata|rigUrlDecodeStr|rigValid(Base64R|EmailR|EmailsR|IpR)+|rigWriteLog|rigXssClean|rigWriteManifest)\\b"
255+
name: "support.command.livecodescript"
256+
}
257+
{
258+
match: "(?i)\\b(_rigARarrayMerge|_rigAttributesToString|_rigCacheInit|_rigCallHook|_rigCbName|_rigClean(InputData|InputKeys)+|_rigCloseDB|_rigCompactExplodedWords|_rigCompile(Benchmarks|ControllerInfo|Get|Post|Queries|Select|URIstring)+|_rigConnectString|_rigConvertAttribute|_rigCreateAliasFromTable|_rigDataSeek|_rigDb(Close|Execute|FieldData|ListColumns|ListTables|SetCharset|Version)+|_rigDefault(ProfilerTemplate|TableTemplate)+|_rigDelete|_rigEscapeIdentifiers|_rigExceptionHandler|_rigFetch(FromArray|UriString)+|_rigFilter(Attributes|Uri)+|_rigFromTables|_rigGet(AltMessage|ContentType|Hostname|MailEncoding|MessageID|MimeMessage|Pragma|Protocol|Time)+|_rigHasOperator|_rigHtml(EntityDecode|List)+|_rigInsert|_rigJs(ImgRemoval|LinkRemoval)+|_rigLimit|_rigLoadAgentFile|_rigMimeTypes|_rigOutDisplayCache|_rigParse(AssetHTML|Attributes|FormAttributes|QueryStr|URL)+|_rigPrep(Qencoding|Query|QuotedPrintable)+|_rigProtectIdentifiers|_rigReduceArray|_rigLoad|_rigRunHook|_rigSanitizeNaughtyHtml|_rigSend(WithMail|WithSendmail|WithSmtp)+|_rigSerializeSess|_rigSet(Browser|Date|Mobile|Platform|Robot)+|_rigSlashSegment|_rigSpoolEmail|_rigStrToArray|_rigTempMailPath|_rigTrackAliases|_rigTranslateFieldname|_rigTruncate|_rigUnserializeSess|_rigUpdate|_rigUriToAssoc|_rigValidate(QueryRequest|Request)+|_varPostFallback|_rigWriteImgSrcFile|_rigXor(Decode|Encode|Merge)+|rigAccept(Charset|Lang)+|rigAdd(Cslashes|Favicon|TrailingSlash)+|rigAdjustDate|rigAgent(CharSets|Languages|Platform|String)+|rigAjaxPaginationCode|rigAlternator|rigAnchor|rigAnchorPopUp|rigArray(Element|Keys|Merge|RandElement|Reverse|Splice|Values)+|rigASiteURL|rigAssocToURI|rigAuth(Activate|ChangePassword|ClearForgottenPasswordCode|ClearLoginAttempts|Deactivate|DeleteUser|EmailCheck|Errors|FetchConfigItem|ForgottenPassword|ForgottenPasswordCheck|ForgottenPasswordCode|GetAttemptsNum|Group|Groups|IdentityCheck|IncreaseLoginAttempts|InGroup|IsAdmin|IsMaxLoginAttemptsExceeded|LoggedIn|Login|Messages|MessageDelimiters|Register|RemoveFromGroup|ResetPassword|Update|User|UserGroups|Users|UsernameCheck)+|rigAutoLink|rigBaseURL|rigBatchBccSend|rigBrowser(Version)*|rigCacheVarsMerged|rigCalGenerate|rigCanWriteFileTo|rigCaptcha(Code|Style|MathProblem)+|rigCeil|rigCheck(CachePath|Type)+|rigClean(Email|MailAddress)+|rigCodepointToNum|rigCompileBinds|rigConfigItem|rigCookieExpirationDate|rigCreatePaginationLinks|rigCssAsset(URL)*|rigCurrent(URIstring|URL)+|rigDay(OfYear|sInMonth)+|rigDB(result)*|rigDb(AffectedRows|CacheOff|CacheOn|Connect|CountAll|CountAllResults|CurrentRow|Delete|ElapsedTime|EmptyTable|ErrorMessage|Escape|EscapeString|FieldData|FieldExists|FirstRow|Get|GetWhere|Initialize|Insert|InsertString|LastQuery|LastRow|ListFields|ListTables|NextRow|Platform|Prefix|Query|Row|RowArray|SetCharset|SimpleQuery|TableExists|TotalQueries|TransStatus|Truncate|Update|UpdateString|ValuesSet|Version)+|rigDecode|rigDefaultCalTemplate|rigDisplay(ImgErrors|UploadErrors)+|rigDynamic(CssAsset|GalleriaData)+|rigElapsedTime|rigElementsList|rigEncode|rigEscape(LikeStr|Str)+|rigExplodeImgName|rigFetch(ActiveGroup|AgentsData|AllMimeTypes|ConfigItem|Controller|ControllerHandler|ControllerMethods|DBactiveRecSetting|DBdriverSetting|DBlibLoaded|DBsetting|DBsettingsAll|Directory|DocTypes|DriverSpecificSetting|Markers|MimeType|Rsegment|Scaffolding|ScaffoldingTable|Segment)+|rigFieldData|rigFile(_get_contents|Info|NameFromPath|NameSecurity)+|rigFilter(Dots|edFiles|edFilesWithPaths|edFolders|edFoldersWithPaths|FolderDots)+|rigForm(Button|Checkbox|Close|DropDown|Error|Fieldset|FieldsetClose|Hidden|Input|Label|Mail|MailReplace|Multiselect|Open|OpenMultiPart|Password|Prep|Radio|Textarea|Upload|ValidError|ValidErrorString|ValidRun|ValidSelectCheckboxRadio|ValidSetCheckbox|ValidSetRadio|ValidSetSelect|ValidSetValue)+|rigGalleriaData|rigGenerateTable|rigGet(CaptchaHash|CaptchaNum|Config|Cookie|Cookies|DayNames|DirFileInfo|EncryptionKey|FileInfo|FileNames|ImageProperties|MimeByExtension|MonthName|Output|TotalDays)+|rigHash|rigHelperIsLoaded|rigHexDigest|rigHtml(Br|DocType|Heading|Img|JsLink|LinkTag|Meta|Nbs|OL|SpecialChars|UL)+|rigImage(Asset|Crop|ProcessImagemagick|Resize|Rotate|SourceFile|SourceTag|Watermark)+|rigGmtToLocal|rigHumanToTimestamp|rigImgAssetURL|rigIM(knownFonts|version)+|rigImplode|rigInArray|rigIndexPage|rigIpAddress|rigIs(Browser|MainConfigLoaded|LeapYear|Mobile|NumberedArray|Referral|Robot|WriteType)+|rigJQ(ajaxR|alertR|animateR|closeStatementR|conditionR|confirmR|eachCloseR|eachOpenR|effectR|getR|promptR|readyClose|readyOpen|setR|uerySource|varR|xhRequestR)+|rigJs(Asset|AssetURL|ScriptClose|ScriptOpen)+|rigLang(LangLine|Line|LoadLang)+|rigLibIsLoaded|rigList(Fields|Files|FilesWithPaths|FoldersWithPaths)+|rigLoad(ConfigFile|Database|File|ScaffoldingLanguage|View)+|rigLocalToGMT|rigMail(Send|ToLink|ValidEmail)+|rigMakeTableColumns|rigMarkdown|rigMarkdown(Available|Version)+|rigMdate|rigMemoryUsage|rigMobile|rigMysqlTimeToSeconds|rigNativeCharToNum|rigNl2br|rigNow|rigNum(ber_format|Fields|Rows|ToCodepoint|ToNativeChar)+|rigOtherAssetURL|rigOverlayWatermark|rigParseRequestUri|rigPathWithoutFileName|rigPreg(Quote|Replace)+|rigPrimary|rigPrintMailDebugger|rigProfilerOutput|rigProtectIdentifiers|rigQ|rigQueryToJSON|rigQueryValues|rigQuotesToEntities|rigRandom(CaptchaNum|Num|String)+|rigRawURLdecode|rigRead(BinFile|File|SQLcache)+|rigReduce(DoubleSlashes|Multiples)+|rigReferrer|rigRemoveInvisibleCharacters|rigRepeater|rigResetButton|rigCaptcha|rigRobot|rigRSegmentArray|rigRTrim|rigRuri(String|ToAssoc)+|rigSafeMailToLink|rigScaffoldingRequest|rigSegmentArray|rigSendEmail|rigSess(AllUserdata|Flashdata|Read|Userdata)+|rigSet(Checkbox|Radio|Select|SelectCheckboxRadio|Value)+|rigShellEscape|rigShowErrorPage|rigSite(Links|URL)+|rigSlash(Item|Rsegment|Segment)+|rigSqlDateTimeToIntDate|rigStandardDate|rigStrip(_slashes|HTML|ImgTags|Quotes|Slashes)+|rigSubmitButton|rigSubstr(ToNum)*|rigSymbolicPermissions|rigSystemURL|rigText(Watermark|Decode)+|rigTime(span|stampToHuman|zoneMenu|zones)+|rigTotal(Rsegments|Segments)+|rigTrans(Begin|Complete|latedDateItem)+|rigTrim(Slashes)*|rigUcwords|rigUnwrappedWrapMarkersString|rigUploadData|rigUri(Adjusted|String|ToAssoc)+|rigUrl(Prep|Title)+|rigUserAgent|rigValid(ateEmail|ationErrors|CaptchaUserInput|Email|IP)+|rigVar(Cookie|Get|GetPost|Post|Server)+|rigWeekOfYear|rigWord(_wrap|Wrap)+|rigWrite(File|SQLcache)+|rigXmlConvert|rigXss(Clean|Hash)+)\\b"
259+
name: "support.function.livecodescript"
260+
}
261+
]

lib/main.coffee

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ module.exports =
6262
provideLinter: ->
6363
helpers = require('atom-linter')
6464
provider =
65-
grammarScopes: ['source.livecodescript', 'source.iRev', 'source.lcb']
65+
grammarScopes: ['source.livecodescript', 'source.lcb']
6666
scope: 'file'
6767
lintOnFly: true
6868
lint: (textEditor) =>

0 commit comments

Comments
 (0)