Crafty/build/parseNodes.coffee at develop · starwed/Crafty · GitHub
https://github.com/starwed/Crafty/blob/develop/build/parseNodes.coffee • 284 KB fetched Open original page
Crafty/build/parseNodes.coffee at develop · starwed/Crafty · GitHub
Skip to content
Navigation Menu
Sign in Appearance settings
* Platform
* AI CODE CREATION
* GitHub Copilot Write better code with AI
* GitHub Copilot app Direct agents from issue to merge
* MCP Registry Integrate external tools
* DEVELOPER WORKFLOWS
* Actions Automate any workflow
* Codespaces Instant dev environments
* Issues Plan and track work
* Code Review Manage code changes
* Code Quality Enforce quality at merge
* APPLICATION SECURITY
* GitHub Advanced Security Find and fix vulnerabilities
* Code security Secure your code as you build
* Secret protection Stop leaks before they start
* EXPLORE
* Why GitHub
* Documentation
* Blog
* Changelog
* Marketplace
View all features
* Solutions
* BY COMPANY SIZE
* Enterprises
* Small and medium teams
* Startups
* Nonprofits
* BY USE CASE
* App Modernization
* DevSecOps
* DevOps
* CI/CD
* View all use cases
* BY INDUSTRY
* Healthcare
* Financial services
* Manufacturing
* Government
* View all industries
View all solutions
* Resources
* EXPLORE BY TOPIC
* AI
* Software Development
* DevOps
* Security
* View all topics
* EXPLORE BY TYPE
* Customer stories
* Events & webinars
* Ebooks & reports
* Business insights
* GitHub Skills
* SUPPORT & SERVICES
* Documentation
* Customer support
* Community forum
* Trust center
* Partners
View all resources
* Open Source
* COMMUNITY
* GitHub Sponsors Fund open source developers
* PROGRAMS
* Security Lab
* Maintainer Community
* GitHub Stars
* Archive Program
* REPOSITORIES
* Topics
* Trending
* Collections
* Enterprise
* ENTERPRISE SOLUTIONS
* Enterprise platform AI-powered developer platform
* AVAILABLE ADD-ONS
* GitHub Advanced Security Enterprise-grade security features
* Copilot for Business Enterprise-grade AI features
* Premium Support Enterprise-grade 24/7 support
* Pricing
Search /
Sign in
Sign up Appearance settings
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
starwed
/
Crafty
Public
forked from craftyjs/Crafty
*
Notifications
You must be signed in to change notification settings
*
Fork
1
*
Star
2
*
Code
*
Pull requests
0
*
Actions
*
Projects
*
Wiki
*
Security and quality
0
*
Insights
Additional navigation options
*
Code
*
Pull requests
*
Actions
*
Projects
*
Wiki
*
Security and quality
*
Insights
Files Expand file tree
develop
Breadcrumbs
* Crafty
* / build
/ parseNodes.coffee
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
159 lines (132 loc) · 3.66 KB
develop
Breadcrumbs
* Crafty
* / build
/ parseNodes.coffee
Copy path
Top
File metadata and controls
* Code
* Blame
159 lines (132 loc) · 3.66 KB
Raw
Copy raw file
Download raw file
Open symbols panel Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
fs = require 'fs'
class nodeIterator
i: 0
constructor: (nodes) ->
@nodes = nodes
current: ()-> if @i < @nodes.length then @nodes[@i] else null
next: ()->
@i++
return @current()
hasNext: ()-> @i < @nodes.length - 1
exports.structureBlocks = (blocks) ->
structuredJson = for block in blocks
if block?
try
structureBlock(block)
catch e
console.log("Error!\n\n", e)
console.log(block)
return structuredJson
structureBlock = (block)->
iterator = new nodeIterator(block.nodes)
block = {
file: block.file
startLine: block.line
endLine: block.endLine
commit: block.commit
contents:[]
}
while ( iterator.current() )
nextNode(block, iterator)
return block
nextNode = (parent, iterator)->
t = iterator.current().type
try
addNode[iterator.current().type](parent, iterator)
catch e
console.log("Problem adding node ", t)
console.log(e)
iterator.next();
# All these functions are guaranteed to leave the iterator in a state where current() hasn't yet been added to anything
addNode =
raw: (parent, iterator)->
parent.contents.push(iterator.current())
iterator.next()
note: (parent, iterator)->
parent.contents.push(iterator.current())
iterator.next()
warning: (parent, iterator)->
parent.contents.push(iterator.current())
iterator.next()
xref: (parent, iterator)->
base = iterator.current()
while (iterator.next()?.type is "xref")
base.xrefs = base.xrefs.concat( iterator.current().xrefs)
parent.contents.push( base )
trigger: (parent, iterator)->
base = {
type: "triggers",
events: [ iterator.current() ]
}
while (iterator.next()?.type is "trigger")
base.events.push( iterator.current() )
parent.contents.push( base )
example: (parent, iterator)->
base = {
type: "example",
contents: []
}
iterator.next()
while (iterator.current()?.type is "raw")
nextNode(base, iterator)
parent.contents.push(base)
# Because the description of the method isn't directly delineated, this is a bit hairy to parse
sign: (parent, iterator)->
base = {
type: "method"
signature: iterator.current().value
contents: []
}
current = iterator.next()
while (current)
switch iterator.current().type
when "raw"
rawNode = iterator.current()
next = iterator.next()
# Test to see if the raw test node should be considered part of this block or not!
if next?.type is "param" or next?.type is "return"
base.contents.push(rawNode)
current = next
else
parent.contents.push(base)
parent.contents.push(rawNode)
return
when "param", "return"
nextNode(base, iterator)
current = iterator.current()
else
current = null
parent.contents.push(base)
param: (parent, iterator)->
parent.contents.push(iterator.current())
iterator.next()
return: (parent, iterator)->
parent.contents.push(iterator.current())
iterator.next()
comp: (parent, iterator)->
parent.comp = iterator.current().value
iterator.next()
category: (parent, iterator)->
parent.categories = iterator.current().categories
iterator.next()
name: (parent, iterator)->
parent.name = iterator.current().value
iterator.next()
requires: (parent, iterator)->
parent.requires = iterator.current().value
iterator.next()
kind: (parent, iterator)->
parent.kind = iterator.current().value
iterator.next()
private: (parent, iterator)->
parent.private = true
iterator.next()
#These are used only in 2d math files, and so don't have much meaning!
public: (parent, iterator)->
parent.private = false;
iterator.next()
class: (parent, iterator)->
parent.class = iterator.current().value
iterator.next()
static: (parent, iterator)->
iterator.next()
Footer
(c) 2026 GitHub, Inc.
Footer navigation
*
Terms
*
Privacy
*
Security
*
Status
*
Community
*
Docs
*
Contact
*
Manage cookies
*
Do not share my personal information
You can’t perform that action at this time.
Links found on this page
- Skip to content [direct]
- Sign in [direct]
- GitHub Copilot Write better code with AI [direct]
- GitHub Copilot app Direct agents from issue to merge [direct]
- MCP Registry Integrate external tools [direct]
- Actions Automate any workflow [direct]
- Codespaces Instant dev environments [direct]
- Issues Plan and track work [direct]
- Code Review Manage code changes [direct]
- Code Quality Enforce quality at merge [direct]
- GitHub Advanced Security Find and fix vulnerabilities [direct]
- Code security Secure your code as you build [direct]
- Secret protection Stop leaks before they start [direct]
- Why GitHub [direct]
- Documentation [direct]
- Blog [direct]
- Changelog [direct]
- Marketplace [direct]
- View all features [direct]
- Enterprises [direct]
- Small and medium teams [direct]
- Startups [direct]
- Nonprofits [direct]
- App Modernization [direct]
- DevSecOps [direct]
- DevOps [direct]
- CI/CD [direct]
- View all use cases [direct]
- Healthcare [direct]
- Financial services [direct]
- Manufacturing [direct]
- Government [direct]
- View all industries [direct]
- View all solutions [direct]
- AI [direct]
- Software Development [direct]
- DevOps [direct]
- Security [direct]
- View all topics [direct]
- Customer stories [direct]
- Events & webinars [direct]
- Ebooks & reports [direct]
- Business insights [direct]
- GitHub Skills [direct]
- Customer support [direct]
- Community forum [direct]
- Trust center [direct]
- Partners [direct]
- View all resources [direct]
- GitHub Sponsors Fund open source developers [direct]
- Security Lab [direct]
- Maintainer Community [direct]
- GitHub Stars [direct]
- Archive Program [direct]
- Topics [direct]
- Trending [direct]
- Collections [direct]
- Copilot for Business Enterprise-grade AI features [direct]
- Premium Support Enterprise-grade 24/7 support [direct]
- Pricing [direct]
- Sign up [direct]
- starwed [direct]
- Crafty [direct]
- craftyjs/Crafty [direct]
- Notifications [direct]
- Pull requests
0 [direct]
- Actions [direct]
- Projects [direct]
- Wiki [direct]
- Security and quality
0 [direct]
- Insights [direct]
- Crafty [direct]
- build [direct]
- History [direct]
- Raw [direct]
- Terms [direct]
- Privacy [direct]
- Security [direct]
- Status [direct]
- Community [direct]
|
|