CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
powershell.js318 linesDownload Raw Back to languages
1/*2Language: PowerShell3Description: PowerShell is a task-based command-line shell and scripting language built on .NET.4Author: David Mohundro <david@mohundro.com>5Contributors: Nicholas Blumhardt <nblumhardt@nblumhardt.com>, Victor Zhou <OiCMudkips@users.noreply.github.com>, Nicolas Le Gall <contact@nlegall.fr>6Website: https://docs.microsoft.com/en-us/powershell/7Category: scripting8*/9 10function powershell(hljs) {11  const TYPES = [12    "string",13    "char",14    "byte",15    "int",16    "long",17    "bool",18    "decimal",19    "single",20    "double",21    "DateTime",22    "xml",23    "array",24    "hashtable",25    "void"26  ];27 28  // https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands29  const VALID_VERBS =30    'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|'31    + 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|'32    + 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|'33    + 'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|'34    + 'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|'35    + 'Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|'36    + 'Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|'37    + 'Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|'38    + 'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|'39    + 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|'40    + 'Unprotect|Use|ForEach|Sort|Tee|Where';41 42  const COMPARISON_OPERATORS =43    '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|'44    + '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|'45    + '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|'46    + '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|'47    + '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|'48    + '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|'49    + '-split|-wildcard|-xor';50 51  const KEYWORDS = {52    $pattern: /-?[A-z\.\-]+\b/,53    keyword:54      'if else foreach return do while until elseif begin for trap data dynamicparam '55      + 'end break throw param continue finally in switch exit filter try process catch '56      + 'hidden static parameter',57    // "echo" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts58    built_in:59      'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp '60      + 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx '61      + 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group '62      + 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi '63      + 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh '64      + 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp '65      + 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp '66      + 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write'67    // TODO: 'validate[A-Z]+' can't work in keywords68  };69 70  const TITLE_NAME_RE = /\w[\w\d]*((-)[\w\d]+)*/;71 72  const BACKTICK_ESCAPE = {73    begin: '`[\\s\\S]',74    relevance: 075  };76 77  const VAR = {78    className: 'variable',79    variants: [80      { begin: /\$\B/ },81      {82        className: 'keyword',83        begin: /\$this/84      },85      { begin: /\$[\w\d][\w\d_:]*/ }86    ]87  };88 89  const LITERAL = {90    className: 'literal',91    begin: /\$(null|true|false)\b/92  };93 94  const QUOTE_STRING = {95    className: "string",96    variants: [97      {98        begin: /"/,99        end: /"/100      },101      {102        begin: /@"/,103        end: /^"@/104      }105    ],106    contains: [107      BACKTICK_ESCAPE,108      VAR,109      {110        className: 'variable',111        begin: /\$[A-z]/,112        end: /[^A-z]/113      }114    ]115  };116 117  const APOS_STRING = {118    className: 'string',119    variants: [120      {121        begin: /'/,122        end: /'/123      },124      {125        begin: /@'/,126        end: /^'@/127      }128    ]129  };130 131  const PS_HELPTAGS = {132    className: "doctag",133    variants: [134      /* no paramater help tags */135      { begin: /\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },136      /* one parameter help tags */137      { begin: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ }138    ]139  };140 141  const PS_COMMENT = hljs.inherit(142    hljs.COMMENT(null, null),143    {144      variants: [145        /* single-line comment */146        {147          begin: /#/,148          end: /$/149        },150        /* multi-line comment */151        {152          begin: /<#/,153          end: /#>/154        }155      ],156      contains: [ PS_HELPTAGS ]157    }158  );159 160  const CMDLETS = {161    className: 'built_in',162    variants: [ { begin: '('.concat(VALID_VERBS, ')+(-)[\\w\\d]+') } ]163  };164 165  const PS_CLASS = {166    className: 'class',167    beginKeywords: 'class enum',168    end: /\s*[{]/,169    excludeEnd: true,170    relevance: 0,171    contains: [ hljs.TITLE_MODE ]172  };173 174  const PS_FUNCTION = {175    className: 'function',176    begin: /function\s+/,177    end: /\s*\{|$/,178    excludeEnd: true,179    returnBegin: true,180    relevance: 0,181    contains: [182      {183        begin: "function",184        relevance: 0,185        className: "keyword"186      },187      {188        className: "title",189        begin: TITLE_NAME_RE,190        relevance: 0191      },192      {193        begin: /\(/,194        end: /\)/,195        className: "params",196        relevance: 0,197        contains: [ VAR ]198      }199      // CMDLETS200    ]201  };202 203  // Using statment, plus type, plus assembly name.204  const PS_USING = {205    begin: /using\s/,206    end: /$/,207    returnBegin: true,208    contains: [209      QUOTE_STRING,210      APOS_STRING,211      {212        className: 'keyword',213        begin: /(using|assembly|command|module|namespace|type)/214      }215    ]216  };217 218  // Comperison operators & function named parameters.219  const PS_ARGUMENTS = { variants: [220    // PS literals are pretty verbose so it's a good idea to accent them a bit.221    {222      className: 'operator',223      begin: '('.concat(COMPARISON_OPERATORS, ')\\b')224    },225    {226      className: 'literal',227      begin: /(-){1,2}[\w\d-]+/,228      relevance: 0229    }230  ] };231 232  const HASH_SIGNS = {233    className: 'selector-tag',234    begin: /@\B/,235    relevance: 0236  };237 238  // It's a very general rule so I'll narrow it a bit with some strict boundaries239  // to avoid any possible false-positive collisions!240  const PS_METHODS = {241    className: 'function',242    begin: /\[.*\]\s*[\w]+[ ]??\(/,243    end: /$/,244    returnBegin: true,245    relevance: 0,246    contains: [247      {248        className: 'keyword',249        begin: '('.concat(250          KEYWORDS.keyword.toString().replace(/\s/g, '|'251          ), ')\\b'),252        endsParent: true,253        relevance: 0254      },255      hljs.inherit(hljs.TITLE_MODE, { endsParent: true })256    ]257  };258 259  const GENTLEMANS_SET = [260    // STATIC_MEMBER,261    PS_METHODS,262    PS_COMMENT,263    BACKTICK_ESCAPE,264    hljs.NUMBER_MODE,265    QUOTE_STRING,266    APOS_STRING,267    // PS_NEW_OBJECT_TYPE,268    CMDLETS,269    VAR,270    LITERAL,271    HASH_SIGNS272  ];273 274  const PS_TYPE = {275    begin: /\[/,276    end: /\]/,277    excludeBegin: true,278    excludeEnd: true,279    relevance: 0,280    contains: [].concat(281      'self',282      GENTLEMANS_SET,283      {284        begin: "(" + TYPES.join("|") + ")",285        className: "built_in",286        relevance: 0287      },288      {289        className: 'type',290        begin: /[\.\w\d]+/,291        relevance: 0292      }293    )294  };295 296  PS_METHODS.contains.unshift(PS_TYPE);297 298  return {299    name: 'PowerShell',300    aliases: [301      "pwsh",302      "ps",303      "ps1"304    ],305    case_insensitive: true,306    keywords: KEYWORDS,307    contains: GENTLEMANS_SET.concat(308      PS_CLASS,309      PS_FUNCTION,310      PS_USING,311      PS_ARGUMENTS,312      PS_TYPE313    )314  };315}316 317export { powershell as default };318 
basant307/AI_Governance_Project · CoolFace