Skip to content

Commit e4ae371

Browse files
committed
support yin elements in extensions
1 parent be6ef6f commit e4ae371

File tree

11 files changed

+413
-258
lines changed

11 files changed

+413
-258
lines changed

meta/compile.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ func (c *compiler) extension(e *Extension) error {
203203
}
204204

205205
// TODO: check args of extension match the allowed args of the definition
206+
206207
return nil
207208
}
208209

meta/core.go

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,21 +1094,25 @@ func (y *ExtensionDefArg) YinElement() bool {
10941094
// but would have OnKeyword of "description" to distinguish it from extensions
10951095
// extension of container itself.
10961096
type Extension struct {
1097-
parent Meta
1098-
originalParent Definition
1099-
prefix string
1100-
ident string
1101-
keyword string
1102-
def *ExtensionDef
1103-
arg string
1097+
parent Meta
1098+
prefix string
1099+
ident string
1100+
keyword string
1101+
def *ExtensionDef
1102+
arg string
11041103

11051104
// yin
1106-
typedefs map[string]*Typedef
1107-
groupings map[string]*Grouping
1108-
actions map[string]*Rpc
1109-
notifications map[string]*Notification
1105+
desc string
1106+
contact string
1107+
org string
1108+
ref string
1109+
11101110
dataDefs []Definition
11111111
dataDefsIndex map[string]Definition
1112+
notifications map[string]*Notification
1113+
actions map[string]*Rpc
1114+
typedefs map[string]*Typedef
1115+
groupings map[string]*Grouping
11121116

11131117
// yes even extensions can have extensions
11141118
extensions []*Extension
@@ -1154,6 +1158,25 @@ func (y *Extension) ExtDefinition() *ExtensionDef {
11541158
return y.def
11551159
}
11561160

1161+
func (y *Extension) Organization() string {
1162+
return y.org
1163+
}
1164+
1165+
func (y *Extension) Contact() string {
1166+
return y.contact
1167+
}
1168+
1169+
func (y *Extension) getOriginalParent() Definition {
1170+
p := y.parent
1171+
for p != nil {
1172+
if d, valid := p.(Definition); valid {
1173+
return d
1174+
}
1175+
p = p.Parent()
1176+
}
1177+
return nil
1178+
}
1179+
11571180
type Bit struct {
11581181
ident string
11591182
desc string

meta/core_gen.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func (m *Module) Extensions() []*Extension {
4141
}
4242

4343
func (m *Module) addExtension(extension *Extension) {
44+
extension.parent = m
4445
m.extensions = append(m.extensions, extension)
4546
}
4647

@@ -269,6 +270,7 @@ func (m *Import) Extensions() []*Extension {
269270
}
270271

271272
func (m *Import) addExtension(extension *Extension) {
273+
extension.parent = m
272274
m.extensions = append(m.extensions, extension)
273275
}
274276

@@ -305,6 +307,7 @@ func (m *Include) Extensions() []*Extension {
305307
}
306308

307309
func (m *Include) addExtension(extension *Extension) {
310+
extension.parent = m
308311
m.extensions = append(m.extensions, extension)
309312
}
310313

@@ -354,6 +357,7 @@ func (m *Choice) Extensions() []*Extension {
354357
}
355358

356359
func (m *Choice) addExtension(extension *Extension) {
360+
extension.parent = m
357361
m.extensions = append(m.extensions, extension)
358362
}
359363

@@ -502,6 +506,7 @@ func (m *ChoiceCase) Extensions() []*Extension {
502506
}
503507

504508
func (m *ChoiceCase) addExtension(extension *Extension) {
509+
extension.parent = m
505510
m.extensions = append(m.extensions, extension)
506511
}
507512

@@ -655,6 +660,7 @@ func (m *Revision) Extensions() []*Extension {
655660
}
656661

657662
func (m *Revision) addExtension(extension *Extension) {
663+
extension.parent = m
658664
m.extensions = append(m.extensions, extension)
659665
}
660666

@@ -704,6 +710,7 @@ func (m *Container) Extensions() []*Extension {
704710
}
705711

706712
func (m *Container) addExtension(extension *Extension) {
713+
extension.parent = m
707714
m.extensions = append(m.extensions, extension)
708715
}
709716

@@ -999,6 +1006,7 @@ func (m *List) Extensions() []*Extension {
9991006
}
10001007

10011008
func (m *List) addExtension(extension *Extension) {
1009+
extension.parent = m
10021010
m.extensions = append(m.extensions, extension)
10031011
}
10041012

@@ -1349,6 +1357,7 @@ func (m *Leaf) Extensions() []*Extension {
13491357
}
13501358

13511359
func (m *Leaf) addExtension(extension *Extension) {
1360+
extension.parent = m
13521361
m.extensions = append(m.extensions, extension)
13531362
}
13541363

@@ -1526,6 +1535,7 @@ func (m *LeafList) Extensions() []*Extension {
15261535
}
15271536

15281537
func (m *LeafList) addExtension(extension *Extension) {
1538+
extension.parent = m
15291539
m.extensions = append(m.extensions, extension)
15301540
}
15311541

@@ -1753,6 +1763,7 @@ func (m *Any) Extensions() []*Extension {
17531763
}
17541764

17551765
func (m *Any) addExtension(extension *Extension) {
1766+
extension.parent = m
17561767
m.extensions = append(m.extensions, extension)
17571768
}
17581769

@@ -1867,6 +1878,7 @@ func (m *Grouping) Extensions() []*Extension {
18671878
}
18681879

18691880
func (m *Grouping) addExtension(extension *Extension) {
1881+
extension.parent = m
18701882
m.extensions = append(m.extensions, extension)
18711883
}
18721884

@@ -2081,6 +2093,7 @@ func (m *Uses) Extensions() []*Extension {
20812093
}
20822094

20832095
func (m *Uses) addExtension(extension *Extension) {
2096+
extension.parent = m
20842097
m.extensions = append(m.extensions, extension)
20852098
}
20862099

@@ -2160,6 +2173,7 @@ func (m *Refine) Extensions() []*Extension {
21602173
}
21612174

21622175
func (m *Refine) addExtension(extension *Extension) {
2176+
extension.parent = m
21632177
m.extensions = append(m.extensions, extension)
21642178
}
21652179

@@ -2334,6 +2348,7 @@ func (m *RpcInput) Extensions() []*Extension {
23342348
}
23352349

23362350
func (m *RpcInput) addExtension(extension *Extension) {
2351+
extension.parent = m
23372352
m.extensions = append(m.extensions, extension)
23382353
}
23392354

@@ -2511,6 +2526,7 @@ func (m *RpcOutput) Extensions() []*Extension {
25112526
}
25122527

25132528
func (m *RpcOutput) addExtension(extension *Extension) {
2529+
extension.parent = m
25142530
m.extensions = append(m.extensions, extension)
25152531
}
25162532

@@ -2701,6 +2717,7 @@ func (m *Rpc) Extensions() []*Extension {
27012717
}
27022718

27032719
func (m *Rpc) addExtension(extension *Extension) {
2720+
extension.parent = m
27042721
m.extensions = append(m.extensions, extension)
27052722
}
27062723

@@ -2807,6 +2824,7 @@ func (m *Notification) Extensions() []*Extension {
28072824
}
28082825

28092826
func (m *Notification) addExtension(extension *Extension) {
2827+
extension.parent = m
28102828
m.extensions = append(m.extensions, extension)
28112829
}
28122830

@@ -2969,6 +2987,7 @@ func (m *Typedef) Extensions() []*Extension {
29692987
}
29702988

29712989
func (m *Typedef) addExtension(extension *Extension) {
2990+
extension.parent = m
29722991
m.extensions = append(m.extensions, extension)
29732992
}
29742993

@@ -3069,6 +3088,7 @@ func (m *Augment) Extensions() []*Extension {
30693088
}
30703089

30713090
func (m *Augment) addExtension(extension *Extension) {
3091+
extension.parent = m
30723092
m.extensions = append(m.extensions, extension)
30733093
}
30743094

@@ -3249,6 +3269,7 @@ func (m *AddDeviate) Extensions() []*Extension {
32493269
}
32503270

32513271
func (m *AddDeviate) addExtension(extension *Extension) {
3272+
extension.parent = m
32523273
m.extensions = append(m.extensions, extension)
32533274
}
32543275

@@ -3389,6 +3410,7 @@ func (m *ReplaceDeviate) Extensions() []*Extension {
33893410
}
33903411

33913412
func (m *ReplaceDeviate) addExtension(extension *Extension) {
3413+
extension.parent = m
33923414
m.extensions = append(m.extensions, extension)
33933415
}
33943416

@@ -3513,6 +3535,7 @@ func (m *DeleteDeviate) Extensions() []*Extension {
35133535
}
35143536

35153537
func (m *DeleteDeviate) addExtension(extension *Extension) {
3538+
extension.parent = m
35163539
m.extensions = append(m.extensions, extension)
35173540
}
35183541

@@ -3620,6 +3643,7 @@ func (m *Deviation) Extensions() []*Extension {
36203643
}
36213644

36223645
func (m *Deviation) addExtension(extension *Extension) {
3646+
extension.parent = m
36233647
m.extensions = append(m.extensions, extension)
36243648
}
36253649

@@ -3702,6 +3726,7 @@ func (m *Identity) Extensions() []*Extension {
37023726
}
37033727

37043728
func (m *Identity) addExtension(extension *Extension) {
3729+
extension.parent = m
37053730
m.extensions = append(m.extensions, extension)
37063731
}
37073732

@@ -3760,6 +3785,7 @@ func (m *Feature) Extensions() []*Extension {
37603785
}
37613786

37623787
func (m *Feature) addExtension(extension *Extension) {
3788+
extension.parent = m
37633789
m.extensions = append(m.extensions, extension)
37643790
}
37653791

@@ -3788,6 +3814,7 @@ func (m *IfFeature) Extensions() []*Extension {
37883814
}
37893815

37903816
func (m *IfFeature) addExtension(extension *Extension) {
3817+
extension.parent = m
37913818
m.extensions = append(m.extensions, extension)
37923819
}
37933820

@@ -3826,6 +3853,7 @@ func (m *When) Extensions() []*Extension {
38263853
}
38273854

38283855
func (m *When) addExtension(extension *Extension) {
3856+
extension.parent = m
38293857
m.extensions = append(m.extensions, extension)
38303858
}
38313859

@@ -3862,6 +3890,7 @@ func (m *Must) Extensions() []*Extension {
38623890
}
38633891

38643892
func (m *Must) addExtension(extension *Extension) {
3893+
extension.parent = m
38653894
m.extensions = append(m.extensions, extension)
38663895
}
38673896

@@ -3934,6 +3963,7 @@ func (m *ExtensionDef) Extensions() []*Extension {
39343963
}
39353964

39363965
func (m *ExtensionDef) addExtension(extension *Extension) {
3966+
extension.parent = m
39373967
m.extensions = append(m.extensions, extension)
39383968
}
39393969

@@ -3975,6 +4005,7 @@ func (m *ExtensionDefArg) Extensions() []*Extension {
39754005
}
39764006

39774007
func (m *ExtensionDefArg) addExtension(extension *Extension) {
4008+
extension.parent = m
39784009
m.extensions = append(m.extensions, extension)
39794010
}
39804011

@@ -3994,11 +4025,29 @@ func (m *Extension) Parent() Meta {
39944025
}
39954026

39964027

4028+
// Description of Extension
4029+
func (m *Extension) Description() string {
4030+
return m.desc
4031+
}
4032+
4033+
func (m *Extension) setDescription(desc string) {
4034+
m.desc = desc
4035+
}
4036+
4037+
func (m *Extension) Reference() string {
4038+
return m.ref
4039+
}
4040+
4041+
func (m *Extension) setReference(ref string) {
4042+
m.ref = ref
4043+
}
4044+
39974045
func (m *Extension) Extensions() []*Extension {
39984046
return m.extensions
39994047
}
40004048

40014049
func (m *Extension) addExtension(extension *Extension) {
4050+
extension.parent = m
40024051
m.extensions = append(m.extensions, extension)
40034052
}
40044053

@@ -4141,10 +4190,6 @@ func (m *Extension) Definition(ident string) Definition {
41414190
return nil
41424191
}
41434192

4144-
func (m *Extension) getOriginalParent() Definition {
4145-
return m.originalParent
4146-
}
4147-
41484193
func (m *Extension) clone(parent Meta) interface{} {
41494194
copy := *m
41504195
copy.parent = parent
@@ -4246,6 +4291,7 @@ func (m *Enum) Extensions() []*Extension {
42464291
}
42474292

42484293
func (m *Enum) addExtension(extension *Extension) {
4294+
extension.parent = m
42494295
m.extensions = append(m.extensions, extension)
42504296
}
42514297

meta/core_gen.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ func (m *{{.Name}}) Extensions() []*Extension {
6161
}
6262

6363
func (m *{{.Name}}) addExtension(extension *Extension) {
64+
{{- if .Parent }}
65+
extension.parent = m
66+
{{- end}}
6467
m.extensions = append(m.extensions, extension)
6568
}
6669

meta/meta.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ type Describable interface {
5656
type Definition interface {
5757
Meta
5858
Identifiable
59-
getOriginalParent() Definition
6059
setParent(p Meta)
60+
getOriginalParent() Definition
6161
}
6262

6363
type HasPresence interface {

0 commit comments

Comments
 (0)