typegen: further reference shorthand for members of current class
This commit is contained in:
		
							parent
							
								
									1f47b15963
								
							
						
					
					
						commit
						1fc815f73e
					
				
					 2 changed files with 73 additions and 47 deletions
				
			
		| 
						 | 
				
			
			@ -663,45 +663,62 @@ fn parse_details(comment: Comment) -> String {
 | 
			
		|||
						})
 | 
			
		||||
						.unwrap_or_else(|| (src.len(), src));
 | 
			
		||||
 | 
			
		||||
					let mut split = ty.rsplit_once('.').unwrap_or(("", ty));
 | 
			
		||||
 | 
			
		||||
					let member = split
 | 
			
		||||
						.1
 | 
			
		||||
						.chars()
 | 
			
		||||
						.next()
 | 
			
		||||
						.unwrap()
 | 
			
		||||
						.is_lowercase()
 | 
			
		||||
						.then(|| {
 | 
			
		||||
							let prop = split.1;
 | 
			
		||||
							split = split.0.rsplit_once('.').unwrap_or(("", split.0));
 | 
			
		||||
							prop
 | 
			
		||||
						})
 | 
			
		||||
						.unwrap_or("");
 | 
			
		||||
					// special case for . as it is contained in valid types as well
 | 
			
		||||
					if ty.ends_with('.') {
 | 
			
		||||
						end -= 1;
 | 
			
		||||
						ty = &ty[..ty.len() - 1];
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					let (prop, func, signal) = match member {
 | 
			
		||||
						name if name.ends_with("()") => ("", &name[..name.len() - 2], ""),
 | 
			
		||||
						name if name.ends_with("(s)") => ("", "", &name[..name.len() - 3]),
 | 
			
		||||
						name => (name, "", ""),
 | 
			
		||||
					let (ty, member) = match ty.chars().next() {
 | 
			
		||||
						None => (None, None),
 | 
			
		||||
						Some(c) if c.is_lowercase() => (None, Some(ty)),
 | 
			
		||||
						Some(_) => {
 | 
			
		||||
							let mut split = ty.rsplit_once('.').unwrap_or(("", ty));
 | 
			
		||||
 | 
			
		||||
							let member = split
 | 
			
		||||
								.1
 | 
			
		||||
								.chars()
 | 
			
		||||
								.next()
 | 
			
		||||
								.unwrap()
 | 
			
		||||
								.is_lowercase()
 | 
			
		||||
								.then(|| {
 | 
			
		||||
									let prop = split.1;
 | 
			
		||||
									split = split.0.rsplit_once('.').unwrap_or(("", split.0));
 | 
			
		||||
									prop
 | 
			
		||||
								})
 | 
			
		||||
								.unwrap_or("");
 | 
			
		||||
 | 
			
		||||
							let (mut module, name) = split;
 | 
			
		||||
 | 
			
		||||
							if module.is_empty() {
 | 
			
		||||
								module = comment.module;
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							(Some((module, name)), Some(member))
 | 
			
		||||
						},
 | 
			
		||||
					};
 | 
			
		||||
 | 
			
		||||
					let (mut module, name) = split;
 | 
			
		||||
					let (membertype, membername) = match member {
 | 
			
		||||
						None => ("", ""),
 | 
			
		||||
						Some(name) if name.ends_with("()") => ("func", &name[..name.len() - 2]),
 | 
			
		||||
						Some(name) if name.ends_with("(s)") => ("signal", &name[..name.len() - 3]),
 | 
			
		||||
						Some(name) => ("prop", name),
 | 
			
		||||
					};
 | 
			
		||||
 | 
			
		||||
					if module.is_empty() {
 | 
			
		||||
						module = comment.module;
 | 
			
		||||
					}
 | 
			
		||||
					let ((linktype, module), name) = match ty {
 | 
			
		||||
						Some((module, name)) => {
 | 
			
		||||
							let module = match module {
 | 
			
		||||
								module if module.starts_with("Quickshell") => ("local", module.to_string()),
 | 
			
		||||
								module => ("qt", format!("qml.{module}")),
 | 
			
		||||
							};
 | 
			
		||||
 | 
			
		||||
					let (linktype, module) = match module.starts_with("Quickshell") {
 | 
			
		||||
						true => ("local", module.to_string()),
 | 
			
		||||
						false => ("qt", format!("qml.{module}")),
 | 
			
		||||
							(module, name)
 | 
			
		||||
						},
 | 
			
		||||
						None => (("", String::new()), ""),
 | 
			
		||||
					};
 | 
			
		||||
 | 
			
		||||
					accum += &format!(
 | 
			
		||||
						r#"{{{{< qmltypelink type="{linktype}" module="{module}" name="{name}" prop="{prop}" func="{func}" signal="{signal}" >}}}}"#
 | 
			
		||||
						r#"{{{{< qmltypelink type="{linktype}" module="{module}" name="{name}" mtype="{membertype}" mname="{membername}" >}}}}"#
 | 
			
		||||
					);
 | 
			
		||||
					src = &src[end..];
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue